我有一个表中有节点。我想拥有这些节点的不同组,这样如果我想删除一个节点,我也可以根据需要删除整个组。
关于这个问题的最佳方法是什么?
我想可能会创建一个包含组ID的表,并在每个节点中添加一行,说明它属于哪个组ID,但这似乎不是对我这样做的最佳方法。
任何想法都会很棒,
感谢
答案 0 :(得分:1)
与您提议的相似:
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本身,这将删除所有子NODE。
如果您需要将NODE分配给不同的GROUP,那么您需要第三个表格,例如GROUP_NODE将GROUP_IDs链接到NODE_IDs,但我认为你不想这样。
答案 1 :(得分:1)
如果关系的基数为零对多,
如果关系的基数是一对多(意味着一个节点必须属于一个组),
如果节点和组之间关系的基数是多对多,那么你必须在混合中引入一个关联实体,因为多对多
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
子句添加到相应的外键中。
容易!
答案 2 :(得分:0)
您可以有3个表,一个用于您的节点,一个用于您的组,一个用于您的组成员身份。类似的东西:
Nodes
-----
id (pk)
name
,
Group
----------
id (pk)
name
description
,
NodeGroup
----------
groupId (pk)
nodeId (pk)
这将允许您将节点分配给多个组(一对多关系),并且还可以让您轻松找出属于给定组的节点。