Справка по проектированию базы данных - иерархические данные - PullRequest
1 голос
/ 19 ноября 2010

Итак, у меня есть таблица учетных записей пользователей (пользователей).Для субсчетов должна быть функциональность.

Так, например, компания с именем Dunder Mifflin может иметь учетную запись.У компании будут субсчета, бухгалтерия и продажи.Бухгалтерский счет будет иметь субсчета для Кевина, Анжелы и Оскара.И количество уровней не ограничено.

Моя первоначальная идея состояла в том, чтобы создать такую ​​таблицу:

CREATE TABLE Users
(
    UserID INTEGER,
    ParentUserID INTEGER,
    ...
)

, где ParentUserID основного аккаунта будет просто нулевым, а субсчетсодержит идентификатор пользователя его родителя.

Это хороший дизайн для этого?Я не знаю другого пути.

Ответы [ 4 ]

4 голосов
/ 19 ноября 2010

это хороший дизайн для него.Альтернативой является использование типа данных HIERARCHID для отображения иерархии, но его поддержка ограничена (создание отчетов, инструменты ORM и т.Просто не так уж много альтернатив, которые явно не являются дампом (например, наличие полей X для иерархии).Я точно не знаю ни одной альтернативы.

2 голосов
/ 19 ноября 2010

Это называется самообъединением и, да, это стандартный способ представления иерархических данных. Вам, вероятно, понадобится выполнить запрос типа this , чтобы получить что-то вроде всех пользователей, связанных с Dunder Mifflin.

2 голосов
/ 19 ноября 2010

Это хороший дизайн, и у вас действительно нет другого выбора. Читайте о CTE (общие табличные выражения) , которые помогут вам запросить эти иерархические отношения (рекурсивно.)

Рекурсивный запрос иерархических структур был возможен в Sql Server 2000, но с CTE значительно упрощается с 2005 года.

Таблица, которая присоединяется к себе, будет выглядеть примерно так в вашем конструкторе: Self Join Cap

0 голосов
/ 19 ноября 2010

Для чего используются субсчета?Дизайн базы данных - это серьезное дело.В предыдущих ответах утверждается, что дизайн, который вы демонстрируете, хорош по определению.Когда у вас есть иерархические данные, да, у вас всегда есть родительский идентификатор.Однако очень часто у вас есть какая-то групповая учетная запись, к которой относятся эти учетные записи.Это было бы более подходящим местом для настройки иерархии.

...