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

时间:2009-08-13 18:21:04

标签: database relationship

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

5 个答案:

答案 0 :(得分:17)

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

答案 1 :(得分:6)

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

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

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

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

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

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

答案 2 :(得分:4)

关系模型中存在多对多关系,它只是思维的抽象。 当你实现它时,会有一个articles_to_tags表,你将拥有:

fk_article(整数) fk_tag(INTEGER)

CF http://en.wikipedia.org/wiki/Many-to-many_(data_model)

答案 3 :(得分:2)

使用多对多关系没有问题。通常需要它。

是的,如果不使用第三个表,就不可能创建多对多的关系。

答案 4 :(得分:1)

如果这是数据所需要的,那么拥有多对多关系是没有问题的,但是你需要第3个表来代表它。