数据库中有三种人,member
,volunteer
和requester
。
大部分volunteers
为members
,requesters
的一半为members
。
volunteer
有一些member
没有的属性。
如果requester
不是member
,则只能将基本信息放入数据库中。他们可能会在member
之后成为。{/ p>
任何人都可以是requester
和volunteer
,因此,是的,用户可以同时是requester
,volunteer
和member
。用户支付的会员费可以是member
,一旦他request
,他就是requester
。他可以选择成为volunteer
。如果一个成员什么都不做,他就是会员。
我应该如何选择实体?
我应该将它们设为三个实体还是将它们放在一个实体中,并将志愿者和请求者设置为两个属性?
由于
答案 0 :(得分:2)
如果users
表包含所有通用数据,然后是“角色”表,包含特定于角色的数据并且可以链接到用户:
user:
- id
- name
- email
- member_id
- volunteer_id
- requester_id
client
- id
- data
volunteer
- id
- data
requester
- id
- data
然后,如果您使用面向对象的抽象来表示行,则User
个对象可以使用此方法:
// C-style pseudocode
boolean isVolunteer() {
!!self.volunteer_id;
}
答案 1 :(得分:1)
创建4个表:
persons (person_id PK, first_name, last_name)
members (person_id PK/FK)
volunteers (person_id PK/FK)
requesters (person_id PK/FK)
将人员表中的公共属性和特定于角色的属性添加到相关表中。
答案 2 :(得分:0)
我发现你的实体中有几个共享属性,有些属性发生在一些以上,有些只在其他实体上发生。这不是一个美丽的解决方案,但似乎适合您的问题,它在JPA术语中称为单表继承。尽管本文是专注于Java的,但它可以通过其他技术实现。