在MySQL中创建分类表

时间:2010-11-21 21:21:35

标签: sql mysql database taxonomy hierarchy

我正在创建一个植物数据库,其中的植物将按其分类法进行组织:

生命 域 王国 门 类 订购 家庭 种 种

我正在考虑使用文章Managing Hierarchical Data in MySQL提出的示例,但是它将上面的列表添加为表格中的记录....我不确定这是否是最好的事情因为每个属我会有多个物种,每个家族有多个属等等。你会建议什么是解决这个问题的最佳方法。提前谢谢。

5 个答案:

答案 0 :(得分:11)

我使用了类似的数据,我分为两部分。在PostgreSQL语法中。

首先是分类结构(Family,Genus,Species,...):

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.

答案 1 :(得分:3)

我不确定我是否真的会接受那篇文章。当类别本身是可变的时,图形结构将需要。例如,所有突然的分类学家决定在属和物种之间增加三个新的等级,等等。

来自文章:

  

......分层数据的管理不是关系数据库的目的。

实际上,它正是它的目的:

http://en.wikipedia.org/wiki/Hierarchical_database_model

  

随着Codd的关系模型成为几乎所有主流数据库管理系统所使用的事实标准,分层数据模型失去了吸引力。

我会首先编写一个加入所有表的视图,以便将这些作为列:

Life Domain Kingdom Phylum Class Order Family Genus Species

现在您可以按照自己喜欢的方式查询该视图,而不必担心任何连接。轻松:)

答案 2 :(得分:2)

您可以从http://itis.gov下载完整的分类数据,并且每月或多或少地更新数据。他们提供的数据包括物化路径 - 数据库中的每个物种都有一个高于它的所有级别的字符串,如面包屑字符串或文件系统路径。

我使用此数据在演示文稿Models for Hierarchical Data中设计演示。我将物化路径数据转换为Closure Table。

答案 3 :(得分:0)

听起来更像是一张图。我想知道NEO4J是否是更好的选择。

答案 4 :(得分:0)

在关系数据库中有几种表示分层数据的方法,尽管Nodu解决方案可能更容易使用,如@duffymo所述。所以假设一个RDBMS,see my question on the topic for an enumeration of a half dozen possibilities。对于你的情况,我会带着一条物化路径来看看家谱很容易。如果层次结构定期更改,我可能还会建模为邻接列表并使用触发器更新实现路径。