普通人表与针对教师和学生的特定表还是单独的表?

时间:2019-02-28 16:05:06

标签: postgresql admin-on-rest react-admin hasura

我将react-adminhasura用作Postgres的API。

我需要基本上都是人但目的不同的不同实体。例如。一个学生和一个老师。我认为,鉴于相似的属性,最好是拥有一个可以共享共同特征的人员表,然后为特定属性使用一个单独的表。例如,像这样的表:

persons {
    id,
    first_name,
    last_name,
    birthday
    ...
}

students {
    id,
    person_id,
    date_enrolled
    ...
}

teachers {
    id,
    person_id,
    sallary
    ...
}

该模式遇到的问题是,要创建一个学生,必须首先为其创建一个人。因此,在react-admin中,我必须先向用户提供一个用于创建人的表格,然后再向用户提供一个用于基于该人创建学生的表格。

我认为这不是理想的选择,尽管为两个studentsteachers创建单独的表可能会更好,尽管某些字段(first_name,last_name,birthday ...)会在两个表中重复。

这个问题并不是真正针对react-admin的,而是更多有关类似数据库模型设计的一般建议,因此不建议您提出任何技巧:)。

1 个答案:

答案 0 :(得分:1)

此要求非常适合PostgreSQL的“table inheritance” feature

您可以将studentteacher建模为person的继承子代。然后一切都应按您希望的那样工作。查询person将从两个表中返回结果。