我试着学习实体关系图,下面的问题就是目的.
信息咨询公司拥有员工的办公室数量。员工可以根据项目搬迁办公室,但是位置总是被记录下来的。这家咨询公司管理着大量的项目,并拥有庞大的客户基础。公司的成功取决于指派具有相对技能和位置的相对员工。员工在项目上花费的时间每天都被记录下来。这包括旅行时间和休息时间等。为了减少出差时间,他们试图从最近的办公室分配员工。绘制实体关系图和带有属性的实体列表。
我使用Visio创建了实体关系图。请评论我的尝试。
Office
Address
telephone
office manager
Employees
name
address
job
hourly rate
start_date
location etc
Projects
Name
Manager
Start Date
End Date
Estimated Cost
Quote
Actual Cost
Client
Name
address
telephone
e-mail
contact
Assignment
name
Employee name
Date Assigned
Hours spent以下是我在这张图片中的尝试:

发布于 2013-07-17 03:14:46
好的。必需品在那里。实体的第一个粗略列表是取故事的名词--办公室、员工、项目、客户、任务、技能。每个表都有一个唯一的、顺序的、无意义的键。列被赋予描述性名称。以下是按实体分列的建议。
office>经理是一名员工,应该与manager_employee_id建立单独的外键关系。有很多人和员工在一起。避免M到M的关系。在这种情况下,一个办公室有许多雇员。但员工只有一个家庭办公室。我建议用一个通用后缀来唯一地命名字段office_address,而不是地址。
employee> job_id应该是职务的外键,而不是标题。office_id应该是办公室的外键,而不是位置。列名应该是hire_date,而不是start_date,以避免与项目start_date混淆。使用employee_address代替基于域后缀规则的地址。
project>项目经理是员工pm_employee_id的单独外键。estimated_cost和quoted_cost之间的业务区别是什么?确保有一个外键字段来匹配每条关系线。Client_id应该是外键。Office_id应该是一个外键。
assignment>很好,这是一个项目和员工之间的交叉表。我建议将日期重命名为assigned_date,以保持后缀的一致性。注意,hours_worked与assigned_date在这个表中。assigned_date只发生一次。但工作时间每天都在。
daily_assignment>可能应该有一个单独的子表,名为daily_assignment,它有自己的主键,外键用于赋值,worked_date和hours_worked作为字段。这在它自己的级别上唯一地跟踪每一项数据。
client>我建议把地址重命名为client_address。
有办法让事情变得更复杂。但我觉得这个模型很好用。它应该为您提供进行业务更改的灵活性,但仍然足够简单,可以编写代码。
https://dba.stackexchange.com/questions/46484
复制相似问题