1

我正在设计一个数据库,由于我在这个主题方面没有太多经验,所以我面临着一个我不知道如何去解决的问题。在数据库设计的逻辑设计阶段实现泛化?

在我的概念模型中,我有一个客户命令和库存系统监视的被称为“车辆”的对象。这种超类型有两个子类型“汽车”和“摩托车”。用户可以订购一个或另一个,甚至两个。

现在我处于逻辑设计阶段,我需要知道如何让系统允许两种不同类型的产品。我遇到的问题是,如果我把每个对象分开的属性放到同一个关系中,那么我将有对某些对象没有用处的列。例如,如果我只有一个拥有“汽车”和“摩托车”的泛型表,我称其为“车辆”及其所有属性,则车辆不需要某些摩托车属性,摩托车不会需要所有的汽车属性。

有没有办法解决这个问题?

+1

[类似于数据库设计中的继承]的可能重复(http://stackoverflow.com/questions/554522/something类似于数据库设计中的继承) –

回答

3

决定将需要以共享信息的数量为指导。我会从识别所有属性和关于它们的规则开始。

如果大部分信息是共享的,则可能不会拆分为多个表。另一方面,您总是可以拆分表格,然后加入视图以方便使用。

例如,您可能只有一个只有共享信息的车辆表,然后是带有车辆表的外键的汽车表和带有车辆表的外键的摩托车表。确保您没有摩托车排和摩托车排涉及同一辆车是有一定难度的,所以还有其他可能性来减轻这种情况 - 但如果大多数信息都是常见的,那么这是不必要的,您只是在单个车辆表中有未使用的列。你甚至可以使用约束来强制执行,以确保列对于不应填写的类型为NULL。

+0

同意。纯粹的方法是对所有共享属性使用VEHICLE表,并为不同的属性使用分区属性和MOTORCAR和MOTORCYCLE表。您还可以拥有加入超类型和子类型的视图(MOTORCAR_VIEW和MOTORCYCLE_VIEW?),为您提供任何类型或其他类型实例的完整图片。您也可以将其作为您的概念模型进行建模,但将其平铺到物理模型中的单个表格中。使用由您的分区属性驱动的约束将保持您的物理表清洁。 –