0

いくつかの複雑な制約が必要であり、いくつかは複数のテーブルにまたがっています。列 (主キーの一部) を複製して制約を適用するか、代わりにストアド プロシージャを使用する方がよいでしょうか?

次に例を示します。

create table responses
(
   resp_id int PRIMARY KEY
   participant_id int,
   session_id int,
   form_id int,
   section_id int,
   sec_target_id int,
   quest_id int,
   input_method_id int,
   foreign key(form_id, section_id) references form_sections(form_id, section_id),
   foreign key(section_id, quest_id) references questions(section_id, quest_id),
   foreign key(session_id, form_id) references session_forms(session_id, form_id),
   unique(resp_id, session_id)
);

create table user_responses
(
   resp_id int PRIMARY KEY
   participant_id int,
   session_id int,
   instructor_id int,
   foreign key(resp_id, session_id) references responses(resp_id, session_id),
   foreign key(session_id, instructor_id) references session_instructors(session_id, instructor_id)
);

応答には、匿名またはユーザーの 2 種類があります。ユーザーの回答には、セッションごとにインストラクターが関連付けられています。テーブル user_responses では、response テーブルから列 session_id を複製して、instructor_id が実際に選択したセッションに割り当てられるという制約を適用できるようにします。

このような多くの複雑な制約と、DDL の変更を引き起こす可能性のある将来の追加要件がいくつかあります。SP または上記の方法を使用して制約を適用する方が良いですか?

4

1 に答える 1

0

ええ、一般的には、列を複製して、必要に応じて制約を適用する方がよいでしょう。将来的に何かが変わる可能性があるエッジ ケースに注意してください。ここで重要な点は、複合外部キーを強制できると便利だということです。MySQL にこの機能があるかどうかは覚えていませんが、ほとんどの RDBMS にはあるはずです。

于 2012-09-04T04:41:05.263 に答える