如何以规范的方式存储邮政地址和政治分歧?

时间:2012-10-07 10:09:12

标签: database-design street-address

是否可以以规范的方式存储邮政地址和政治部门,以便没有冗余?它适用于任何州,即使每个州都需要自己的结构。

这不仅仅是存储地址。我想附上关于城镇等的其他信息。

2 个答案:

答案 0 :(得分:1)

我能想象的最正常化的方式是你创建像国家这样的表 - >州 - >城市 - >拉链 - >地址。每个“节点”与下一个表有一对多的关系。从与州DDL有一对多关系的国家开始,看起来像这样:

CREATE TABLE countries (
    country_id integer NOT NULL,
    name character varying(80) NOT NULL,
    symbol_3 character(3),  -- i meant ISO-code
    symbol_2 character(2),  -- ISO -code as well
    citizenship character varying(50) -- not obligatory in my case
);

CREATE TABLE states (
    state_id integer NOT NULL,
    country_id integer NOT NULL,
    name character varying(50) NOT NULL
);

CREATE TABLE cities (
    city_id integer NOT NULL,
    state_id integer NOT NULL,
    name character varying(80) NOT NULL
);

CREATE TABLE zips (
    zip_id integer NOT NULL,
    city_id integer NOT NULL,
    number character(5) NOT NULL
);

CREATE TABLE addresses (
    address_id integer NOT NULL,
    zip_id integer NOT NULL,
    street text NOT NULL,
    notes text
);

请记住(连同最佳设计实践)数据库中的大多数属性应声明为NOT NULL,主要是因为性能。

回答你的下一个问题(如果你还没弄清楚)拉链应该存储为字符类型 - 而不是数据库支持的几种数字数据类型之一。为什么?因为你不想在邮政编码的开头填写零或ziros。数字类型只是在数字的前面截断零。

有用的图表显示了我的意思:

http://blog.blueage-software.com/pics/blog-images/ERD_country_province.jpg

答案 1 :(得分:0)

任何都可以以标准化形式存储。像5th Normal Form和Orthogonal of Orthogonal设计这样的工具可以用来消除数据库设计中的某些问题。然而,没有正常形式声称消除所有类型的冗余,也不希望甚至无法实现(信息理论观点是冗余是一段数据中的有用信息)。

您可能会发现派对数据模型很有帮助: http://www.tdan.com/view-articles/5014/