sql - 处理匿名用户和注册用户的正确方法

标签 sql database database-design relational-database database-schema

我正在开发一个游戏应用程序,并正在讨论哪种方法是处理哪个用户是所玩游戏的所有者的正确方法。

您可以扮演只需提供您的位置的匿名访客或注册用户。所有用户都存储在数据库中。一旦您完成游戏,数据库条目就会添加到您的分数中,我还想记录谁玩过游戏。

表格如下:

用户(id | 用户名 | 密码 | 国家/地区) 游戏(id | user_id | 分数)

到目前为止,我只是在 GAMES(user_id) 中存储对 USERS(id) 的引用,但我应该如何处理匿名用户?

一种方法是将每个匿名用户仅存储为 ID 和位置,然后向 GAMES 添加一个名为匿名_id 的列。但是,对于每个游戏,user_id 或匿名_id 之一必须为 NULL,具体取决于玩家是否注册。

另一种方法是将所有匿名用户添加到 USER 表中,并允许 user_name 和密码为空。

有没有更好的方法来处理这个问题?

任何建议表示赞赏。

最佳答案

如果您将国家/地区存储在其他地方,我不会在用户表中为每个匿名用户添加一个出现。因为对于每个匿名用户,您都会插入 2 行(1 行在用户中,1 行在游戏中)。

相反,你可以

GAMES ( id | user_id | score | country_id) 

user_id 和country_id 都是可为空的外键。

当注册用户结束游戏时,您将存储 user_id。您可以将country_id 保留为空,因为这会出现重复数据的情况。 当匿名用户结束游戏时,您只需将分数和country_id存储在Games中即可。

您可以通过在游戏中过滤user_id is null来识别匿名用户,并且仍然可以按用户和国家/地区进行排名。

关于sql - 处理匿名用户和注册用户的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16080214/

相关文章:

sql - Rails 4 并使用 Sunspot : is it possible to prevent n+1 queries when retrieving search results? 进行搜索

mysql - 插入选择 mariadb 查询

数据库优化 : Hashing all the values

database - 您将如何避免此数据库模式中的数据冲突?

php - 如何排除三个不同表的查询结果?

java - 复制到 * CSV 文件时数据不匹配

php - 优化我的 MySQL 数据库的方法

Mysql 检查日期和插入付款划分的最佳方法

database - 什么是查找表?

php - 如何摆脱 LEFT JOIN SQL 查询中的重复值