Java 如何在一列中插入多个值?

Java 如何在一列中插入多个值?,java,mysql,sql,database,Java,Mysql,Sql,Database,我正在为游戏服务器设置一个数据库,我是数据库新手,我遇到了一个问题,我必须在同一列中插入多个玩家,基本上我有一个组,在该组中我需要插入多个玩家,因此目前我有以下列: Group Name: Group Owner: Players: Creation Date: 如何将多个玩家加入到一个组中?我是否需要将所有的插入到相同的列中,并在Java中使用String.split()? 或者有更好的方法来实现这一点吗?我假设您正在设置一个关系数据库。坦率地说,您不想在一列中插入多个值。您希望根据数据及其

我正在为游戏服务器设置一个数据库,我是数据库新手,我遇到了一个问题,我必须在同一列中插入多个玩家,基本上我有一个组,在该组中我需要插入多个玩家,因此目前我有以下列:

Group Name:
Group Owner:
Players:
Creation Date:
如何将多个玩家加入到一个组中?我是否需要将所有的插入到相同的列中,并在Java中使用String.split()
或者有更好的方法来实现这一点吗?

我假设您正在设置一个关系数据库。坦率地说,您不想在一列中插入多个值。您希望根据数据及其相互之间的关系来设计表。现在,你似乎有两个实体:团体和玩家。这两者之间的关系是一个玩家可以属于一个团体,对吗?因此,您需要为每个实体创建一个表,并根据表示它们之间关系的键链接它们:

Group:
 - group id (PRIMARY KEY)
 - name
 - owner
 - creation date

Player:
 - player id (PRIMARY KEY)
 - (any other player info you may need, like a name)
 - group id (FOREIGN KEY)
Group:
 - group id (PRIMARY KEY)
 - name
 - owner
 - creation date

Player:
 - player id (PRIMARY KEY)
 - (any other player info you may need, like a name)

PlayerGroup:
 - player id (FOREIGN KEY)
 - group id (FOREIGN KEY)
主键是表的唯一标识符-它标识一个且仅标识一个条目。外键引用另一个表中的一个且仅引用一个条目(在本例中为Group)。如果玩家只能属于一个组,则上述设计有效。如果玩家可以属于多个组,则需要另一个表来表示此关系:

Group:
 - group id (PRIMARY KEY)
 - name
 - owner
 - creation date

Player:
 - player id (PRIMARY KEY)
 - (any other player info you may need, like a name)
 - group id (FOREIGN KEY)
Group:
 - group id (PRIMARY KEY)
 - name
 - owner
 - creation date

Player:
 - player id (PRIMARY KEY)
 - (any other player info you may need, like a name)

PlayerGroup:
 - player id (FOREIGN KEY)
 - group id (FOREIGN KEY)

这种设计现在是关系化和规范化的。您可以通过查询(尤其是使用联接)获取原始设计(或其附近)中的数据。也许这解释得更好一些:

如果可能的话,我建议重新设计数据库,将其规范化一点,而不是将所有内容都存储在一个表中。例如,您可以: 玩家表,存储所有玩家(ef名/姓、唯一ID等) 然后是一个存储组名、所有者、创建日期和唯一组ID的组表。 最后是一个带有Player&Group链接的表,该表将存储每个PlayerGroup关系的Player ID和Group ID

从这样的结构中,您可以通过SQL(例如,从java)轻松获得所需的任何信息。 例如,要获取给定组的所有玩家,请执行以下操作:

select p.player_name from Player_table p
join Player_Group_table pg on p.player_ID = pg.player_ID
join Group_table g on pg.group_ID = g.group_ID
where g.group_name = 'Your Group Name'

您不想在数据库中插入序列化数据。这与使用RDBMS的目的背道而驰。想想看,你可以有另一个
玩家表(或者在你的
表上有一些特定的“角色”来表示他们是玩家),然后在你的玩家列中有一个
大整数
数组(表示这些玩家的玩家ID),或者为
PlayerGroupMappings
创建另一个表,该表详细说明了GroupID和PlayerID(并且存在一个条目表示存在映射)。@Cid根据我对DB规范化的理解,基本上是多了一个表,表中有两个东西-你需要的值和一个数字,这个数字是你原始表的主键,所以我可以这样做,基本上是多了一个表,里面有球员的名字/标识符,还有另外一个专栏,指定他们与哪一组相关?@Coper请阅读一个很好的例子!谢谢你的详细解释!我不知道我是否了解第二种关系如何使玩家能够加入多个组,我知道有两列-玩家id和组id,但您是否需要将玩家多次分配到该表中,以便让他加入多个组?只是想看看我是否理解正确。所以对于你的玩家所在的每个组,你都会在PlayerGroup中输入一个条目(PlayerGroup中的每个条目都是唯一的——它是组id和玩家id的唯一对)。所以,如果你按组id查询PlayerGroup,你会得到该组中所有玩家的列表,如果你按组id查询PlayerGroup,你会得到该玩家所属的所有组的列表。好吧,这就是我想的。非常感谢你!你帮了大忙!我认为@Cid的意思是“这将确保玩家不会在同一组中出现两次,因为组合是唯一的”。