如何在单个列中存储多个单独的数据?

时间:2017-08-27 22:06:52

标签: sql sql-server database

我有一个存储有关组的信息的表。组名,组ID,成员数等信息......但是,我还希望将每个成员的代码存储在一个组中。

我最初尝试存储成员代码的方法是创建单独的列。所以我会有名为MemberCode1MemberCode2MemberCode3的列。但问题是一个组可以有100个成员,这意味着需要100列来单独存储成员代码。

我的问题:有没有办法可以在我的表格中的单个列中存储x个成员代码,或者只是制作y列并将组中的用户数量限制为y?

2 个答案:

答案 0 :(得分:7)

这是何时使用单独表格的一个很好的例子。您可以创建第二个表,称为“组”,并将组数据存储在那里(组ID,组名)。

我假设一个成员可以属于多个组,一个组可以有很多成员。 如果是这样,那么您可以在这两个表的中间放置一个表来捕获每个组中的成员。您可以将此表称为“成员资格”或“group_member”或其他内容。

它将包含成员和组表中每个条目的主键。

所以你的表结构可能是:

  • 会员(会员ID ......其他领域)
  • GROUP(组ID,group_name)
  • MEMBERSHIP(member_id,group_id)

最后,找出每组中的成员数量:

SELECT group_id, COUNT(*)
FROM membership
GROUP BY group_id;

或者用以下方式获取组数据:

SELECT m.group_id, g.group_name, COUNT(m.*)
FROM membership m
INNER JOIN group g ON m.group_id = g.group_id
GROUP BY m.group_id;

答案 1 :(得分:2)

一般来说,在同一个字段中存储多条信息并不是一个好主意。它违反了正常形式,更实际的是,它很难维护。

您的问题的最佳解决方案是为成员创建一个单独的表(Member)并包含一个外键,可能是groupIDgroup_id,引用组表(Group)。

如果"会员"可以属于多个" group",您可以创建第三个表MemberGroup,其中包含由外国人组成的复合主键(member_idgroup_id)密钥分别指代MemberGroup