10

国、都市、州の表の設計についてサポートが必要です。問題解決に役立つように、テーブルからサンプル データを提供します。

これは私の国のテーブルです:

Country
______
code   name
US     United States
SG     Singapore
GB     United Kingdom

これは私の市のテーブルです:

City
_____
id   country   city        state
1    US        Birmingham  Alabama
2    US        Auburn      Alabama
.
.
29   GB        Cambridge   NULL
30   GB        Devon       NULL

私の問題は、州フィールドを持つ唯一の国が米国であることです。他のすべての都市には null 値があります。

これに対する私の一時的な解決策は、米国用の特別な都市テーブルを作成することです。その後、他のすべての国には州フィールドを持たない別の都市テーブルがあります。

都市には 2 つのテーブルがあるため、これは問題を複雑にするだけだと思います。

このデザインを改善するにはどうすればよいですか?

4

3 に答える 3

8

リレーショナルになってみませんか?

Country ( CountryID, CountryCode, CountryName )
Region  ( RegionID, RegionCode, RegionName, CountryID )
City    ( CityID, CityCode, CityName, RegionID )

「地域」という名前は、州よりもはるかに一般的です。つまり、どこでも意味をなす可能性が高いということです。

于 2012-06-10T18:40:32.830 に答える
6

標準的な 3 ウェイ リンク テーブル セットではないのはなぜですか。

table country (
   id   int primary key,
   name varchar(255)
);

table state (
    id int primary key,
    name varchar(255),
    country_id int foreign key country (id)
);

table city (
    id int primary key,
    name varchar(255)
    state_id int foreign key state (id)
);

これは、2 つの州境にまたがるサスカチュワン州ロイドミンスターのようないくつかの退化したものを除いて、ほとんどの場合に有効です。

于 2012-06-10T18:39:00.747 に答える
1

米国以外にも、国レベルと地方自治体レベルの間に政治的分裂がある国はたくさんあります。オーストラリアには州があり、カナダには州があり、日本には都道府県があります。

問題は、この情報をどのように追跡し、一貫性を保つかです。ダミーレコードがない国では、中間レベルで「ダミーレコード」を持つことができます。これを処理する別の方法は、アドレスを含むエンティティまでのすべてのレベルに外部キーを非正規化することです。国と都市が必須の場合、それらの外部キーは null 許容ではありませんが、州の FK は null 許容になる可能性があります。

非正規化ルートに進む場合は、外部キーが互いに一貫していることを確認するためのアプリケーション ロジックが必要になります。

ダミーの州レコード ルートを使用する場合は、ダミー レイヤーがユーザー インターフェイスでユーザーから隠されるようにするためのアプリケーション ロジックが必要になります。

于 2012-06-10T18:44:12.270 に答える