当前位置: 首页 > 知识库问答 >
问题:

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

陶弘业
2023-03-14

有没有一种方法可以将一组播放器存储在SQL数据库的一个列中?

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

进入者都将来自users表。

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

所以我想,

  • 事件表中添加一个列,名为玩家,该列包含一组用户
  • 该选项最初应为空,但当玩家进入该事件时,他们将被添加到集合中。
  • 从Java方面来看,当我从数据库读取数据时,它将获取事件并显示名称,然后显示玩家集中的所有用户。

我应该这样做吗?还是有更好的办法?即将事件中的用户存储在一个集合中,以某种方式将其存储在数据库中,然后在显示之前将这些数据读回Java的集合中?

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

谢谢

共有1个答案

单于善
2023-03-14

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

但SQL自然希望每列在给定行中存储一个值。这使得通过创建一个新行来添加具有INSERT的成员或通过删除一个具有一行的DELETE的成员变得更加容易。

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

您应该读一下我的答案:在数据库列中存储分隔列表真的那么糟糕吗?更多的例子。

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

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)
);

现在可以为给定事件添加许多用户。一个给定的用户可能会参加许多活动。插入播放机或移除播放机很容易。很容易计算出一个给定的事件有多少玩家,或者一个给定的用户打过多少个事件。和其他许多操作。

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

如果您遵循关系数据库规范化的规则,这就是您所得到的表设计。

 类似资料:
  • 有没有一种规范的方法来存储sql表列中的数组/列表?我正在尝试以下操作:我有“Building”和“Room”对象,Building对象已设置为其字段。如何用SQL描述这种关系(建筑物有很多房间)? 我是数据库设计的新手,所以,如果太琐碎,请不要生气。 附言:如果有人能解释“很多公共汽车司机使用很多公共汽车”的关系,反之亦然,那就太好了。

  • 我正在尝试使用Micronaut中的可组合存储库实现一个方法。 我有: 在这里,EmployeeRepositoryCustom是一个带有“list()”方法的接口: 然后我有一个实现接口方法的EmployeeRepositoryCustomImpl类: 当我使用以下方法调用该方法时: 我得到以下消息: 我尝试在EmployeeRepositoryCustom和EmployeeRepository

  • 是否有其他人在创建播放列表后不能访问播放列表id?

  • 我正在学习如何为某些曲目创建媒体播放器的教程...每首歌都按我的要求播放然后停止...我想让整个播放列表播放...那是为了在前一个赛道结束后,下一个赛道自动开始... 多谢...

  • 问题内容: 我正在尝试在play框架的scalaquery中实现“基于请求”的会话。我使用scalaquery创建了一个会话,并尝试将其存储在当前的http上下文中,如下所示: 然后将动作包装在控制器中,例如: 但是,它在以下行中崩溃: 那么,为什么上下文不可用?该代码直接由框架调用,因此不应在执行该代码时设置上下文吗?还是我使用错误的方式访问上下文? 编辑:“会话”的类型为。我之所以要在Http

  • 问题内容: Play框架文档在模块创建方面有些薄弱。 如何创建一个模块? 我已经读到大型应用程序可以分为多个模块,如何? 模块不能/不能做什么?(是否可以访问低级API?) 播放模块可以公开抽象的JPA类吗? 打包模块的最佳方法是什么? 如何部署/分配播放模块? 我想您有个主意…向我们介绍所有使用Playframework的模块。 问题答案: 如何创建一个模块? 我已经读到大型应用程序可以分为多个