1

这是一个设计问题。

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

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

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

然后,经理将使用 Web 应用程序来管理谁做什么,即哪个工人被分配到哪个任务。工人还将使用此应用程序来登记与他们的任务相关的费用。

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

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

我描绘了这个模型:

  • 用户(ID,用户名,密码,...)
  • PERSON(继承自用户 + 姓名、电子邮件等...)
  • MANAGER(仅从人员继承+经理的额外字段)
  • WORKER(从 person 继承 + 额外字段仅适用于工人)

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

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


更新

好的,根据上面建议的模型并完成有关此特定业务的一些额外信息,这是(基本)模型。

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

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

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

说得通?有什么想法可以改善这一点吗?

4

1 回答 1

1

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

然后,Manager 和 Worker 概念将属于一个Role类,其中一些人具有Manager角色(经理),而另一些人则具有Worker角色。这将简化所有Person对象的管理,如修改它们的状态、权限等,从而简化为更新系统中的角色。它还将为您提供添加新Roles 的灵活性,而无需修改源:简单地创建一个新实例Role,例如Customer并将其分配给Person需要的人。

最后,您可以创建另一个概念,称之为Permission定义可以Person做什么的概念,其中WorkerManager角色具有CanAccessWebApp权限(而Customer没有)。从长远来看,这将为您提供很大的灵活性,同时保持整体关系设计相当简单。

于 2013-06-05T20:12:44.677 回答