2016-10-17 70 views
2

在这种情况下,我有:球员,幻想足球联赛(社区)和结果。“幻想足球”数据库中的结果表的正确数据库结构

1个用户可以成为许多幻想联盟的一部分。

我的当前结构:

create table players (id int, email, display_name) 
create table communities (id int, name, password, admin_email) 
create table community_players (community_id, player_id) 

我现在需要创建一个结果表中的每个社区。我在想:

create table results (player1_id, player1_points, player1_goals_scored, player2_id, player2_points, player2_goals_scored, date, community_id) 

我担心的是这张桌子最终会变得很大。所以当我去查询统计数据时(即谁击败了谁,进球数量,进球数量等),结果会非常慢。

我的想法是:

我应该“上即时”为创建的每个社区建立一个成绩表?

create table results_community_name (player1_id, player1_points, player1_goals_scored, player2_id, player2_points, player2_goals_scored, date, community_id) 
+0

为另一个表中的每条记录创建表是一个非常糟糕的主意。你现在的结构有什么问题?你对它的性能和可伸缩性有什么测量或估计? – David

+0

我不想为另一个表中的每条记录创建一个表,只是在数据库中 - 或者是您的意思? 除了如果我只使用一个表格,我没有任何测量或估计值,我估计在提取统计数据(例如目标得分)时,它可能会查询100,000条记录。 – RDowns

+0

''为每个社区'即时创建结果表'' - 这是否意味着您不会为'社区'表中的每条记录创建一张表?至于记录数,在一个没有任何数字的表中有100,000条记录是相当低的数据量。 – David

回答

4

数据库是为存储行而构建的。 行数。通过适当的索引和维护,您绝对不应该遇到性能问题。另一方面,为每个社区创建一个表格不仅会使代码复杂化,而且会很快成为维护的噩梦。

如果性能真的成为问题,你应该看看MySQL的partitions。本质上,它创建了隐藏在一个逻辑表后面的N个物理表,这与您为每个社区创建表的想法类似,但是以更简单的方式进行管理。

+0

谢谢,我认为在你和Davids之后,我会用单个结果表 – RDowns

+0

results_table是否需要它自己的'id'列? – RDowns