-1

ノードを持つテーブルがあります。ノードを削除したい場合に、必要に応じてグループ全体を削除できるように、これらのノードのさまざまなグループを作成したいと考えています。

これについて最善の方法は何ですか?

グループIDを含むテーブルを作成し、各ノードにグループIDが属する行を追加することを考えましたが、これは私には最善の方法ではないようです。

どんなアイデアでもいいのですが、

ありがとう

4

3 に答える 3

1

リレーションシップのカーディナリティが0対多の場合、

  • ノードテーブルにグループテーブルへの外部キーを与える
  • 外部キー列をヌル可能にする

関係のカーディナリティが1対多の場合(ノードがグループに属している必要があることを意味します)、

  • ノードテーブルにグループテーブルへの外部キーを与える
  • 外部キー列を null 非許容にする
  • ノードとグループの関係の性質が
    • 識別。これは、従属エンティティ (ノード) が包含エンティティ (グループ) の存在に基づいていることを意味します。あるエンティティから別のエンティティに移動することはできません。その場合は、外部キー列をノード テーブルの主キーの一部にします。
    • 非識別。これは、従属エンティティ (ノード) の存在が、特定の包含エンティティ (グループ) の存在に依存しないことを意味します。あるエンティティから別のエンティティに移動できます。その場合、外部キー列はノード テーブルの主キーから独立している必要があります。

ノードとグループの関係のカーディナリティが多対多の場合、多対多の関係はリレーショナル モデルで直接サポートされないため、関連エンティティをミックスに導入する必要があります。そのテーブルは次のようになります。

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、適切な外部キーに句を追加します。

簡単!

于 2013-07-11T17:15:47.257 に答える
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 を削除するか、すべての子 NODE を削除する GROUP 自体を削除できます。

NODE を異なる GROUP に割り当てる必要がある場合は、GROUP_ID を NODE_ID にリンクする GROUP_NODE などの 3 番目のテーブルが必要になりますが、それは必要ないと思います。

于 2013-07-11T16:25:14.530 に答える
0

ノード用、グループ用、グループ メンバーシップ用の 3 つのテーブルを作成できます。何かのようなもの:

Nodes
-----
id (pk)
name

Group
----------
id (pk)
name
description

NodeGroup
----------
groupId (pk)
nodeId  (pk)

これにより、ノードを複数のグループ (1 対多の関係) に割り当てることができ、特定のグループに属しているノードを簡単に把握できるようになります。

于 2013-07-11T16:21:14.560 に答える