将类别存储在数据库中还是使用硬编码整数?

Kev*_*era 5 performance best-practices query-performance

地址可以属于邮寄或计费类别。

当用户向表中添加地址时,地址类别应该是由源代码中某处的常量设置的独立整数值,还是应该是列出可用类别的表的外键?

我关心性能和最佳实践。

添加或删除类别的机会微乎其微。

bil*_*nkc 7

性能是一个很好的考虑因素,但我发现担心其他成本(如数据质量)很有帮助。参照完整性确保不会分配值列表中没有匹配项的值。每个人都知道 1 是邮寄,2 是计费,一块馅饼。FNG 加入并进行代码更改,哎呀,我们现在有地址类型为 12 的地址。我们已经遇到这个问题 2 个月了,客户很生气,因为他们没有收到他们的产品,他们正在填写向 BBB 投诉。当他们试图将这些错误值推送到数据库时,RI 会导致应用程序崩溃。

“这里没有人会犯这个错误。” 很好,该应用程序成功并带来了很多钱。最终有人会想要了解更多关于正在发生的事情。我们需要报告,是的,我们还说我们需要在上周之前完成所有这些新功能。因此,现在无论您在何处嵌入了 1 是计费和 2 是邮寄的知识,您都需要在向最终用户提供的报告内容(Excel、传统报告系统、临时查询等)中重复,以使他们满意. 现在您已经在两个地方获得了该逻辑,因此对该逻辑的任何更改都必须跨两个系统传播。

每次你在系统间携带这样的逻辑只会增加你的技术债务。也许您的系统永远不会像那样增长并且将逻辑嵌入应用程序代码中很好,但我发现实现永生的最快方法是实施快速修复。

哦,你有没有注意到我改变了报告示例中的值?你带来的 FNG 可能会犯这样的菜鸟错误,谁知道要花多长时间才能抓住这个错误。

  • 您*可以*同样通过检查约束作为 FK 约束来强制执行此操作。第二种表方法往往更方便查询和更新 IMO 但[不是每个人都喜欢](http://weblogs.sqlteam.com/davidm/archive/2004/02/17/882.aspx) (3认同)