まず、問題が発生している 3 つのテーブルのコードを次に示します。
CREATE TABLE ProgramSupervisor
( EmpNo CHAR (6),
ProgramSupervisorNo CHAR (6),
TeamNo CHAR (3),
CONSTRAINT PKProgramSupervisor PRIMARY KEY (EmpNo , ProgramSupervisorNo) ,
CONSTRAINT FKProgSupEmpNo FOREIGN KEY (EmpNo) REFERENCES Employee )
別:
CREATE TABLE ISL
( ISLNo CHAR (6) ,
EmpNo CHAR(6),
ProgramSupervisorNo CHAR (6),
ISLName VARCHAR (30),
ISLStreet VARCHAR (40),
ISLCity VARCHAR (30),
ISLState CHAR (2),
ISLZip CHAR (5),
CONSTRAINT PKISL PRIMARY KEY (ISLNo) ,
CONSTRAINT FKISLProgSupNo FOREIGN KEY (ProgramSupervisorNo, EmpNo)
REFERENCES ProgramSupervisor )
そしてもう一つ:
CREATE TABLE Hourly
( EmpNo CHAR (6),
ISLNo CHAR (3),
NumberOfWriteUpes SMALLINT,
CONSTRAINT PKHourly PRIMARY KEY (EmpNo),
CONSTRAINT FKEmpNo FOREIGN KEY (EmpNo) REFERENCES Employee,
CONSTRAINT FKISLNo FOREIGN KEY (ISLNo) REFERENCES ISL )
これがERDと私が目指している関係です:
情報が得られたので、私が抱えている問題について説明しましょう。まず、ERD は少し誤解を招きます。「Salary」親テーブルの子テーブルである ProgramSupervisor テーブルがあり、「Salary」は親テーブル「Employee」の子テーブルです。「従業員」の PK が EmpNo であるため、Salary の PK、次に ProgramSupervisor の PK も EmpNo です。ただし、ProgramSupervisorNo を「ProgramSupervisor」テーブルの PK にして、複合 PK を持たせたいと考えています。「ISL」テーブルを作成するときに、複合「ProgramSupervisor」PK を ISL テーブルの FK として参照するには、Access で両方の PK フィールド名が必要です。これは正規化基準に違反していませんか? 「ISL」テーブルに EmpNo と ProgramSupervisorNo の両方が必要なため、「しない」これは、ProgramSupervisorNo が EmpNo に依存しているため、フィールドの 1 つを含めるべきではないということですか? 私はこれに慣れていないので、私の手抜きな説明を許してください。
また、'Hourly' 従業員は 1 つの ISL に属し、ISL は多数の 'Hourly' 従業員を持つことができますが、'Hourly' テーブルは Employee の子テーブルでもあり、主キーとして EmpNo を持ちます。そうは言っても、「ISL」テーブルに EmpNo と ProgramSupervisorNo を入力する必要がある場合、ISLNo を「時間別」テーブルに入力するにはどうすればよいですか?
泥のように透明?基本的に、各 ISL には ProgramSupervisor があるため、「ISL」テーブルに ProgramSupervisorNo を配置するだけです。次に、ISLNo を「時間別」テーブルに入れたいと思います。いくつかの例を示して、私が 5 歳のように説明してください。どんな助けでも大歓迎です。