我在一个MySql数据库中有6个表,我需要相互连接(中的6项必须以任何可能的方式相关联)。我还需要在这些关系中添加一个"sort_order“列。使用“经典的ManyToMany”连接表会导致数据库混乱,有几十个连接表。这是不可能维持的。我能找到的最好的解决方案是使用带有7列的单个联接表(6个条目I+sort_order的6个条目I+1),其中每一行都标识两个表之间的单个关联。
下面是我做过的连接表:
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作为框架。
发布于 2012-10-06 14:48:21
WHERE、ON、ORDER BY等中使用的字段。发布于 2012-10-06 15:00:23
请不要按你的建议去做。您是正确的:如果您在实体之间有很多到多个关系,那么您将有很多连接表。但这比你提出的解决方案要好得多。我是认真的。
它的性能要好得多,因为连接表中没有任何null id值,这意味着您将获得索引的全部好处。
您的实体关系将更容易更新和排除故障。
不管是谁在你继续做其他事情后维护你的代码,都不会诅咒你的名字。换句话说,您将使用传统的dbms设计技术来解决传统的问题,并且您的设计将是透明的。
有许多模式设计工具可以帮助您为所有这些连接表生成DDL。提示:确保您的id列在整个名称中都是一致的。也就是说,将其命名为artist_id (艺术家表、artist_art表和artist_edition表)。如果您这样做,架构设计工具可以自动地分类您正在做的事情。
https://stackoverflow.com/questions/12760553
复制相似问题