abstraction - 如果数据由 1 个应用程序使用,则使用数据库表而不是仅硬编码简单的数据列表的好处

标签 abstraction hard-coding

就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the help center为指导。




8 年前关闭。




有一段时间,很多人告诉我,美国各州(和领地)的列表应该存储在数据库表中,并为使用该信息的应用程序缓存。他们给我的唯一原因是促进规范化,因为“我们一直都是这样做的”。

现在,如果由于应用程序的范围在国际范围内扩大(比如包括加拿大省份)而经常更改列表,我可以理解将列表抽象为一个数据表,该数据表也将指示国家/地区标识符。但是,如果列表几乎被锁定并且仅在应用程序的 1 个屏幕上使用,是否值得进行查询和缓存?存储 SMALLINT 外键是否比 CHAR(2) 好得多?它总是实用吗?

只是在思考我在与我合作过的公司中看到的这种趋势。

最佳答案

我把它们放在数据库中,有几个原因:

  • 这只是良好的规范化实践。
  • 如果我可以通过将数据放入数据库来避免这种情况,我为什么要在我的应用程序中对任何数据进行硬编码?
  • 就个人而言,我喜欢保证唯一性属性的舒适性。当两个表指向同一个外键时,我知道它们引用的是同一个东西。当两个碰巧共享相同的两个字符代码时......好吧,这取决于应用程序。
  • 约束检查.... 很多两个字符代码是非法的,但数据库将无法帮助您。拥有非法的外键条目要困难得多。
  • 速度。我没有进行基准测试,所以我可能是错的,但我敢打赌,让数据库为您组合条目比您自己做要快。如果您将州代码用于其他任何事情(例如,获取州的非缩写名称,或维护该州的有效邮政编码列表),则连接可能比您编写的任何内容都快。
  • 关于abstraction - 如果数据由 1 个应用程序使用,则使用数据库表而不是仅硬编码简单的数据列表的好处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/986377/

    相关文章:

    c - 为其他类型重新利用相同的 c ADT

    language-agnostic - 硬编码文字是否可以接受?

    c# - 在没有枚举的情况下在 C# 中实现自己的数据类型?

    hard-coding - 硬编码到底是什么?

    java - AbstractActions 的枚举集包装器

    javascript - 将全局变量抽象为属性?

    ruby - 为什么数字不支持 .dup?

    c# - 使用通用参数获取接口(interface)的具体实现

    c# - 通过从 C# 应用程序获取 DBName 创建 DB