是否可以以规范的方式存储邮政地址和政治部门,以便没有冗余?它适用于任何州,即使每个州都需要自己的结构。
这不仅仅是存储地址。我想附上关于城镇等的其他信息。
答案 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/