ノードを持つテーブルがあります。ノードを削除したい場合に、必要に応じてグループ全体を削除できるように、これらのノードのさまざまなグループを作成したいと考えています。
これについて最善の方法は何ですか?
グループIDを含むテーブルを作成し、各ノードにグループIDが属する行を追加することを考えましたが、これは私には最善の方法ではないようです。
どんなアイデアでもいいのですが、
ありがとう
ノードを持つテーブルがあります。ノードを削除したい場合に、必要に応じてグループ全体を削除できるように、これらのノードのさまざまなグループを作成したいと考えています。
これについて最善の方法は何ですか?
グループIDを含むテーブルを作成し、各ノードにグループIDが属する行を追加することを考えましたが、これは私には最善の方法ではないようです。
どんなアイデアでもいいのですが、
ありがとう
リレーションシップのカーディナリティが0対多の場合、
関係のカーディナリティが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
、適切な外部キーに句を追加します。
簡単!
あなたがすでに提案したものと同様:
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 を削除するか、すべての子 NODE を削除する GROUP 自体を削除できます。
NODE を異なる GROUP に割り当てる必要がある場合は、GROUP_ID を NODE_ID にリンクする GROUP_NODE などの 3 番目のテーブルが必要になりますが、それは必要ないと思います。
ノード用、グループ用、グループ メンバーシップ用の 3 つのテーブルを作成できます。何かのようなもの:
Nodes
-----
id (pk)
name
、
Group
----------
id (pk)
name
description
、
NodeGroup
----------
groupId (pk)
nodeId (pk)
これにより、ノードを複数のグループ (1 対多の関係) に割り当てることができ、特定のグループに属しているノードを簡単に把握できるようになります。