Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 国家、城市、州、邮政编码表设计_Sql Server_Database_Database Design_Entity Relationship - Fatal编程技术网

Sql server 国家、城市、州、邮政编码表设计

Sql server 国家、城市、州、邮政编码表设计,sql-server,database,database-design,entity-relationship,Sql Server,Database,Database Design,Entity Relationship,我有一个数据库,其中有国家,城市,州,邮政编码在一个表中,有大量的记录。我希望规范化数据库结构,以避免冗余并消除任何数据重复。我是否应该拆分数据库并为国家、城市、州和邮政编码制作单独的表 或者在地址表中合并国家、城市、州、邮政编码?以下表格可用于北美的地址。县(也包括教区和其他类似的地理分区)以美国为中心 在地址表中,我允许城市id和县id为空,因为根据的注释,您可以在城市或县,但不能同时在弗吉尼亚州。应用程序代码需要强制执行至少一个字段不为空的规则 addresses id

我有一个数据库,其中有国家,城市,州,邮政编码在一个表中,有大量的记录。我希望规范化数据库结构,以避免冗余并消除任何数据重复。我是否应该拆分数据库并为国家、城市、州和邮政编码制作单独的表


或者在地址表中合并国家、城市、州、邮政编码?

以下表格可用于北美的地址。县(也包括教区和其他类似的地理分区)以美国为中心

地址
表中,我允许
城市id
县id
,因为根据的注释,您可以在城市或县,但不能同时在弗吉尼亚州。应用程序代码需要强制执行至少一个字段不为空的规则

addresses
    id              unsigned int(P)
    street          varchar(50)
    extended        varchar(50) // Default NULL
    city_id         unsigned int(F cities.id) Default NULL
    county_id       unsigned int(F counties.id) Default NULL
    zip             varchar(6) // Will handle all north American zips
    zip4            char(4) // Default NULL
    lat             decimal(10,8) // Allows for ~1mm accuracy at equator. Default NULL
    lon             decimal(11,8) // Allows for ~1mm accuracy at equator. Default NULL

cities
    id                  unsigned int(P)
    state_id            unsigned int(F states.id)
    name                varchar(45)
    fips                unsigned int // Default NULL
    census_code         unsigned int // Default NULL
    census_class_code   char(2) // Default NULL
    gsa_code            unsigned int // Default NULL
    opm_code            unsigned int // Default NULL
city\u id
country\u id
构成主键,是各自表的外键

cities_counties
    city_id             unsigned int(F cities.id) ---\_(P)
    county_id           unsigned int(F counties.id)--/

counties
    id                  unsigned int(P)
    state_id            unsigned int(F states.id)
    name                varchar(50)
    fips                unsigned int // Default NULL

看,还有


下表可用于北美的地址。县(也包括教区和其他类似的地理分区)以美国为中心

地址
表中,我允许
城市id
县id
,因为根据的注释,您可以在城市或县,但不能同时在弗吉尼亚州。应用程序代码需要强制执行至少一个字段不为空的规则

addresses
    id              unsigned int(P)
    street          varchar(50)
    extended        varchar(50) // Default NULL
    city_id         unsigned int(F cities.id) Default NULL
    county_id       unsigned int(F counties.id) Default NULL
    zip             varchar(6) // Will handle all north American zips
    zip4            char(4) // Default NULL
    lat             decimal(10,8) // Allows for ~1mm accuracy at equator. Default NULL
    lon             decimal(11,8) // Allows for ~1mm accuracy at equator. Default NULL

cities
    id                  unsigned int(P)
    state_id            unsigned int(F states.id)
    name                varchar(45)
    fips                unsigned int // Default NULL
    census_code         unsigned int // Default NULL
    census_class_code   char(2) // Default NULL
    gsa_code            unsigned int // Default NULL
    opm_code            unsigned int // Default NULL
city\u id
country\u id
构成主键,是各自表的外键

cities_counties
    city_id             unsigned int(F cities.id) ---\_(P)
    county_id           unsigned int(F counties.id)--/

counties
    id                  unsigned int(P)
    state_id            unsigned int(F states.id)
    name                varchar(50)
    fips                unsigned int // Default NULL

看,还有


每个字段有多少个副本?你可以将其标准化到街道级别,但如果没有数据的指示,就不可能给出建议。另外,了解应用程序也很重要——找到每个居住在某个邮政编码中的人对简单地存储用户的地址有不同的要求。在一个国家有100万用户,在一个城市有3个5万用户,与州、邮政编码的情况类似。我遵循这个建议,在不知道数据库中的数据的情况下设计数据库是非常困难的。你应该比较你将获得的空间和速度,以及你将增加的复杂性。你会访问多少次这些值,你会每次都使用它们,还是只在城市使用一次,只在州使用一次。。。。每列一个表意味着每个地址每列一个联接和一个索引搜索。每个字段有多少个重复项?你可以将其标准化到街道级别,但如果没有数据的指示,就不可能给出建议。另外,了解应用程序也很重要——找到每个居住在某个邮政编码中的人对简单地存储用户的地址有不同的要求。在一个国家有100万用户,在一个城市有3个5万用户,与州、邮政编码的情况类似。我遵循这个建议,在不知道数据库中的数据的情况下设计数据库是非常困难的。你应该比较你将获得的空间和速度,以及你将增加的复杂性。你会访问多少次这些值,你会每次都使用它们,还是只在城市使用一次,只在州使用一次。。。。每列一个表意味着每个地址每列一个连接和一个索引搜索。仅供将来可能考虑使用此模型的读者使用。即使是在美国,也不是所有的城市都有县,也不是所有的县都有市,所以要警惕cities\u countries表,并始终让其加入。在弗吉尼亚州,根据法律,你要么在一个城市,要么在一个县,你不能同时在这两个城市。这是民权时代遗留下来的遗产,他们利用法律将学校隔离开来。@HLGEM-谢谢你的附录!我自己使用过县信息是非常罕见的,但我在这样的帖子中包含了县信息,因为有人可能需要它。这只是为了将来可能会考虑使用这种模式的读者。即使是在美国,也不是所有的城市都有县,也不是所有的县都有市,所以要警惕cities\u countries表,并始终让其加入。在弗吉尼亚州,根据法律,你要么在一个城市,要么在一个县,你不能同时在这两个城市。这是民权时代遗留下来的遗产,他们利用法律将学校隔离开来。@HLGEM-谢谢你的附录!这是非常罕见的,我曾经使用县信息自己,但我把它包括在这样的帖子,因为有人可能需要它。