【发布时间】:2012-09-23 23:10:17
【问题描述】:
我需要存储一个数字列表,最好存储在一个单元格中。我有一个人名单,每个人都有一个唯一的 ID,我需要知道他们的家庭成员是谁。我是 SQL 数据库的新手,请尽量保持简单。
【问题讨论】:
-
将列表存储在单个单元格中将变成维护的噩梦。您需要创建一个单独的表来将单个用户与其家庭成员相关联
我需要存储一个数字列表,最好存储在一个单元格中。我有一个人名单,每个人都有一个唯一的 ID,我需要知道他们的家庭成员是谁。我是 SQL 数据库的新手,请尽量保持简单。
【问题讨论】:
不要这样做:在单个列中存储多个值会消除使用参照完整性约束的可能性,并且会变成维护的噩梦(想象一下,当新生儿出生时维护每个人的列表!)
最简单的解决方案是在每个人的行中添加一个带有family_id 的列。同一家庭的所有成员都会将此唯一 ID 设置为相同的值;不同家庭的成员会有不同的family_ids。
这在结婚的情况下并不理想,除非您愿意在孩子结婚时加入两个家庭,或者将新娘或新郎搬到配偶的家庭。
【讨论】:
您需要设置一个包含两列的 Family 表,一列存储相关人员的唯一 ID,另一列存储其家庭成员的唯一 ID。您的表格最终将如下所示:
Family(userID, familyMemberID)
每个家庭成员都会有一个条目,因此它可能看起来像这样:
(1, 2), (1, 3), (1, 4), (1, 5), (2, 8)
由您决定是否要在两个方向上存储连接(即,对于每个插入,您还插入倒数 (1,2) 和插入 (2,1)),这可以通过触发器或其他方式轻松完成意思。
【讨论】:
添加 familyId 是最简单的解决方案。
但是,随着孩子结婚并组建新家庭,家庭成员会随着时间而变化。我将创建一个单独的“关系”表,其中包含 personId 和 familyID。
如果您想跟踪成员的移动。在数据仓库世界中,您通常有一个 relId、relTy 和 Timestamp 来保存历史记录,但您不必走那么远。
也许有一天,您想创建一棵家谱。因此,请确定您是否真的希望将 personId/familyId 作为关系表中的列名。
总之,为了您的迫切需要,我将使用单独的关系表。
【讨论】: