Как вы храните дерева в реляционной базе данных?

У меня есть префикс trie. Какова рекомендуемая схема представления этой структуры в реляционной базе данных? Мне нужно соответствие подстрок, чтобы оставаться эффективным.

2 ответов


как о Материализованный Путь дизайн?

CREATE TABLE trie (
  path VARCHAR(<maxdepth>) PRIMARY KEY,
  ...other attributes of a tree node...
);

для хранения слова типа "stackoverflow":

INSERT INTO trie (path) VALUES
  ('s'), ('st'), ('sta'), ('stac'), ('stack'),
  ('stacko'), ('stackov'), ('stackove'), ('stackover'),
  ('stackover'), ('stackoverf'), ('stackoverflo'),
  ('stackoverflow');

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

Я не могу придумать ничего более простого и простого, чем это, и он сохраняет эффективное хранение строк и испытующий.


все сущности имеют связь с какой-либо другой? Если нет, то есть не реляционная, хэш-таблица с сериализацией сделает это.