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

时间:2014-11-03 05:41:04

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

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

查询:

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

    • 包含属性的员工:emp_id,name,dept,manager_id,其中emp_id是主键,manager_id是自引用外键
    • PROJECT与p_id,p_name,manager_id,其中p_id是主键
    • 使用emp_id,p_id进行分配,其中两个属性都构成复合主键

    以上内容有助于我回答第一个查询,但如何添加时间限制来回答其余查询。我是否需要日期时间属性或简单的持续时间属性才能使用或者此处需要其他内容?请帮忙。

2 个答案:

答案 0 :(得分:0)

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

但是,员工加入项目并离开项目。项目的资源增长和缩减。因此,显然ALLOTMENT需要列来指示特定任务的时间跨度,例如START_DATE和END_DATE。

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

顺便说一下,您可能应该有一个DEPARTMENT表,但是如果没有它,您可以编写这些查询。此外,在现实生活中,PROJECT将具有开始日期和(我们希望)完成日期。但是,对于您必须编写的查询,它们也不是必需的。

答案 1 :(得分:-2)

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

您可以考虑在No_of_Employees_under_project表中使用另一列project,该列已标准化并将动态反映加入或离开项目的员工。只有在针对gain衡量cost of normalization后才能添加此列。