Caratteristiche di un modello dati gerarchico
Il modello dati gerarchico fu il primo modello di database creato, apparso nel 1966. Era un miglioramento sui sistemi di file-processing generici perché permetteva la creazione di relazioni logiche tra informazioni in un database. Tuttavia, questa struttura ha anche svantaggi che portarono allo sviluppo del modello a rete e relazionale.
Struttura
La caratteristica principale è la struttura ad albero. Esempio: database azienda con ramo Staff, poi Departments, Teams, Team Members. Questa struttura genitore-figlio è coerente in tutto il database, e ogni segmento figlio può avere un solo segmento genitore. Ogni segmento (record) può avere qualsiasi numero di elementi campo con info su quel record. Esempio: record team member con nome, supervisore, contatti.
Uno-a-molti e ridondanza
Poiché i modelli gerarchici non permettono record composti – un entry con più di un genitore – il database ha struttura uno-a-molti: un'azienda può avere molti dipartimenti, un dipartimento molti team leader. Questo può portare a ridondanza. Esempio: ramo sotto Team Members chiamato Ongoing Projects. Poiché più staff possono lavorare su un progetto, le info progetto devono essere duplicate, portando a possibili problemi di consistenza.
Navigazione
Il modello gerarchico è un modello dati navigazionale; i percorsi di accesso sono limitati da strutture predeterminate. Per ottenere un record specifico, la query scende dal segmento radice attraverso i rami. Va bene se conoscete la posizione dei record, ma per query esplorative è lento, perché il database deve leggere tutti i record a un livello prima di passare al successivo.
Puntatori a genitori logici
I limiti della struttura gerarchica sono mitigati usando puntatori a genitori logici. Sviluppati da IBM nel loro Information Management System, implica creare un nuovo database per entry con relazioni molti-a-molti e collegare i due. Esempio: ramo Ongoing Projects con puntatori a un database Projects separato dove stanno le info progetto. Simile a come funziona IDREF in XML.