为数据库选择实体

Choosing entities for a database

数据库中有三种人,membervolunteerrequester

大多数 volunteersmembers,一半 requestersmembers

volunteer 有一些 member 没有的属性。

如果一个requester不是一个member,数据库中只能放入基本信息。以后可能会变成member

任何人都可以是 requestervolunteer,所以,是的,一个用户可以同时是 requestervolunteermember .一个用户交了会员费可以是一个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,但它可以通过其他技术实现。

JPA Single Table Inheritance Example