我目前正在建立一个数据库,并告诉我我不是很擅长它(有点被迫这样做)。它是一个游戏数据库,我有一个名为game_table的表,用于存储用户创建的游戏会话。
问题是,存储受邀用户,请求用户,已确认用户,拒绝用户和待定用户列表的最佳方式是什么?目前我正在序列化用户ID(例如,邀请用户=“11235 | 2510 | 34630 | 45715 | 64530”)。然而,主要问题是该字段变得不可搜索,并且如果我想要检索用户被邀请的游戏列表则成为问题。为解决这个问题,我在welcome_games的user_table中存储了一个单独的字段(也是序列化的游戏ID)。
问题在于,每当我想添加新功能时,它都很难维护,并且在保持序列化数据同步时很容易出错。最好有单独的表,如:
invited_users_table
Game_ID | User_ID
51 | 5193
51 | 10458
51 | 235
901 | 1536
901 | 4573
还是有其他更好的方法来存储这些类型的数据吗?请帮忙,谢谢!
答案 0 :(得分:2)
从你的说法来看,你需要一个有三列的表:
后者将采用“邀请”,“确认”,“请求”等值。
如果您有关于不同组的更多信息,则需要单独的表。例如,您可能拥有受邀用户的“邀请者”列,或确认用户的“确认时间”。如果不同组所需的特定列数量很大,那么您可能需要考虑更复杂的数据结构。如果只有少数这样的列,您可以将它们添加到上述表中。
答案 1 :(得分:1)
是的,最好为受邀用户提供一个单独的表格。
更好的是拥有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
。
这样您就可以从一个表中选择所有需要的数据。