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

时间:2013-04-18 10:15:22

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

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

您可以作为匿名访客进行游戏,只需提供您的位置或注册用户。所有用户都存储在数据库中。完成游戏后,会添加一个数据库条目,并且您还需要记录谁玩游戏。

该表如下所示:

USERS(id | user_name |密码|国家/地区) 游戏(id | user_id |得分)

截至目前,我只是在GAMES(user_id)中存储了对USERS(id)的引用,我该如何处理匿名用户呢?

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

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

有没有更好的方法来解决这个问题?

任何建议表示赞赏。

1 个答案:

答案 0 :(得分:1)

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

相反,你可以拥有

GAMES ( id | user_id | score | country_id) 

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

当注册用户结束游戏时,您存储user_id。您可以将country_id保留为null,因为这将是重复数据的情况。 当anonyomous用户结束游戏时,您只需将分数和country_id存储在游戏中。

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