【问题标题】:identify siblings in database识别数据库中的兄弟姐妹
【发布时间】:2011-10-18 15:03:11
【问题描述】:

我目前有一个带有学生表的数据库,如下所示:

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

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

你将如何实现它?

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

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

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

这种方法有什么缺点?有没有我应该考虑的替代策略?

【问题讨论】:

  • 除非它们是手动关联的,否则恐怕你只能得到“可能的”兄弟姐妹
  • 请澄清:“我的客户要求我添加一项功能,以便她可以识别系统中的兄弟姐妹。”。该功能是否应该识别受骗者?...或者她是否识别它们并且该功能只是存储链接?您是否还需要说明如何呈现的规范?这是否意味着找到它们的搜索功能?不挑剔,只是试图准确地了解要求,因为最常见的错误是相反的(不够具体/不了解要求:)
  • “识别兄弟姐妹”?如何?按姓氏?同父异母的兄弟姐妹呢?
  • @Michael,她将通过 UI 标记兄弟姐妹。我只需要一种在数据库中表示它们的方法。

标签: sql database-design


【解决方案1】:

我认为对兄弟关系存储的需求是一个边缘用例,因此在表示这一点的无限可能性中,我将提出一个对现有模型的侵犯最少的模型,肯定适合更常见的需求:

添加带有家庭 ID 和学生 ID 的“家庭”表。 学生 ID 是引用“学生”表的外键。 这两个字段一起是复合主键。

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

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

【讨论】:

  • 我同意这种做法,这似乎是把学生联系在一起的最合乎逻辑的方式。
  • 使用这种方法,如何生成唯一的 FamilyID?它不能是标识列。我使用指南吗?是否有更紧凑的方式来生成唯一的 FamilyID? (我意识到这些问题可能是特定于实现的......我使用的是 Sql Server 2008)。
  • 是的,你是对的,你不能只使用自动增量列。你也是对的,这对我来说太具体了:-) 数据库世界的其他部分对此有“序列”。这似乎有一个 SO 线程:stackoverflow.com/questions/282943/…
猜你喜欢
  • 2019-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多