首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >仅当子表中的外键在父表中指定了值时,才在子表中创建条目

仅当子表中的外键在父表中指定了值时,才在子表中创建条目
EN

Stack Overflow用户
提问于 2020-04-09 06:57:32
回答 1查看 42关注 0票数 1

我有这两个表:

代码语言:javascript
运行
复制
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)中,我们可以有两个条目:

代码语言:javascript
运行
复制
FIRST ENTRY:      employeeid | projectid | taskcode
                       1     |     1     |   'A'


SECOND ENTRY:     employeeid | projectid | taskcode
                       2     |     1     |   null

假设我想在子表中创建这两个条目(workinghoursperday):

代码语言:javascript
运行
复制
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)。

我不知道该怎么做。任何帮助都是非常感谢的!

EN

回答 1

Stack Overflow用户

发布于 2020-04-09 20:59:04

从存在谓词开始,以便创建一个“完整”的逻辑故事(模型)。选择这一部分来调整您的示例。

代码语言:javascript
运行
复制
-- Employee EMP exists.
--
employee {EMP}
      PK {EMP}

-- Project PRO exists.
--
project {PRO}
     PK {PRO}

-- Task TSK exists.
--
task {TSK}
  PK {TSK}
代码语言:javascript
运行
复制
-- Project PRO contains task TSK.
--
project_task {PRO, TSK}
          PK {PRO, TSK}

FK1 {PRO} REFERENCES project {PRO}
FK2 {TSK} REFERENCES task    {TSK}
代码语言:javascript
运行
复制
-- Employee EMP is allocated to project PRO.
--
employee_project {EMP, PRO}
              PK {EMP, PRO}

FK1 {EMP} REFERENCES employee {EMP}
FK2 {PRO} REFERENCES project  {PRO}
代码语言:javascript
运行
复制
-- 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}

按员工项目任务跟踪每日工时。

代码语言:javascript
运行
复制
-- 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}

对于每日员工项目工时,请创建一个视图。

代码语言:javascript
运行
复制
-- 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 ;

注意:

代码语言:javascript
运行
复制
All attributes (columns) NOT NULL

PK = Primary Key
AK = Alternate Key (Unique)
FK = Foreign Key
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61111351

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档