让我们说我有员工,他们都有基本的东西,如姓名和电话号码,但他们也有一个或多个角色,但对于一个特定的角色,比如销售人员(没有其他人)需要存储一些额外的信息。我也不知道,也永远不会知道所有可能的角色,并且可以随时发挥新角色。
在ER图上表示这个的最佳方法是什么?如果不是销售人员,我会使用多值属性。
我能想到的最佳方式是: 重叠子类以'salesperson'和'other'作为可能性。但是我并不认为这是一个很好的解决方案,因为我之前从未在ER图上看过“其他”。
我可以为销售人员提供一个可以存储额外信息的非全参与子类,但是否则在员工实体上有一个代表所有角色的多值属性?对我来说似乎仍然不好,因为有冗余和信息没有存储在一起。
答案 0 :(得分:0)
您可以有两个表,Employee和Salesperson。
员工包括您为各类员工(包括销售人员)捕获的所有数据。关键是Employee.Id
销售员只有销售人员的条目。它包含销售人员的专业数据。关键是Salesperson.EmployeeId。这也是一个外键,引用Employee.Id。
如果您需要有关销售人员的所有数据,只需使用密钥将两个表连接在一起即可。您可以拥有一个使此连接可用的视图。
这是class-table-inheritance和shared-primary-key的改编。