0

phpMyAdmin で外部キーを使用する必要があるプロジェクトに取り組んでいます。2 つのテーブルに外部キーを設定しました。tblquestionsテーブルにリンクされていanswersますが、データを挿入しようとするtblquestionsと、このエラーが発生します

データベース エラーが発生しました

エラー番号: 1452

子行を追加または更新できません: 外部キー制約が失敗しました ( user_test. tblquestions, CONSTRAINT tblquestions_ibfk_5FOREIGN KEY ( QID) REFERENCES answers( ID) ON DELETE CASCADE ON UPDATE CASCADE)

INSERT INTO tblquestions( Question, qA, qB, qC) 値 ('unikalus klausimas', 'unikalus atsakymas', 'unikalus atsakymas', 'unikalus atsakymas')

4

2 に答える 2

1

外部キーは基本的に、「テーブルのエントリには、参照されるテーブルに対応する値が必要です」というルールにすぎません。

あなたの場合、論理は、存在しない質問に対する答えはあり得ないということです。したがって、外部キーを間違った方法で配置します。

次に、データを挿入するときは、最初に質問の行を挿入する必要があります。回答の行を挿入するときは、回答が属する質問の ID を検索する必要があります。

ところで、Yogesh Suthar のコメントは無視してください。外部キーは、データの整合性を確保するためのデータベースの非常に重要な機能であり、明らかに、彼が何について話しているのか見当もつきません。

于 2013-02-21T10:15:27.290 に答える
0

にリンクtblquestionsしているanswers場合は、最初に回答を追加してから質問を追加する必要があります。そうしないと、親の前に子を追加しようとしているため、参照整合性を維持できません。(常に子の前に親を追加してください。)

これを行う1つの方法があります。tbl_question、の 2 つのテーブルを使用してみましょうtbl_answer

tbl_question少なくとも 2 つの列があります:

  • ID:int
  • 質問:text

tbl_answer正しい可能性のある回答が含まれています (または、1 つの質問に一連のオプションの回答を追加したい場合は間違っています)。

  • question_id: int、FK へtbl_question id
  • answer_option: tinyint(1)/ char(1)、単一の質問に対するオプションの回答のセット
  • 答え:text
  • is_correct: tinyint(1)/ byte(1)(質問に対する正解をマークします)

question_idanswer_option複合 PKを作成します。これで、2 つのテーブルをid/で結合しquestion_idて、1 つの質問に対するすべてのオプションの回答を取得できます。そのうちの 1 つだけが正しいとマークされていることを確認してください。


私がこれを書いている間にあなたはすでに回答を受け入れていますが、私はこの回答を投稿します。tombom が言ったように、FK が間違った方法で確立されています。

結合を使用してテーブルを設定するチュートリアルを尋ねることで、何を意味するのかわかりません。最初に外部キーの概念に精通している必要があります。その後、好きな方法でテーブルを結合できます。ここにいくつかのリンクがあります。

FK の概念は、別のテーブルの列に関連する非常に単純な列です (外部キー列の値を使用して 2 つ以上のテーブルを結合します)。これらのテーブル/値の間に FK 制約を追加することを忘れないでください。これにより、制約を破るようなことをしようとすると RDBMS が警告します。存在しない質問に回答を追加しようとしたときのように。

そして最後に、参照整合性が気になる場合は InnoDB を使用してください (すべての DB 設計者/マネージャー/管理者がそうであるように)。

于 2013-02-21T11:14:54.467 に答える