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