0

是否可以以标准化的方式存储邮政地址和政治部门,从而避免冗余?它应该适用于任何州,即使每个州都需要自己的结构。

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

4

2 回答 2

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,主要是因为性能。

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

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

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

于 2012-10-15T22:57:46.750 回答
0

任何东西可以以规范化的形式存储。第五范式和正交设计原则等工具可用于消除数据库设计中的某些类型的问题。然而,没有范式声称可以消除所有类型的冗余,这样做也不是可取的,甚至是不可实现的(信息论的观点是冗余是一条数据中的有用信息)。

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

于 2012-10-07T11:17:33.603 回答