发布
社区首页 >问答首页 >数据库结构建议(序列化或单独的表)

数据库结构建议(序列化或单独的表)
EN

Stack Overflow用户
提问于 2014-06-01 14:00:16
回答 2查看 64关注 0票数 0

我目前正在制作一个数据库,说实话,我不是很擅长它(有点被迫这么做)。它是一个游戏数据库,我有一个名为game_table的表,用于存储用户创建的游戏会话。

问题是,存储邀请用户、请求用户、确认用户、拒绝用户和待定用户列表的最佳方法是什么?目前,我正在序列化用户I(例如,被邀请的用户=“11235欧元/2510/34630/45715/64530”)。然而,主要的问题是字段变得不可搜索,如果我想检索一个用户被邀请参加的游戏列表,它就会成为一个问题。为了解决这个问题,我在user_table中为invited_games (也是序列化的游戏ID)存储了一个单独的字段。

问题在于,每当我想添加新特性时,都很难进行维护,而且很容易在保持序列化数据同步的情况下出错。是否最好有单独的表,如:

invited_users_table

代码语言:javascript
代码运行次数:0
复制
Game_ID  |  User_ID
 51      |   5193
 51      |   10458
 51      |   235
 901     |   1536
 901     |   4573

或者还有其他更好的方法来存储这些类型的数据呢?请帮帮忙,谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-01 14:06:10

根据您的说法,听起来您需要一张三列的表:

  • GameId
  • UserId
  • UserType

后者将具有诸如“邀请”、“确认”、“请求”等价值观。

如果您了解有关不同组的更多信息,则需要单独的表。例如,您可能会为被邀请的用户设置一个“谁邀请”列,或者为已确认的用户设置一个“确认时间”。如果不同组所需的特定列的数量很大,那么您可能需要考虑一个更复杂的数据结构。如果只有少数这样的列,您可以将它们添加到上面描述的表中。

票数 2
EN

Stack Overflow用户

发布于 2014-06-01 14:09:08

是的,最好为被邀请的用户单独安排一张桌子。

更好的方法是拥有game_user_relation表,它将存储游戏id、用户id以及它们之间的关系。有点:

代码语言:javascript
代码运行次数:0
复制
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

这样,您就可以从一个表中选择所有需要的数据。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23980634

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档