繁体   English   中英

数据库设计:多个联接表或一个带有标识“表”列的表

[英]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设计有点不好,因为将表名存储在列中是个坏主意。 您可以在此处花费更多的IFCASE

第二个选项几乎阻止您使用任何JOIN进行有效的SQL,从而迫使您使用缓慢的多选。

所以我想说第一种选择是可取的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM