0

有不同类型的资产,一些基于技术的资产应该有一个IP列,这个IP应该是唯一的。但非技术资产甚至不会有IP栏目。目前我将数据存储如下: - 在此处输入图像描述

但我不确定在哪里存储 IP 地址,我有以下方法:-

  1. 将其存储在“资产”父表中,这样我就可以将其设置为唯一键,并保证任何基于技术的资产都不会拥有相同的 IP。但缺点是对于所有非技术资产,IP 列将始终为空。
  2. 第二种方法;就是在每个基于技术的表中添加一个 IP 列。这将防止空值,但需要自定义工作以保证唯一。因为我只能保证每张桌子的唯一性,而不是所有基于技术的资产..

那么任何人都可以就我应该遵循哪种方法提出建议,或者还有另一种我不知道的方法吗?

BR

:::编辑:::

我目前有以下数据库结构:- 在此处输入图像描述

目前我看到以下几点: -

  1. 我在基础 Asset 表中引入了多余的 AssetTypeID 列,这样我就可以知道资产类型而无需连接表。这可能会破坏规范化。

  2. 在我的上述架构中,我无法控制(在数据库级别)哪些资产应该有 IP,哪些资产不应该有 IP,以及哪些资产可以/不能有多个 IP。那么有没有办法改进我的架构来处理这两点。

提前感谢您的帮助。

4

1 回答 1

1

您可以创建另一个TechnologyAsset继承自Asset. 然后Servers并且Router可以继承自TechonlogyAsset.

编辑:

您的第二条评论完全改变了事情。您提供的任何一个选项都不允许对单个资产使用多个 IP 地址。在这种情况下,您应该创建一个IPAddresses表,然后该表具有指向Asset. 这样,您可以为给定资产拥有零个、一个或多个 IPAddress。

第二次编辑:

关于第 1 点,是的,它可能导致数据损坏或无效。在性能和防错之间存在固有的权衡。索引可以帮助提高性能并仍然保持规范化,但您不会超过将 TypeId 添加到世界上所有索引的性能。

关于第 2 点,我认为在强制某些资产拥有 1 个 IP,一些拥有 0 个 IP,而其他资产拥有多个从架构角度来看的能力时,保持 IP 的唯一性是相当困难的。我正在绘制一些东西,但是查询和插入真的很痛苦,更不用说更新了。

我建议通过应用程序业务规则、存储过程等来执行这些规则。

于 2013-06-26T23:37:10.693 回答