通用数据库表

时间:2009-05-13 04:30:44

标签: database entity-attribute-value

以下数据库表设计是否有任何名称:

基本上我们有代表键/值对的通用列。

id | k1 | v1 | k2 | v2 | k3 | v3 | ....

1 |名字|山姆|姓氏|史密斯| NULL | NULL | ...

在我的应用程序中,我有许多表只有一行,我想将它们合并到一个通用表中,该表具有X个列,每行代表单个表行。

提前致谢。

2 个答案:

答案 0 :(得分:10)

Entity-Attribute-Value.也称为“名称 - 值表”或“开放式模式”。

这是SQL Antipattern。它没有很多关系数据库设计规则,而且难以维护。我建议不要这样做。

在我对问题“Product table, many kinds of product, each product has many parameters.

的回答中,详细了解我对EAV的看法

答案 1 :(得分:3)

糟糕的主意。基本上,您应该将关系数据库用作关系数据库。

键/值对通常不是建议的存储方法,但至少具有单个键和单个值的单行是“正确的”。

如果您将多对放在一行中,则会引发许多问题:

  1. 您如何找到特定的钥匙?
  2. 该密钥可以在k1,k2还是k3?或者它总是在特定列中?
  3. 你如何执行?
  4. 你如何使其表现出色?
  5. 将您的实体建模为具有已知属性的实体。这就是数据库的用途。