иерархия моделирования / каталог в реляционной базе данных - PullRequest
1 голос
/ 28 июля 2011

Я хотел бы смоделировать иерархию / каталог, как показано ниже, в таблице MySQL.Вы можете увидеть ниже схему таблицы, о которой я думал.Однако каталог, о котором я говорю, будет состоять из 100 000 элементов, а глубина будет ~ 5-10 уровней.Кроме того, у нас будет пул тегов, и каждый элемент каталога может быть связан с одним или несколькими тегами.Поэтому мне было интересно, есть ли лучший подход.Я читал, что некоторые люди решают разработать таблицы, которые не являются каноническими из-за высокой производительности, и я тоже оцениваю этот случай.

ps: некоторые люди используют Multi-way Trees для моделирования этого на уровне языка программирования, поэтому вопрос о том, как это закончится в базе данных, остается.

hierarchy:
A
| -> 1
     |->1
     |->2
| -> 2
| -> 3
B
| -> 1
| -> 2

table:
 ___________________________
| id      |element | father |
|---------------------------|
|  000    |   A    |  null  |
|  001    |   1    |  000   |
|  002    |   1    |  001   |
|  003    |   2    |  001   |
|  004    |   2    |  000   |
|  005    |   3    |  000   |
|  006    |   B    |  null  |
|  001    |   1    |  006   |
|  002    |   2    |  006   |
-----------------------------

1 Ответ

5 голосов
/ 28 июля 2011

Очень быстрое иерархическое дерево - это вложенный набор или дерево Celko, оно немного похоже на двоичное дерево или дерево Хаффмана, когда у вас есть механизм хранения MySQL. Недостатком является дорогое удаление и вставка. Другие СУБД также поддерживают рекурсивные запросы. Вообще я не видел много вложенных множеств. Похоже, сложно тоже создавать и поддерживать. Если вложенный набор слишком сложен и СУБД не поддерживает рекурсивные запросы, существует также материализованный путь.

  1. http://www.ibase.ru/devinfo/DBMSTrees/sqltrees.html
  2. http://en.wikipedia.org/wiki/Binary_tree
  3. http://en.wikipedia.org/wiki/Huffman_coding
  4. http://www.postgresql.org/docs/8.4/static/queries-with.html
  5. Можно ли сделать рекурсивный запрос SQL?
  6. http://www.cybertec.at/pgbook/node122.html
...