识别数据库中的兄弟姐妹

时间:2011-10-18 15:03:12

标签: sql database-design

我目前有一个数据库,里面有学生表:

 Students
 _________
 StudentID PK
 FirstName
 LastName
 BirthDate
 AddressL1
 AddressL2
 City
 State
 Zip
 etc.....

我的客户要求我添加一项功能,以便识别系统中的兄弟姐妹。如果Jimmy是学生,Billy是学生而Jimmy和Billy是兄弟,她想知道这一点。

你会如何实现这个?

我在考虑添加一个带有FamilyID FK的Family Table对于这个问题来说太过分了。你同意吗?

我的直觉是添加一个名为 Family 的可为空的列。如果学生没有兄弟姐妹,请将其设置为null。如果学生有兄弟姐妹,每个学生都会获得存储在家庭列中的相同GUID。

如果您想列出您执行的给定学生的兄弟姐妹:      选择兄弟姐妹。*      来自学生      内部联接      学生作为兄弟姐妹      上      Students.Family =兄弟姐妹。家庭      哪里      Students.StudentID =?

这种方法的缺点是什么?我应该考虑另一种策略吗?

1 个答案:

答案 0 :(得分:2)

我认为对兄弟关系存储的需求是一个边缘用例,因此在表达这种情况的无限可能性中,我建议一个对您现有模型的侵害最小的一个肯定适合更常见的需求:

添加包含“家庭ID”和“学生ID”的“家庭”表格。 学生ID是引用“学生”表的外键。 这两个字段是复合主键。

当两名学生成为兄弟姐妹时,从序列中创建一个新的家庭ID,并将两行学生ID和这个新的家庭ID添加到“家庭”表中。

有些人可能会建议将家庭表中的“地址”或“母亲姓名”等字段规范化,但相信我,家庭会比你想象的更复杂: - )