设计数据库模型和相关sql查询

设计数据库模型和相关sql查询,sql,database,oracle,database-design,data-modeling,Sql,Database,Oracle,Database Design,Data Modeling,为组织的管理结构开发rdbms。每个员工都属于某个部门,并且与多个项目关联。每个经理都是一名员工,负责管理多个项目和多个员工。每个项目执行一段时间。员工在组织中停留一定时间 查询: 在每个项目中都找不到工作过的员工 查找项目“x”中一次工作的最大员工数 寻找在过去1年中管理少于5个项目的非生产性经理 查找员工在过去1年中处理最大项目的部门 编辑: 我无法决定如何处理最后3个查询中的时间限制。 我做了三张桌子: 具有属性的员工:emp_id、姓名、部门、经理id,其中emp_id为主键,经理id

为组织的管理结构开发rdbms。每个员工都属于某个部门,并且与多个项目关联。每个经理都是一名员工,负责管理多个项目和多个员工。每个项目执行一段时间。员工在组织中停留一定时间

查询:

  • 在每个项目中都找不到工作过的员工
  • 查找项目“x”中一次工作的最大员工数
  • 寻找在过去1年中管理少于5个项目的非生产性经理
  • 查找员工在过去1年中处理最大项目的部门
  • 编辑:
    我无法决定如何处理最后3个查询中的时间限制。 我做了三张桌子:

    • 具有属性的员工:emp_id、姓名、部门、经理id,其中emp_id为主键,经理id为自引用外键
    • 具有p_id、p_名称、经理id的项目,其中p_id是主键
    • 使用emp_id和p_id分配,其中两个属性构成一个复合主键

    以上内容帮助我回答第一个查询,但如何添加时间限制来回答其余查询。我是否需要日期-时间属性或简单的持续时间属性,或者这里需要其他属性?请帮助。

    分配是员工和项目之间的交叉点。它记录了在项目中工作的员工

    但是,员工加入项目和离开项目。项目在其资源配置方面有增长也有收缩。所以很明显,分配需要列来指示特定分配的时间跨度,比如开始日期和结束日期

    添加这些列后,您将能够回答其余的问题。其中一些仍然很棘手(特别是2),但至少你会得到所需的信息


    顺便说一句,您可能应该有一个DEPARTMENT表,但是您可以在没有它的情况下编写这些查询。此外,在现实生活中,一个项目将有一个启动日期和(我们希望)一个完成日期。但是,对于您必须编写的查询也不需要它们。

    < P>在<代码>项目< /代码>表中考虑添加两个列<代码>启动日期> /COD>和<代码>持续时间< /代码>代码>终端日期>代码>。我认为这将足以让您完成最后3个查询


    可以考虑在<代码>项目表中拥有另一列<代码> NosifOfEngsSudiSuffProject <代码>,这是规范化的,并将动态地反映加入或离开项目的员工。只有在测量了

    增益
    标准化成本
    后,才应添加此列

    我们很乐意帮助学生。不过,如果你只是把你的家庭作业问题贴出来,你不太可能得到太多帮助。问一个问题,而不是多个问题。让我们看看你试过什么。告诉我们你被困在哪里。添加了一个edit@JustinCaveUm,一个名为
    No_of_of_Employees_的列在_project
    下是一个非标准化列,因为它是一个派生字段。这类东西在数据仓库中很有用,但在OLTP环境中就不那么有用了。我们尤其需要注意的是,维护列(包括多用户环境中的序列化)的开销不会超过预先计算值所带来的收益。如果我是一名教师,我会记下任何提出这种建议的学生的分数。当然,收益应该根据正常化的成本进行评估。我已经做了必要的编辑。谢谢。另外,第二个查询的措辞意味着在给定项目上工作的员工数量可能会随着时间的推移而变化。你的提案没有反映这一点,也不允许OP满足这一要求。这是去规范化的成本。规范化是删除冗余数据的过程。你在添加它。