SQL 服务器 - 关于数据库模式中的继承问题

SQL Server - Question about Inheritance in Database Schemas

我无法理解您可以使用数据库 table 实现的 class table 继承结构。 Info on class table inheritance。我有一个用例,我需要对不同类型的人进行建模,但他们之间的差异很小。例如,所有这些人,如学生、教授等,都有姓氏和姓氏。我的第一个想法是将这些属性移动到基 table 内的不同 table 中,就像在面向对象编程中所做的那样。这里进一步说明:

例如,现在一位教授只能有一个人,否则在我的用例中就没有意义。另外,我有一所学校 table,它有两个外键,一个给教授,一个给学生。让我们假设一所学校也只能有一名教授和一名学生。这不是我的真实用例。这个例子只是代表了我实际用例中的关系,在这里解释太多了。

我不明白的是您将如何收集基于此的数据。我正在尝试制作一个 SQL 服务器视图,我想从学校 Table 的角度加载教授的人和学生的人。例如:

SELECT 
    School.professor_id
    surname,
    lastname
FROM dbo.School AS school

INNER JOIN dbo.Professor as prof
    ON school.professor_id = prof.ID
INNER JOIN dbo.Person as prof_person
    ON prof.person_id = prof_person.ID

我可以输出教授的姓氏和姓氏,但现在我卡住了,因为我不知道如何得到学生的人

子类型 table 通常与超类型 table 共享一个密钥,而不是拥有自己的 PK 和 FK。 EG Student.ID既是PK又是FK.

那就加入Student>Person除了Professor>Person,eg

SELECT 
    School.Id,
    prof_person.surname prof_surname,
    student_person.surname student_surname
FROM dbo.School AS school
INNER JOIN dbo.Professor as prof
    ON school.professor_id = prof.ID
INNER JOIN dbo.Person as prof_person
    ON prof.ID = prof_person.ID
INNER JOIN dbo.Student as student
    ON school.student_id = student.ID
INNER JOIN dbo.Person as student_person
    ON student.ID = student_person.ID

INNER JOIN 是 associative,因此不需要特殊排序或括号。