【问题标题】:design database model and related sql queries设计数据库模型和相关的sql查询
【发布时间】:2014-12-29 18:24:12
【问题描述】:

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

查询:

  1. 在每个项目中找到没有工作过的员工
  2. 在项目“x”中查找同时工作的员工人数上限
  3. 找出过去 1 年管理的项目少于 5 个的低效经理
  4. 查找其员工在过去 1 年中处理的项目最多的部门

编辑:
我无法决定如何处理最后 3 个查询中的时间限制。 我做了3张桌子:

  • 具有以下属性的 EMPLOYEE:emp_id,name,dept,manager_id 其中 emp_id 是主键,manager_id 是自引用外键
  • 带有 p_id、p_name、manager_id 的项目,其中 p_id 是主键
  • ALLOTMENT 与 emp_id,p_id 其中两个属性构成复合主键

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

【问题讨论】:

  • 我们很乐意为学生提供帮助。但是,如果您只是发布家庭作业问题,则不太可能获得太多帮助。问 1 个问题,而不是多个问题。向我们展示您的尝试。告诉我们您遇到的问题。
  • 添加了一个编辑@JustinCave

标签: sql database oracle database-design data-modeling


【解决方案1】:

ALLOTMENT 是 EMPLOYEE 和 PROJECT 之间的交集。它记录了从事某个项目的员工。

但是,员工加入项目并离开项目。项目的资源增加和减少。很明显,ALLOTMENT 需要列来指示特定作业的时间跨度,例如 START_DATE 和 END_DATE。

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

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

【讨论】:

    【解决方案2】:

    project 表中考虑添加两列start_dateduration| End_date 的项目。我认为这足以让您完成最后 3 个查询。

    您可以考虑在project 表中添加另一列No_of_Employees_under_project,该列已标准化,将动态反映员工加入或离开项目。仅在将gaincost of normalization 进行对比后,才应添加此列。

    【讨论】:

    • 嗯,名为No_of_Employees_under_project 的列是去规范化,因为它是派生字段。这是一种在数据仓库中很有用的东西,但在 OLTP 环境中则要少得多。特别是我们需要注意维护列的开销(包括多用户环境中的序列化)不会超过预先计算值的所谓收益。如果我是老师,我会记下任何提出此类建议的学生。
    • 当然,收益应该根据标准化成本进行评估。我已经进行了必要的编辑。谢谢。
    • 此外,第二个查询的措辞暗示从事给定项目的员工数量可能会随时间而变化。您的提案没有反映这一点,并且不允许 OP 满足该要求。
    • 这是 de-normalization 的成本。规范化是删除冗余数据的过程。您正在添加它。
    猜你喜欢
    • 2020-05-14
    • 2019-03-24
    • 1970-01-01
    • 2012-02-26
    • 1970-01-01
    • 1970-01-01
    • 2014-11-23
    • 2011-01-02
    相关资源
    最近更新 更多