0

冗長性がないように、住所と政治部門を正規化された方法で保存することは可能ですか?すべての州が独自の構造を必要とする場合でも、すべての州に適用できるはずです。

アドレスを保存するだけではありません。町等の追加情報を添付したい。

4

2 に答える 2

1

私が想像できる最も正規化された方法は、国->州->都市->郵便番号->住所のようなテーブルを作成することです。すべての「ノード」は、次のテーブルと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

于 2012-10-15T22:57:46.750 に答える
0

何でも正規化された形式で保存できます。5thNormalFormやPrincipleofOrthogonal designなどのツールを使用して、データベース設計における特定の種類の問題を排除できます。ただし、すべてのタイプの冗長性を排除すると主張する正規形はなく、そうすることは望ましくなく、達成可能でもありません(情報理論的見解では、冗長性はデータの一部で有用な情報であるということです)。

パーティーデータモデルが役立つ場合があります: http ://www.tdan.com/view-articles/5014/

于 2012-10-07T11:17:33.603 に答える