【问题标题】:Best way to store a list of numbers in an SQL database?在 SQL 数据库中存储数字列表的最佳方法是什么?
【发布时间】:2012-09-23 23:10:17
【问题描述】:

我需要存储一个数字列表,最好存储在一个单元格中。我有一个人名单,每个人都有一个唯一的 ID,我需要知道他们的家庭成员是谁。我是 SQL 数据库的新手,请尽量保持简单。

【问题讨论】:

  • 将列表存储在单个单元格中将变成维护的噩梦。您需要创建一个单独的表来将单个用户与其家庭成员相关联

标签: sql database


【解决方案1】:

不要这样做:在单个列中存储多个值会消除使用参照完整性约束的可能性,并且会变成维护的噩梦(想象一下,当新生儿出生时维护每个人的列表!)

最简单的解决方案是在每个人的行中添加一个带有family_id 的列。同一家庭的所有成员都会将此唯一 ID 设置为相同的值;不同家庭的成员会有不同的family_ids。

这在结婚的情况下并不理想,除非您愿意在孩子结婚时加入两个家庭,或者将新娘或新郎搬到配偶的家庭。

【讨论】:

  • 感谢您详细说明我的评论。在手机上回答这个问题太难了。 :)
  • @bluefeet 是的,我很少用手机回答,因为我的打字速度太慢(公平地说,键盘上的速度也不是很快)。请注意,我提出了一种稍微不同的方法:我建议为一个家庭的组标识符添加一个 ID 列,而不是添加一个表。这几乎没有那么灵活,但另一方面,它更容易实现和维护。
【解决方案2】:

您需要设置一个包含两列的 Family 表,一列存储相关人员的唯一 ID,另一列存储其家庭成员的唯一 ID。您的表格最终将如下所示:

Family(userID, familyMemberID)

每个家庭成员都会有一个条目,因此它可能看起来像这样:

(1, 2), (1, 3), (1, 4), (1, 5), (2, 8)

由您决定是否要在两个方向上存储连接(即,对于每个插入,您还插入倒数 (1,2) 和插入 (2,1)),这可以通过触发器或其他方式轻松完成意思。

【讨论】:

    【解决方案3】:

    添加 familyId 是最简单的解决方案。

    但是,随着孩子结婚并组建新家庭,家庭成员会随着时间而变化。我将创建一个单独的“关系”表,其中包含 personId 和 familyID。

    如果您想跟踪成员的移动。在数据仓库世界中,您通常有一个 relId、relTy 和 Timestamp 来保存历史记录,但您不必走那么远。

    也许有一天,您想创建一棵家谱。因此,请确定您是否真的希望将 personId/familyId 作为关系表中的列名。

    总之,为了您的迫切需要,我将使用单独的关系表。

    【讨论】:

      猜你喜欢
      • 2020-04-08
      • 2016-05-31
      • 2015-04-07
      • 2017-03-14
      • 2011-06-07
      • 2010-10-06
      • 2016-08-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多