[英]Database Design: Multiple join tables or one table with identifying 'table' column
我正在设计一个数据库,可以在其中标记任何内容,而且我可能希望能够选择带有特定标记的所有内容。
我在以下两个选项中苦苦挣扎,不胜感激。 如果有更好的方法,请告诉我。
选项A
多个“多对多”联接表。
tag: id tag media: id title src creation media_tags: id media_id tag_id article: id title content creation article_tags: id article_id tag_id
选项B
单个“标签引用”表,该表使用“表”列标识要加入的表。
tag: id tag tag_reference: id row_id tag_id table media: id title src creation article: id title content creation
从维护的角度来看,选项B似乎比较有利,但是考虑使用SQL查询选择所有内容,并且认为没有多个查询是不可能的。
使用选项B时 ,不能为其他表设置外键。 因此,我将使用选项A和每个m:n关系一个表。
“从维护的角度来看,选项B”是一场噩梦。 如果删除文章会怎样? 具有该row_id
所有行将保留在tag_reference
表中。 您始终需要手动更新这些条目。
选项B包含一个多值依赖项-因此违反了第四范式 。 我更喜欢选项A
实际上,它取决于每个sql开发人员。 但是我更喜欢Option A
因为您可以很容易地知道一个表中的某个列是另一个表的foreign key
( 假设它是true )。
Option B
设计有点不好,因为将表名存储在列中是个坏主意。 您可以在此处花费更多的IF
或CASE
。
第二个选项几乎阻止您使用任何JOIN进行有效的SQL,从而迫使您使用缓慢的多选。
所以我想说第一种选择是可取的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.