我目前正在制作一个数据库,说实话,我不是很擅长它(有点被迫这么做)。它是一个游戏数据库,我有一个名为game_table的表,用于存储用户创建的游戏会话。
问题是,存储邀请用户、请求用户、确认用户、拒绝用户和待定用户列表的最佳方法是什么?目前,我正在序列化用户I(例如,被邀请的用户=“11235欧元/2510/34630/45715/64530”)。然而,主要的问题是字段变得不可搜索,如果我想检索一个用户被邀请参加的游戏列表,它就会成为一个问题。为了解决这个问题,我在user_table中为invited_games (也是序列化的游戏ID)存储了一个单独的字段。
问题在于,每当我想添加新特性时,都很难进行维护,而且很容易在保持序列化数据同步的情况下出错。是否最好有单独的表,如:
invited_users_table
Game_ID | User_ID
51 | 5193
51 | 10458
51 | 235
901 | 1536
901 | 4573
或者还有其他更好的方法来存储这些类型的数据呢?请帮帮忙,谢谢!
发布于 2014-06-01 14:06:10
根据您的说法,听起来您需要一张三列的表:
后者将具有诸如“邀请”、“确认”、“请求”等价值观。
如果您了解有关不同组的更多信息,则需要单独的表。例如,您可能会为被邀请的用户设置一个“谁邀请”列,或者为已确认的用户设置一个“确认时间”。如果不同组所需的特定列的数量很大,那么您可能需要考虑一个更复杂的数据结构。如果只有少数这样的列,您可以将它们添加到上面描述的表中。
发布于 2014-06-01 14:09:08
是的,最好为被邀请的用户单独安排一张桌子。
更好的方法是拥有game_user_relation
表,它将存储游戏id、用户id以及它们之间的关系。有点:
create table game_user_relation(
game_id int not null,
user_id int not null,
relation_type varchar (10) not null,
primary key(game_id, user_id, relation_type)
) engine=InnoDB;
此表将允许一个用户与一个游戏有多个关系。或者,如果您需要有一个用户与一个游戏相关-从主键中删除relation_type
。
这样,您就可以从一个表中选择所有需要的数据。
https://stackoverflow.com/questions/23980634
复制相似问题