首先,这是我遇到问题的三个表的代码:
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 有点误导。我有一个 ProgramSupervisor 表,它是“Salary”父表的子表,“Salary”是父表“Employee”的子表。'Employee' 的 PK 是 EmpNo,Salary 和 ProgramSupervisor 的 PK 也是 EmpNo。但是,我还希望 ProgramSupervisorNo 成为“ProgramSupervisor”表的 PK 并为其提供复合 PK。当我创建“ISL”表时,为了将复合“ProgramSupervisor”PK 作为 ISL 表中的 FK 引用,Access 需要两个 PK 字段名称。这不违反规范化标准吗?因为它在“ISL”表中需要 EmpNo 和 ProgramSupervisorNo,所以不 这是否意味着 ProgramSupervisorNo 依赖于 EmpNo,因此不应包含其中一个字段?我是新手,所以请原谅我的粗制滥造的解释。
此外,“Hourly”员工属于一个 ISL,ISL 可以有多个“Hourly”员工,但“Hourly”表也是 Employee 的子表,并且以 EmpNo 作为其主键。话虽如此,如果我需要将 EmpNo 和 ProgramSupervisorNo 放入我的“ISL”表中,我该如何将 ISLNo 放入我的“Hourly”表中?
清如泥?基本上,我只是将 ProgramSupervisorNo 放在“ISL”表中,因为每个 ISL 都有一个 ProgramSupervisor。然后,我想把 ISLNo 放在我的“每小时”表中。请提供一些例子并像我五岁一样向我解释。任何帮助深表感谢。