相关疑难解决方法(0)

类别之间的超类型/子类型决定:完全不相交或不完全重叠

我正在构建一个库存数据库,用于存储 IT 硬件,例如台式计算机、笔记本电脑、交换机、路由器、手机等。我正在使用超类型/子类型模式,其中所有设备都存储在一个表中,以及特定信息被放入子类型表中。我的困境是在以下两种设计之间进行选择:

在此处输入图片说明

在上图中,所有设备共享公共子类型。例如,台式计算机和膝上型计算机将在下表中具有记录:Device、NetworkDevice。交换机将在以下位置记录:设备、网络设备。路由器将在以下位置记录:Device、NetworkDevice、WANDevice。我们跟踪位置的任何设备都将在位置记录。我认为此设置的一些优点和缺点:

  • 优点:基于通用字段(如主机名或位置 ID)选择记录更容易。
  • 优点:没有空字段。
  • 缺点:应包含在特定设备的 CRUD 操作中的表并不明显,可能会混淆未来的 DBA。

在底部图表中,所有设备都有自己的子类型(此处未显示更多设备类别)。在这种情况下,很明显哪些表记录被插入或从中选择。台式电脑和笔记本电脑进入电脑等。我认为这个设置的一些优点和缺点:

  • 优点:对于子类型的 CRUD 操作使用哪些表是显而易见的。
  • 优点:只需使用一张表进行 CRUD 操作。
  • 缺点:根据公共子类型字段选择记录需要组合所有表,例如按主机名或位置 ID 搜索。

在这两种情况下,ClassDiscriminator 字段都放置在子类型表中,与 CHECK 约束一起使用以控制可以插入的类型。

是否有关于哪种设计更好的建议,或者这完全是意见问题并取决于数据库的预期目的?

编辑:我有一个关于“NetworkDevice”表的重叠性质的具体问题。该表旨在保存具有主机名和/或 IP 地址的任何设备的网络信息,无论是计算机、交换机还是路由器。该表的重叠性质是否会导致问题,或者以这种方式实现它是否可以?

预先感谢您提供的任何意见。请询问是否需要任何其他信息。

database-design subtypes

12
推荐指数
1
解决办法
3万
查看次数

标签 统计

database-design ×1

subtypes ×1