SQL 为每个用户存储大量数据
SQL storing large amount of data for each user
我正在开发一个网站,人们可以在其中玩小游戏。在每场比赛结束时,用户将获得一个分数,我希望将其存储在带有时间戳的 MySQL 数据库中。这将使我能够以更好的方式进一步展示数据。
我使用 Facebook 登录系统,所以我目前有一个 table,它由用户 ID、姓名和 Facebook ID 组成。目前我有一个 table 看起来像这样:
ID------Name------UID
1 Bob 123123
2 Marley 23134
然后,对于每个用户,我将需要这样的东西:
Game1Time Game1Score Game2Time Game2Score etc....
3292 400 10 7824
129 32 101 231
我看过其他一些相关帖子,似乎人们普遍认为为每个用户设置 table 是个坏主意,但对我来说,这似乎是最简单的方法.
我也可以这样做,我将所有数据存储在一个 table:
ID------Name------UID-------Game1Time-----Game1Score----Game2Time-----Game2Score etc...
1 Bob 123123 3291, 129 400, 32 10, 101 7824, 231
2 Marley 23134
但是当人们玩很多同一个游戏时,这似乎会引起问题。
我觉得我缺少一些聪明的方法,所以如果您有任何建议,请告诉我。我是 SQL 的新手,所以我可能漏掉了一些愚蠢的东西
我的建议如下:
所以基本上你有两个表,其中一个带有 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
我会在这里推荐一些规范化。
您的用户 table 很好。创建游戏 table 来存储有关游戏的信息。创建一个 table,结合有关用户和游戏以及结果的信息。类似于:
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)
);
使用开始日期和结束日期,您可以计算用户在游戏中的时间。您可以 运行 统计一天中特定时间的不同用户,以及更多基于 users_games table.
的报告
您可以根据需要在 users_games 上创建索引。那table可以长大,没问题。如果您愿意,可以使用按用户 ID 进行分区,或者系统地归档数据,因为数据太陈旧而无法定期使用。
示例架构在这里:http://sqlfiddle.com/#!9/315a5。
您可能希望在 UserGameMaps 上使用具有多对多关系的关系数据库 table
用户
ID------Name------UID-------
1 Bob 123123
2 Marley 23134
游戏数据
ID------GameTime-----GameScore
1 3291, 129 400,32
2 10, 101 7824, 231
3 etc etc
用户游戏地图
ID-----UserID------GameId
1 1 1
2 1 2
3 2 3
可以在此处的 Whosebug 找到一个很好的例子:Many-to-many relationships examples
这将使您能够将游戏数据和用户完全分开。如果您想添加更多游戏,这将有助于解决您可能遇到的任何进一步问题,允许单个游戏有多个分数。等。如果您将所有数据都放在一个 table 上并且想要添加新游戏,则每次您想要添加或删除游戏时都必须手动将另一列添加到用户 table 的末尾.
有三个表 - 用户、游戏、结果。
用户为每个用户存储一条记录,并具有列 UID 和用户名。
Games 存储每个游戏的记录,并包含列 GID(游戏 ID)和游戏名称。
Results 为每个 玩过的游戏 存储一条记录,并包含列 UID、GID、时间戳和分数。
这样一来,您可以根据需要存储任意多场比赛的分数,针对任何用户。
关系数据!
我正在开发一个网站,人们可以在其中玩小游戏。在每场比赛结束时,用户将获得一个分数,我希望将其存储在带有时间戳的 MySQL 数据库中。这将使我能够以更好的方式进一步展示数据。
我使用 Facebook 登录系统,所以我目前有一个 table,它由用户 ID、姓名和 Facebook ID 组成。目前我有一个 table 看起来像这样:
ID------Name------UID
1 Bob 123123
2 Marley 23134
然后,对于每个用户,我将需要这样的东西:
Game1Time Game1Score Game2Time Game2Score etc....
3292 400 10 7824
129 32 101 231
我看过其他一些相关帖子,似乎人们普遍认为为每个用户设置 table 是个坏主意,但对我来说,这似乎是最简单的方法.
我也可以这样做,我将所有数据存储在一个 table:
ID------Name------UID-------Game1Time-----Game1Score----Game2Time-----Game2Score etc...
1 Bob 123123 3291, 129 400, 32 10, 101 7824, 231
2 Marley 23134
但是当人们玩很多同一个游戏时,这似乎会引起问题。
我觉得我缺少一些聪明的方法,所以如果您有任何建议,请告诉我。我是 SQL 的新手,所以我可能漏掉了一些愚蠢的东西
我的建议如下: 所以基本上你有两个表,其中一个带有 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
我会在这里推荐一些规范化。
您的用户 table 很好。创建游戏 table 来存储有关游戏的信息。创建一个 table,结合有关用户和游戏以及结果的信息。类似于:
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)
);
使用开始日期和结束日期,您可以计算用户在游戏中的时间。您可以 运行 统计一天中特定时间的不同用户,以及更多基于 users_games table.
的报告您可以根据需要在 users_games 上创建索引。那table可以长大,没问题。如果您愿意,可以使用按用户 ID 进行分区,或者系统地归档数据,因为数据太陈旧而无法定期使用。
示例架构在这里:http://sqlfiddle.com/#!9/315a5。
您可能希望在 UserGameMaps 上使用具有多对多关系的关系数据库 table
用户
ID------Name------UID-------
1 Bob 123123
2 Marley 23134
游戏数据
ID------GameTime-----GameScore
1 3291, 129 400,32
2 10, 101 7824, 231
3 etc etc
用户游戏地图
ID-----UserID------GameId
1 1 1
2 1 2
3 2 3
可以在此处的 Whosebug 找到一个很好的例子:Many-to-many relationships examples
这将使您能够将游戏数据和用户完全分开。如果您想添加更多游戏,这将有助于解决您可能遇到的任何进一步问题,允许单个游戏有多个分数。等。如果您将所有数据都放在一个 table 上并且想要添加新游戏,则每次您想要添加或删除游戏时都必须手动将另一列添加到用户 table 的末尾.
有三个表 - 用户、游戏、结果。
用户为每个用户存储一条记录,并具有列 UID 和用户名。
Games 存储每个游戏的记录,并包含列 GID(游戏 ID)和游戏名称。
Results 为每个 玩过的游戏 存储一条记录,并包含列 UID、GID、时间戳和分数。
这样一来,您可以根据需要存储任意多场比赛的分数,针对任何用户。
关系数据!