为数据库选择实体
Choosing entities for a database
数据库中有三种人,member
、volunteer
和requester
。
大多数 volunteers
是 members
,一半 requesters
是 members
。
volunteer
有一些 member
没有的属性。
如果一个requester
不是一个member
,数据库中只能放入基本信息。以后可能会变成member
任何人都可以是 requester
和 volunteer
,所以,是的,一个用户可以同时是 requester
、volunteer
和 member
.一个用户交了会员费可以是一个member
,一旦他做了一个request
,他就是一个requester
。而他可以选择成为volunteer
。如果一个成员什么都没做,他就只是一个成员。
我应该如何选择实体?
是三个实体还是一个实体,志愿者和请求者两个属性?
谢谢
有一个包含所有通用数据的 users
table 怎么样,然后 "roles" 的 table 包含特定于角色的数据并且可以链接到用户:
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;
}
创建 4 tables:
persons (person_id PK, first_name, last_name)
members (person_id PK/FK)
volunteers (person_id PK/FK)
requesters (person_id PK/FK)
将通用属性添加到人员 table,并将特定于角色的属性添加到相关 table。
我看到您的实体之间有几个共享属性,一些出现在多个实体上,一些只出现在其他实体上。这不是一个很好的解决方案,但似乎适合您的问题,在 JPA 行话中称为 Single Table Inheritance。尽管写这篇文章的重点是 Java,但它可以通过其他技术实现。
数据库中有三种人,member
、volunteer
和requester
。
大多数 volunteers
是 members
,一半 requesters
是 members
。
volunteer
有一些 member
没有的属性。
如果一个requester
不是一个member
,数据库中只能放入基本信息。以后可能会变成member
任何人都可以是 requester
和 volunteer
,所以,是的,一个用户可以同时是 requester
、volunteer
和 member
.一个用户交了会员费可以是一个member
,一旦他做了一个request
,他就是一个requester
。而他可以选择成为volunteer
。如果一个成员什么都没做,他就只是一个成员。
我应该如何选择实体?
是三个实体还是一个实体,志愿者和请求者两个属性?
谢谢
有一个包含所有通用数据的 users
table 怎么样,然后 "roles" 的 table 包含特定于角色的数据并且可以链接到用户:
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;
}
创建 4 tables:
persons (person_id PK, first_name, last_name)
members (person_id PK/FK)
volunteers (person_id PK/FK)
requesters (person_id PK/FK)
将通用属性添加到人员 table,并将特定于角色的属性添加到相关 table。
我看到您的实体之间有几个共享属性,一些出现在多个实体上,一些只出现在其他实体上。这不是一个很好的解决方案,但似乎适合您的问题,在 JPA 行话中称为 Single Table Inheritance。尽管写这篇文章的重点是 Java,但它可以通过其他技术实现。