虽然我使用的是Rails,但这个问题更多的是关于数据库设计。我在我的数据库中有几个实体,架构有点像这样:http://fishwebby.posterous.com/40423840如何设计数据库模式以通过很多其他表链接两个表格
如果我想获取人员列表并按姓氏排序,那没问题。但是,如果我想要得到的人的名单,按姓氏排序,就读于某一特定群体,我必须使用包括跨四个表若干个连接,像这样的SQL语句:
SELECT group_enrolment.*, person.*
FROM person INNER JOIN member ON person.id = member.person_id
INNER JOIN enrolment ON member.id = enrolment.member_id
INNER JOIN group_enrolment ON enrolment.id = group_enrolment.enrolment_id
WHERE group_enrolment.id = 123
ORDER BY person.surname;
虽然这作品,它会让我觉得效率低下,而且随着我的模式的增长,这些查询可能会变得越来越复杂。
另一种选择可能是由包括其他表中为person_id加入人表在查询中的所有其他表,那么这将仅仅是一个单一的加入,例如
SELECT group_enrolment.*, person.*
FROM person INNER JOIN group_enrolment ON group_enrolment.person_id
WHERE group_enrolment.id = 123
ORDER BY person.surname;
但这意味着在我的模式中,人员表格连接到许多其他表格。除了复杂的模式图之外,有没有人看到这方面的缺点?
对于这个问题的任何评论 - 无论我现在正在做什么(多表连接)或第二个解决方案还是另一个没有发生在我身上的解决方案,都是最好的选择。
非常感谢提前
我已经走了对于传播的外键方法,我更喜欢这种方式,因为虽然联接工作正常,但随着我更深入地了解架构,我可以看到它们变得更加复杂。我已经完成了几个成功的测试,并且它工作得很好 - 我已经在保存子模型之前传播外键的Rails模型上有回调,这意味着我的查询(例如注册)只需要执行一个加入。非常感谢您的回答! – 2011-01-23 19:48:47