2017-06-16 5 views
1

私は次のような状況があります。
- クライアント(ID)
- 契約(ID、クライアントID)
- ClientEmployee(ID、ClientIdの)この関係をリレーショナルデータベースでモデル化する方法は?

クライアントは、多くの契約を持つことができ、クライアントは多くを持つことができますがClientEmployees。

契約の場合は、それに取り組むClientEmployeesを関連付ける必要があります。

私のソリューションは、現時点では簡単なものです。ここでは、契約とClientEmployeesの間に多対多の の関係を構築しています。
- ContractClientEmployee(ID、のContractID、ClientEmployeeID)

この設計では、エラーとなり、他のクライアントの契約に関連するClientEmployeeを防止する(データベース設計レベルで)方法がないのコース。

私はスキーマにこのさらなる制約をキャプチャする「ベター」ソリューション、存在しなければならないことを感じるが、私はどのように... :-(

UPDATE把握することはできません:私は有効で、非常に良い2を受け私がレンゾのものを受け入れたのは、それが最初に来たからです...申し訳ありませんが、本当にありがとうございました。

+0

[無関係なテーブル間の整合性を保証する方法](https://stackoverflow.com/questions/43413488/how-do-i-ensure-integrity-between-nrelated-tables/43416765#43416765)への私の答えを参照してください。 – reaanb

+0

うわー...それは複雑に見えます! :-)私はそれをよく読む時間が必要です...現時点では、ありがとう!私が思うことを教えてくれる! – Andrea

答えて

0

ここには考えられる解決策がありますContractおよびEmployeeの主キーとして、クライアントの主キーによって形成される複合キーと、クライアント内の異なる契約および従業員を区別するために使用される数値を定義することです。

Client(ClientId, ClientData), 
    primary key ClientId 
Contract(ClientId, ContrNum, ContractData) 
    primary key (ClientId, ContrNum) 
    ClientId foreign key for Client 
Employee(ClientId, EmplNum, EmplData) 
    primary key (ClientId, EmpNum) 
    ClientId foreign key for Client 
EmployeeContract(ClientId, EmpNum, ContrNum) 
    primary key (ClientId, EmpNum, ContrNum) 
    (ClientId, EmpNum) foreign key for Employee 
    (ClientId, ContrNum) foreign key for Contract 

このように、データ間の整合性が異なる外部キーを介してデータベースレベルで維持されている:あなたはEmployeeContractのために新しいレコードを挿入すると、これは確かに契約があるため、同じクライアントのために働く従業員になります規定されている。

+0

これは本当に面白いですね!私はそのような解決策の意味を考えなければなりませんが、あなたは既に役に立つと思っています。あなたに感謝しています。ありがとうございました。ニュアンス... ;-) – Andrea

0

どの契約についても、私はそれに取り組むClientEmployeesを関連付ける必要があります。

上記の文章は、契約とClientEmployeesの間に1対多の関係を意味している場合、ClientEmployeeであなたは、クライアントIDの代わりにのContractIDを使用することができます。この場合は

- Client (ID) 
- Contract (ID, ClientID) 
- ClientEmployee (ID, ContractID) 

をあなただけあった場合にClientEmployeeを定義することができますクライアントの契約です。

あなたのケースでうまく動作するかどうかを今すぐ教えてください。

+0

いいえ、clientemployeeは特定のクライアントである必要があり、クライアントに関連付けられていないコントラクトでは動作しないため... – Andrea

関連する問題