【问题标题】:Storing geopolitical data in mysql在mysql中存储地缘政治数据
【发布时间】:2018-06-12 21:18:00
【问题描述】:

我的应用程序有用户和属性,两者都可以有地址。此应用程序也将进行大量分析,我们需要能够获取属于特定城市、邮编、县或州的所有地址。

存储国家、州和县很容易,因为一个州正好属于 1 个国家,而一个县正好属于 1 个州。

但是,在存储邮政编码和城市时,问题变得有点复杂。一个州可以有多个邮政编码,一个邮政编码可以属于多个州。邮政编码和城市也可以属于多个州/县。哎呀,一些城市和邮编甚至可能不属于华盛顿特区这样的任何县。

是否有一个既定的数据库模型可以用来确保我考虑所有边缘情况,同时允许按每种类型进行查询?

【问题讨论】:

  • 有,但这是个秘密,
  • 大声感谢您的有用评论
  • 这只是一个database normalization 问题,整个图书馆都有关于这个主题的书籍。没有数据库模型可以解决所有边缘情况,因为根据定义,您的架构可以容纳的东西总是有优势的。您只需将优势设置得足够远,无论您遇到的任何问题对您的用户来说都不是问题。
  • 请记住,“县”不是一个普遍的概念,即使在美国国内也不行。一些州以不同的方式划分事物。美国的一些地方本身甚至不是州,它们是领土或地区或财产,或者甚至根本不是地方,就像军事地址一样。
  • 洛杉矶有教区,AK 有自治市镇,旧金山既是城市又是县......

标签: mysql database-design street-address zipcode


【解决方案1】:

但是,当存储邮政编码和城市时,问题变得有点 更复杂。

首先您需要创建国家、城市、州和邮政编码。

很明显,States 和 Zip_codes 实体之间存在 M:M 关系,因此您需要创建一个新表,我们将其命名为 States_Zip_codes,其中包含两个外键 State_id FK 和 Zip_Id as FK。

一个邮政编码和城市也可以属于多个州/县。

在这种情况下,关系是一对多的,因此 Zip_code_id(Zip_codes 表的主键)是 States 表中的 FK 等等。

我不明白关系的本质是多对多或一对多

一些城市和邮编甚至可能不属于任何县,例如 华盛顿特区

所以在 city_name 字段(属性)中,它将为空

希望对您有所帮助。 .

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-25
    • 2011-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-02
    相关资源
    最近更新 更多