数据库设计中的多对多关系

ak3*_*t0n 7 database relationship

我目前有一个包含两个名为Articles和Tags的表的数据库.为了使文章在多个类别中,我有多对多的关系.在性能方面有这样的设计是错误的吗?或者我应该删除这两个表之间的关系,并添加第三个表作为桥(articlesTags)?

Don*_*nut 17

拥有多对多关系并没有什么本质上的错误,你只需要创建一个结点表(这听起来像你所指的那样articlesTags)来促进这种关系.

  • 哦,根据维基百科,还有交叉引用表,桥表,连接表,映射表,交集表,链接表,多对多解析器,链接表,配对表,数据透视表或关联表.我想不能有太多的名字:p (8认同)
  • 也称为交叉表. (3认同)

Jam*_*mes 6

您将看到概念数据库设计(N:N关系)与物理实现之间的区别.无论你如何建模你的N:N关系,你都需要上面提到的连接表来使它工作.

将现实世界关系建模为尽可能接近现实世界并没有任何问题.清晰是王道.

当谈到任何系统中的任何性能问题时,答案通常归结为"它取决于".

如果你的性能问题与WRITES有关,那么一个高度标准化的结构是最好的,你会想要那个Junction表.您最终会编写更少的数据并且可以大大加快速度(尽管您可以通过在创建插入之前进行查找来消除这一优势).从各个规范化表中读取也可以非常快.

如果您的问题与分析READS有关,那么DENORMALISED结构是最好的.如果表格很大并且索引分散,则联接可能会非常高性能.你会牺牲很多空间来获得大量时间.

一般而言,您需要查看具体情况,并在决定解决方案之前权衡每种方法的优缺点.就个人而言,我总是发现最好在初始阶段专注于Clarity,如果后来发现问题则重构性能.