Java 创建存储在SQL列中的一组播放机

Java 创建存储在SQL列中的一组播放机,java,mysql,Java,Mysql,有没有办法在SQL数据库的列中存储一组播放器 我有一个事件表,我想将所有输入该事件的玩家存储在表中名为players的列下 参赛者将全部来自用户表 我找到了set属性,但这似乎需要指定set可以包含的特定值。我现在知道这些,但将来,users表可能会改变 所以我想, 在事件表中添加一列名为玩家,其中包含一组用户 最初应该为空,但当玩家进入该事件时,他们将被添加到集合中 从java的角度来看,当我从数据库读取数据时,它将获取事件并显示名称,然后显示玩家集中的所有用户 我应该这样做吗?还是有更好

有没有办法在SQL数据库的列中存储一组播放器

我有一个事件表,我想将所有输入该事件的玩家存储在表中名为
players
的列下

参赛者将全部来自
用户

我找到了set属性,但这似乎需要指定set可以包含的特定值。我现在知道这些,但将来,
users
表可能会改变

所以我想,

  • 事件
    表中添加一列名为
    玩家
    ,其中包含一组
    用户
  • 最初应该为空,但当玩家进入该事件时,他们将被添加到集合中
  • 从java的角度来看,当我从数据库读取数据时,它将获取事件并显示名称,然后显示
    玩家集中的所有用户
我应该这样做吗?还是有更好的办法?i、 将事件中的用户存储在一个集合中,以某种方式将其存储在数据库中,然后在显示之前将这些数据读回java集合

我想我可以将
users
表中的
id
存储为外键,以便在集合中,例如在玩家集合中有用户1,3,4,7。然后,当我得到这些数据时,我可以在web应用程序中显示用户名


谢谢

您有一个多值属性。也就是说,一个团队有球员,但在一个给定的团队中有多个球员

但SQL自然希望每列在给定行中存储一个值。通过创建新行或删除一行成员,可以更轻松地使用INSERT添加成员

由于假定列存储一个值,外键约束不支持逗号分隔的列表。使用
=
将列与另一个值进行比较以进行搜索或联接的简单表达式也不会这样做

你应该阅读我对的回答以获得更多的例子

相反,多值属性需要存储在第二个表的多行上

CREATE TABLE players (
  event_id INT NOT NULL,
  user_id INT NOT NULL,
  PRIMARY KEY (event_id, user_id),
  FOREIGN KEY (event_id) REFERENCES events (id),
  FOREIGN KEY (user_id) REFERENCES users (id)
);
现在,您可以为给定事件添加多个用户。给定的用户可能会参加许多活动。插入或删除播放机都很容易。很容易计算出一个给定事件有多少玩家,或者一个给定用户参加了多少事件。还有很多其他的操作

这比使用逗号分隔的列表要好得多


如果您遵循,这就是您得到的表设计。

让用户1,3,4,7使用
是最糟糕的解决方案。您需要创建一个将用户链接到事件的
链接
表。包含
用户id、事件id