1

小さな共有データを持つ垂直階層内の複数のテーブルのベスト プラクティスを探しています。3 つのテーブルがあるとします。

Country {
   id 
}

State {
   id,
   country_id,
   FK_to_country_id,
}

City {
   id,
   state_id,
   FK_to_state_id,
}

上記の状態は国に属しますが、都市は州に属し、国にも属します。スキーマはきれいに見えますが、都市が属する国を調べたい場合は、3 つのテーブルで JOIN を使用する必要があります。市に属する郡という別の階層がある場合、状況はさらに悪化します。

City {
   id,
   country_id,
   state_id,
   FK_to_country_id,
   FK_to_state_id,
}

City に別の列 'country_id' を追加すると、面倒な JOIN から解放されますが、データベース スキーマは少し重複します。

実社会での実践とは?

4

1 に答える 1

1

それがJOINs の目的です。彼らの義務を奪わないでください。

実際には、このように複数のテーブルを結合することはまったく普通のことです。

あなたの例では、都市テーブルに国IDを含めることは冗長です。

しかし、常にそうであるとは限りません。都市が州に属していなくても存在できる例を考えてみましょう (多くの第三世界の国には「州」の指定がありません) State。テーブルはオプションであるため、その外部キーの国 ID が必要です。

于 2012-05-23T00:45:08.200 に答える