这是一个设计问题。
我需要为小型应用程序提供数据模型,我正在寻找最佳方法。
我正在尝试建模的业务的简化版具有以下实体:
然后,有一个Web应用程序,管理员将用于管理谁做了什么,即哪个工作人员被分配到哪个作业。 工作人员也将使用此应用程序来注册与其作业相关的费用。
因此,在Web应用程序的上下文中,还会有用户实体,并且工作人员和经理都将让其用户访问该应用程序。
我的问题是: 什么是支持这个(简单)系统的最佳数据模型?
我想象这个模型:
我不喜欢这个模型的是每个人都必须拥有一个用户。也许今天发生在工人和经理身上,但我会在这个系统中添加“客户”,这个系统也会关联不会访问该网站的人,因此他们没有用户。
有更好的方法吗?是否有一种没有继承的标准方法?
更新
好的,基于上面建议的模型并完成了关于这个特定业务的一些额外信息,这里是(基本)模型。
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
以下是有关业务的一些额外信息,以帮助理解整个图表:
有道理吗?有什么想法可以改善这个吗?
答案 0 :(得分:1)
要在没有继承的情况下解决此问题,您可以定义Person
类和Role
类,每个Person
都有一个Role
列表(或单个)一个基于域的需求)。
Manager和Worker概念将属于Role
类,一些人拥有 Manager 角色(经理),其他人拥有 Worker 角色。这将简化所有Person
对象的管理,因为它们可以修改其状态,权限等,以减少更新系统中的角色。它还可以让您灵活地添加新的Role
而无需修改源:简单创建Role
的新实例,说 Customer 并将其分配给{{需要{1}}。
最后,您可以创建另一个概念,将其命名为Person
,使用 Worker 和 Manager 角色定义Permission
可以做什么拥有 CanAccessWebApp 权限(而不是客户)。从长远来看,这将为您提供很大的灵活性,同时保持整体关系设计相当简单。