在表中查找冗余

时间:2015-06-06 13:34:59

标签: database database-design

我有以下数据库:

enter image description here

现在我想确定此文件结构所显示的主要数据冗余问题。还有一些可以做出的改变 Employee_Name和Employee_Phone?我是数据库的新手,所以请帮忙

2 个答案:

答案 0 :(得分:0)

我建议使用三个表:项目,人员,工作。

项目将包含代码和名称

人们会持有姓名和电话

工作将包含每个工作事件的条目,包括工作时间间隔,工作人员的主键以及该人员工作的项目的主键。

然后,要输出与初始表格相似的表格,您可以从这三个表格中进行选择。如果您需要此类查询的示例,请发表评论,我将对其进行编写。

答案 1 :(得分:0)

我建议你为你的项目保留一张桌子,并为你的员工保留一张单独的桌子。我不知道你想要完成什么,所以也许E​​mployees真的是一张People表,上面有一个表示员工的标志。然后我还会保留一个单独的表(我称之为Activity),它链接到Projects和Employees,并包含HoursWorked和一些注释。然后,为了得到你在这里得到的东西,我将创建一个视图,将项目和员工连接在一起并组合,并总结工作时间。

像:

Create table Project
(
  ID int not null,
  ProjectCode nvarchar(32),
  ProjectName nvarchar(128)
);

Create table Employee
(
  ID int not null,
  EmployeeName nvarchar(128),
  PhoneNumber nvarchar(32)
);

Create table Activity
(
  ID int not null,
  EmployeeID int not null,
  ProjectID int not null,
  Hours decimal,
  Notes nvarchar(MAX)
);

Create View HoursWorked AS 
SELECT
  P.ProjectCode,
  P.ProjectName,
  E.EmployeeName,
  SUM(A.Hours) AS HoursWorked,
  E.PhoneNumber
 FROM
   Activity A
   INNER JOIN Project P ON P.ID = A.ProjectID
   INNER JOIN Employee E ON E.ID = A.EmployeeID
 GROUP BY
  P.ProjectCode,
  P.ProjectName,
  E.EmployeeName,
  E.PhoneNumber
 ;

您必须创建外键关系和所有。此外,我没有测试这个,所以也许我搞砸了一些语法,但想法就在那里。