2012-03-23 14 views
0

比方說,我有PlantGroups的表中的情況下得以維持。它們依賴於表格Plants並具有外鍵PlantId。每個PlantGroup只包含一個Plant。應該怎麼數據的完整性在一個外鍵關係可以刪除

PlantGroups 
========== 
...data... 
PlantId 

Plants 
====== 
PlantId 

如果表中的植物記錄被刪除,或請求刪除,應該採取什麼樣的過程,以確保PlantGroups的數據的完整性?

此外,如果相應PlantGroups記錄中的其他數據(依賴於被請求刪除的Plants記錄)仍然相關且值得保留?

回答

0

我會去與Option Other。儘管在我讀過的任何數據完整性指南中沒有定義,包括ORACLE(只列出NULL,CASCADE,RESTRICT,NO ACTION,DEFAULT作爲選項),但我會推出自己的。

這裏是什麼事情發生,除非別人說服我一個更好的辦法。

PlantGroups 
=========== 
... data ... 
PlantId 

Plant 
===== 
PlantId 
bool isActive 

刪除Plant isActive將被設置爲false。這會導致在數據庫管理中包含大量額外的邏輯,但會允許對這些相關字段進行淺層刪除。級聯刪除選項可能會作爲最終選項來處理已超過一定年限的已棄用數據。

或者

我還可以有哪些是相同的架構作爲第一和召開刪除數據的第二數據庫。

1

如果PlantGroups可以擁有多個Plant,則應該有一個具有PlantGroupID和PlantID的額外表格。

根據您要完成的工作,您可能希望具有刪除PlantGroup(如果沒有工廠)的邏輯。但是,在某些情況下添加邏輯可能會更容易忽略空白組,例如查看它們,但在人們需要將植物添加到組中時顯示它們。

爲了您的其他問題,你應該看看級聯刪除。其他人可能能夠提供更多的信息。

+0

editted問題,每個植物羣只能包含一個植物。 – 2012-03-23 22:40:26

+0

添加邏輯是我打算做的,但我很好奇別人有什麼要說的。我知道級聯刪除,但正如問題所述,我想避免由於相關數據的原因。 – 2012-03-23 22:41:34

+1

您可能希望在工廠組中保留諸如最新工廠(或與工廠有關的其他信息)等信息,從而使當前工廠能夠被刪除並隨後更新爲新工廠。或者,您可以保持與工廠的狀態,以表明它已被刪除,所以其他邏輯可以做出更明智的行動。例如不要在搜索結果中將其顯示爲活動狀態,或者不允許在未刪除工廠之前更新字段。這完全取決於你的系統是否需要讓這些關係更加動態或靜態。 – jheep 2012-03-23 22:49:14

相關問題