SQL为每个用户存储大量数据

时间:2015-07-23 13:21:51

标签: mysql sql user-data

我正在开发一个网站,人们可以在这里玩小游戏。在每个游戏结束时,将给用户一个分数,我希望将其存储在具有时间戳的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很新,所以我可能会错过一些愚蠢的东西

4 个答案:

答案 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

这可以让您保持游戏数据和用户完全分开。如果您想添加更多游戏,允许单个游戏获得多个分数,这将有助于解决您可能遇到的任何其他问题。等。如果您在一张桌子上拥有所有数据并且想要添加新游戏,则每次想要添加或删除游戏时,都必须手动将另一列添加到用户表的末尾。