我有一個表具有一個軟外鍵,根據表中的另一個值將表中的記錄鏈接到許多其他表之一。爲了證明:SQL設計建議:一個FK列,許多表引用
TableOfTables:ID,表名
HistoryTable:身份證,TableOfTableId,NumberedTableId等..
表1:身份證,等等
表2:ID等..
表3:身份證,等等
TableOfTables包含在數據庫中(表1,表2,表3,...),每個編號的表中的記錄。 HistoryTable具有該表的外鍵(TableOfTableId)。它還有一個NumberedTableId列,它是對編號表的Id列的引用。
現在,這工作得很好,但NumberedTableId和編號表的Id列之間沒有參照完整性。現在據我所知,你不能創建一種有條件的外鍵,它可以根據某些條件指向不同的表......那麼在這裏獲得引用完整性的最好方法是什麼?
我能想到的唯一兩件事情是在HistoryTable中有大量可爲空的NumberedTableId列,每個列都有一個外鍵給特定的編號表,其餘的列填充爲空......醜陋的,或者爲每個編號的表有一個單獨的HistoryTable ...這將意味着很多HistoryTables,因爲我們的數據庫中有許多編號表。
這裏我最好的選擇是什麼?歷史記錄表實際上是一個記錄表,它記錄了編號表中的變化以及誰更改了值,它不用於審計之外的任何其他用途,也不用於我們的程序讀取,但我不喜歡沒有完整的參照完整性。
我在這裏有什麼選擇?任何解決方案都需要能夠使用Entity Framework 4.0。
感謝
唯一干淨的答案是:重新構建您的解決方案。使用一個表引用多個其他表的方法是一種巨大的SQL代碼異味....清理它! – 2010-08-03 05:03:07