Информация, связанная с узлом в структуре базы данных для древовидной структуры данных - PullRequest
2 голосов
/ 29 июня 2010

Представьте, что у вас в базе данных есть древовидная структура данных:

Level:    
 id   nextlevel    desc
  1         2       company
  2         3       department
  3         4       group

Nodes:
  id    level   parentnode
  0       1         null    -> the company
  1       2           0     -> dep 1
  2       2           0     -> dep 2
  3       3           2     -> group 1.1
  4       3           2     -> group 1.2

Я хочу хранить информацию о каждом уровне.То есть информация о компании, отделах и группах.¿Как бы вы это сделали?

Я думаю, я мог бы добавить столбец в таблицу уровней, где хранится связанная таблица.Таблица будет выглядеть следующим образом:

Level:    
 id   nextlevel    desc           table
  1         2       company       company
  2         3       department    deparments
  3         4       group         groups

И затем создайте эти таблицы:

Company:
  id level     desc            etc...
  1    1    Acme Company

Я думал о лучшем и более элегантном решении, но я не нашел никакого,Кто-нибудь может мне помочь?Это хорошее решение?

С уважением.

1 Ответ

1 голос
/ 29 июня 2010

Реляционным способом было бы иметь отдельные таблицы компаний, отделов и групп. Если вы хотите хранить различные элементы в таблицах компании, отдела и группы, то они должны быть отдельными таблицами.

Таблица компании будет просто иметь поле идентификатора компании в качестве первичного ключа. У вас будет одна строка, а в случае конгломерата - несколько строк.

Таблица отделов будет иметь поле идентификатора отдела в качестве первичного ключа. Идентификатор компании будет внешним ключом.

Таблица групп будет иметь идентификатор группы в качестве первичного ключа. Идентификатор отдела будет внешним ключом. Идентификатор компании может быть внешним ключом, если имеется несколько строк идентификатора компании.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...