LibreOffice 作业。解决冗余。 "translating" 两个外键(其中一个都不存在)合二为一(超类型)

LibreOffice homework. Resolving redundancy. "translating" two foreign keys (either of which is absent) into one (supertype)

我将 LibreOffice Base 与嵌入式 HSQLDB 用于教育目的。

主题领域是 MOOC。我有以下实体: 学生、教师、用户(超类)、课程、论坛、问题、进度日志。

对于Course我想区分是Student还是Teacher,Students study many courses (n:m) and Teachers teach many (n:m);但对于问题,就我而言,我不需要任何区分 - 一个用户(学生 教师)可以在论坛 (1:n).

这是我关系的照片 Table。

请忽略 Student/Teacher 属性的冗余,我被要求至少有 6 个实体。

显然,User 不能同时将 ID_Student 和 ID_Teacher 设为非空,其中任何一个都应该是 Nan。

如何解决 free space (Nan-s) 的冗余问题,还是应该保持原样?

或者问题出在我对主题领域的特殊定义上?

我本可以在 Question 中创建 ID_user 属性,该属性本来可以同时存储学生 (1:n) 和教师 (1:n) ID,前提是他们的 ID 不会冲突。我不确定它是否正确,所以创建了单独的用户实体。

尝试使用 REFERENCES 关键字时遇到错误: 意外标记:语句 [create table students ( student_id int primary key references]

中的 REFERENCES

还有别的办法吗?我应该下载任何额外的东西以使 LibreOffice 正确执行吗?

外键是错误的方式。

用户是超类型,所以学生和老师应该有外键:

create table users ( user_id int primary key, ... );

create table students ( student_id int primary key references users ( user_id ), ... );

create table users ( teacher_id int primary key references users ( user_id ), ... );