2016-03-29 7 views
2

EER図継承

scenario

以下のよう譲受人及び割当は、開発者とテスターのキーです。 emp_idを重複しないで外部キーとしてマップする方法は?

+0

あなたはデザイン/モデルを自分で思いついたことがありますか?あなたはここでそれを共有できますか? – AKS

+0

私は唯一できることは、各テスターと開発者自身の主キーを宣言することだと思いました。 –

+1

回避しようとしている複製の例を挙げることはできますか?私は設計上問題はないと思っています。「代理人」と「譲受人」は関連する「emp_id」を含むべきです。 – reaanb

答えて

0

これらは主に従業員のための役割をしている - 開発者、テスター、ビジネスアナリストなどの1つの方法は、各ロールタイプに複数のテーブルを持つことである - あなたはDeveloperTesterなどのようなテーブルを持ってしまうので、あなたはEmployeeIDを持っていますフィールドをforeign keyからEmployeeに変更します。

他のアプローチが可能(と私はそれをお勧めします)あなたはEmployeeを持つことができ、各ロールのレコードを持っているEmployeeRoleと呼ばれる1つのテーブルを持っています。このようにして、新しい役割を果たすたびに新しいテーブルを作成する必要はありません。 EmployeeRoleテーブルに新しいレコードを追加するだけの場合があります。これは、Employeeが複数の役割を果たしているシナリオにも対応します。開発者とテスターは異なる問題に取り組んでいます。

+0

しかし、私は、従業員IDを使ってissueテーブルに2つの外部キーを持っている必要があります。私はそれがまだ質問であることを達成する –

+0

Employeeテーブルを直接参照するのではなく、 'EmployeeRole'テーブル(' EmployeeRoleID'カラム)を参照しなければならず、 'Employee'テーブルを参照する必要があります。だからあなたのクエリは、このようなものになり、問題の 'Employee'の詳細を取得します。 \t' SELECTのEmpを* \t私は \t登録しよI.TesterID = ER.EmployeeRoleID \t ON EmployeeRole ERを登録しよう \t発行による従業員EMP ON ER.EmployeeID = EMP.EmployeeID' – AKS

+1

あなたの「解決策」では、参照整合性を強制することができず、サロゲート・キーを乱用して所定のアクセス・パスを作成します。 – reaanb

0

をご覧ください。この手法を使用すると、テスター・テーブルと開発者テーブルの主キーとしてemp-idを使用できます。また、employeeテーブルを参照する外部キーとしても使用できます。これは、IS-A関係を実装する際の一般的なプラクティスです。