Sto cercando un modo migliore per gestire il design che ho qui, non sono sicuro che sia davvero adatto.
Per dare un po 'di contesto, diciamo che abbiamo un gruppo di gruppi, un gruppo potrebbe essere "SQL" e un altro potrebbe essere "Cucinare".
Il gruppo SQL avrebbe libri come "Normalizzazione" e "T-SQL", mentre la cucina potrebbe avere "Fare pasta" e "La pizza è fantastica".
I libri stessi avranno molte pagine, che potrebbero non finire per essere scolpite nella pietra, devo essere in grado di cambiarle (e questo è davvero un problema con il mio schema già ideato).
Un sommario per Pizza è Fantastico potrebbe essere simile a questo:
1. History
1. The great pizza revolution of 13901AD
1. The first pizza
2. Making pizzas
1. Mental preparation
1. Think like a gazel
1. Hunger like a lion
1. Building the oven
1. Real pizza is made with flamethrower.
1. How to make a flamethrower
1. How to get a permit for your flamethrower
3. Enjoying pizza
4. Credit
Quindi corro e riempio le mie tabelle SQL in questo modo:
Gruppi: pizza, SQL Libri: la pizza è fantastica Pagine: tutte le 13 pagine che ho elencato nell'esempio Table of contents.
Ecco l'intoppo: Indice dei contenuti.
Sotto il mio design esistente, avrei una tabella che assegna a ciascun elemento la sua posizione, quindi "crediti", "cronologia" e altri elementi di primo livello vengono assegnati alla loro posizione con un valore annidato di 0. Elementi come "La fame di un leone" si trova nella posizione 7 del sommario, con un valore annidato di 2 (perché è profondo 2 livelli).
Questo in realtà non fornisce un sacco di esigenze senza una programmazione complessa:
- Che cosa succede se volevo spostare le pizze sopra la cronologia? Devo ri-indicizzare l'intera cosa!
- E se volessi fare il nido facendo pizze sotto le pizze?
- Cosa succede se scrivo una sezione completamente nuova?
- Come faccio a garantire che i livelli annidati abbiano senso?
Fondamentalmente devo aggiornare l'intero indice, e il livello "annidato" non ha modo di controllare se qualcosa ha senso (cioè, il primo elemento potrebbe essere annidato 6 volte).
Sto cercando una risposta migliore.
Come nota a margine, il database effettivo include le modifiche di revisione di ogni pagina e un posto per contenuti extra come i commenti.