Database-Design
ERD - 多個 FK,每條記錄只填充其中一個
我正在為音樂平台設計數據庫模式。
部分實體如下:
- 追踪
- 專輯
- 樂隊
- 藝術家
“軌道”可以有一個“藝術家”。它也可以有一個“樂隊”,使藝術家 FK
null
。“專輯”也是如此,“專輯”可以有“藝術家”,但如果“專輯”來自“樂隊”,那麼藝術家 FK 將是
null
。那是因為“樂隊”的“專輯”也不能有一個“藝術家”。兩個(或三個)FK 永遠不會一起填寫,每條記錄只能填寫其中一個。
這是一個好的設計實踐嗎?
謝謝
良好的設計實踐是實施和執行問題域的規則。因此,如果您的規則導致了這種設計,那麼這就是您所擁有的。具有互斥值的情況並不少見。
它們可以以不同的方式實現。一種是你描述的。另一種是使用表繼承。有了這個,您將擁有表格
track
,artist
並且band
就像您目前所做的那樣,還有band_track
andartist_track
。這些將僅具有特定於自身的外鍵,定義為not null
.band_track
那麼問題就變成了在和之間強制排除的問題之一artist_track
。就個人而言,我認為這種方法實際上並沒有太大改善我們的地位。對於我的兩分錢,我會選擇你所擁有的。聲明 CHECK 約束以防止行內的非法組合(或如果絕對必須使用觸發器)。