另一个设计中要考虑将每种内容类型创建单独的关系表:
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