我正在進行數據庫設計,我面臨的情況是,根據三個表中的日誌發送通知,每個日誌包含不同的數據。然後NOTIFICATIONS
表應該是指這三個表,而且我認爲有三種可能的設計,每一個似乎都有缺陷在它:表中有n個表中有一個匹配的表的最佳做法是什麼?
- 每個日誌表將有一個獨特的遞增ID和
NOTIFICATIONS
表將有三個不同的列FK的。這個設計中的主要缺陷是我無法創建真正的FK,因爲這三個字段中的兩個字段對於每一行都是NULL,並且查詢將不得不「確定」該行中實際記錄的數據類型。 - 日誌表將有一個唯一遞增的ID爲所有他們。然後,當我查詢
NOTIFCATIONS
時,我可以用這些表做三個OUTER JOINS,每行只有一個匹配。這看起來好像是一個更好的設計,但是我將在每個日誌表中留下空白,並且選項1中的缺陷仍然存在。 - 選項1/2 +創建三個通知表而不是一個。此選項將要求應用使用UNION ALL查詢通知。
哪個選項可以更好地練習?我有沒有想過的另一種方式?任何建議將被認真考慮。
爲什麼你不能有3個列中的2個爲NULL? –
我可以有,但因此我無法創建FK(我最終沒有創建)。 –
爲什麼不呢?外鍵允許爲空。 –