Создание таблицы таксономии в MySQL
Я создаю ботаническую базу данных, где растения будут организованы по их таксономии:
жизнь Домен Царство Тип Класс Порядок Семья Род Виды
Я рассматривал возможность использования примера, приведенного в статье управление иерархическими данными в MySQL, однако он добавляет приведенный выше список в качестве записей внутри таблицы....и я не уверен, что это лучшее, что можно сделать, так как у меня будет несколько видов на род и несколько родов на семья и так далее. Что бы вы предложили, это лучший способ подойти к этой проблеме. Спасибо заранее.
5 ответов
Я работал с аналогичными данными, и я сделал это в 2 частях. В синтаксисе PostgreSQL.
сначала структура таксономии (семья, род, вид,...):
CREATE TABLE taxonomic_units (
  id         serial        PRIMARY KEY,
  name       varchar(20)   NOT NULL,
  parent_id  integer       REFERENCES taxonomic_units(id)
);
1 | Life    | NULL
2 | Domain  | 1
...
7 | Family  | 6
8 | Genus   | 7
9 | Species | 8
во-вторых, описание и хранение ботанических данных:
CREATE TABLE taxons (
  id                 serial        PRIMARY KEY,
  suptaxon_id        integer       REFERENCES taxons(id),
  taxonomic_unit_id  integer       NOT NULL REFERENCES taxonomic_units(id),
  name               varchar(50)   NOT NULL,
  authority          varchar(50)
);
100 | NULL | 8 | Ocimum    | L.
101 | 100  | 9 | basilicum | L.
102 | 100  | 9 | gratissim | L.
Я не уверен, что я действительно покупаю эту статью. Структуры графов будут нужны когда сами категории изменчивы. Например, все внезапные таксономисты решили добавить три новых уровня между родами и видами и так далее.
из статьи:
... управление иерархическими данными-это не то, для чего предназначена реляционная база данных.
На самом деле, это именно то, что он предназначен для:
http://en.wikipedia.org/wiki/Hierarchical_database_model
иерархическая модель данных потеряла связь, поскольку реляционная модель Codd стала стандартом де-факто, используемым практически всеми основными системами управления базами данных.
сначала я бы написал представление, которое объединило все ваши таблицы, чтобы они были вашими столбцами:
Life Domain Kingdom Phylum Class Order Family Genus Species
теперь вы можете запросить это представление любым способом, который вам нравится, а не нужно беспокоиться о любых соединениях. Легко :)
вы можете загрузить полные данные таксономии изhttp://itis.gov и данные обновляются более или менее ежемесячно. Данные, которые они предоставляют, включают Материализованный Путь -- каждый вид в базе данных имеет строку всех уровней над ней, например строку хлебных крошек или путь к файловой системе.
Я использовал эти данные для разработки демо в моей презентации модели для иерархических данных. Я преобразовал данные материализованного пути в Closure Таблица.
Это больше похоже на график. Интересно, если СУБД Neo4j было бы лучшим выбором.
существует несколько способов представления иерархических данных в реляционной базе данных, хотя решение NoSQL может быть проще работать с @duffymo. Итак, предполагая РСУБД,см. мой вопрос по теме для перечисления полудюжины возможностей. Для вашей ситуации я бы привел с материализованным путем, чтобы легко увидеть семейное древо. Если иерархия изменяется регулярно, я, вероятно, также моделирую как список смежности и обновляю материализованный путь используя триггер.
