2012-03-18 33 views
0

私は通常MS Accessで開発し、時折MySQLのバックエンドに接続します。私はレコードを削除するときに期待していたように、カスケード削除ではないMySQLバックエンドを持っています。私はそれがテーブルの関係(外部キー)をどのように設定したのかと思うのですか?私はこのことが正しいかどうかを知るためにMySQLについて十分に知りません。デザイナービューでは、MySQLのデザイナービューを使用して関係を設定しました。 tblInterviewsの複合主キーフィールド(InterviewID、Coder ID)に対して、これらの2つの主キーフィールド(tblSBは複合IDとして第3フィールドSBidを含む)ごとにtblSBとの2つの別個の関係を作成しました。デザイナービューはAccessとは少し異なります。というのも、一度に複数のフィールドを強調表示して関係を設定することはできません。私は外部キーとの関係を設定するための構文を議論するフォーラムを見つけましたが、それがデザイナーで行ったことと同等かどうかはわかりません。私は特定のレコード(一意のInterviewID、CoderIDの組み合わせ)を削除しようとすると、現在考えられていないと思われます。ALL InterviewIDのCoderIDのインタビューレコード、CoderIDの組み合わせが削除されます(これは他の子テーブルにもカスケード接続されます)。私は、私が現在行っていない方法で私の主キーを設定する必要があるかどうかも疑問に思っています(例えば、インデックスとして設定するなど)。どんな助けもありがとう。前もって感謝します。カスケード削除は意図しないレコードを削除します

+0

おそらく、代わりに1 FK(複合PKを参照する複合2カラム上)の2つのFK制約(各列の1、別途PKの2列の各1を参照)を、定義されました。 –

+0

または、FKを間違った方向に定義しました。 –

答えて

0

あなたが作成したものを見るには、DDLを見てください。 (SHOW CREATE TABLE)

カスケード削除を含む外部キー制約を強制するには、おそらくinnodbエンジンを使いたいと思うでしょう。 myisamエンジンは外部キーを宣言するDDLを受け入れますが、強制しません。

MySQLは、外部キーが非ユニーク列を対象とするようにします。非UNIQUEキーが標準SQLではありません を参照するFOREIGN KEY制約:The MySQL docsは、SQL標準から

偏差を言います。 標準SQLへのInnoDBの拡張です。

これらをSQLの拡張機能と呼びます。私はそれを間違いと呼びます。

つまり、tblInterviews.interviewIDを参照する外部キーとしてtblSB.interviewIDを宣言できます。標準のSQL dbmsはそれを許可しません。

5.6 docs

を言うしかし、システムが参照さ 列がUNIQUEであるか、またはNOT NULLを宣言する要件を強制しません。外部キー NULL以外のキーまたはNULL値を含むキーへの参照の処理は、UPDATEまたはDELETE CASCADEなどの操作ではよく定義されていません( )。 は、UNIQUEおよびNOT NULL キーのみを参照する外部キーを使用することをお勧めします。

私の考え方では、「悪い考えですが、修正する方法はわかりませんので、避けることはあなた次第です。それを試してみてください。しかし、私たちはそれをやっていません」


あなたのコメントに基づいて、私はこの制約が正しいと言います。 。 。

しかし、これらは2つではありません。削除する必要があります。

CONSTRAINT tblSB_ibfk_1 
FOREIGN KEY (InterviewID) 
    REFERENCES tblinterviewrecord (InterviewID) 
    ON DELETE CASCADE ON UPDATE CASCADE, 
CONSTRAINT tblSB_ibfk_2 
FOREIGN KEY (CoderID) 
    REFERENCES tblinterviewrecord (CoderID) 
    ON DELETE CASCADE ON UPDATE CASCADE 
+0

すべてのテーブルは確かにInnoDBです。私はかなり正しい方向にFKを定義していると確信していますが、fkの2つのフィールドで別々の関係がコンポジットの関係と同じではないように思えます。私は午前中にDDLをチェックする必要があります - 現時点ではアクセスできません。 – bugdrown

+0

つまり、2つの列の2つの関係は、ペアの1つの関係と同じではありません。 –

+0

私はSHOW CREATE TABLEをチェックして私が持っているものを見て、ここに結果を示します。 – bugdrown