1

私のプロジェクトには、求人情報を保持する Job テーブルがあります。すべてのジョブを対象にすることができます(この情報は JobLocations に保存されます)

  1. 例: (id = 1 , idCountry = US, idRegion = null, idCity = null, idJob=3)
  2. 1 つの地域のみ、地域全体で指定します。例: (id = 2, idCountry = US, idRegion = TX, idCity=null, idJob=5)
  3. またはより具体的には、現在の国の複数の都市を参照できます->地域
    (id = 3、idCountry = US、idRegion = TX、idCity=78、idJob=7)
    (id = 4、idCountry = US、idRegion = TX、 idCity=200、idJob=7)

私が作成したいくつかのテーブルはこれらです。 Job Locations http://imageshack.us/a/img267/5530/joblocations.png しかし、テーブル JobLocations の推移的な依存関係に問題があることがわかります。たとえば、idCountry を変更すると、idRegion または idCity が変更されます。

推移的な依存関係を削除し、上記のポイント 1、2、3 を達成するには、他にどのようなオプションが必要ですか?

4

1 に答える 1

0

これを解決する 1 つの方法は、各地域に 2 つの「特別な」都市を作成することです。1 つは「地域のどこでも」を意味し、もう 1 つは「国内のどこでも」を意味します。市区町村コードはJobLocations、その仕事の地域性 (必要に応じて) を示すのに役立ちます。

特別な都市を区別するには、それらを何らかの方法でエンコードするか (負の ID など)、より正確にはCity、結合によって検索するタイプ列を追加します。

特別な都市を設定したら、地域と国の FK 列を から削除できますJobLocations

ところで、もし私があなただったら、国、地域、都市の id 列を削除します。それらは無駄なオーバーヘッドであり、重複した名前を許可することでエラーを招きます。 JobLocationsIDも必要ありません。列として JobID と City だけがあり、主キーには両方が含まれます。

2 つの国で仕事をすることはできないという規則を施行するのは困難です。大まかに言うトリガーが必要ですcount(city) < 2 where type in ('country','region')。それよりも複雑ですが、説明するルールはすべて 1 つのSELECTステートメントとして表現できます。

于 2013-03-14T05:46:14.550 に答える