2010-11-21 16 views
8

sto creando un database botanico dove le piante saranno organizzati da loro tassonomia:Creazione Tassonomia tabella in MySQL

Vita Domain Unito Phylum Classe Ordinare Famiglia Genere Specie

I Stavo considerando l'utilizzo dell'esempio proposto dall'articolo Managing Hierarchical Data in MySQL, tuttavia sta aggiungendo l'elenco precedente come record all'interno della tabella .... e non sono sicuro che sia la cosa migliore da fare in quanto sarò ng più specie per genere e più genere per famiglia e così via. Cosa suggeriresti è il modo migliore per affrontare questo problema. Grazie in anticipo.

+1

Creazione tabelle tassonomia in mysql: [inserire la descrizione del collegamento qui] (http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/) – rd42

+0

@ rd42 +1 ottimo articolo! – cawecoy

risposta

11

Ho lavorato con dati simili e l'ho realizzato in 2 parti. Nella sintassi di PostgreSQL.

primo è la struttura tassonomia (famiglia, genere, specie, ...):

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 

In secondo luogo è la descrizione e la memorizzazione dei dati botanico:

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

questa potrebbe essere la migliore risposta che abbia mai visto su SO. periodo. –

0

Sembra più un grafico. Mi chiedevo se NEO4J sarebbe una scelta migliore.

3

Non sono sicuro di acquistare davvero quell'articolo. Le strutture del grafico sarebbero necessarie quando le categorie stesse sono modificabili. Ad esempio, tutti i tassonomisti improvvisi decisero di aggiungere tre nuovi livelli tra genere e specie, e così via.

Dall'articolo:

... la gestione dei dati gerarchici non è quello che un database relazionale è destinato.

In realtà, la sua esattamente quello che è destinato a:

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

Il modello di dati gerarchici perso trazione modello relazionale di Codd è diventato lo standard de facto utilizzato praticamente da tutti i sistemi di gestione di database tradizionali .

Desidero in primo luogo dare una visione che hanno aderito tutte le tabelle in modo che si avrebbe questi come le colonne:

Life Domain Kingdom Phylum Class Order Family Genus Species 

Ora è possibile interrogare questo punto di vista come più ti piace e non devono preoccuparsi su eventuali join Facile :)

0

Ci sono diversi modi di rappresentare gerarchica dati in un database relazionale, anche se una soluzione NoSQL potrebbe essere più facile da lavorare con @duffymo menzionato. Quindi assumendo un RDBMS, see my question on the topic for an enumeration of a half dozen possibilities. Per la tua situazione, guiderei con un percorso materializzato per rendere facile vedere l'albero genealogico. Se la gerarchia cambia regolarmente, probabilmente modellerei anche come elenco di adiacenza e aggiorno il percorso materializzato usando un trigger.

2

È possibile scaricare dati di tassonomia completi da http://itis.gov ei dati vengono aggiornati più o meno mensilmente. I dati forniti includono un percorso materializzato - ogni specie nel database ha una stringa di tutti i livelli sopra di esso, come una stringa di breadcrumb o un percorso del file system.

Ho utilizzato questi dati per progettare una demo nella mia presentazione Models for Hierarchical Data. Ho convertito i dati del percorso materializzato in Tabella di chiusura.