における双方向の関係をキャプチャ:それらの間のシナリオは、私は2つのテーブル持っているのMySQL
関係として記述することができる)
1)ユーザー
2:
ユーザは0以上のシナリオを持つことができる
シナリオはちょうど1人のユーザーに関連付けられる必要があります
1つの方法は、User_Scenario_relsを作成し、ユーザーとシナリオのIDを使用して関係を作成することです。しかしこれはベストプラクティスですか?これは多くの関係に1ですか?
における双方向の関係をキャプチャ:それらの間のシナリオは、私は2つのテーブル持っているのMySQL
関係として記述することができる)
1)ユーザー
2:
ユーザは0以上のシナリオを持つことができる
シナリオはちょうど1人のユーザーに関連付けられる必要があります
1つの方法は、User_Scenario_relsを作成し、ユーザーとシナリオのIDを使用して関係を作成することです。しかしこれはベストプラクティスですか?これは多くの関係に1ですか?
これは「1対多数」の関係です.1つのシナリオには1人のユーザー、1人のユーザーには多数のシナリオがあります。
シナリオテーブルの「user_id」列で一般的にモデル化されます。
現場で実践されているデータベース設計の点では、「ユーザーには0以上のシナリオがある」と「ユーザーには1つ以上のシナリオがあります」という区別はありません。理論的には、すべてのユーザーが少なくとも1つのシナリオを持っていなければならないというルールを適用したい場合は、制約を実装します。
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列を含むように、より良い(簡単)です。
は0以上1以上の違いはありますか? – sachin