【发布时间】:2012-11-16 22:47:23
【问题描述】:
假设我正在建立一个关于汽车的网站。汽车实体有很多类似枚举的属性:
- 变速箱(手动/自动)
- 燃料(汽油/柴油/生物乙醇/电力)
- 车身风格(轿跑车/轿车/敞篷车/...)
- 空调(无/简单/双区)
- 外观颜色(黑/白/灰/蓝/绿/...)
- 内饰颜色(黑/白/灰/蓝/绿/...)
- 等
这些属性的列表将来可能会发生变化。在数据库中建模它们的最佳方法是什么?我可以想到以下选项,但无法真正决定:
- 将
car表中的字段与枚举值一起使用- 以后很难添加更多列,可能是最快的
- 使用
car表中的字段,这些字段是引用查找表的外键- 以后很难添加更多列,有点慢
- 为存储可能值的每个属性创建单独的表,并创建另一个表来存储汽车和属性值之间的连接
- 以后容易添加更多可能的值,甚至更慢,似乎太复杂了
【问题讨论】:
-
Google for EAV:实体属性值。 (又名史密斯和史密斯)
-
@wildplasser:谢谢,这以一种非常简洁的方式解决了问题。也许你应该添加一个我可以投票的答案。
-
不,我不会。太琐碎了。
-
请注意,虽然@BillKarwin 是数据库设计方面的权威,但他也因讨厌 EAV 模型而闻名。
标签: sql database postgresql database-design entity-attribute-value