如何在我的数据库设计中包含这些要求?

时间:2012-12-08 06:38:34

标签: sql database-design

我正在为我的公司开发内部网应用程序。公司结构复杂,业务线,部门,部门,单位和团体众多。我必须照顾所有这些事情。有些员工在部门级别下工作,有些员工在单元级别下工作,等等。现在的问题是数据库设计。我对如何设计数据库感到困惑。一开始,我决定将其设计如下:

Employees: Username, Name, Title, OrgCode
Departments: OrgCode, Name
Divisions: OrgCode, Name
Units: OrgCode, Name

但问题正如我之前所说的,有些员工在部门下工作,所以如何在所有这些表之间建立关系。是否可以将Employees表中的OrgCode作为Departments,Divisions和Units表中OrgCode的外键?

能否请您推荐我如何设计?

更新 @wizzardz提出了一个很好的数据库设计。我现在需要的是拥有适合此数据库设计的数据示例 这是我在数据库中使用的一组数据: 让我们假设我们有员工,并提供以下信息: 用户名:JohnA 姓名:约翰 职称:工程师 OrgCode:AA

让我们假设我们有AA部门,我将如何将这些数据分发到数据库设计中?

3 个答案:

答案 0 :(得分:3)

你可以做类似这样的设计

而不是为部门,部门等单独的表尝试将它们存储在单个表中,其中TypeId存储到distingush部门,Divisitions等。

你可以尝试这样的设计

enter image description here

在Level表格中,您需要输入“Deparments,Divisions”,Groups等值(通过将其保存在单独的表中,您可以处理组织未来添加的新级别。)

在OrganisationLevels表中,您需要存储部门名称,部门名称,GroupName等。

Employee表具有表组织级别的forigen键引用,该表将存储员工在组织中工作的级别。

如果您想存储特定员工的工作历史/员工可能会移动到另一个级别,我建议您选择此设计

enter image description here

设计中的样本数据

<强>等级

 Id  LevelType  
 1    Department
 2    Division
 3    Group

<强> OrganisationLevels

Id Name LevelId Parent*(Give a proper name to this column)*
13  AA    1       NULL
.
.
21  B     2        13 (This column refer to the Id of department it belongs to.)   

<强>员工

Id UserName Name   Title 
 110  JohnA    John   Engineer

<强> EmployeeWorkDetails

Id  EmployeeId OrganisationLevelId StartDate  EndDate IsActive
271    110           13            20/09/2011   NULL     true

可以删除员工表中的OrgCode,因为我认为这是该组织员工的员工代码。

我希望这会有所帮助。

答案 1 :(得分:0)

Employees: Username, Name, Title, OrgCode
Departments: OrgCode, Name
Divisions: OrgCode, Name
Units: OrgCode, Name

对于上面提到的数据库设计,还有一个名为Org的表包含OrgCode,另一个列作为类型​​(我们可以深入了解它是哪种类型的组织,即部门,部门和单位)

然后你可以让员工表的OrgCode引用Org表的OrgCode(父子关系)。

答案 2 :(得分:0)

我建议您了解分析和设计之间的区别。在设计数据库时,您正在发明将影响数据存储和检索方式的表,列和约束。您关心的是更新和查询的简易性,包括您稍后将要了解的操作。

当您分析数据要求时,您不是在发明事物,而是从事发现事物。你发现的东西是关于主题应该代表的“现实世界”的东西。您将主题分解为“实体”和这些实体之间的关系。然后,将数据库中存储的每个值与属性的实例相关联,并将每个属性与实体或关系的某个方面相关联。这导致了一个概念模型。

在您的情况下,员工,部门,单位等之间的关系听起来相当复杂。要想出一个能够准确反映这种复杂现实的模型,我们需要付出相当大的努力。

一旦有了一个好的概念模型,就可以创建充分代表概念模型的SQL表,列和约束。这涉及可以学习的设计技巧。但是如果你有一个糟糕的概念模型,无论你在设计上有多好,你都注定要失败。