在 SQL 表中存储分类引用的最佳方式是什么?

Jef*_*Fay 5 mysql sql statistics enums database-design

我想在 MySQL 数据库表中存储大量分类数据。假设我想要有关“小部件”的信息,并且想要以某种方式对属性进行分类,即形状类别。

例如,小部件可以分类为:圆形、方形、三角形、球形等。这些类别是否应该存储在表中以便从应用程序中最好地引用它们?我想,另一种可能性是向小部件添加一列,其中包含一个包含小整数的形状列。这样我的应用程序就可以通过它来搜索形状,然后使用协调的枚举类型来映射形状 int 的含义。

哪个最好?或者还有其他我还没有想到的解决方案?

OMG*_*ies 5

为每个属性分组定义一个类别表。IE:

WIDGET_SHAPE_TYPE_CODES

  • WIDGET_SHAPE_TYPE_CODE(主键)
  • 描述

然后在表中使用外键引用WIDGETS

小部件

  • WIDGET_ID(主键)
  • ...
  • WIDGET_SHAPE_TYPE_CODE(外键)

这样做的好处是可以移植到其他数据库,并且关系更明显,这意味着维护更简单。

  • +1...@jlafay,外键引用,就像这个答案一样,是正确的方法不要使用枚举;这只会混淆数据并使未来的更改或调试变得更加困难。例如(众多之一):考虑一下在枚举方案中,每次添加、删除或合并类别时都必须重写检查约束。比类别表更新问题要多得多。 (2认同)