为数据库选择实体

时间:2015-07-29 13:30:03

标签: database entity-relationship

数据库中有三种人,membervolunteerrequester

大部分volunteersmembersrequesters的一半为members

volunteer有一些member没有的属性。

如果requester不是member,则只能将基本信息放入数据库中。他们可能会在member之后成为。{/ p>

任何人都可以是requestervolunteer,因此,是的,用户可以同时是requestervolunteermember。用户支付的会员费可以是member,一旦他request,他就是requester。他可以选择成为volunteer。如果一个成员什么都不做,他就是会员。

我应该如何选择实体?

我应该将它们设为三个实体还是将它们放在一个实体中,并将​​志愿者和请求者设置为两个属性?

由于

3 个答案:

答案 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的,但它可以通过其他技术实现。

JPA Single Table Inheritance Example