Я должен не согласиться с Josh. Что происходит, если Вы используете огромную иерархическую структуру как организация компании. Люди могут присоединиться/оставить к компании, изменить линии оповещения и т.д... Поддержание "расстояния" было бы большой проблемой, и необходимо будет поддержать две таблицы данных.
Этот запрос (SQL Server 2005 и выше) позволил бы Вам видеть полную строку любого человека И вычисляет их место в иерархии, и это только требует единственной таблицы информации о пользователе. Это может быть изменено для нахождения любых дочерних отношений.
--Create table of dummy data
create table #person (
personID integer IDENTITY(1,1) NOT NULL,
name varchar(255) not null,
dob date,
father integer
);
INSERT INTO #person(name,dob,father)Values('Pops','1900/1/1',NULL);
INSERT INTO #person(name,dob,father)Values('Grandma','1903/2/4',null);
INSERT INTO #person(name,dob,father)Values('Dad','1925/4/2',1);
INSERT INTO #person(name,dob,father)Values('Uncle Kev','1927/3/3',1);
INSERT INTO #person(name,dob,father)Values('Cuz Dave','1953/7/8',4);
INSERT INTO #person(name,dob,father)Values('Billy','1954/8/1',3);
DECLARE @OldestPerson INT;
SET @OldestPerson = 1; -- Set this value to the ID of the oldest person in the family
WITH PersonHierarchy (personID,Name,dob,father, HierarchyLevel) AS
(
SELECT
personID
,Name
,dob
,father,
1 as HierarchyLevel
FROM #person
WHERE personID = @OldestPerson
UNION ALL
SELECT
e.personID,
e.Name,
e.dob,
e.father,
eh.HierarchyLevel + 1 AS HierarchyLevel
FROM #person e
INNER JOIN PersonHierarchy eh ON
e.father = eh.personID
)
SELECT *
FROM PersonHierarchy
ORDER BY HierarchyLevel, father;
DROP TABLE #person;
Проект JSDoc больше не активен, вам следует взглянуть на JsDoc Toolkit .
Вы также можете проверить следующие альтернативы: