設計數據庫時,兩個表之間存在關係,即Job
和Document
。一個Job
可以有多個Documents
,但這些Documents
中的一個(並且只有一個)需要標記爲IsCurrent
。這並不總是與Job
相關的最新Document
。如何使用「是當前」要求實現一對多關係
在結構上,我可以看到兩種方法。
第一種方法是將DocumentId
列添加到Job
,將JobId
列添加到Document
。這將起作用,但會創建一個循環引用:當導入到實體框架中時,最終會出現Job
同時具有Document
和Documents
集合的特殊情況。同樣,Document
同時具有Job
和Jobs
集合。
第二種方法是在Document
表中添加一個IsCurrent
位標誌。這將起作用,但是在邏輯上使作業具有多個IsCurrent
Documents
,這是不允許的。
問題:
1)我是正確的思維有沒有「第三條道路」擺脫這種困境的?
2)假設沒有,哪個更好,爲什麼?我贊成第二個解決方案,因爲它看起來更清潔,我們可以通過業務邏輯強制執行單個IsCurrent
。我的同事主張以前的解決方案,因爲它會導致更簡單的C#代碼和對象引用 - 如果我們重命名外鍵,它應該避免由Job/Jobs
創建的混淆。
太好了,謝謝。我認爲過濾的索引是性能工具 - 我不知道它們可以用來強制執行完整性。 –
@MattThrower - 如果你仔細想想,*任何*唯一索引至少在某些方面強制執行完整性。 –
這麼簡單,如此優雅......明亮等等:總是閱讀**所有**工具的使用文檔。 – tschmit007