相互に結合する必要がある MySql データベースに 6 つのテーブルがあります (6 つの項目は可能な方法で関連付ける必要があります)。また、これらの関係に何らかの方法で「sort_order」列を追加する必要もあります。「従来の ManyToMany」結合テーブルを使用すると、データベースが乱雑になり、数十の結合テーブルが作成されます。それを維持することは不可能でしょう。私が見つけた最善の解決策は、すべての行が 2 つのテーブル間の単一の関連付けを識別する、7 つの列 (6 つのアイテム ID に対して 6 つ + sort_order に対して 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 Web アプリケーション用で、フレームワークとして Yii を使用しています。