簡體   English   中英

數據庫架構-創建一個大表還是多個表?

[英]Database Schema - Create one large table or many?

我正在嘗試確定存儲具有非常相似屬性的實體的最佳方法。 主要區別在於每個實體都引用其他實體。 我打算將數據庫設置為:

entity_a (1-1,000 Records) [Data rarely changes]
id|created|updated|entity_b_id|category_id|name|entity_b_id|entity_c_id|entity_d_id

entity_b (10,000-1,000,000 Records) [Data changes constantly]
id|created|updated|entity_b_id|category_id|name|entity_c_id|entity_e_id|entity_f_id

entity_c (10,000-10,000,000 Records) [Data changes constantly]
id|created|updated|entity_b_id|category_id|name|entity_a_id|entity_f_id

entity_d (0-1,000 Records) [Data rarely changes]
id|created|updated|entity_b_id|category_id|name

entity_e (1-100 Records) [Data rarely changes]
id|created|updated|entity_b_id|category_id|name|entity_a_id|entity_b_id

entity_f (0-50,000 Records) [Data frequently changes]
id|created|updated|entity_b_id|category_id|name|entity_c

entity_g (10-100 Records) [Data rarely changes]
id|created|updated|entity_b_id|category_id|name

entity_h (10-1,000 Records) [Data rarely changes]
id|created|updated|entity_b_id|category_id|name|entity_e_id

entity_i (1-10 Records) [Data rarely changes]
id|created|updated|entity_b_id|category_id|name

但有人建議將一個大表管理為:

ent (20,000-11,000,000 Records)
id|created|updated|ent_id(b)|category_id|name|ent_id(a)|ent_id(b)|ent_id(c)|ent_id(d)|ent_id(e)|ent_id(f)

第二種方法的一個問題是表的大小,因為ID的值將為int(11),並且這些ID的六列將主要設置為0。

但是我主要關心的是訪問速度,因為許多用戶會一次非常頻繁地訪問記錄。 我正在使用CodeIgniter,希望使用它的緩存功能來承擔盡可能多的數據庫負載,但是由於某些數據會每秒變化,因此這將受到限制。

非常感激任何的幫助。

我認為很難預測一個人與另一個人的實際表現,因為它取決於很多事情。

幾個注意事項:

實體之間的區別有多重要? 如果您發現自己每個查詢經常只選擇一種類型的實體,那么標准化的解決方案可能會更快。

如果您有查詢選擇了共享列以外的其他內容,例如: entity_a with entity_c IN(something)需要在entity_c列上有一個索引。

entity_c非常大。 如果要進行大量更新,並且很少查詢,那么如果要使用非規范化版本,那就值得關注。

如果您要執行很多JOIN,我很確定標准化表格會更快。

我的建議是:使用規范化形式。 如果您發現性能問題,可以查看此解決方案。

您也可以尋求混合解決方案。 由於b和c經常更改,而其他則不更改:像這樣創建兩個表。 或給b和c它自己的桌子,但其他人合而為一。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM