0

「States」と「Districts」の関係を 2 つの方法で実装するのを見てきました。

州と地区の関係は、それぞれ 1 対多の関係です。

最初の方法:


この実装では、2 つのテーブル "States" と "Districts" を取得し、Districts テーブルに外部キーを配置することで、States と Districts の間の 1 対多の関係を実装します。

 In my   "States" table the columns are:  state_id(pk) &  state_name.

 In my   "Districts" table the columns are:  district_id(pk)  district_name   state_id(fk).

第二の方法:


  In this implementaion,take two tables "States" and "Districts" and implement the one to   many relationship between States to District as creating  the third table  "state_district" and implementing as follows.

私の「States」テーブルの列は、state_id(pk) & state_name です。

私の "Districts" テーブルの列は、district_id(pk) district_name です。

3 番目のテーブルは「state_district」で、列は s_did(pk)、district_id(fk)、state_id(fk) です。

これら 2 つのメカニズムの違いは何ですか。

4

6 に答える 6

3

違いは、最初のケースでは地区ごとに 1 つの州しか存在できないのに対し、2 番目のケースでは地区ごとに多くの州が存在できることです。

どちらを使用するかは、地区が複数の州に関連付けられるかどうかに完全に依存します。可能であれば、2 番目の多対多モデルを使用する必要があります。実際には 2 番目のモデルを使用することができない場合、そうするのは正しくありません。最初の 1 対多モデルを使用する必要があります。

于 2013-10-28T13:00:16.853 に答える
2

1対多の関係の場合、テーブルの主キーを別のテーブルの外部キーとして使用します-この場合、これが最初のアプローチであり、正しいです

多対多の関係の場合、最初の 2 つのテーブル間の関係を格納するために 3 番目のテーブルを使用します。

于 2013-10-28T11:15:00.320 に答える
2

これら2つのメカニズムの違いは何ですか。

違いは、2 番目の方法では、地区を複数の州に関連付けることができることです。これを行うには、3 番目のテーブルの特定の地区に別の行を追加するだけです。

INSERT INTO state_district (district_id, state_id) VALUES
 (1234, 49), (1234, 50);

これで、同じ地区 1234 がアラスカ (49) とハワイ (50) の両方に関連付けられました。

これは本当に必要ないと思います。実際には、各地区が 1 つの州に属していることを確認する方が適切です。州と地区の間には、1 対多の関係のみが必要です。したがって、最初のデザインを使用する必要があります。

于 2013-10-28T13:12:53.957 に答える
1

州と地区の間に多対多の関係がある場合は、2 番目の方法を実行する必要があります。

最初の方法は正しいので、実装する必要があります。

于 2013-10-28T11:07:45.297 に答える
0

次のテーブル構造を提案します。

States: --don't need extra metadata such as the sequence generated value  
state_name varchar2(50) PRIMARY KEY

Districts:  -- don't need extra metadata
district_name varchar2(100) PRIMARY KEY

State_Districts
state_name varchar2(50)
district_name varchar2(100)  
primary key (state_name,district_name)

これにより、ワイオミング州とペンシルバニア州の地区名が同じであるかどうかに関係なく、実際の一意の識別子である重複district namesがなくなり、データは互いに独立しています。これにより、3 つのテーブルのいずれにも null 値が存在しないことが保証されます。これは、正規化手法を考えるときに非常に重要です。

于 2013-10-28T13:05:05.590 に答える
0

2 つのテーブルの最初のテーブル定義から、District テーブルに州 ID フィールドがあることがわかります。これは、州ごとに 1 つ以上の地区があることを示しています。この場合、3 番目のテーブルは冗長になります。

于 2013-10-29T13:16:26.097 に答える