规范化数据库表

Normalizing database tables

我在数据库设计方面是一个新手,我正在尝试一个测试用例来跟踪学生。 在下图中,学生可以在学校或俱乐部。为此,我在 LocationId 上创建了它作为学生所在位置的全局 ID。

但问题是我根据 TypeId 来确定它是俱乐部还是学校。 所以在我的数据访问查询中,我必须提出案例。伪代码是:

if TypeId == 1
search in club for the LocationId and get the clubId.
else if TypeId == 2
search in school for the LocationId and get the schoolId.

我怎样才能摆脱这些情况并仍然保持规范化规则。

非常感谢阅读。欢迎任何意见。 美好的一天!

这似乎是 table 继承的情况,解决它的方法不止一种。您使用 LOC_CONTAINER 的解决方案不起作用(正如您所注意到的),因为它需要外部代码来进行检查。

看看 this comprehensive answer 关于继承的内容。例如,您可以将 SCHOOLCLUB table 统一为一个名为 PLACE 的 table 或者同时拥有 SCHOOLCLUB table STUDENT 中的列,其中一列必须是 NULL.