あなたの RDBMS がSQLServer
である場合、podiluska の共用体に沿ってビューを抽象化し、Student と Teacher の特定のフィールドを共通の名前にマッピングし、マッピングが不可能な場合は NULL でパディングします。
また、生徒と教師が個人から継承すると仮定すると (つまり、どちらも個人に対して 0..1 対 1 である)、同じ主キーを共有できます。つまり、教師と生徒に新しい代理キーは必要ありません。
私はperson.type
、その人が学生(S)か教師(T)かを決定すると仮定しました。
CREATE VIEW SubClassesOfPerson AS
SELECT p.id as PersonId,
p.name as PersonName,
p.OtherBaseFieldsHere,
s.SomeStudentSpecificField AS MappedField1,
s.SomeStudentSpecificFieldX AS MappedFieldX,
s.SomeStudentSpecificField as MappedFieldForStudentOnly,
NULL as MappedFieldForTeacherOnly -- Pad this because it can't be mapped
FROM person p
INNER JOIN student s
on s.person_id = p.id AND p.type = 'S'
UNION
SELECT p.id as PersonId,
p.name as PersonName,
p.OtherBaseFieldsHere,
t.SomeTeacherSpecificField AS MappedField1,
t.SomeTeacherSpecificFieldX AS MappedFieldX,
NULL as MappedFieldForStudentOnly, -- Pad this because it can't be mapped
t.SomeTeacherSpecificField as MappedFieldForTeacherOnly
FROM person p
INNER JOIN teacher t
on t.person_id = p.id AND p.type = 'T'