数据库设计:角色重叠时如何处理角色?
Database design: how to handle roles when some roles overlap?
在某些情况下,一个用户可以拥有不同的角色,一个常见的例子是 OWNER、DRIVER 和 CAB。
例子
- 有 OWNERS 拥有 TAXIS。 (一:所有者为Many:taxis)
- TAXIS 可以分配一名或多名司机,司机可以驾驶多辆出租车。 (很多:司机到很多:出租车)
- 有时 OWNER 可以是同一辆出租车 DRIVER 在这种情况下,同一个人分担两个 ROLES。 (?)
可能的方法
问题
使用这种方法,实体 DRIVER 和 OWNER 之间存在数据冗余,因为有必要知道与 names
、lastnames
、identification number
、email
等。当 OWNER 与 DRIVER 不同时,就会出现这种情况。 DRIVER 的唯一附加信息是他的 driver_license_number
.
OWNER相同的情况如何建模DRIVER?
第二种方法更新
您可以拥有所有者和 driver 都属于的另一个实体(人)。一个人可以有不止一个角色(所有者/driver)。那么你每个人都有一个数据实体。
您需要一个具有单一子类型的实体 Person
(目前):Driver
。这将避免重复数据问题,并允许您与相关实体一起存储相关信息(许可证号)。
我们不需要所有者子类型,因为(此时)不需要额外的信息来区分 Person
和“所有者”。如果这种情况发生变化,那么 Person
将有两个非排他性子类型,而 Owner
子类型将与 Vehicle
.
有关系
在某些情况下,一个用户可以拥有不同的角色,一个常见的例子是 OWNER、DRIVER 和 CAB。
例子
- 有 OWNERS 拥有 TAXIS。 (一:所有者为Many:taxis)
- TAXIS 可以分配一名或多名司机,司机可以驾驶多辆出租车。 (很多:司机到很多:出租车)
- 有时 OWNER 可以是同一辆出租车 DRIVER 在这种情况下,同一个人分担两个 ROLES。 (?)
可能的方法
使用这种方法,实体 DRIVER 和 OWNER 之间存在数据冗余,因为有必要知道与
names
、lastnames
、identification number
、email
等。当 OWNER 与 DRIVER 不同时,就会出现这种情况。 DRIVER 的唯一附加信息是他的driver_license_number
.OWNER相同的情况如何建模DRIVER?
第二种方法更新
您可以拥有所有者和 driver 都属于的另一个实体(人)。一个人可以有不止一个角色(所有者/driver)。那么你每个人都有一个数据实体。
您需要一个具有单一子类型的实体 Person
(目前):Driver
。这将避免重复数据问题,并允许您与相关实体一起存储相关信息(许可证号)。
我们不需要所有者子类型,因为(此时)不需要额外的信息来区分 Person
和“所有者”。如果这种情况发生变化,那么 Person
将有两个非排他性子类型,而 Owner
子类型将与 Vehicle
.