我有一个项目表,通过联结表与图像表有多对多的关系。我还想为项目添加多个封面图像。
我有多个表,我想从images表中分组一些行。如果它是封面图像,我应该添加一个布尔值的列吗?或者我应该创建一个一对多的表格,其中包含我想要作为封面的图像的ID?如果我要添加一些列,如果大多数列值为空,那么它是不是多余的?
还有一个客户端和纪律表,我想从图像表中选择图像,但添加一些额外的列,如sortorder。
答案 0 :(得分:0)
这两种技术都有其优点,答案可以基于意见;我的是。我建议您在图片表格中添加字段(例如cover
),以指明图片是否为主图片。大多数行在cover
字段中具有NULL值是可以的。在imageid和cover上创建索引。
我还建议创建名为CoverImages的视图select ... from images where cover=true
,以便只需要封面图像的应用程序可以直接使用此视图。根据您的数据库引擎,您可以创建稀疏列和/或创建过滤索引。
另一个选项是将cover
添加到具有projectid和imageid的联结表中。但是,这会违反第二种正常形式的数据库规范化,因为cover
将是图像的属性,而不是项目。
当您添加更多标志时,您提到的选项 - 将封面图像的图像放在一对多表格中 - 可能会出现问题。如果图像被标记为敏感,则您必须创建另一个表并仅在其中放置敏感图像。
基于最后2个想法,我建议在图像表中添加cover
标志。
修改强>
OP提醒说,imageid 1可能是project1的封面,但不是project2的封面。这意味着cover
应该与联结表而不是图像表相关联。 2NF不会被违反