代码之家  ›  专栏  ›  技术社区  ›  tom

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

  •  1
  • tom  · 技术社区  · 7 年前

    我有一个应用程序,用户可以在其中“创建”动物。动物可以有不同的属性:颜色、体重、是否野生等。当我在数据库中定义属性可以有哪些值时,我遇到了一个问题:

    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 回复  |  直到 7 年前
        1
  •  0
  •   Gordon Linoff    7 年前

    以下是三种Postgres方法:

    • 有一个 type 列和每种类型的单独列( value_date , value_string 。..)
    • 使用json/xml存储值(尽管这可能会限制类型)。
    • 将实际值存储在单独的列中。

    通常,出现这个问题是因为您希望有一个包含“不同”信息的列。例如,现在我正在进行一个数据项目,将来自不同来源的数据汇集在一起。我想在每一行中表示源级别的信息,但这因源而异。我的解决方案?我用一个 source_system_info 列。该列包含一个json表示,表示我希望从源系统中包含的内容。