Database-Design

ERD - 多個 FK,每條記錄只填充其中一個

  • August 29, 2019

我正在為音樂平台設計數據庫模式。

部分實體如下:

  • 追踪
  • 專輯
  • 樂隊
  • 藝術家

“軌道”可以有一個“藝術家”。它也可以有一個“樂隊”,使藝術家 FK null

“專輯”也是如此,“專輯”可以有“藝術家”,但如果“專輯”來自“樂隊”,那麼藝術家 FK 將是null。那是因為“樂隊”的“專輯”也不能有一個“藝術家”。

兩個(或三個)FK 永遠不會一起填寫,每條記錄只能填寫其中一個。

這是一個好的設計實踐嗎?

謝謝

良好的設計實踐是實施和執行問題域的規則。因此,如果您的規則導致了這種設計,那麼這就是您所擁有的。具有互斥值的情況並不少見。

它們可以以不同的方式實現。一種是你描述的。另一種是使用表繼承。有了這個,您將擁有表格trackartist並且band就像您目前所做的那樣,還有band_trackand artist_track。這些將僅具有特定於自身的外鍵,定義為not null. band_track那麼問題就變成了在和之間強制排除的問題之一artist_track。就個人而言,我認為這種方法實際上並沒有太大改善我們的地位。

對於我的兩分錢,我會選擇你所擁有的。聲明 CHECK 約束以防止行內的非法組合(或如果絕對必須使用觸發器)。

引用自:https://dba.stackexchange.com/questions/246440