我应该将参考表值作为枚举存储吗?

时间:2016-11-11 22:00:27

标签: c# mysql enums

假设我有两张桌子,一张将带有外键的汽车存放到另一张存放品牌的参考表。什么是更好的做法...创建枚举并使car属性成为枚举类型,或从表中加载品牌对象列表?

乍一看,我认为让品牌从表中加载是更好的,因为如果添加新品牌,它不需要更改代码(对于枚举)。但从性能的角度来看,每次我需要找出所有可能的品牌时(例如在验证中),我都必须调用数据库,这可能很昂贵。

什么是好的做法?

`Car {
int SerialNumber;
(int or enum?) BrandId;
string Owner;
DateTime Year;
}`

`(class or enum?) Brand {
int Id;
string Name;
}`

2 个答案:

答案 0 :(得分:1)

我远离MySQL的枚举;向枚举字段添加新值需要ALTER TABLE,这有时需要对整个表进行昂贵的重建。

另外,请考虑您是否真的希望品牌成为代码中的枚举。你是否真的想在每次有新品牌时重新编译和重新部署?

即使你确定"重新编译和重新部署"正确的答案,没有什么可以防止您只是拥有应用程序本身(或它的安装程序/设置)确保品牌查找表对应于您的代码中的枚举(只是确保明确指定枚举值'值,并且查找表的id不是auto,以防止不匹配

要考虑枚举的最后一件事:如果您有多个不同的客户端,则需要在所有客户端保持枚举同步。代码库。

答案 1 :(得分:0)

如果您的商业逻辑对于不同品牌而言是不同的,那么将它放在代码中可能会更好。确保所有数据库中特定品牌的ID相等。在这种情况下,请检查重构,例如"将类型代码替换为子类"。如果您不在代码中使用id来更改某些逻辑,则可以将品牌放在数据库中。您可以缓存值以获得更好的性能。我猜品牌经常不会改变。