我正在设计一个设备管理系统,一个部门中可以存在很多设备和员工。
   问题是:我想要实现删除部门的功能,如果直接从部门表中删除部门信息,不处理设备部门关系表、员工部门关系表就会违反数据库完整性的原则,请问大家平时做软件的时候是如何设计的?
   谢谢各路朋友了。

解决方案 »

  1.   

    這個就是典型的用 trigger了
    create trigger tr_test on 部门表 for delete
    as 
    對 設備部门关系表,人員部門關係表進行處理
      

  2.   

    原表:
    select * from roottb
    select * from subtbid          data                                                                                                 
    ----------- --------------------------------------------------------------------
    1           test root line 1
    2           test root line 2
    3           test root line 3(3 row(s) affected)id          rootid      data                                                                                                 
    ----------- ----------- --------------------------------------------------------
    1           1           test sub line 1 for root 1
    2           1           test sub line 2 for root 1
    3           1           test sub line 3 for root 1
    4           2           test sub line 1 for root 2
    5           2           test sub line 2 for root 2
    6           2           test sub line 3 for root 2
    7           3           test sub line 1 for root 3
    8           3           test sub line 2 for root 3
    9           3           test sub line 3 for root 3(9 row(s) affected)
    -----------------------------------------
    我們開始刪除:delete roottb 
    where id=2
    --------------------------
    結果:
    id          data                                                                                                 
    ----------- -------------------------------------------------------------------------
    1           test root line 1
    3           test root line 3(2 row(s) affected)id          rootid      data                                                                                                 
    ----------- ----------- ---------------------------------------------------------
    1           1           test sub line 1 for root 1
    2           1           test sub line 2 for root 1
    3           1           test sub line 3 for root 1
    7           3           test sub line 1 for root 3
    8           3           test sub line 2 for root 3
    9           3           test sub line 3 for root 3(6 row(s) affected)
      

  3.   

    我在創建roottb表的時候,用了FOREIGN KEY (rootid) REFERENCES roottb(id) ON DELETE CASCADE
    而其中,ON DELETE CASCADE 會自動刪除它關聯的記錄的