我有一個表中有節點。我想要有不同的這些節點組,所以如果我想刪除節點,我也可以根據需要刪除整個組。在SQL表中引用其他行的最佳方式是什麼?
這樣做最好的方法是什麼?
我想也許用group ID做一個表,並在每個節點中添加一行說明它屬於哪個組ID,但這似乎並不是對我做的最好方法。
任何想法將是巨大的,
感謝
我有一個表中有節點。我想要有不同的這些節點組,所以如果我想刪除節點,我也可以根據需要刪除整個組。在SQL表中引用其他行的最佳方式是什麼?
這樣做最好的方法是什麼?
我想也許用group ID做一個表,並在每個節點中添加一行說明它屬於哪個組ID,但這似乎並不是對我做的最好方法。
任何想法將是巨大的,
感謝
到類似你已經提出:
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_ID刪除節點或刪除組本身,這將刪除所有孩子NODEs。
如果您需要將NODE分配給不同的GROUP,則需要第三個表,例如將GROUP_ID鏈接到NODE_ID的GROUP_NODE,但我不認爲你想要。
你可以有3個表,一個是你的節點,一個是你的組和一個用於您的組成員。喜歡的東西:
Nodes
-----
id (pk)
name
,
Group
----------
id (pk)
name
description
,
NodeGroup
----------
groupId (pk)
nodeId (pk)
這將允許你分配給多個組節點(一對多的關係),也將讓您輕鬆找出哪些節點屬於給定的組。
如果關係的基數是零到許多,
如果關係的基數是一個一對多(意味着節點必須屬於一個組),
如果節點與組之間的關係的基數是許多一對多,那麼你必須引入一個關聯實體混進去,因爲許多一對多關係都沒有直接由關係模型支持。這表看起來就像這樣:
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
條款,適當的外鍵。
簡單!
這個主鍵會是什麼? – user1857900
在Node表上,它將是NodeGroup表上的id,它將是NodeId和GroupId的組合 – StevieG