Создание таблицы таксономии в 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. Итак, предполагая РСУБД,см. мой вопрос по теме для перечисления полудюжины возможностей. Для вашей ситуации я бы привел с материализованным путем, чтобы легко увидеть семейное древо. Если иерархия изменяется регулярно, я, вероятно, также моделирую как список смежности и обновляю материализованный путь используя триггер.