我正在开发一个网站,人们可以在这里玩小游戏。在每个游戏结束时,将给用户一个分数,我希望将其存储在具有时间戳的MySQL数据库中。这将使我能够以更好的方式呈现数据。
我使用Facebook登录系统,因此我目前有一个表,其中包含用户ID,名称和Facebook ID。目前我有一个看起来像这样的表:
ID------Name------UID
1 Bob 123123
2 Marley 23134
然后,对于每个用户,我将需要这样的东西:
Game1Time Game1Score Game2Time Game2Score etc....
3292 400 10 7824
129 32 101 231
我看了一些其他相关帖子,似乎人们普遍认为为每个用户准备一张桌子是个坏主意,但对我来说,这似乎是最简单的方法。
我也可以这样做,我将所有数据存储在一个表中:
ID------Name------UID-------Game1Time-----Game1Score----Game2Time-----Game2Score etc...
1 Bob 123123 3291, 129 400, 32 10, 101 7824, 231
2 Marley 23134
但是当人们玩同样的游戏时,这似乎可能会导致问题。
我觉得我错过了一些聪明的方法,所以如果你有任何建议,请告诉我。我对SQL很新,所以我可能会错过一些愚蠢的东西
答案 0 :(得分:2)
我的建议如下: 所以基本上你有两个表,你可以使用uid来搜索你需要的其他信息。 另外,您可以根据需要保存物品
ID------Name------UID-------
1 Bob 123123
2 Marley 23134
ID-----UID------GameTime-----GameScore
1 123123 3291 400
2 123123 129 32
3 234134 10 101
4 432123 7824 231
答案 1 :(得分:2)
我会在这里建议一些规范化。
您的用户表很好。创建一个游戏表来存储有关游戏的信息。创建一个表格,其中包含有关用户,游戏和结果的信息。有点像:
create table users (
id int primary key,
name varchar(100),
uid int
);
create table games (
id int primary key,
name varchar(100)
);
create table users_games (
id int primary key,
userid int,
gameid int,
startdate datetime,
enddate datetime,
score bigint,
constraint fk_users_games_userid foreign key (userid) references users(id),
constraint fk_users_games_gameid foreign key (gameid) references games(id)
);
使用startdate和enddate可以计算用户在游戏中的时间。您可以在一天中的给定时间运行有关不同用户的统计信息,并根据users_games表运行更多报告。
您可以根据需要在users_games上创建索引。那张桌子可以长大,没问题。如果您喜欢或系统地归档数据,您可以使用userid进行分区,因为数据过于陈旧而无法定期使用。
示例架构在这里:http://sqlfiddle.com/#!9/315a5。
答案 2 :(得分:2)
有三个表 - 用户,游戏,结果。
用户为每个用户存储记录,并具有UID列和用户名。
游戏存储每个游戏的记录,并有GID(游戏ID)列和游戏名称。
结果存储每个游戏的记录,并且包含UID,GID,时间戳和分数列。
这样,您可以根据需要为任何用户存储尽可能多的游戏分数。
关系数据!
答案 3 :(得分:1)
您可能希望在UserGameMaps表上使用具有多对多关系的关系数据库
用户
ID------Name------UID-------
1 Bob 123123
2 Marley 23134
GAMEDATA
ID------GameTime-----GameScore
1 3291, 129 400,32
2 10, 101 7824, 231
3 etc etc
UserGameMaps
ID-----UserID------GameId
1 1 1
2 1 2
3 2 3
这里可以找到StackOverflow的一个很好的例子:Many-to-many relationships examples
这可以让您保持游戏数据和用户完全分开。如果您想添加更多游戏,允许单个游戏获得多个分数,这将有助于解决您可能遇到的任何其他问题。等。如果您在一张桌子上拥有所有数据并且想要添加新游戏,则每次想要添加或删除游戏时,都必须手动将另一列添加到用户表的末尾。