2016-10-17 123 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