2012-02-19 141 views
1

在我的數據庫中,我有一個名爲「部門」的表。它包含有關各個部門的信息。該表的「名稱」列聲明爲primary key由於外鍵限制,無法刪除記錄

現在我的一個部門被刪除了。所以我希望從我的數據庫中刪除部門記錄及其相關信息。然而,foreign key限制阻止我這樣做。我該如何解決這個問題?

+0

首先從主表中刪除該ID的數據,然後嘗試從當前表中刪除... – 2012-02-19 10:29:07

+3

此信息不足。由於我們在這裏至少討論了兩個表格,所以你只提到一個。與其他表格有更多關係嗎?關係是如何定義的? Wich數據庫引擎?級聯刪除是否已實施?如果這聽起來很複雜,首先要研究一些關於數據彙總的資源,並用兩個相關的表格構建一個測試數據庫。 – Dabblernl 2012-02-19 10:31:51

+3

顯然,其他表中的行仍然引用該部門 - 所以你不能刪除它(這是FK約束的**整點**)。您需要找到並更新/更改那些引用要刪除的部門的行,並且一旦您解決了所有這些引用,**然後**您可以刪除部門 – 2012-02-19 10:33:31

回答

2

當您在各種表格中有相關行的樹時,刪除必須從下往上進行。在這種情況下,在刪除部門之前,任何學生,員工和回形針庫存都需要刪除(或重新分配給其他部門)。

級聯刪除「解決」此問題。他們導致相關信息自毀。我發現自己明確地處理這個問題通常更合適,而不是武裝一種可能會回來並且在某個地方咬我的東西。

許多情況下的另一個考慮因素是維護歷史記錄。如果您對每個部門購買的材料都有審計記錄,那麼您不能刪除該部門而不會丟失歷史記錄。您可以將關係關閉,但這會使歷史記錄掛起一個無效的,或者可能是循環使用的部門標識。典型的解決方案是添加一個標誌來指示部門或其他實體是Inactive。同樣,非活動用戶帳戶也不允許登錄,但與用戶關聯的任何歷史記錄都將保持不變。