冗長性がないように、住所と政治部門を正規化された方法で保存することは可能ですか?すべての州が独自の構造を必要とする場合でも、すべての州に適用できるはずです。
アドレスを保存するだけではありません。町等の追加情報を添付したい。
冗長性がないように、住所と政治部門を正規化された方法で保存することは可能ですか?すべての州が独自の構造を必要とする場合でも、すべての州に適用できるはずです。
アドレスを保存するだけではありません。町等の追加情報を添付したい。
私が想像できる最も正規化された方法は、国->州->都市->郵便番号->住所のようなテーブルを作成することです。すべての「ノード」は、次のテーブルと1対多の関係にあります。州と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
);
(最良の設計手法とともに)データベース内の属性の大部分は、主にパフォーマンスのために、NOTNULLとして宣言する必要があることに注意してください。
そして、次の質問に答える(まだ理解していない場合)zipは、データベースでサポートされているいくつかの数値データ型の1つとしてではなく、文字型として保存する必要があります。なんで?郵便番号の先頭にゼロやジロを入れたくないからです。数値タイプは、数値の先頭にあるゼロを切り捨てるだけです。
以下に私が何を意味するかを示す便利な図:
http://blog.blueage-software.com/pics/blog-images/ERD_country_province.jpg
何でも正規化された形式で保存できます。5thNormalFormやPrincipleofOrthogonal designなどのツールを使用して、データベース設計における特定の種類の問題を排除できます。ただし、すべてのタイプの冗長性を排除すると主張する正規形はなく、そうすることは望ましくなく、達成可能でもありません(情報理論的見解では、冗長性はデータの一部で有用な情報であるということです)。
パーティーデータモデルが役立つ場合があります: http ://www.tdan.com/view-articles/5014/