2017-02-23 6 views
0

私はデータベースについて多くの知識を持っていませんが、ここで私は1つを設計しようとしています。通常はシンプルなデータベースを設計できますが、このシナリオは私にとっては非常に混乱しています。ほとんど同じ操作をしている2つのエンティティが結合されているかどうか

レッツは、私が組織、組織のトレーナー独立したトレーナーである3つの主なエンティティを持っていると言います。

私のシステムでは、組織はコースを追加して、追加されたコースに組織のトレーナーを割り当てることができます。組織のトレーナーはコースを追加することはできませんが、レッスンは追加することしかできません。

組織に関係のない独立したトレーナーは、コースを加えてレッスンを追加することができます。

だから私の質問は、ある組織のトレーナーと独立したトレーナーは、このような組み合わせのテーブルが必要です: -

| Organization | 
---------------- 
| id   | 
| name   | 



| Trainer | 
----------- 
| id  | 
| org_id | 
| name | 



| Course |  | Lesson | 
----------------  ---------------- 
| id   |  | id   | 
| org_id  |  | ind_train_id | 
| ind_train_id |  | org_train_id | 
| name   |  | name   | 

それとも、彼らは離れて滞在する必要があります: -

| Organization |  | Organization's trainer | 
----------------  -------------------------- 
| id   |  | id      | 
| name   |  | org_id     | 
         | name     | 



| Independent Trainer | 
----------------------- 
| id     | 
| name    | 



| Course |  | Lesson | 
----------------  ---------------- 
| id   |  | id   | 
| org_id  |  | ind_train_id | 
| ind_train_id |  | org_train_id | 
| name   |  | name   | 

をそれらを組み合わせる必要がある場合、Trainerテーブル(トレーナは独立しています)の外部キーはどうなりますか?他の(組織のトレーナー)がOrganizationテーブルの親キーを持っている間にnullにすることはできますか?このメソッドが実行されると、今後の問題はありますか?

これらを組み合わせてはならない場合、両方のテーブルのすべての列が冗長であるとは限りません(組織の外部キー属性にもかかわらず同じ属性を持つため)。

答えて

1

「外部キーはnullでもかまいません」というルールに基づいて、最初のアプローチを優先します。

そのため、外部キーのnull概念は、このような状況に留意するように設計されています。

最初のアプローチを使用する利点は、余分な1つのテーブルを処理する必要がなく、開発やメンテナンスの時間を大幅に節約できることです。

外部キーに制約がないことを確かめてください。

+0

「外国のキーに関する制約」とは何を意味しますか? Nullはデータがないことを意味しますか? – Kaydarin

+1

nullはデータが正しくないことを意味します。 「外部キーの制約なし」とは、外部キーを作成した後、そのキーにNULLを設定しないように制約を作成しないことを意味します。 –

+0

申し訳ありません....後でデータベースを設定するための注意点...ありがとうございました! – Kaydarin

関連する問題