次のデータベースで、最初の 1:m リレーションと 2 番目の 1:m リレーションの間にジャンクション テーブルを作成する利点は何ですか?
代替テキスト http://dl.getdropbox.com/u/175564/db/db-simple.png
Joe Celko の本 tree and Hierarchies in SQL for Smarties には、その理由は 1:m で一意の関係を持つためであると書かれています。たとえば、次の表は、ユーザーがまったく同じ質問を 2 回し、まったく同じ回答を 2 回することをそれぞれ制限しています。
最初の 1:m リレーション
users-questions
===============
user_id REFERENCES users( user_id )
question_id REFERENCES questions ( question_id )
PK( user_id, question_id) // User is not allowed to ask same question twice
2 番目の 1:m 関係
questions-answers
=================
question_id REFERENCES questions( question_id)
answer_id REFERENCES answers( aswer_id )
PK( question_id, answer_id ) // Question is not allowed to have to same answers
一意性に関するこの利点は、自分のコードをより難しくすることを私に納得させません。おそらくPHPを使用してそれを禁止できるため、dbに同じIDを持つ質問または回答を持つ可能性を制限する必要がある理由を理解できません。