Qui ho un ILS (Integrated Library System) molto semplice fatto molto tempo fa (realizzato con C # / SQL Server), in produzione da anni. Ma ora ho una richiesta di rendere questo sistema conforme allo standard MARC 21, e con questa domanda è venuto il dubbio: Poiché questo standard ha molti tipi di registro, e ogni tipo di registro può avere molti campi opzionali / variabili in base al tipo di pubblicazione (libri, note musicali, periodici, ecc.), come potrei progettare questo?
La mia prima idea era di avere alcune tabelle di "metadati". Queste tabelle conterranno tipi di registro, con un'altra tabella ternaria con tutti i registri possibili per ogni tipo di pubblicazione, secondo i documenti . Queste tabelle si uniranno con un'altra tabella contenente tutti i possibili sottocampi per ogni registro, e con un'altra per tutti i possibili valori per ogni sottocampo "tipo fisso" ... Un sacco di join che conosco, ma MARC 21 ha un sacco di cose con tipi fissi o valori predefiniti.
I dati di pubblicazione reali (con tutti i campi variabili) ho pensato che potevo memorizzare in una tabella valori-chiave (denormalizzata, dove una chiave è un valore composto con <Publication-Id><Register-code><Subfield-Id>
) o in una tabella enorme con tutto il registro possibile e tutti i campi possibili, in cui ogni colonna potrebbe essere denominata Reg<register-code>_<register-field>
.
So che potrei prendere il "percorso NoSql" e "cantare insieme" con tutti i miei dati dinamici, ma dovrò abbinare questa struttura con un db SQL Server esistente.
Ho già alcune tabelle normalizzate (es .: autori, tipi di pubblicazioni e così via)
Come dovrei progettare questo?