数据库设计:角色重叠时如何处理角色?

Database design: how to handle roles when some roles overlap?

在某些情况下,一个用户可以拥有不同的角色,一个常见的例子是 OWNER、DRIVER 和 CAB。

例子

  1. 有 OWNERS 拥有 TAXIS。 (一:所有者为Many:taxis)
  2. TAXIS 可以分配一名或多名司机,司机可以驾驶多辆出租车。 (很多:司机到很多:出租车)
  3. 有时 OWNER 可以是同一辆出租车 DRIVER 在这种情况下,同一个人分担两个 ROLES。 (?)

可能的方法

问题
  1. 使用这种方法,实体 DRIVER 和 OWNER 之间存在数据冗余,因为有必要知道与 nameslastnamesidentification numberemail 等。当 OWNER 与 DRIVER 不同时,就会出现这种情况。 DRIVER 的唯一附加信息是他的 driver_license_number.

  2. OWNER相同的情况如何建模DRIVER?

第二种方法更新

您可以拥有所有者和 driver 都属于的另一个实体(人)。一个人可以有不止一个角色(所有者/driver)。那么你每个人都有一个数据实体。

您需要一个具有单一子类型的实体 Person(目前):Driver。这将避免重复数据问题,并允许您与相关实体一起存储相关信息(许可证号)。

我们不需要所有者子类型,因为(此时)不需要额外的信息来区分 Person 和“所有者”。如果这种情况发生变化,那么 Person 将有两个非排他性子类型,而 Owner 子类型将与 Vehicle.

有关系