我們的系統中的進程負責根據特定規則發送文件。根據其文件名,文件可以發送給客戶或工廠(但從來都沒有)。設計只能擁有2個外鍵之一的數據庫實體?
規則的每一行都將包含文件名過濾器,它所屬的客戶和工廠,並指定其他參數,例如目標文件夾,文件是否需要加密,拆分,組合,重命名等。
在這個過程中,我們將知道一個文件屬於哪個工廠和客戶,我們將查看工廠和客戶的規則,並對與過濾器匹配的文件應用規則(將給予優先級根據客戶規則)
在數據庫中表示規則與客戶/工廠之間關係的最佳方式是什麼?我們已經在數據庫中有Customer和Factory表,但我想不出表示關係的最佳方式。規則的每一行都只有一個FK(客戶或工廠,它不能同時擁有,也不能擁有)。一來表示這種方式是這樣的:
但這並不捕獲的事實,它只能有恰好兩個FKS之一。我們可以設置一個約束條件,即其中一個必須是有效的FK,而另一個必須是空的,但它看起來不是很乾淨。此外,如果我們有其他規則的決定因素(例如國家),它會變得更加醜陋。任何想法如何改善這種設計?
我認爲這也有助於指定系統是在.NET中開發的,我們使用對象關係映射,即NHibernate。
如果客戶和工廠之間存在一些共享數據,顯而易見的是引入客戶和工廠從中派生出來的基類。然後FK會去基類 –