如果某个字段的值应具有不同类型,该怎么办?

时间:2018-06-06 14:41:10

标签: sql postgresql database-design

我已经说过一个用户可以“创造”动物的应用程序。动物可以有不同的属性:它们的颜色,重量,是否是野性等。当我在DB中定义属性可以具有的值时,我有一个问题:

Table: attributes
+-------------+
| id | name   |
+-------------+
|  1 | color  |
|  2 | weight |
|  3 | wild   |
+-------------+

Table: values
+--------------------------------+
| att_id (fkey) | name (varchar) |
+--------------------------------+
|             1 | brown          | ok
|             1 | grey           | ok
|             1 | white          | ok
|             2 | 300            | <-- not good to put this in a varchar field
|             3 | yes            | <-- not good to put this in a varchar field
+--------------------------------+

如何解决这个问题?我应该为int和boolean值创建另外两个表,并为attributes表中的每个属性设置values表中应该查找给定属性的值吗?或者什么是合适的设计?

1 个答案:

答案 0 :(得分:0)

以下是三种Postgres方法:

  • 为每种类型(typevalue_date,...)提供value_string列和单独的列。
  • 使用JSON / XML存储值(尽管可能会限制类型)。
  • 将实际值存储在不同的列中。

通常,出现此问题是因为您希望列中包含“不同”信息。例如,现在我正在开发一个数据项目,将数据从不同来源汇集在一起​​。我想在每一行中表示源级信息,但这与源不同。我的解决方案我将数据表示为具有source_system_info列的常规行。该列包含我想要包含在源系统中的JSON表示。