Alcuni (molti?) dati, come l'esempio del libro, non sono intrinsecamente gerarchici. Che l'esempio di libreria utilizzi la memorizzazione gerarchica è una conseguenza della struttura ad albero di XML, non della struttura intrinseca dei dati. Considera che un libro può avere molti autori e un autore può scrivere molti libri, il che significa che nessuno dei due può appartenere strettamente all'altro. XML aggira questo usando gli attributi di identità con cui un nodo può fare riferimento a un altro; la stessa tecnica viene utilizzata in altre serializzazioni di strutture dati circolari.
Un modello relazionale completo può gestire dati omogenici e gerarchici utilizzando le proprietà chiusura ; in particolare, la chiusura transitiva consente di recuperare i percorsi dell'albero utilizzando una relazione genitore-figlio. Il vero problema è che SQL e la maggior parte degli RDBMS di produzione non supportano le proprietà di chiusura in generale. Le chiusure transitive sono disponibili in SQL con Common Table Expressions / la clausola WITH RECURSIVE
ma sono relativamente nuove nell'implementazione e don Sembra che ci si abitui tanto (e non è supportato da tutti gli RDBMS). Più in genere, viene visualizzato il percorso completo memorizzato nella tabella ( Farey Fractions possono essere considerati percorsi utilizzando le loro espansioni decimali e marcatori speciali per cifre finali ripetute, simili a notazione citazione ).
Un altro modello di dati che hai usato per vedere spesso era il modello di rete , dove i nodi sono riferimenti e i bordi sono relazioni. Nel modello del libro, ci sarebbe un margine da ogni nodo dell'autore a ciascun nodo del libro per un libro che l'autore ha scritto. Il database riporta & le specifiche create da CODASYL hanno utilizzato un modello di rete. Ci sono vari problemi con l'utilizzo di un modello di rete che il modello relazionale affronta in modo specifico; Il seminale di Codd ha di più.
Se il modello relazionale sembra non intuitivo, forse è perché non hai ancora combinato il modello relazionale. Non pensarci come tabelle e righe (che sono più quelle che trovi in un foglio di calcolo) ma come relazioni dichiarative:
Hector Garcia-Molina wrote "A First Course in Database Systems"
Jeffrey Ullman wrote "A First Course in Database Systems"
"Database Systems: The Complete Book" is a book with ISBN '0-13-815504-6' and price $85
...
Da lì, scrivi le dichiarazioni usando i predicati :
Wrote(Hector Garcia-Molina, "A First Course in Database Systems")
Wrote(Jeffrey Ullman, "A First Course in Database Systems")
Book("Database Systems: The Complete Book", ISBN:0-13-815504-6, price:$85)
...
Si noti che l'esempio Book
non è un predicato semplice perché due dei riferimenti sono contrassegnati con nomi; questo fa parte di ciò che distingue una relazione da predicati, relazioni e altri oggetti matematici simili. I predicati definiscono i set, quindi puoi usare le operazioni set per definire nuove relazioni. Questa breve panoramica è molto informale e imprecisa, ma dovrebbe darti un punto di partenza.