在SQL数据库中存储数字列表的最佳方法是什么?

4

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


10
将列表存储在单个单元格中将成为维护的噩梦。您需要创建一个单独的表格来将单个用户与其家庭成员关联起来。 - Taryn
3个回答

5
不要这样做:将多个值存储在单个列中会破坏使用参照完整性约束的可能性,并且会变成维护的噩梦(想象一下当新生儿出生时需要维护每个人的名单!)
最简单的解决方案是向每个人的行添加一个“family_id”列。同一家庭的所有成员都将将此唯一 ID 设置为相同的值;不同家庭的成员则具有不同的“family_id”。
在结婚的情况下,除非您愿意在孩子结婚时加入两个家庭,或将新娘或新郎移动到配偶的家庭中,否则这并不理想。

感谢您对我的评论进行了详细说明。在手机上回答这个问题会太困难了。 :) - Taryn
@bluefeet,是的,我很少用手机回答问题,因为我的打字速度太慢了(公平地说,在键盘上也不是特别快)。请注意,我建议采用略微不同的方法:而不是添加一个表格,我建议添加一个单独的ID列作为家庭组标识符。这样做虽然不够灵活,但另一方面更容易实现和维护。 - Sergey Kalinichenko

3
您需要设置一个家庭表格,其中包含两列,一列用于存储涉及人员的唯一ID,另一列用于存储他们家庭成员的唯一ID。您的表格最终会看起来像这样: Family(userID, familyMemberID) 每个家庭成员都将有一个条目,因此它可能看起来像这样: (1, 2), (1, 3), (1, 4), (1, 5), (2, 8) 你可以决定是否要双向存储连接(即每次插入,您还要插入相应的 (1,2) 也插入 (2,1))这可以通过触发器或其他方式轻松实现。

0

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

然而,由于家庭成员随着孩子结婚并组建新家庭而发生变化。我会创建一个单独的“关系”表,其中包含personId和familyID。

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

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

总之,对于您的即时需求,我会选择一个单独的关系表。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接