2010-08-31 172 views
2

一張圖片更加公正,所以我將從此開始。 Dependent Relation數據庫模型依賴關係

所以在我的Relation_Type表中,我有幾種不同的類型(Owner,Reviewer,Approver等)。
在我Relation_Status表我有不同的狀態對於一些類型:

Reviwer:(待定反饋,收到的反饋)
審批:(作出決定之前,已批准,被拒絕)

我的問題是,如果關係類型是反饋,我不知道如何強制執行的關係,這種關係將狀態限制爲僅反饋狀態'
現在,這是建模的一種關係類型的反饋可以有任何狀態是邏輯不一致。另外,並非所有類型都具有狀態。

因此,有關如何對其進行建模以便強制執行依賴關係的任何提示?

謝謝,勞爾

回答

0

也許你需要一個組合Status_IdType_Id的複合外鍵。

+0

這個伎倆。我必須使用_id和type_id列在狀態表上添加一個唯一約束,這樣我才能創建複合外鍵。我選擇這個答案的原因是因爲其餘的要麼直接與狀態聯繫在一起,要麼有一個附加的邏輯分組表。這些選項不起作用,因爲並非所有類型都具有狀態。 謝謝 – HaxElit 2010-09-01 13:53:18

1

,您可以創建另一個表TypeStatus(ID, Type_Id, Status_Id)。它將FK指向_Type和_Status表,並且_Relation表對這個新表有一個FK,而不是對現有表的兩個FK。然後,你會從_Status表中刪除_Type_Id列,我想。

+0

雖然存儲允許的類型和狀態組合的新表是一個好主意,但用新的表將單個FK替換到_Relation表上的現有兩個FK可能不是一個好主意 - 如果現有的類型 - 狀態組合不再有效,新表上的記錄需要被刪除,但是這會在_Relation表上留下孤立記錄。 – 2010-08-31 17:54:13

+0

我認爲這將是一個問題,無論你是否有一個FK或兩個......在這兩種情況下,如果刪除了有效的類型 - 狀態組合,_Relation表中可能有需要更新或刪除的記錄匹配功能約束。 – joelt 2010-08-31 18:52:44

+0

我認爲這個解決方案只適用於類型和狀態之間存在多對多關係的情況。雖然在問題中沒有明確說明,但該圖表明狀態和類型之間存在一對多的關係。因此,如果存在一對多關係,則您必須在此解決方案中添加其他約束條件。如果這種關係是多對多的,那麼我們可以爲我們的最佳答案投票。這是多對多關係的正確解決方案。 – bobs 2010-08-31 23:20:21

0

我將刪除Project_Resource_Relation表中的Project_Resource_Relation_Type_Id列。這將刪除從Project_Resource_RelationProject_Resource_Relation_Type.的關係

關係類型已通過Project_Resource_Relation_Status表與Project_Resource_Relation表相關。 Project_Resource_Relation_Status表已強制執行類型和狀態之間的關係。

+0

這不起作用,因爲並非所有類型都有狀態。所以如果我沒有地位,我不能回到這種類型。 – HaxElit 2010-09-01 13:54:43