0

割り当てテーブルと従業員テーブルがあります。割り当てを既存の従業員と既存のプロジェクトに関連付けたいと考えています。1 つは従業員テーブルから、もう 1 つはプロジェクト テーブルからの 2 つの主キーがあります。それぞれが割り当てテーブルに戻って参照します。私の外部キー制約は、私が示すように別々にすることができますか、それとも一緒にして「and」ステートメントを持たなければなりませんか?

 create table assignment 
(asg_prj_p# number(2),
asg_emp_e#a varchar2(1),
asg_emp_e#n varchar2(5),
asg_hrs number(3),
constraint fk_project foreign key (asg_prj_p#) references project (prj_p#),
constraint fk_employee foreign key (asg_emp_e#a, asg_emp_e#n) references employee (emp_e#a, emp_e#n));
4

2 に答える 2

0

あなたの質問は私には完全には明確ではありません。ただし、次のステートメントは、問題を解決するのに役立ちます。

割り当てテーブルには、2つの外部キーがあります。1つは単一の外部キー:asg_prj_p#で、もう1つは複合外部キー(asg_emp_e#a、asg_emp_e#n)です。複合外部キーは、複合主キーまたは複合一意キー列を参照する必要があります。したがって、この例では、employeeテーブルの(emp_e#a、emp_e#n)列は、複合主キーまたは複合一意キーである必要があります。

于 2012-09-20T15:48:12.383 に答える
0

外部キー制約は独立しています。つまり、1 つは asg_prog_p フィールドで指定された ID を持つプロジェクト テーブルに行があることを保証し、もう 1 つは従業員テーブルとそのキーを構成する 2 つのフィールドに対して同じことを行います。したがって、外部キー制約に関して、あなたが持っているものは見栄えがします。

次に、従業員が特定のプロジェクトで 1 つ以上の割り当てを持つことができるかどうかに応じて、これら 3 つのフィールドを使用して複合主キーが必要になる場合があります。1 つだけの場合は、複合主キーを使用することをお勧めします。それ以外の場合は、複合主キーに結合する別のフィールドが必要かどうかを検討する必要があります。または、「assignment_id」などの新しいフィールドを主キーとして作成することもできます。

于 2012-09-20T16:02:22.267 に答える