首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >具有多到多关系的子表的表设计

具有多到多关系的子表的表设计
EN

Database Administration用户
提问于 2014-07-31 19:53:09
回答 1查看 379关注 0票数 2

我们正在为一个新的网络应用程序设计表,并且在为顶级表找到最佳设计方面遇到了一些问题。

  1. 网络是顶级表。
  2. 网络下有:子网、VirtualLan (VLan)和虚拟专用局域网(VPLS)。
  3. 网络可以有一个子网、一个VLan和一个VPLS。Subnets、VLans和VPLS,如果它们存在,它们必须属于网络。
  4. 子网、VLans和VPLS可以存在许多到多个关系.
  5. Subnets、VLans和VPLSs都有一个或多个位置(S)(例如-波士顿、华盛顿),如果它们之间有任何关系,那么关系中的位置必须都是一致的。

我们对此进行了几次运行,当我们深入到子网、VLans、VPLS和位置之间的多到多关系时,仍然会遇到问题。我们试图使用一个关联表,该表包含来自每个子网、Vlan、VPLS和Location表的外键,但是当我们试图创建关系时会遇到问题(比如,如果存在现有的关系--我们首先删除这些关系,然后创建新的关系)。

有人能给我关于设计这些表格的最佳方法的想法吗?

EN

回答 1

Database Administration用户

发布于 2014-07-31 23:29:03

我建议创建一个包含子网、VLAN和VPLS的表;然后您可以拥有一个简单的自连接表。如果这三个概念都有大量的唯一字段,则可以使用垂直分区,并为这三个概念创建一个姐妹表。使用伪代码:

代码语言:javascript
运行
复制
* 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。如果你真的想要这个

代码语言:javascript
运行
复制
* 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
* VPLSs

SubNetworks的一个群体属于一个Network,但属于零或多个Locations。一个SubNetwork可以属于多个组。您仍然需要强制执行一个子网络所属的各个组都有相同的位置,所以我不确定这能买到多少钱。

票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/72880

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档