示例:
4类:
- 汽车
- 自行车
- 船
- 飞机
和几个内容
的表格文章(身份证,头衔,身体)
photo_galleries(id,photo_filename ...)
video_galleres(id,video_title,video_url)
现在我很好奇如何设计数据库模式以将这些表中的内容划分为类别......
我想到了......像这样: categories_content
- category_id
- article_id
- photo_gallery_id
- video_gallery_id
但是对于NULL来说似乎浪费了很多空间......:/
答案 0 :(得分:2)
要考虑的另一个设计是为每种内容类型创建单独的关系表:
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值的需要,这在设计中是必需的。所有这些列都将被定义为适当表的外键。
浪费的空间并不是您设计的真正问题。 (在大多数数据库引擎中,没有空间用于存储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
答案 1 :(得分:1)
您可以拥有关系表,例如:
category_id, type_of_item, item_id
其中type_of_item是文章,照片,视频等,而item_id是该条目中的项目的ID。