何时使用列和单独的表? - 数据库设计

时间:2012-08-05 10:05:08

标签: database database-design relational-database database-schema

大多数人不推荐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个join / filter属性,当它作为1列/属性时,搜索会很容易,但我会有很多NULL值。

任何建议怎么做?

1 个答案:

答案 0 :(得分: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方法(灵活性)支付的价格。