2

MySQLデータベースを使用しています。表1と表2の2つのテーブルがあります。表1には複合主キーがあります。表2には、表1の複合PKを参照する複合外部キーがあります。

私が抱えている問題を以下に示します。

表1
|------------ PK ----------- |
menuid | categoryid | カテゴリ
名1|1 | myCategoryName1
1 | 2 | myCategoryName2
2 | 1 | myCategoryName3
2 | 2 | myCategoryName4
2 | 3 | myCategoryName5

表1の誤ったエントリを参照するエントリを表2に作成できます。

表2
|------------ FK ----------- | | ---- PK ---- |
menuid | categoryid | postid|投稿名
1|3 | 1 | myPostName

これで、データベースに有効な値を挿入できるので、大きな問題にはなりません。ただし、これはデータベースのリレーショナルエラーのようであり、クリーンで正しく機能するDBが必要です。この小さな問題を修正する方法はありますか?

更新:データベースを実装するためにphpMyAdminを使用していましたが、phpMyAdminに複合外部キーを実装する方法がないようです。誤って実装された外部キーを次の方法で確認できました。

SHOW CREATE TABLE Table2

ここTable2で、は複合外部キーを持つ2番目のテーブルの名前です。

次に、手動で複合外部キーを正しく追加しました

ALTER TABLE Table2 ADD CONSTRAINT my_fk_constraint
FOREIGN KEY (menuid, categoryid)
REFERENCES Table1(menuid, categoryid)

ここmy_fk_constraintで、は追加される制約の名前です。

注:この方法で外部キー制約を手動で追加すると、phpMyAdminで通常使用できるように、新しいエントリを挿入するときにドロップダウンメニューを使用できなくなります(FK列をクリックして対応するテーブルを参照することもできません)。

おかげpstthedayofcondor、私はphpMyAdminを使用している小さなフリークなので、どちらも正しいです。

4

1 に答える 1

1

正解:いいえ、防止:はい!

制約を適切に設定した場合、これは発生しないはずです:http: //dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html

于 2012-11-04T02:45:26.063 に答える