gpt4 book ai didi

mysql - 用户、游戏、历史关系的数据库架构

转载 作者:行者123 更新时间:2023-11-29 14:01:44 26 4
gpt4 key购买 nike

我正在尝试确定数据库的最佳组织方式。我有一个用户表,其中有一列代表每个人的 current_game。 (每个用户在任何给定时间只能属于一个游戏。)有一个游戏表,其中每个特定游戏都有一个唯一的 ID。

这样我就可以很好地执行所有查询/操作。但是,我想维护每个用户之前游戏的记录,以便他们可以访问他们的历史数据和统计数据。

由于游戏只能持续很长时间(例如几周),并且并非所有用户都会始终积极参与游戏,因此这是我正在考虑的模式:

用户users_inactive游戏games_oldgame_eventsgame_events_old

我的担忧是2:首先,两个用户表在登录和注册时是否会出现问题?其次,我是否必须维护一个两列的 membership 表,其中每个用户与游戏关系都有一行(因此 8 个用户每个都参加过过去 5 场游戏,意味着 membership 中有 40 行) code> table),或者有更简单、更优雅的方法吗?

最佳答案

我的建议是引入一个 bool 列来指示实体是否处于事件状态。

例如,我将在“games”表中使用game_active( bool 列),而不是“games”和“games_old”表,并消除“games_old”表。在业务逻辑中,您必须将新游戏标记为事件状态,将旧游戏标记为非事件状态。

相同的逻辑也适用于其他表。

约束看起来像,

PRIMARY KEY (`user_id`, `game_id`),
INDEX `idx_user_id` (`user_id`),
INDEX `idx_game_id` (`game_id`),
CONSTRAINT `fk_users_user_game` FOREIGN KEY (`user_id`) REFERENCES `users` (`user_id`) ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT `fk_games_user_game` FOREIGN KEY (`game_id`) REFERENCES `games` (`game_id`) ON UPDATE NO ACTION ON DELETE NO ACTION

关于mysql - 用户、游戏、历史关系的数据库架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14964872/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com