在“幻想足球”中对结果表进行正确的数据库结构。数据库

时间:2016-10-17 10:39:56

标签: mysql database database-design ddl

在这种情况下,我有:球员,梦幻足球联赛(社区)和结果。

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)

1 个答案:

答案 0 :(得分:4)

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

如果性能真的成为一个问题,你应该研究MySQL的partitions。从本质上讲,它创建了隐藏在一个逻辑表后面的N个物理表,这有点像您为每个社区创建一个表的想法,但是以更容易管理的方式。