Мне нужно сохранить дерево в базе данных, так что это лучший способ сделать это? Покажите метод, который вы используете, и укажите его плюсы и минусы. (Я использую SQL Server 2005)Как сохранить дерево в базе данных SQL
ответ
Я нашел обсуждение в SQL Anti-patterns очень полезным, так как он также фокусируется на недостатках каждой реализации.
Кроме того, слайды 48-77 в this presentation повторяют, что анализы.
В нижней строке нет такой вещи, как родовое дерево, и нет серебряной пули для деревьев SQL. Вам нужно будет спросить себя о данных, о том, как и сколько они будут выбраны, изменены, будут перемещены ветви и т. Д., И на основе этих ответов будет реализовано подходящее решение.
Ну, проще всего было бы записать запись столбца ParentID, чтобы он знал, какая запись является ее родительской. Это довольно стандартная практика. Например, интернет-магазин может иметь иерархию категорий товаров. Каждая категория будет иметь ParentID. Пример. В категории «Джинсы» в базе данных одежды может быть «Штаны» в качестве родительской категории. Это немного сложнее, если вы хотите, чтобы запись указывала, кто ее дети, если вы не ограничиваете количество детей. Если вы хотите двоичное дерево, вы можете иметь столбцы LeftChildID и RightChildID. Если вы разрешаете любое количество детей, у вас может быть столбец «Дети» с идентификаторами, разделенными запятыми (например, 1,4,72,19
), но это сделает запрос довольно сложным. Если ваша база данных допускает типы массивов в столбцах, вы, вероятно, можете использовать массив вместо строки с разделителями, что было бы легко запросить, но я не уверен, поддерживает ли MS SQL Server это или нет.
Кроме этого, это зависит от того, какие данные вы моделируете, а также о том, какие операции вы планируете делать с этим деревом.
попробовать это: Hierarchies (trees) in SQL Server 2005
http://dev.mysql.com/tech-resources/articles/hierarchical-data.html
Я обнаружил, что очень полезное руководство.
Существует два основных подхода
- В каждой записи, хранить идентификатор родителя в обнуляемого колонка (корень дерева не имеет родителя) вложенная техника множественной модели
- Используй Джо Селко объяснила here и (благодаря комментарий от @onedaywhen), а также в том, что является первоисточником here
EDIT: новая ссылка для этого материала here.
Плюсы и минусы ?? !! Ты ведь шутишь, правда ?!
Celko приписывает модель вложенного набора Майклу Камфонсасу, хотя, похоже, Celko придумал эту фразу и, конечно же, отполировал и популяризировал технику. – onedaywhen
+1 - Я только что использовал статью Целько несколько недель назад, и это было очень полезно. –
Ссылки в этом ответе, к сожалению, сейчас нарушены. Кто-нибудь знает, где еще найти эту информацию? – Qqwy
Я делал это в прошлом, сохраняя данные как xml в SQL.
- 1. Как сохранить дерево зависимостей в базе данных?
- 2. Как сохранить дерево разбиения двоичного пространства в реляционной базе данных?
- 3. Как сохранить список в базе данных sql?
- 4. Хранить дерево в базе данных
- 5. Сохранить в базе данных
- 6. Дерево всех зависимостей в базе данных SQL Server
- 7. Сохранить документ в базе данных SQL Server
- 8. Struts2: сохранить SQL-запрос в базе данных
- 9. Java сохранить JavaObjects в базе данных SQL
- 10. Как представить дерево данных в SQL?
- 11. Сохранить объект в базе данных
- 12. Как сохранить время в базе данных mysql?
- 13. Как сохранить текст в базе данных tinyMCE
- 14. Как сохранить этот пароль в базе данных
- 15. jTinder Сохранить в базе данных
- 16. Как сохранить файл в базе данных?
- 17. Как сохранить URL изображения в базе данных?
- 18. Как сохранить фотографию в базе данных?
- 19. Как правильно сохранить данные в базе данных?
- 20. Как сохранить данные ревизии в базе данных?
- 21. Как сохранить форму сада в базе данных
- 22. Как сохранить данные в базе данных
- 23. Бесконечное вложенное дерево организаций в базе данных
- 24. Как сохранить данные ответа истории в базе данных sql?
- 25. Как сохранить информацию о форме в базе данных html5 sql?
- 26. Как сохранить переменную javascript в базе данных SQL?
- 27. Сохранить два значения как одно в базе данных (SQL)
- 28. Grails: как сохранить java.sql.Time-тип в базе данных sql
- 29. Как сохранить изображение в базе данных SQL Server?
- 30. Как сохранить код страницы html в базе данных sql?
Эта ссылка мертва; он перенаправляется на домашнюю страницу. – Qqwy