Questo mi turba da un po 'e anche se ho deciso di farlo in un certo modo non sono ancora convinto di aver deciso bene.
Ecco lo sfondo:
Una delle caratteristiche principali della mia applicazione si basa su dati testuali che faranno riferimento ad altre entità nel mio sistema. Mettiamolo in un semplice esempio:
This month we sell blue screwdrivers
and next month red screwdrivers.
Qui blue screwdrivers
e red screwdrivers
sono prodotti, motivo per cui possono essere codificati in questo modo:
<offer id="0">
This month we sell <product id="13">blue screwdrivers</product>
and next month <product id="37">red screwdrivers</product>.
</offer>
Il id
è in realtà un ID valido nel mio database che mi consentirà di identificare l'entità referenziata e pertanto mi consentirà anche ad es. collega il prodotto in un sito Web a un URL effettivo.
Ora la domanda reale è quale sarebbe il metodo migliore per archiviare questa informazione. Alla fine ho deciso di usare un BLOB
in MySQL per archiviare quei dati, ma potrei anche usare semplicemente VARCHAR(max_file_size)
. Ad ogni modo, certo se voglio davvero salvare dati testuali o dati XML nel mio database.
Un altro problema che entra in gioco è la coerenza. Mantenere aggiornate le stringhe / XML richiederà anche un certo sforzo. Immagina che un utente decida di rimuovere product
da offer
richiederà ulteriori azioni per mantenere tali stringhe aggiornate oltre alla relazione effettiva dall'offerta ai suoi prodotti. Inoltre doloroso potrebbe essere qualsiasi cambiamento in termini di specifiche. Qualsiasi modifica che doveva essere applicata a all stringhe / XML sarebbe anche un atto abbastanza brutto e forse anche pericoloso.
C'è un vantaggio però. XML può essere convalidato usando i file DTD. Quindi, almeno quando si tratta della convalida di una stringa se è conforme a un certo formato che sto richiedendo, posso usare il parser XML esistente che è vincolato da un determinato file DTD.
Sto ancora cercando una soluzione migliore e spero di trovare una buona risposta da qualcuno che ha fatto qualcosa di simile e condivide la sua esperienza.