phpMyAdmin を使用してデータベースを設定しています。主キー でインデックス付けされたfoo
2 つのテーブル (とbar
)があります。 それらの主キーを外部キーとして使用して、それらのテーブル間にリレーショナル テーブル ( ) を作成しようとしています。foo_bar
これらのテーブルを MyISAM として作成しましたが、MyISAM は外部キーをサポートしていないと読んだため、3 つすべてを InnoDB に変更しました。すべてのid
フィールドは ですINT(11)
。
テーブルを選択しfoo_bar
、「リレーション ビュー」リンクをクリックして、FK 列を および に設定しようとするdatabase.foo.id
とdatabase.bar.id
、各列の横に「インデックスが定義されていません。」と表示されます。
何が足りないのでしょうか?
明確化/更新
シンプルさのために、phpMyAdmin を使い続けたいと思います。現在、PHP/CSS/Javascript に集中できるほど簡単な XAMPP を使用しています。また、phpMyAdmin も付属しています。
また、明示的な外部キーをまだ設定できていませんが、リレーショナル テーブルがあり、次のように結合を実行できます。
SELECT *
FROM foo
INNER JOIN foo_bar
ON foo.id = foo_bar.foo_id
INNER JOIN bar
ON foo_bar.bar_id = bar.id;
データベースで FK が明示的に定義されていないのは、私にとって不安です。
ベストアンサー1
phpMyAdmin を使用してリレーションを設定する場合は、2 つのことを行う必要があります。まず、参照テーブル (この場合は foo_bar.foo_id) の外部キー列にインデックスを定義する必要があります。次に、リレーション ビュー (参照テーブル内) に移動し、参照列 (この場合は foo.id) と、更新時および削除時のアクションを選択します。
複数のテーブルが相互にリンクされている場合、外部キーは便利だと思います。特に、参照オプションを正しく設定すると、削除スクリプトが非常に短くなります。
編集: 両方のテーブルで InnoDB エンジンが選択されていることを確認してください。