用户通过某个角色连接到组织。假设有自由职业者和雇员两个角色。
一名员工只能是一个组织的一部分,如果他是一名员工,那么他就不能成为一名自由职业者。而自由职业者可以连接到多个组织,他也不能是员工。
简而言之,Freelancer 和 Employee 都是用户。自由职业者通过多对多关系连接到组织。员工通过一对多关系连接到组织。
我的想法:
user{
id,
name,
other_fields,
}
organization{
id,
other_fields
}
freelancer{
user_id,
organization_id,
Primary_Key(user_id, organization_id)
}
employee{
user_id,
organization_id,
Primary_key(user_id),
}
不过,这里有一个问题。必须在应用程序级别实施自由职业者或雇员但不能两者兼而有之的约束。
- 上述模式的优缺点是什么?
- 设计模式的其他可能替代方案是什么?
- 如果有更多的用户类别怎么办?如果创建了用户的新角色,则当前模式需要添加新表。好还是坏?
- 数据库维护也是一个值得关注的问题,即创建一个不应该使维护成为问题的模式
freelancer
我看到的主要缺点是employee
具有相同的字段,但表不同。区别在于由什么primary_key
组成,但我想知道您是否可以将其标准化为对于
primary_key
,您可能需要一些应用程序逻辑来创建基于user_id
and的字符串,并且如果员工是自由职业者employee_type
,还可以选择包含 tha 的值。organization_id
你甚至可以更进一步,有一张桌子
employee_type
:然后在
employee.employee_type
. 这将解决每次有新类型用户时添加新表的问题。另外,您是否考虑
employee
过与合并user
?这将进一步简化您的架构,但您将失去user_id
与多个员工关联的能力,我认为这对这种情况很重要。