规范化数据库表

时间:2015-03-03 10:19:44

标签: sql database-normalization

我在数据库设计方面很安静,我正在尝试一个测试用例来跟踪学生。 在下图中,学生可以在学校或俱乐部。为此,我创建了LocationId,它可以作为学生所在地的全球ID。 enter image description here

但问题是我依赖于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.

如何摆脱这些情况并仍然维持规范化规则。

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

1 个答案:

答案 0 :(得分:0)

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

看一下关于继承的this comprehensive answer。例如,您可以将SCHOOLCLUB表统一到一个名为PLACE的表中,或者在表SCHOOL中同时包含CLUBSTUDENT列约束条件是其中一个必须是NULL