【问题标题】:Should I store US States in my database or a PHP array?我应该将美国各州存储在我的数据库中还是 PHP 数组中?
【发布时间】:2012-09-14 23:15:55
【问题描述】:

我应该如何存储州和国家/地区?

选项 1) 我可以创建一个名为 states 的数据库表,并具有“id”、“state”和“state_abbr”。然后我可以在 users 表中通过 'id' 引用它。

选项 2)我可以创建一个 PHP 数组并使用它来填充状态下拉菜单,并完全避免查询数据库。数组的键是该用户在数据库中插入的值。

状态不会改变,因此数据应该是静态的。存储这些信息的最佳方式是什么?为什么? PHP数组不会更快吗?为什么看起来数据库是最好的存储方式呢?

想法?

【问题讨论】:

  • 我使用 PHP 数组...随便。
  • 如果状态也被保存为数据库中其他记录的一部分,那么 yes -- with 适当的引用约束。如果不是,那么我认为一种方法相对于另一种方法没有特别的优势。我不会担心这里的“速度”。如果需要,还有其他机制可以解决这个问题。
  • 将其存储在数组中会更快,但使用数据库更加通用,并且可以轻松导出和导入数据以及对其进行操作。
  • 如果德州决定独立,你们的更新政策会是什么样子?
  • 如果数据是纯静态的,我倾向于远离数据库,因为数据库总是会成为 瓶颈,但正如@pst 指出的那样,这取决于你需要这些数据来做什么。

标签: php mysql database arrays


【解决方案1】:

一位聪明的数据库设计师曾经告诉我,“你所知道的关于状态代码的一切都是错误的。”

  • 这些是两个字母的代码,而不是缩写。 (The abbreviation for California 是“Calif.”,Ohio 的缩写是“Ohio”。)
  • There are more than 50 of them
  • 并非所有的两个字母代码都表示状态。它们还指“属地”,例如“密克罗尼西亚联邦”和“帕劳”。
  • 它们不是唯一的。一个由两个字母组成的代码 AE 是指四个不同的军事“国家”(欧洲武装部队、加拿大武装部队、中东武装部队和非洲武装部队)。
  • 军事“州”代码可能会随着部队兵力的变化而变化。向非洲派遣数十万军队,您可能会看到“非洲武装部队”的代码从“AE”变为“AF”。
  • 还有十几个地区尚未出现在此列表中。其中一些具有战略意义(威克岛、中途岛等),它们的地位很容易改变。

鉴于您不太可能了解 USPS 州代码等常见事物的所有这些信息,因此将它们存储在表格中更有意义。表在运行时比 PHP 数组更容易维护。

【讨论】:

  • 您可以简单地说“将它们存储在表中是有意义的”:)
【解决方案2】:

因为数据库是最好的存储方式。

如果明年贵公司决定走向国际怎么办? 所以现在你需要国家和国家的依赖下拉列表。

所以你需要添加欧洲,然后是非洲。那是大量的国家,以及大量的州。您将需要一个大阵列。

那么你的老板想要一份按国家/地区的报告。

如果您将所有内容都保存在数据库中,则管理起来会容易得多。

【讨论】:

    【解决方案3】:

    我知道这是旧的,但以防其他人想知道同样的事情。我目前正在设计应用程序,为了确保数据完整性,我想创建一个国家和州表。我也有城市,但我会让用户在输入地址时填写我认为的内容。

    现在我这么说,因为在某个时候,我确实希望我的申请能够走向国际。

    所以,我当前的国家数据库有 249 条记录。 (我删除了一些没有人口的)

    另一方面,州有点困难,因为并非每个国家都将它们称为州。 (有州、省、部门、教区、领地、地区、地区,也许还有其他一些。)但该表目前包含 3438 条记录。

    现在我可能会浪费我的时间来研究这些信息,因为甚至可能有一个在线数据库,我可以简单地使用某种 API 来引用它,但现在我从一个叫做iso 3166(国家为-1,国家为-2。(我相信))

    所以现实是,我可能永远不会看到其中一些国家的业务,但他们现在就在那里。

    我还创建了一个表格,用于正确格式化货币值。这也有点困难,因为我只喜欢少数人需要的信息。

    但当您必须考虑不同国家/地区的信息差异时,数据库设计似乎变得有些复杂。

    但要最终回答您的问题,如果您仅在美国开展业务,硬编码或使用数据库会起作用,但州确实会发生变化。虽然我们添加新状态已经有一段时间了,但它确实发生了,并且可能很快会再次发生。所以数据库会更容易管理我认为任何改变。另外,如果您决定显示与该州相关的其他信息,您只需添加一些列,您的所有引用都会显示该信息。

    我的观点是不要在代码中硬编码数据,但我不是专业人士。即使是你认为永远不会改变的事情,比如性别,也证明了它也可以随着人们现在提出的所有这些跨性别术语而改变。

    【讨论】:

      猜你喜欢
      • 2021-06-27
      • 1970-01-01
      • 2011-01-16
      • 2011-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-06
      • 1970-01-01
      相关资源
      最近更新 更多