在这种情况下,我有:球员,梦幻足球联赛(社区)和结果。
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 :(得分:4)
数据库是为存储行而构建的。行的很多。通过适当的索引和维护,您永远不会遇到性能问题。另一方面,为每个社区创建一个表不仅会使代码复杂化,而且很快就会成为维护的噩梦。
如果性能真的成为一个问题,你应该研究MySQL的partitions。从本质上讲,它创建了隐藏在一个逻辑表后面的N个物理表,这有点像您为每个社区创建一个表的想法,但是以更容易管理的方式。