我有一个表,其中有节点。我想拥有这些节点的不同组,这样如果我想删除一个节点,我也可以根据需要删除整个组。
解决此问题的最佳方法是什么?
我想也许可以制作一个包含组 ID 的表,并在每个节点中添加一行,说明它属于哪个组 ID,但这对我来说似乎不是最好的方法。
任何想法都会很棒,
谢谢
我有一个表,其中有节点。我想拥有这些节点的不同组,这样如果我想删除一个节点,我也可以根据需要删除整个组。
解决此问题的最佳方法是什么?
我想也许可以制作一个包含组 ID 的表,并在每个节点中添加一行,说明它属于哪个组 ID,但这对我来说似乎不是最好的方法。
任何想法都会很棒,
谢谢
如果关系的基数是零对多,
如果关系的基数是一对多(意味着一个节点必须属于一个组),
如果节点和组之间关系的基数是多对多,那么您必须在混合中引入关联实体,因为关系模型不直接支持多对多关系。该表将如下所示:
create table dbo.GroupNode
(
group_id int not null ,
node_id int not null ,
constraint GroupNode primary key ( group_id , node_id ) ,
constraint GroupNode_FK01 foreign key references dbo.Node( node_id ) ,
constraint GroupNode_FK02 foreign key references dbo.Group( group_id ) ,
)
最后,如果您希望在删除节点或组时从属实体实例消失,请将on delete cascade
子句添加到适当的外键。
简单的!
与您已经提出的类似:
1) Create a GROUP table, with a GROUP_ID primary key
2) Create a NODE table, with a foreign key to NODE_GROUP
3) Define the foreign key relationship as DELETE CASCADE
如果要删除 GROUP 中的所有节点,则可以删除具有给定 GROUP_ID 的 NODE 或删除 GROUP 本身,这将删除所有子节点。
如果您需要将节点分配给不同的组,那么您将需要第三个表,例如 GROUP_NODE,它将 GROUP_ID 链接到 NODE_ID,但我认为您不希望这样。
您可以有 3 张表,一张用于您的节点,一张用于您的组,一张用于您的组成员资格。就像是:
Nodes
-----
id (pk)
name
,
Group
----------
id (pk)
name
description
,
NodeGroup
----------
groupId (pk)
nodeId (pk)
这将允许您将节点分配给多个组(一对多关系),并且还可以让您轻松确定哪些节点属于给定组。