Sql 如何为具有多种内容类型的类别设计数据库架构?

Sql 如何为具有多种内容类型的类别设计数据库架构?,sql,database,design-patterns,database-schema,Sql,Database,Design Patterns,Database Schema,例如: 4类: -汽车 -自行车 -船只 -飞机 还有几张有内容的桌子 文章(id、标题、正文) 照片库(id、照片文件名…) 视频文件(id、视频标题、视频url) 现在我很好奇如何设计数据库模式,将这些表中的内容分成不同的类别 我这样想: 类别\u内容 -类别标识 -文章编号 -照片_画廊_id -视频\u库\u id 但对于NULL来说,这似乎浪费了很多空间…:/ 您可以为关系创建一个表,如: 类别id、项目类型、项目id 其中,项目的类型是文章、照片、视频等,项目id是目录中项目的id。

例如:

4类:
-汽车
-自行车
-船只
-飞机

还有几张有内容的桌子

文章(id、标题、正文)
照片库(id、照片文件名…)
视频文件(id、视频标题、视频url)

现在我很好奇如何设计数据库模式,将这些表中的内容分成不同的类别

我这样想:

类别\u内容
-类别标识
-文章编号
-照片_画廊_id
-视频\u库\u id


但对于NULL来说,这似乎浪费了很多空间…:/

您可以为关系创建一个表,如:

类别id、项目类型、项目id


其中,项目的类型是文章、照片、视频等,项目id是目录中项目的id。

您可以有一个关系表,如:

类别id、项目类型、项目id


其中,项目的类型为文章、照片、视频等,项目ID是该项目中的ID。

< P>另一个设计要考虑的是为每个内容类型创建单独的关系表:

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)
这种设计消除了存储空值的需要,这在您的设计中是必需的。所有这些列都将被定义为相应表的外键

浪费的空间并不是你设计的真正问题。(在大多数数据库引擎中,没有空间用于存储空值。)

设计中更大的问题是确保至少填充了一个内容FK列,并允许其他列为null。此外,如果允许在一行上填充多个content FK列,则您的设计会使添加和删除关系的过程更加复杂

您计划如何表示与类别相关的内容,例如1

第条:a、b、c 照片:p,q 视频:v,w,x,y,z

1 a p v
1 b q w
1 c - 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

另一个要考虑的设计是为每个内容类型创建单独的关系表:

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)
这种设计消除了存储空值的需要,这在您的设计中是必需的。所有这些列都将被定义为相应表的外键

浪费的空间并不是你设计的真正问题。(在大多数数据库引擎中,没有空间用于存储空值。)

设计中更大的问题是确保至少填充了一个内容FK列,并允许其他列为null。此外,如果允许在一行上填充多个content FK列,则您的设计会使添加和删除关系的过程更加复杂

您计划如何表示与类别相关的内容,例如1

第条:a、b、c 照片:p,q 视频:v,w,x,y,z

1 a p v
1 b q w
1 c - 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

这些是一对多关系还是多对多关系?一篇文章和一个照片库可以在同一个类别中吗?它们可以在多个类别中…这些是一对多关系还是多对多关系?一篇文章和一个照片库可以在同一个类别中吗?它们可以在多个类别中…我喜欢这个想法,事实上,在(类别,类型,项目)系统我必须制作另一个“类”表格-类型,当然还有添加/删除问题。在这种情况下,我将只调用特定模型中的特定表格。谢谢。我喜欢这个想法,除了在(类别,类型,项目)系统中我必须制作另一个“类”之外表-类型,当然还有添加/删除问题。在这种情况下,我将只调用特定模型中的特定表。谢谢。