【问题标题】:How do I store multiple pieces of individual data within a single column?如何在单个列中存储多个单独的数据?
【发布时间】:2017-08-28 12:28:32
【问题描述】:

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

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

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

【问题讨论】:

  • 您创建一个新表用于存储与 GroupID 连接到您的组的成员。但我强烈建议您先阅读一些数据库设计基础知识 - like this one
  • @NenadZivkovic 可以。谢谢!
  • 从不在数据库单元格中存储多个值 - 它违反关系数据库设计的第一种正常形式,而且非常糟糕设计选择。

标签: sql sql-server database


【解决方案1】:

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

我假设一个成员可以属于多个组,而一个组可以有多个成员。 如果是这样,您可以在这两个表中间有一个表来捕获每个组中的成员。您可以将此表称为“memberships”或“group_member”之类的。

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

所以你的表结构可以是:

  • MEMBER(成员 ID...其他字段)
  • GROUP(组 ID,组名)
  • 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;

【讨论】:

  • 感谢 bbrumm,这是个好主意!
  • 没问题,答案有意义吗?
【解决方案2】:

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

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

如果“成员”可以属于多个“组”,您将创建第三个表 MemberGroup,其复合主键(member_id、group_id)由外部分别引用Member 和Group 的键。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-03
    • 2018-04-16
    • 1970-01-01
    • 1970-01-01
    • 2014-06-29
    • 2021-06-18
    • 1970-01-01
    相关资源
    最近更新 更多