我们正在为一个新的网络应用程序设计表,并且在为顶级表找到最佳设计方面遇到了一些问题。
我们对此进行了几次运行,当我们深入到子网、VLans、VPLS和位置之间的多到多关系时,仍然会遇到问题。我们试图使用一个关联表,该表包含来自每个子网、Vlan、VPLS和Location表的外键,但是当我们试图创建关系时会遇到问题(比如,如果存在现有的关系--我们首先删除这些关系,然后创建新的关系)。
有人能给我关于设计这些表格的最佳方法的想法吗?
发布于 2014-07-31 23:29:03
我建议创建一个包含子网、VLAN和VPLS的表;然后您可以拥有一个简单的自连接表。如果这三个概念都有大量的唯一字段,则可以使用垂直分区,并为这三个概念创建一个姐妹表。使用伪代码:
* Networks
NetworkID PK
* Locations
LocationID PK
* SubNetworks -- This concept encompasses SubNets, VLANs, and VPLSs
SubNetworkID PK,
NetworkID NOT NULL REFERENCES Networks
* SubNetworkLocations
SubNetworkID NOT NULL REFERENCES SubNetworks,
LocationID NOT NULL REFERENCES Locations,
PRIMARY KEY (SubNetworkID, LocationID)
* SubNets
SubNetworkID PK REFERENCES SubNetworks
-- Additional fields specific for this type of sub-network
* VLANs
SubNetworkID PK REFERENCES SubNetworks
-- Additional fields specific for this type of sub-network
* VPLSs
SubNetworkID PK REFERENCES SubNetworks
-- Additional fields specific for this type of sub-network
* SubNetworkRelationships
SubNetworkA NOT NULL REFERENCES SubNetworks,
SubNetworkB NOT NULL REFERENCES SubNetworks,
PRIMARY KEY (SubNetworkA, SubNetworkB),
UNIQUE (SubNetworkB, SubNetworkA) -- For efficient querying from the other direction与任何多对多表一样,在插入新行之前,请确保插入到SubNetworkRelationships中的sproc检查是否存在{ A,B}和{ B,A}。您可以使用check约束来防止子网络与其本身相关。
在这个模型中,没有RDBMS级别的规则强制执行“如果两个子网络相关,它们必须有所有相同的位置。”我要走到一边,假设所有这些连接在一起的子网络也必须属于同一个Network。如果你真的想要这个
* Networks
* Locations
* SubNetworkGroups
SubNetworkGroupID PK,
NetworkID NOT NULL REFERENCES Networks
* SubNetworkGroupLocations
SubNetworkGroupID NOT NULL REFERENCES SubNetworkGroups,
LocationID NOT NULL REFERENCES Locations,
PRIMARY KEY (SubNetworkGroupID, LocationID)
* SubNetworks
SubNetworkID PK
* SubNetworkGroupMemberships
SubNetworkGroupID NOT NULL REFERENCES SubNetworkGroups,
SubNetworkID NOT NULL REFERENCES SubNetworks,
PRIMARY KEY (SubNetworkGroupID, SubNetworkID)
* SubNets
* VLANs
* VPLSsSubNetworks的一个群体属于一个Network,但属于零或多个Locations。一个SubNetwork可以属于多个组。您仍然需要强制执行一个子网络所属的各个组都有相同的位置,所以我不确定这能买到多少钱。
https://dba.stackexchange.com/questions/72880
复制相似问题