我有以下数据库:
现在我想确定此文件结构所显示的主要数据冗余问题。还有一些可以做出的改变 Employee_Name和Employee_Phone?我是数据库的新手,所以请帮忙
答案 0 :(得分:0)
我建议使用三个表:项目,人员,工作。
项目将包含代码和名称
人们会持有姓名和电话
工作将包含每个工作事件的条目,包括工作时间间隔,工作人员的主键以及该人员工作的项目的主键。
然后,要输出与初始表格相似的表格,您可以从这三个表格中进行选择。如果您需要此类查询的示例,请发表评论,我将对其进行编写。
答案 1 :(得分:0)
我建议你为你的项目保留一张桌子,并为你的员工保留一张单独的桌子。我不知道你想要完成什么,所以也许Employees真的是一张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
;
您必须创建外键关系和所有。此外,我没有测试这个,所以也许我搞砸了一些语法,但想法就在那里。