Sto scrivendo un programma Java che funziona come presentazione di un documento scritto, che deve essere archiviato in un database (sto usando MySQL, ma sono aperto a suggerimenti di altri tipi di DB).
La classe Essay è una raccolta di oggetti della classe Paragraph (più specificamente Essay extends LinkedList<Paragraph>
, costituita principalmente da int ID
e String content
. L'oggetto Essay è memorizzato come propria tabella nel DB, che è abbastanza semplice (con colonne int paragraphId
e Blob text
), e faccio una semplice query che crea un nuovo oggetto Paragraph per ogni riga nella tabella quando il programma viene inizializzato.
All'interno di ciascun paragrafo, alcune parole con collegamenti ipertestuali si collegano ad altri oggetti Essay, che devono anche essere memorizzati nel database. La mia domanda è il modo migliore per salvarli: le opzioni che sto considerando sono:
- Creazione di una singola tabella DB aggiuntiva in cui ogni testo è archiviato su una riga, con i paragrafi memorizzati in un singolo oggetto di testo separati da un delimitatore e il programma li separa in un oggetto Paragrafo separato mentre li estrae dal DB. (Questo è abbastanza gestibile perché questi saggi collegati sono molto più brevi del saggio principale).
- Crea una singola tabella aggiuntiva, con un numero elevato di colonne di contenuto, memorizzando ogni paragrafo in una colonna separata. Quindi, quando i dati vengono estratti dal database, crea un nuovo saggio per ogni riga e un nuovo paragrafo per ogni colonna in quella riga, finché non ne giunge uno che è nullo.
- Crea dinamicamente una tabella DB separata per ciascun saggio collegato, impostandolo in modo identico a quello principale. Questo non sembra ideale perché finirebbe per essere un numero molto grande di tavoli, e molti di loro avrebbero solo due o tre paragrafi, facendo sembrare un nuovo tavolo dispendioso.
- Esegui un arrangiamento diverso: disponi di una tabella di paragrafi, in cui sono memorizzati tutti i paragrafi di tutti i saggi e un'altra tabella denominata Essays, che utilizza un tipo di dati
SET
per memorizzare gli ID (chiavi esterne) dei paragrafi inclusi in ogni tema.
Ho modificato qui il mio caso di utilizzo effettivo per renderlo più semplice da spiegare. Sono nuovo nella programmazione di database e lo sto facendo principalmente come esercizio, quindi sono alla ricerca di suggerimenti generali sui pro / contro di questi approcci e su eventuali suggerimenti aggiuntivi.