在一对一关系中嵌入与外部表?

ran*_*guy 5 database-design

我目前正在学习有关数据库的大学课程。

考虑以下建模场景,其中汽车仅存在于其拥有的学生的上下文中:

Student (0,1) <---> (1,1) Car
Run Code Online (Sandbox Code Playgroud)

在我查看讲座材料时,有两种转换可用于此:

1)将car放入它自己的实体类型并创建一个student-car关系(将car的主键存储在student中)。

2) 使用布尔标志将汽车的属性“嵌入”到学生实体类型中has_car

1) 学生表和整个数据库的大小更小,因为只有一个 NULL 被保存到 car_id。但是,让学生拥有汽车需要从外部表中获取汽车的属性。

2) 不需要进入外部表。然而,数据库和学生表现在更大了,因为我们保存了所有汽车的属性,即使是没有汽车的学生也是如此。

如果有车的学生很少,1) 是有道理的。

如果我们只存储很少的关于汽车的属性,2)可能是有意义的。

在更一般的情况下,如何决定使用哪种转换?汽车是否可以拥有大量属性并且 2)仍然有意义?是否可以通过计算汽车的属性占用的空间来计算正确的解决方案?