我有这两个表:
create table employeetasks (
employeeid int not null,
projectid int not null,
taskcode char(1),
primary key (employee, projectid)
);
create table workinghoursperday (
employeeid int not null,
projectid int not null,
date date not null,
hours float,
primary key (employeeid, projectid, date),
foreign key (employeeid) references employeetasks(employeeid),
foreign key (projectid) references employeetasks(projectid)
);在第二个表(称为workinghoursperday的子表)中,我想列出每个员工在特定项目中每天工作的小时数,但是为了记录该员工在该项目中的工作小时数,employeeid必须在父表(employeetasks)中为他们分配一个任务代码。
例如,在父表(employeetasks)中,我们可以有两个条目:
FIRST ENTRY: employeeid | projectid | taskcode
1 | 1 | 'A'
SECOND ENTRY: employeeid | projectid | taskcode
2 | 1 | null假设我想在子表中创建这两个条目(workinghoursperday):
FIRST ENTRY: employeeid | projectid | date | hours
1 | 1 | '2020-04-09' | 6.5
SECOND ENTRY: employeeid | projectid | date | hours
2 | 1 | '2020-04-10' | 7.5我希望子表中的第一个条目是成功的,因为employeeid 1在projectid 1上分配了一个任务代码(在本例中是‘A’),但是子表中的第二个条目应该失败,因为employeeid 2在projectid 1上没有分配任务代码(因为值为null)。
我不知道该怎么做。任何帮助都是非常感谢的!
发布于 2020-04-09 20:59:04
从存在谓词开始,以便创建一个“完整”的逻辑故事(模型)。选择这一部分来调整您的示例。
-- Employee EMP exists.
--
employee {EMP}
PK {EMP}
-- Project PRO exists.
--
project {PRO}
PK {PRO}
-- Task TSK exists.
--
task {TSK}
PK {TSK}-- Project PRO contains task TSK.
--
project_task {PRO, TSK}
PK {PRO, TSK}
FK1 {PRO} REFERENCES project {PRO}
FK2 {TSK} REFERENCES task {TSK}-- Employee EMP is allocated to project PRO.
--
employee_project {EMP, PRO}
PK {EMP, PRO}
FK1 {EMP} REFERENCES employee {EMP}
FK2 {PRO} REFERENCES project {PRO}-- Employee EMP is assigned task TSK of project PRO.
--
employee_task {EMP, PRO, TSK}
PK {EMP, PRO, TSK}
FK1 {EMP, PRO} REFERENCES employee_project {EMP, PRO}
FK2 {PRO, TSK} REFERENCES project_task {PRO, TSK}按员工项目任务跟踪每日工时。
-- On date DTE, employee EMP worked HRS hours
-- on task TSK of project PRO.
--
task_hours_day {EMP, PRO, TSK, DTE, HRS}
PK {EMP, PRO, TSK, DTE}
FK {EMP, PRO, TSK} REFERENCES
employee_task {EMP, PRO, TSK}对于每日员工项目工时,请创建一个视图。
-- On date DTE, employee EMP worked HRS_PRO hours
-- on project PRO.
--
-- {EMP, PRO, DTE} -- logical KEY
--
CREATE VIEW project_hours_day
AS
SELECT EMP, PRO, DTE, sum(HRS) AS HRS_PRO
FROM task_hours_day
GROUP BY EMP, PRO, DTE ;注意:
All attributes (columns) NOT NULL
PK = Primary Key
AK = Alternate Key (Unique)
FK = Foreign Keyhttps://stackoverflow.com/questions/61111351
复制相似问题