2015-02-10 1 views
0

Я очень новичок в мире HierarchyId и пытаюсь реализовать HierarchyId() в моем дизайне SQLServer, и у меня создалось впечатление, что SQL Server допускает только один корневой узел на столбец для каждой таблицы, и если я попытаюсь сделать что-то вроде следующего, если в таблице уже есть узел Root, то он должен без ошибок или проливают предупреждение:Предоставляет ли SQL Server «НЕ разрешать» несколько корней?

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

Мое предположение было основано на некоторых из нитей, которые я прочитал:

SQL 2008 HierarchyID with Multiple Root Nodes

Однако, похоже, делает SQL сервер нет проблем с наличием нескольких корневых потому что запрос вставки выше работает отлично, без каких-либо ошибок/предупреждений. Что-то изменилось с SQL Server 2008, поскольку я использую SQL Server 2012? Или на моей стороне было какое-то недоразумение?

ответ

1

Как и любой другой столбец непервичного ключа, вы можете иметь несколько значений в столбце, если значение не ограничено. ИерархияID не является исключением. Вы можете иметь несколько корней для вашего случая использования, если HierarchyID не является первичным ключом. Однако, если вы хотите ограничить узел, вам нужно сделать HierarchyID основным ключом, тогда у вас может быть только 1 корень с множеством узлов под корнем.

Microsoft обсуждает, как обеспечить уникальность здесь:
https://technet.microsoft.com/en-us/library/Bb677212(v=SQL.105).aspx

 Смежные вопросы

  • Нет связанных вопросов^_^