将真人与应用用户联系起来的数据建模的最佳模式是什么?

时间:2013-06-05 14:36:07

标签: database design-patterns database-design data-modeling

这是一个设计问题。

我需要为小型应用程序提供数据模型,我正在寻找最佳方法。

我正在尝试建模的业务的简化版具有以下实体:

  • 作业:这些类似于项目,它们有开始日期,结束日期和相关人员组合
  • 工人:这些是执行作业的人。给定的工作人员一次只能与一个任务相关联。许多工人可以同时关联同一个任务(对于大型项目)。
  • 经理:这个行业的管理人员基本上很少,他们负责将员工分配到新任务中。

然后,有一个Web应用程序,管理员将用于管理谁做了什么,即哪个工作人员被分配到哪个作业。 工作人员也将使用此应用程序来注册与其作业相关的费用。

因此,在Web应用程序的上下文中,还会有用户实体,并且工作人员和经理都将让其用户访问该应用程序。

我的问题是: 什么是支持这个(简单)系统的最佳数据模型?

我想象这个模型:

  • USER(id,username,password,...)
  • PERSON(继承自用户+姓名,电子邮件等......)
  • MANAGER(仅限经理人员+额外字段)
  • WORKER(仅限于工作人员的+ +额外字段)

我不喜欢这个模型的是每个人都必须拥有一个用户。也许今天发生在工人和经理身上,但我会在这个系统中添加“客户”,这个系统也会关联不会访问该网站的人,因此他们没有用户。

有更好的方法吗?是否有一种没有继承的标准方法?


更新

好的,基于上面建议的模型并完成了关于这个特定业务的一些额外信息,这里是(基本)模型。

PERSON
id
email
passmd5
role_id
firstname
lastname
...

ROLE
id
description

PERMISSION
id
description

ROLE_PERMISSION
role_id
permission_id

COMPANY
id
name
contact_name
contact_email

ASSIGNMENT
id
customer_company_id
start_date
end_date
location_lat
location_lng
location_description

MACHINE
id
brand
model
description

PERSON_MACHINE_EXPERTISE
person_id
machine_id

以下是有关业务的一些额外信息,以帮助理解整个图表:

  • 业务包括派遣某些机器专家到世界各地,为特定客户提供服务。
  • 有些人是“专家”。
  • 有些人是“经理”(可能只有一个,但可能会有更多)。
  • 有作业(基本上是一项工作,需要专家来完成工作,有时需要不止一位专家)。
  • 有客户,基本上是公司,而不是人。
  • 有机器。
  • 有关哪个人是哪台机器专家的信息。

有道理吗?有什么想法可以改善这个吗?

1 个答案:

答案 0 :(得分:1)

要在没有继承的情况下解决此问题,您可以定义Person类和Role类,每个Person都有一个Role列表(或单个)一个基于域的需求)。

Manager和Worker概念将属于Role类,一些人拥有 Manager 角色(经理),其他人拥有 Worker 角色。这将简化所有Person对象的管理,因为它们可以修改其状态,权限等,以减少更新系统中的角色。它还可以让您灵活地添加新的Role而无需修改源:简单创建Role的新实例,说 Customer 并将其分配给{{需要{1}}。

最后,您可以创建另一个概念,将其命名为Person,使用 Worker Manager 角色定义Permission可以做什么拥有 CanAccessWebApp 权限(而不是客户)。从长远来看,这将为您提供很大的灵活性,同时保持整体关系设计相当简单。