0

私は HierarchyId の世界に非常に慣れておらず、HierarchyId() を SQLServer 設計に実装しようとしていますが、SQL Server ではテーブルごとに列ごとに 1 つのルート ノードしか許可されていないという印象を受けました。ノードの場合、エラーが発生するか、警告がスローされます。

INSERT INTO dbo.TeamHierarchy
                ( TeamNode, TeamId, TeamNodeName )
        VALUES  ( HierarchyId::GetRoot(), -- TeamNode - hierarchyid
                  1, -- TeamId - int
                  'TeamContainer'  -- TeamNodeName - varchar(50)
                  )

私の推測は、私が読んだいくつかのスレッドに基づいていました。

複数のルート ノードを持つ SQL 2008 HierarchyID

ただし、上記の挿入クエリはエラーや警告なしで完全に機能するため、SQL サーバーは複数のルートを持つことに問題はないようです。SQL Server 2012 を使用しているため、SQL Server 2008 以降に何か変更はありますか? それとも私の側に誤解がありましたか?

4

1 に答える 1

1

他の非主キー列と同様に、値が制約されていなければ、1 つの列に複数の値を含めることができます。HierarchyID も例外ではありません。HierarchyID が主キーでない場合は、ユース ケースに複数のルートを持つことができます。ただし、ノードを制約する場合は、HierarchyID をプライマリ キーにする必要があります。その場合、ルートの下に多数のノードを持つ 1 つのルートしか持てません。

Microsoft は、ここで一意性を強制する方法について説明しています:
https://technet.microsoft.com/en-us/library/Bb677212(v=SQL.105).aspx

于 2015-08-10T00:01:25.477 に答える