我有一个存储有关组的信息的表。组名,组ID,成员数等信息......但是,我还希望将每个成员的代码存储在一个组中。
我最初尝试存储成员代码的方法是创建单独的列。所以我会有名为MemberCode1
,MemberCode2
,MemberCode3
的列。但问题是一个组可以有100个成员,这意味着需要100列来单独存储成员代码。
我的问题:有没有办法可以在我的表格中的单个列中存储x个成员代码,或者只是制作y列并将组中的用户数量限制为y?
答案 0 :(得分:7)
这是何时使用单独表格的一个很好的例子。您可以创建第二个表,称为“组”,并将组数据存储在那里(组ID,组名)。
我假设一个成员可以属于多个组,一个组可以有很多成员。 如果是这样,那么您可以在这两个表的中间放置一个表来捕获每个组中的成员。您可以将此表称为“成员资格”或“group_member”或其他内容。
它将包含成员和组表中每个条目的主键。
所以你的表结构可能是:
最后,找出每组中的成员数量:
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
)并包含一个外键,可能是groupID
或group_id
,引用组表(Group
)。
如果"会员"可以属于多个" group",您可以创建第三个表MemberGroup
,其中包含由外国人组成的复合主键(member_id
,group_id
)密钥分别指代Member
和Group
。