Как представить деревья и их содержимое в MySQL? - PullRequest
6 голосов
/ 16 августа 2010

Мне нужно иметь возможность хранить что-то вроде этого: Структура http://i33.tinypic.com/f4dwea.jpg

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

Теперь, допустим, я хочу разрешить пользователям создавать любое количество этих структур, но вряд ли это будет больше, чем, скажем, 10. И, конечно, нам нужно иметь возможность связывать данные с ним.

Это все, чтобы иметь возможность хранить в базе данных ассоциативный массив, который выглядит так, как в псевдокоде:

my_template = {
  page_info => { description => 'hello!!!' },
  id => 0,
  content => { background_url => '12121.jpg', text => ...
}

Наличие простого способа добавить поле ко всем данным с использованием шаблона при изменении шаблона (скажем, мы добавляем keywords к page_info) было бы большим плюсом.

Я не могу понять это, большое спасибо!

1 Ответ

6 голосов
/ 16 августа 2010

Существует несколько различных способов хранения иерархических структур данных (деревьев) в MySQL.Например, вы можете выбрать:

  • Список смежностей
  • Вложенные множества
  • Перечисление пути
  • Таблица закрытия

См. презентацию Билла Карвина для более подробной информации о плюсах и минусах каждого.

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