首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多到多关系的最佳MySql db设计

多到多关系的最佳MySql db设计
EN

Stack Overflow用户
提问于 2012-10-06 14:13:49
回答 2查看 1.9K关注 0票数 3

我在一个MySql数据库中有6个表,我需要相互连接(中的6项必须以任何可能的方式相关联)。我还需要在这些关系中添加一个"sort_order“列。使用“经典的ManyToMany”连接表会导致数据库混乱,有几十个连接表。这是不可能维持的。我能找到的最好的解决方案是使用带有7列的单个联接表(6个条目I+sort_order的6个条目I+1),其中每一行都标识两个表之间的单个关联。

下面是我做过的连接表:

代码语言:javascript
复制
mysql> desc relations;
+------------+---------+------+-----+---------+-------+
| Field      | Type    | Null | Key | Default | Extra |
+------------+---------+------+-----+---------+-------+
| artist_id  | int(11) | YES  | MUL | NULL    |       |
| art_id     | int(11) | YES  | MUL | NULL    |       |
| edition_id | int(11) | YES  | MUL | NULL    |       |
| expo_id    | int(11) | YES  | MUL | NULL    |       |
| news_id    | int(11) | YES  | MUL | NULL    |       |
| press_id   | int(11) | YES  | MUL | NULL    |       |
| sort_order | int(11) | YES  |     | NULL    |       |
+------------+---------+------+-----+---------+-------+
7 rows in set (0,00 sec)

由于我不是一个数据库设计专家,我想可能有更好的设计来实现同样的目标。最好的设计是什么?

注1:请不要告诉我,我应该避免太多的关联:这是一个特殊和准确的项目需要,我只需要找到最好的解决方案,使之成为可能。

注意2:顺便说一句,这是一个Php/MySql应用程序,我使用Yii作为框架。

EN

回答 2

Stack Overflow用户

发布于 2012-10-06 14:48:21

  1. 在性能和维护方面,如果正确地完成连接(例如规范化),联接并不坏。
  2. 只有当需求出现时,才能恢复正常。
  3. 遵循最可能正确的(和工作!)一开始,不要担心表现或其他事情。
  4. 过早的优化据说是万恶之母。
  5. 向外键添加适当的索引(MySQL自动覆盖此),并添加到WHEREONORDER BY等中使用的字段。
票数 2
EN

Stack Overflow用户

发布于 2012-10-06 15:00:23

请不要按你的建议去做。您是正确的:如果您在实体之间有很多到多个关系,那么您将有很多连接表。但这比你提出的解决方案要好得多。我是认真的。

它的性能要好得多,因为连接表中没有任何null id值,这意味着您将获得索引的全部好处。

您的实体关系将更容易更新和排除故障。

不管是谁在你继续做其他事情后维护你的代码,都不会诅咒你的名字。换句话说,您将使用传统的dbms设计技术来解决传统的问题,并且您的设计将是透明的。

有许多模式设计工具可以帮助您为所有这些连接表生成DDL。提示:确保您的id列在整个名称中都是一致的。也就是说,将其命名为artist_id (艺术家表、artist_art表和artist_edition表)。如果您这样做,架构设计工具可以自动地分类您正在做的事情。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12760553

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档