在以下数据库中的第一个 1:m 和第二个 1:m 关系之间具有联结表有什么好处?
替代文字 http://dl.getdropbox.com/u/175564/db/db-simple.png
Joe Celko's trees and hierarchies in SQL for Smarties一书说,原因是在 1:m 中具有唯一的关系。例如,下表分别限制用户两次提出完全相同的问题和两次给出完全相同的答案。
第一个 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
第二个 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
这种关于唯一性的好处并不能说服我让我的代码更具挑战性。我不明白为什么我应该限制在数据库中具有相同 ID 的问题或答案的可能性,因为我也许可以使用 PHP 来禁止它。