2010-08-11 60 views
1

我正在与网上商店合作,目前产品是否可用,以及是否通过产品表上的int字段启用。分离到不同的表或使用枚举类型?

他们希望我为此添加更多内容,例如“库存与供应商”,“缺货,x天内出货”等。我正在考虑放弃旗帜,并创建一个枚举类型的状态字段,其中'可用','缺货','未来很快',停产'等。

这样做的最好方法是什么?将枚举类型添加为产品上的新列?

我被告知应该添加一个名为Status的单独表,并在产品表中有一个外键引用,以便将来更易于更改。我不确定情况如何,因为枚举类型似乎很容易改变。您可以添加它,从中删除并重命名项目。

回答

0

带有FK的表格会占用硬盘空间少一点,但我更喜欢使用Enum类型。这种差异通常很小,并且不会超过标准化的性能优势。

2

如果您预计会更改枚举,则应该使用单独的表格。 INSERT或UPDATE比ALTER更便宜。

此外,请考虑如何确定该字段的可接受值。如果它是枚举,则必须对选项进行硬编码或检查数据库模式。如果它位于单独的表格中,则可以选择填充选项列表。

+0

它会如何不那么有效?这将导致每个产品的加入声明,而不是插入和未来几年之间的差异..? 我喜欢验证的重点,可能以这种方式作为验证和填充表单的更简单方法。这意味着(希望)未来增加一个新的地位只是一个新的行。 – Richard 2010-08-11 06:45:04

+1

@Richard增加的费用是在应用程序中,而不是数据库。如果您改变枚举,则必须搜索代码以更改引用枚举的任何代码以反映架构的更改。使用JOIN的代码将按原样运行。 – cbednarski 2010-08-11 07:05:57