2016-01-12 133 views
0

我正在實現一個數據庫來存儲我的用戶的詳細信息。通常我會創建這樣的:設計數據庫模式(MySQL)

UserID metafield1 metafield2 metafield3 
1   value11  value12  value13 
2   value21  value22  value23 
3   value31  value32  value33 

但看在WordPress的數據庫,他們已經做了這樣的:

UserID metafieldname metafieldvalue 
1   metafield1  value11 
1   metafield2  value12 
1   metafield3  value13 
2   metafield1  value21 
2   metafield2  value22 
2   metafield3  value23 
3   metafield1  value31 
3   metafield2  value32 
3   metafield3  value33 

從我所看到的,它更容易添加/編輯/ remmove新的metafields。您不必更改表格的結構。

第二個模式中不會有空單元格。但是,對於大量的行,metafields的名稱將佔用空間。

使用第二模式查詢得更快嗎?

我想知道第一種方法的優點是什麼?

謝謝。

+0

您已經說明了優勢...可以添加/刪除/修改字段,而無需更改架構。對於具有固有動態模式的場景,這是一種常用方法。缺點是增加了複雜性。 – David

回答

-1

第二種方法最重要的優點是,如果添加更多元域,則不必更改表的結構。從長遠來看,這是一個巨大的優勢。第二種方法也將簡化查詢語句,插入和刪除語句。

+0

這是爲什麼downvoted? – fractal5

0

查詢速度取決於您正在搜索的字段以及該字段是否已建立索引。還取決於表中有多少行以及該列的數據類型。

如果您要查詢UserId = somevalue的位置,則假設數據類型在兩個方案中都相同,則不會有顯着的速度差異返回值。

如果metafields被編入索引並查詢,您將看到細微的速度差異。

我會推薦您爲優化目的列出的第二個。