0

大多數人不推薦EAV,我知道一些原因。 然而,EAV方法和這種方法之間有什麼區別?何時使用列和何時使用單獨的表? - 數據庫設計

計算機

id, price, description 

連接

id, name (possible values: LAN, USB, HDMI, ..., all all about 10) 

connections_computer

comp_id, conn_id 

還是那個EAV呢?如果是的話,什麼是標準化的選擇?

考慮,我想要做搜索這樣的:

所有計算機,同時具有一個LAN和一個HDMI接口。在這種情況下,我需要1個連接/過濾器屬性,當它作爲1列/屬性時,搜索會很容易,但我會有很多NULL值。

任何推薦怎麼辦?

回答

0

你的例子是一個普通的多對多。在EAV屬性名稱是列的,而不是列的名稱。例如,

computer: {computer_id, attr_name, attr_value}

insert into computer (computer_id, attr_name, attr_value) 
values 
    (1, 'connection', 'HDMI') 
, (1, 'connection', 'USB') 
, (1, 'memory', '2 GB') 
; 

將是一個EAV的方法。

Here is an example您在RDBMS中爲EAV方法支付的價格(靈活性)。

+0

謝謝,所以我應該使用許多而不是1列/屬性值? – OnTheFly 2012-08-07 17:03:19

+0

是的,如果你可以設計 - 然後設計。這意味着你知道你的實體和屬性。如果你真的必須使用EAV - 有未知的條目/屬性將由用戶在飛行中定義 - 然後考慮面向文檔的數據庫,如Mongo,Couch等。 – 2012-08-08 11:34:36

相關問題