Database design 在表每类型(TPT)继承中的父级或子级添加列
拥有不同类型的资产,一些基于技术的资产应该有一个IP列,并且该IP应该是唯一的。但非技术资产甚至不会有IP列。目前,我将数据存储如下:- 但我不确定IP地址存储在哪里,我有以下方法:-Database design 在表每类型(TPT)继承中的父级或子级添加列,database-design,Database Design,拥有不同类型的资产,一些基于技术的资产应该有一个IP列,并且该IP应该是唯一的。但非技术资产甚至不会有IP列。目前,我将数据存储如下:- 但我不确定IP地址存储在哪里,我有以下方法:- 将其存储在“资产”父表中,这样我就可以将其设置为唯一密钥,并保证基于技术的资产不会具有相同的IP。但缺点是,对于所有非技术资产,IP列始终为空 第二种方法;是将IP列添加到每个基于技术的表中。这将防止空值,但需要自定义工作来保证唯一性。因为我只能保证每个表的唯一性,而不能保证所有基于技术的资产的唯一性 那么,有
TechnologyAsset
,该表继承自Asset
。然后服务器
和路由器
可以从TechonlogyAsset
继承。
编辑:
你的第二个评论完全改变了一切。您提供的两个选项都不允许将多个IP地址用于单个资产。在这种情况下,您应该创建一个ipaddress
表,然后该表有一个指向Asset
的外键。这样,您就可以为给定的资产拥有零个、一个或多个IP地址
第二次编辑:
关于第1点,是的,它会导致数据损坏或无效。在性能和防错之间有一个内在的权衡。索引有助于提高性能,并且仍然保持规范化,但是在世界上所有索引中添加该TypeId的性能是无与伦比的
关于第2点,我认为在强制某些资产拥有1个IP、某些资产拥有0个IP和其他资产拥有多个IP的同时,保持IP的唯一性是相当困难的。我正在起草一些东西,但是查询和插入,更不用说更新了,这将是一个真正的痛苦
我建议通过应用程序业务规则、存储过程等强制执行这些规则。老实说,我以前没有做过这种多重继承吗?但是,在关系数据库中拥有这种多级继承是最佳做法吗?我没有显示的某些资产可能有多个与其相关的IP地址。你说得对,你能看到我的编辑和我的新数据库关系图吗。新图表将解决IP地址的唯一性问题。但也造成了一些其他问题。。