另一個設計中要考慮將每種內容類型創建單獨的關係表:
article_category (article_id NOT NULL, category_id NOT NULL)
photo_g_category (photo_g_id NOT NULL, category_id NOT NULL)
video_g_category (video_g_id NOT NULL, category_id NOT NULL)
這種設計消除了需要存儲NULL值,將在您的設計需要。所有這些列將被定義爲適當表的外鍵。
浪費的空間對於您的設計並不是真正的問題。 (在大多數數據庫引擎中,沒有空間用於存儲空值。)
設計中的一個更大的問題是確保至少有一個內容FK列被填充,並允許其他列爲空。另外,如果允許在一行上填充多個內容FK列,那麼您的設計會使添加和刪除關係的過程更加複雜。
你打算如何表示與類別相關的內容,例如: 1?
文章:A,B,C photo_g:P,Q video_g:V,W,X,Y,Z
1 a p v
1 b q w
1 c - x
1 - - y
1 - - z
OR
1 a - -
1 b - -
1 c - -
1 - p -
1 - q -
1 - - v
1 - - w
1 - - x
1 - - y
1 - - z
去除類別之間的關係的1和photo_g p會有所不同,在一種情況下需要更新一行,另一種情況是刪除一行(沒有必要保留一行沒有填充任何內容FK值的行)。
我建議三個獨立的表來保存這些關係:
article_category:
a 1
b 1
c 1
photo_g_category:
p 1
q 1
video_g_category:
v 1
w 1
x 1
y 1
z 1
這些是一個一對多或多對多一對多關係? – tvanfosson 2011-03-05 20:01:32
文章和照片庫可以處於同一類別嗎? – smartcaveman 2011-03-05 20:17:15
他們可以在多個類別... – Sqrcz 2011-03-06 18:52:48