###質問事項
以下のように「曲とアーティスト」を示すテーブルがあります。
検索の方向として「あるアーティストの曲」だったり「ある曲のアーティスト」だったりという方向があるのですが、そのときの主キーおよびインデックスの設定方法について、次の案のどれが適当か知りたいです。
artist_ID | music_ID |
---|---|
2 | 20 |
2 | 30 |
3 | 10 |
1 | 80 |
###案
主キーを( music_ID, artist_ID )
とし、逆にインデックスを( artist_ID, music_ID )
の順序にするべきか…
$query = "CREATE TABLE $table ( music_ID INT(10), artist_ID INT(10), PRIMARY KEY ( music_ID, artist_ID ), CONSTRAINT fk_" . $table . "_1 FOREIGN KEY (music_ID) REFERENCES music(ID), CONSTRAINT fk_" . $table . "_2 FOREIGN KEY (artist_ID) REFERENCES artists(ID), INDEX id_" . $table . "_1 ( artist_ID, music_ID ) );";
上とは逆に主キーを( artist_ID, music_ID )
とし、インデックスを( music_ID, artist_ID )
の順序にするべきか…
$query = "CREATE TABLE $table ( music_ID INT(10), artist_ID INT(10), PRIMARY KEY ( artist_ID, music_ID ), CONSTRAINT fk_" . $table . "_1 FOREIGN KEY (music_ID) REFERENCES music(ID), CONSTRAINT fk_" . $table . "_2 FOREIGN KEY (artist_ID) REFERENCES artists(ID), INDEX id_" . $table . "_1 ( music_ID, artist_ID ) );";
はたまた、外部キー制約(によるインデックス)があるのだから、複合インデックスをなくして下のようにすべきか…
$query = "CREATE TABLE $table ( music_ID INT(10), artist_ID INT(10), PRIMARY KEY ( artist_ID, music_ID ), CONSTRAINT fk_" . $table . "_1 FOREIGN KEY (music_ID) REFERENCES music(ID), CONSTRAINT fk_" . $table . "_2 FOREIGN KEY (artist_ID) REFERENCES artists(ID) );";
ないしはもっと何かいい設計はないかと思案しているところでございます。
以上のようにいずれの方向からの検索もありえるとき、主キーとインデックスの設定はどうするのが適当でしょうか。
※ MariaDB 10.3です ※
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/05 04:12
2020/07/05 07:29 編集
2020/07/05 07:29