Devo memorizzare un albero in un database, quindi qual è il modo migliore per farlo? Mostra il metodo che usi e dai il nome ai suoi pro e contro. (Sto usando SQL Server 2005)Come memorizzare un albero nel database SQL
risposta
Ho trovato la discussione nello SQL Anti-patterns molto utile, in quanto si concentra anche sugli aspetti negativi di ogni implementazione.
Inoltre, le diapositive 48-77 in this presentation reiterano tale analisi.
In conclusione, non esiste un albero generico e nessun punto d'argento per gli alberi SQL. Dovrai chiederti dei dati, come e quanto saranno selezionati, modificati, i rami saranno spostati, ecc. E sulla base di tali risposte implementare una soluzione adeguata.
Bene, il modo più semplice sarebbe che un record abbia una colonna ParentID in modo che sappia quale record è suo padre. Questa è una pratica abbastanza normale. Ad esempio, un negozio online potrebbe avere una gerarchia di categorie di prodotti. Ogni categoria avrà un ParentID. Esempio: la categoria "Jeans" in un database di abbigliamento potrebbe avere "Pantaloni" come categoria principale. È un po 'più difficile se si desidera che un record indichi quali sono i suoi figli, a meno che non si limiti il numero di bambini. Se vuoi un albero binario, potresti avere colonne LeftChildID e RightChildID. Se autorizzi un numero qualsiasi di bambini, potresti avere una colonna Bambini con ID delimitata da virgole (come 1,4,72,19
) ma ciò renderà le query piuttosto difficili. Se il tuo database consente tipi di array in colonne, puoi probabilmente usare una matrice invece di una stringa delimitata, che sarebbe facile da interrogare - ma non sono sicuro che MS SQL Server lo supporti o meno.
Oltre a ciò, dipende dal tipo di dati che si sta modellando e anche dal tipo di operazioni che si prevede di eseguire con questo albero.
provare questo: Hierarchies (trees) in SQL Server 2005
http://dev.mysql.com/tech-resources/articles/hierarchical-data.html
ho scoperto che una guida molto utile.
Ci sono due approcci generali
- In ogni record, memorizzare l'ID del genitore in una colonna nullable (la radice dell'albero non ha genitore) nidificato tecnica del modello di serie
- Usa Joe Celko spiegato here e (grazie al commento da @onedaywhen), anche in quella che è la fonte originale here
EDIT: nuovo link per questo materiale è here.
Pro e Contro? !! Stai scherzando, vero ?!
Celko attribuisce il modello dell'insieme nidificato a Michael Kamfonas, anche se Celko sembra aver coniato la frase e certamente ha lucidato e reso popolare la tecnica. – onedaywhen
+1 - Ho appena usato l'articolo di Celko alcune settimane fa ed è stato molto utile. –
I collegamenti in questa risposta sono purtroppo interrotti ora. Qualcuno sa dove altro trovare queste informazioni? – Qqwy
Ho fatto questo in passato memorizzando i dati come xml in SQL.
- 1. Come memorizzare campi utente personalizzati nel database
- 2. Come memorizzare l'oggetto nel database SQLite?
- 3. come memorizzare video nel database usando mysql?
- 4. Come memorizzare un'immagine nel database android
- 5. Come memorizzare l'immagine nel database SQLite
- 6. archivio arabo nel database SQL
- 7. Come dovrei memorizzare l'ID utente di Windows nel database?
- 8. come memorizzare i dati nel database in HTML5
- 9. Come memorizzare i dati da edittext al database SQL sqlite?
- 10. Vuoi memorizzare dati binari nel database o nel file system?
- 11. Come memorizzare la geometria Punto nel database Postgis usando java
- 12. ExtJS 4 - Non memorizzare mai nodi albero nel pannello dell'albero
- 13. Perché non memorizzare i file nel database?
- 14. Desidero memorizzare l'oggetto nel database MySQL
- 15. quanti dati può memorizzare un database SQL da 5 MB?
- 16. Come memorizzare enum come stringa nel database nelle guide
- 17. Il modo migliore per memorizzare un array nel database MySQL?
- 18. memorizzare l'immagine nel database o in un file di sistema?
- 19. Come memorizzare una relazione uno a molti nel mio database sql? (MySQL)
- 20. Scrivi GeoDataFrame nel database SQL
- 21. Come memorizzare più di 255 caratteri nel database MySQL?
- 22. Importazione XML nel database SQL
- 23. Memorizzare l'immagine nel database direttamente o come dati base64?
- 24. Come posso memorizzare un hash in un database SQL Server usando C#?
- 25. come importare enormi .csv nel database sql?
- 26. Laravel: come memorizzare i dati in formato json nel database?
- 27. Come memorizzare le immagini nel database mysql utilizzando php
- 28. Come memorizzare le informazioni "access_control" di Symfony2 nel Database?
- 29. come memorizzare i valori di BigInteger nel database Oracle
- 30. Come inserire caratteri arabi nel database sql?
Questo link è morto; reindirizza alla homepage. – Qqwy