Qual è lo schema DB gerarchico per questo xml?

0

Come da questo link , questo è il xml che conserva i dati di "BookStore".

Vedo che il numero di occorrenze dell'autore varia per ogni libro.

La rappresentazione gerarchica di xml di BookStore sembra più significativa / intuitiva per me per visualizzare i dati a differenza delle tuple delle tabelle relazionali. È piuttosto più difficile (tipo di tweek) mappare tali informazioni gerarchiche nelle tabelle.

È strano vedere che i dati del mondo reale (gerarchici) (ad esempio, MIB SNMP dei dispositivi di rete o Bookshop ecc.) sono mappati alle tabelle dei record in molti software commerciali. Per me, non è intuitivo (abilità piuttosto inutile) convertire tali dati gerarchici in tabelle, nonostante il supporto relazionale di DB (come MSSQL) massiccio / sicuro / multiutente / conveniente / efficiente / affidabile a differenza del formato di file xml.

Quindi, stiamo cercando di inserire i dati ordinati gerarchici in tuple di tabelle che sono un sovraccarico. Abbiamo un database commerciale che le aziende utilizzano per mantenere lo schema in modo gerarchico?

Nota: attualmente faccio parte del corso di database.

    
posta overexchange 18.12.2014 - 04:17
fonte

3 risposte

1

Se si sceglie di mantenere una gerarchia in un database relazionale, è necessario esaminare il modello di progettazione di Set annidato. ( Vedi Wikipedia )

Questo modello implica un po 'di programmazione e comporta un sovraccarico al momento dell'inserimento o dell'aggiornamento. Il vantaggio arriva al momento del recupero. Recuperare il percorso o la sottostruttura per ogni dato nodo è facile e veloce, se confrontato con l'approccio tradizionale, chiamato Adjacency List .

    
risposta data 18.12.2014 - 12:52
fonte
1

I database gerarchici erano molto popolari, ma negli anni '80 sono andati fuori moda perché non sono molto bravi a supportare le query ad hoc e credo che la loro impostazione potrebbe essere difficile. Lo standard più noto per i database gerarchici era il modello di dati CODASYL (per i dettagli di questo, vedere il link ), che era integrato nel linguaggio COBOL. Le implementazioni commerciali sono ancora disponibili, ma non ci lavoro più nessuno.

Un equivalente più moderno è il database di archivio di documenti, di cui mongodb è il più popolare. Mongodb archivia e gestisce le query sui documenti in BSON, che è un formato dati approssimativamente equivalente a capacità JSON. Ciò significa che anche se non tutti gli xml possono essere facilmente mappati su di esso, molto può, compresi gli esempi che si collegano. Vedi link dettagli su BSON.

    
risposta data 18.12.2014 - 17:29
fonte
1

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.

    
risposta data 19.12.2014 - 01:23
fonte

Leggi altre domande sui tag