2012-05-08 13 views
0

における双方向の関係をキャプチャ:それらの間のシナリオは、私は2つのテーブル持っているのMySQL

関係として記述することができる)
1)ユーザー
2:

ユーザは0以上のシナリオを持つことができる
シナリオはちょうど1人のユーザーに関連付けられる必要があります

1つの方法は、User_Scenario_relsを作成し、ユーザーとシナリオのIDを使用して関係を作成することです。しかしこれはベストプラクティスですか?これは多くの関係に1ですか?

答えて

2

これは「1対多数」の関係です.1つのシナリオには1人のユーザー、1人のユーザーには多数のシナリオがあります。

シナリオテーブルの「user_id」列で一般的にモデル化されます。

現場で実践されているデータベース設計の点では、「ユーザーには0以上のシナリオがある」と「ユーザーには1つ以上のシナリオがあります」という区別はありません。理論的には、すべてのユーザーが少なくとも1つのシナリオを持っていなければならないというルールを適用したい場合は、制約を実装します。

+0

は0以上1以上の違いはありますか? – sachin

0

1つの方法は、User_Scenario_relsを作成してユーザーのIDを使用し、 シナリオテーブルを作成してリレーションシップを作成することです。しかしこれは最高の 練習ですか?これは多くの関係に1ですか?

要件が満たされ、1:nの関係を実装するかどうかは、キーと制約を正しく取得するかどうかによって異なります。これは唯一の方法ではなく、この特定のケースでは、シナリオをユーザーなしで存在させることができます。

create table users (
    user_id integer primary key 
); 

create table scenarios (
    scenario_id integer primary key 
); 

-- Separate table allows users to have zero scenarios. 
create table user_scenarios (
    user_id integer not null references users (user_id), 
    scenario_id integer not null references scenarios (scenario_id), 
    -- This primary key lets each user have multiple scenarios 
    primary key (user_id, scenario_id), 
    -- This unique constraint allows each scenario id number to 
    -- be used only once. (So it's associated with only one user.) 
    unique (scenario_id) 
); 

はネビルKが言ったように、シナリオの表に非NULL可能USER_ID列を含むように、より良い(簡単)です。

関連する問題