Progettazione database: cosa è meglio fare nel definire le "tabelle parametro"?

di il
4 risposte

Progettazione database: cosa è meglio fare nel definire le "tabelle parametro"?

Ovvero, nel progettare il database sulla musica, io ho in testa due tipologie differenti di tabelle:

1) quelle che io chiamo le "tabelle principali" che sono quelle che contengono i dati identificativi dell'oggetto cardine per cui costruisco il database, ovvero l'album (inteso come l'oggetto fisico che acquisti).

2) quelle che chiamo le "tabelle parametro" che sono quelle tabelle che contengono dei dati che dovrebbero essere ripetuti in diversi punti del database e che quindi vengono messi in tabelle esterne alle tabelle principali a cui poi vengono legate da relazioni o uno a molti o molti a molti

Esempi di tabelle principali sono: la tabella Album, Dischi, Oggetti e Tracklist (che contengono i dati relativi all'album e ai suoi vari sottolivelli).

Esempi di tabelle parametro sono:

1) la tabella "Tipi Edizione" che mi dice se un album o un disco sono una prima stampa, o una ristampa; un'edizione standard o limitata etc...
2) la tabella "Tipi Confezione" che mi dice se un album o un disco sono in confezione standard o digipack o earbook o mediabook etc...
3) la tabella "Tipi formato / supporto" che mi dice se un album o un disco sono in formato CD, DVD, Blu Ray, Vinile, Cofanetto, etc... e mi identifica quale supporto di quale album sto immettendo le informazioni particolareggiate (es. in un album costituito da 3 CD e 2 DVD che occupa una riga sola sulla tabella album, sulla tabella dischi avrò 5 righe collegate definite come CD 1, CD 2, CD 3, DVD 1 e DVD 2)

e così via discorrendo.

Ora molte di queste tabelle parametro hanno una struttura estremamente simile ovvero:

1) un codice univoco di identificazione
2) a volte un codice che permette alle caselle combinate a cui fanno riferimento di fare filtro sui valori
3) il nome vero e proprio del dato che devono stabilire
4) una descrizione estesa di ciò che il valore in questione sta a significare.

Per cui pensavo di poter accorpare tutte le tabelle parametro che rispondono a questa struttura base in un'unica tabella parametro più generica in cui valorizzare i "codici filtro" in modo che ciascuna combo box vada a vedere su quella tabella solo i dati di suo interesse.

Questo però porterebbe lo schema delle relazioni da avere tante tabelle parametro con poche relazioni a testa, ad avere almeno una tabella parametri che ha decine di relazioni uno-a-molti con le altre tabelle.

Quale delle due situazioni pensate sia meglio?

Molte tabelle parametro ciascuna delle quali ha poche relazioni
Una tabelle parametro con una quantità di relazioni decisamente maggiore.

4 Risposte

  • Re: Progettazione database: cosa è meglio fare nel definire le "tabelle parametro"?

    Non hai esplicitato quale "tabella principale" riceve dalle "tabelle parametro" (queste ultime io talvolta le chiamo "tabelle satelliti" in quanto spesso hanno un solo campo e non svolgono una funzione sostanziale…comunque pare che ci siamo capiti).
    Se intuisco bene (correggimi se sbaglio) tu hai nella tabella Album 3 campi TipoEdizione, TipoConfezione, TipoFormato, tutti e 3 dal lato molti delle 3 tabelle parametro/satellite corrispondenti.

    A) 3 tabelle distinte:
    Vantaggi: visione della struttura generale più chiara
    Svantaggi: più tabelle

    B) 1 tabella con un campo aggiuntivo che distingue, quindi in corrispondenza di Album.TipoEdizione, Album.TipoConfezione, Album.TipoFormato tu avrai 3 QUERY coerentemente filtrate in base al valore del "campo aggiuntivo".
    Hai 1 tabella e 3 query = 4 oggetti

    Se hai bisogno di vedere la Finestra Relazioni completa e ben chiara, io suggerisco la soluzione A).

    Trattandosi di "relazioni satelliti" che non si prevede svolgeranno mai un ruolo determinante nella creazioni di query e quasi mai maschera/sottomaschera, puoi anche ometterle nella Finestra Relazioni. Sta a te ricordare il tutto poi sapendo che manovrerai tutto con le query. Quindi soluzione B)
    Aggiungerei a rinforzo della soluzione B) che se hai dimistichezza con l'uso delle SELECT...intendo dire che in visualizzazione struttura tabella principale Album, prevedendo una casella combinata, in Origine riga puoi cliccare sul piccolissimo tastino con i 3 puntini all'estrema destra e costruire una "query nascosta" (è un termine non tecnico che sto inventando io adesso). In pratica farai le stesse operazioni di quando crei una query in visualizzazione struttura e quando vai a salvare, apparirà in Origine riga la stringa SQL "SELECT...". In questo modo tu hai ugualmente la funzionalità della casella combinata, ma non vai a creare un oggetto "inutile/superfluo" nella lista oggetti di Access (qualcuno dice che appesantisce un po' (ma davvero poco poco) il database).

    Non so se ho inquadrato correttamente quello che intendevi tu.
  • Re: Progettazione database: cosa è meglio fare nel definire le "tabelle parametro"?

    Allora il database ha il seguente elenco di relazioni tra tabelle.

    tabella Entità: è la tabella in cui sono messi i dati relativi agli autori / artisti ed ha due campi collegati a tabelle satelliti, ovvero
    1) categoria entità, che definisce se il record che sto inserendo è relativo ad un artista (entità che ha pubblicato l'album), ad un autore (entità che ha scritto musiche o testi), ad un musicista (entità che ha suonato o cantato all'interno dell'album), o un Copertinista (chi ha creato l'immagine o la fotografia in copertina) --> la tabella satellite a cui fa riferimento il campo è la tabella satellite "categoria entità"
    2) tipo entità, che è un campo che è una suddivisione delle categorie, in particolare:
    a) gli artisti possono essere: artisti solisti, gruppi o artisti ospiti
    b) gli autori possono essere: autori di musiche o autori di testi
    c) i musicisti possono essere: strumentisti o cantanti
    d) i copertinisti possono essere: disegnatori o fotografi
    il campo fa riferimento alla tabella satellite "tipo entità" che ha sua volta ha un legame molti a uno con la tabella "categoria entità". La tabella “Tipo Entità” ha anche una relazione uno a molti con la tabella satellite “Strumenti”, dove la tabella "Tipo Entità" è filtrata per cantanti o strumentisti

    La tabella entità ha relazioni uno-a-molti con le seguenti tabelle
    1) Tabella Elementi Discografia
    2) Tabella Dischi
    3) Tabella tracklist
    4) Tabella Immagini
    5) Tabella Autorità
    6) Tabella Elementi Formazione
    7) Tabella Autori Canzoni

    Tabella Titoli: è la tabella in cui sono definiti tutti i titoli presenti nel database e ha un campo collegato ad una tabella satellite, ovvero "Tipo Titolo", che definisce se il titolo è associato ad un album, ad un disco, ad una traccia, ad una sottotraccia o ad una suite, dove:

    1) Con il termine “sottotraccia” si intende quando la canzone contenuta in una singola traccia ha una serie di titoli che ne distinguono parti diverse
    2) Con il termine “suite” si intende quando sull’album esiste un titolo unico associato a tracce differenti, ciascuna delle quali ha anche un proprio titolo che la contraddistingue.

    La tabella a cui fa riferimento è la "tipo titolo e formazione"
    La Tabella Titoli ha relazioni uno-a-molti con le seguenti tabelle
    1) Tabella Tracklist
    2) Tabella Dischi
    3) Tabella Elementi Discografia
    4) Tabella Autorità

    Tabella Elementi discografia: è la tabella di unione tra la tabella entità [filtrata solo per artisti solisti o gruppi] e la tabella titoli [filtrata per album o dischi]. Questa tabella si lega tramite una relazione uno-a-molti alla tabella Album.

    Tabella Album: è la tabella che contiene i dati specifici relativi all'album ed ha i seguenti campi collegati alle seguenti tabelle:
    1) ID Elemento discografia (il campo che definisce la relazione molti-a-uno nei confronti della tabella Elementi discografia)
    2) Sezione archivio, che definisce se l'album sia l'elemento di una discografia, una compilation, una colonna sonora o altro ed è legato alla tabella satellite "Sezione Archivio"
    3) Formato, che definisce se l'album è un formato CD, DVD, Blu-ray, Vinile, Cofanetto etc... fa riferimento alla tabella satellite "Tipi Formato Supporto"
    4) Confezione, che definisce se l'album ha una confezione standard, digipack, etc... fa riferimento alla tabella satellite "Tipi Confezione"
    5) Edizione, che definisce se l'album è in un'edizione standard, limitata, etc... fa riferimento alla tabella satellite "Tipi Edizione"
    6) Propietario, che dice chi sia la persona che ha acquistato l'album (messo in modo da poter inserire nel database le collezioni di tutti gli elementi di una famiglia) fa riferimento alla tabella satellite "Proprietari"

    La Tabella Album è inoltre collegata da relazioni uno-a-molti alle seguenti tabelle
    1) Tabella Contenuto, che contiene i dati relativi a ciò che è contenuto nell'album
    2) Tabella Dischi, che contiene i dati specifici relativi ad ogni disco che fa parte dell'album
    3) Tabella Oggetti, che contiene i dati specifici relativi ad ogni oggetto che fa parte dell'album
    4) Tabella Immagini, che contiene i dati relativi alle immagini presenti nel database
    5) Tabella Formazione associata, che contiene i dati relativi alle formazioni di un gruppo o di un artista solista associati o ad un singolo album, o ad un singolo disco o ad una singola canzone

    La Tabella Contenuto, ha i seguenti campi collegati alle seguenti tabelle:
    1) ID Album (che è il collegamento per la relazione molti-a-uno con la tabella album)
    2) Tipo Supporto, che definisce una riga per ogni diverso tipo di supporto contenuto nell’album (CD, DVD etc…) e fa riferimento alla tabella satellite “Tipi Formato Supporto”. Esiste un valore particolare di questa tabella che viene abilitato solo in questo caso che è “Misto” e sta a significare che all’interno dell’album, esiste almeno un insieme di dischi contenuti in una confezione diversa dalla confezione dell’album che sono almeno di due tipi di supporto diversi.

    La Tabella Dischi ha i seguenti campi collegati alle seguenti tabelle
    1) ID Album (che è il collegamento per la relazione molti-a-uno con la tabella album)
    2) Tipo Supporto, che definisce per ogni riga il tipo di supporto di cui ci stiamo occupando (CD, DVD, Blu-ray etc…) nel caso in cui ci si stia riferendo al tipo “Misto” questo campo sarà valorizzato con valori tipo “CD + DVD”, “CD + Blu-Ray” etc…
    3) Tipo supporto specifico. Questo campo viene valorizzato solo se il campo Tipo Supporto è valorizzato con valori di tipo “Tipo supporto 1 + Tipo supporto 2 + etc…” e definisce nello specifico di che tipo di supporto di cui ci stiamo occupando
    4) Ev Formato Disco. Questo campo (così come i campi descritti ai punti 5 e 6) viene valorizzato solo quando il disco di cui si sta parlando è contenuto in una confezione diversa dalla confezione dell’album e definisce il tipo di formato della confezione. I tre campi di cui ai punti 2, 3 e 4 fanno tutti riferimento alla tabella satellite “Tipo Formato Supporto”. Da notare che questa particolare tabella satellite viene filtrata nei suoi valori, sulla base del campo che sta per andare a valorizzare
    5) Ev Confezione Disco. Definisce il tipo di confezione che contiene il disco specifico e fa riferimento alla tabella satellite “tipo confezioni”
    6) Ev Edizione Disco. Definisce il tipo di edizione del disco specifico e fa riferimento alla tabella satellite “Tipi Edizione”
    7) ID Artista (collegamento per la relazione molti-ad-uno con la tabella entità filtrata per artisti solisti e gruppi) e viene valorizzato solo nel caso in cui il disco abbia un artista diverso dall’artista dell’album di riferimento
    8- ID Titolo (collegamento per la relazione molti-ad-uno con la tabella Titoli filtrata per Titoli disco) e viene valorizzato solo nel caso in cui il titolo del disco sia diverso dal titolo dell’album di riferimento
    9) Ambito Musicale: definisce dei macro-generi musicali che a loro volta sono ciascuno dei contenitori di generi musicali differenti e si riferisce alla tabella satellite “Ambito Musicale”
    10) Genere Musicale: definisce il genere specifico di un disco e fa riferimento alla tabella satellite “Generi Musicali” che, a sua volta, ha una relazione molti-a-uno con la tabella “Ambito Musicale”

    La Tabella Dischi ha poi relazioni uno-a-molti con le seguenti tabelle
    1) Tabella Tracklist, che è la tabella che contiene i dati alle scalette di ogni singolo album.
    2) Tabella Immagini
    3) Tabella Formazione associata, che contiene i dati relativi alle formazioni di un gruppo o di un artista solista associati o ad un singolo album, o ad un singolo disco o ad una singola canzone

    La Tabella “Oggetti” ha i seguenti campi correlati
    1) ID Album (collegamento per la relazione molti-a-uno con la tabella Album)
    2) Tipo Supporto, che fa riferimento alla tabella satellite “Tipo formato supporto” filtrata per codici relativi ad oggetti
    La Tabella Oggetti ha una relazione uno-a-molti con la tabella immagini

    La Tabella Tracklist ha i seguenti campi correlati alle seguenti tabelle
    1) ID Disco (collegamento per la relazione molti-a-uno con la tabella Dischi)
    2) ID Artista (collegamento per la relazione molti-a-uno con la tabella Entità filtrata per artisti solisti o gruppi) che viene valorizzato solo se l’artista relativo alla traccia è diverso sia dall’artista relativo al disco sia dall’artista relativo all’album
    3) ID Titolo, ID TitoloSuite e ID Titolo Sottotraccia che sono tutti campi che fanno riferimento alla tabella titoli dove:
    a. Il primo filtra la tabella titoli per titoli traccia
    b. Il secondo filtra la tabella titoli per titoli suite
    c. Il terzo filtra la tabella titoli per titoli sottotraccia
    4) ID Tipo Traccia è il campo che definisce se una traccia contenga una canzone, una traccia video, una traccia audio non musicale (esempi possono essere interviste o commenti agli album degli autori), una traccia dati o una traccia silente e fa riferimento alla tabella satellite “Tipo Tracce”
    La Tabella Tracklist ha una relazione uno-a-molti con le tabelle
    1) Canzoni
    2) Tabella Formazione associata, che contiene i dati relativi alle formazioni di un gruppo o di un artista solista associati o ad un singolo album, o ad un singolo disco o ad una singola canzone

    La Tabella Canzoni, contiene i dati specifici per ogni canzone ed ha i seguenti campi associati alle seguenti tabelle
    1) ID Tracklist (campo che crea la relazione molti-a-uno con la tabella Tracklist)
    2) ID Autorità (campo che crea la relazione molti-a-uno con la tabella Autorità)

    Tabella Autorità: è la tabella di unione tra la tabella entità [filtrata per artisti solisti o gruppi] e la tabella titoli [filtrata per tracce] ed ha relazioni uno a molti con le tabelle
    1) Canzoni
    2) Autori Canzoni, che contiene l’elenco di autori musiche ed autori testi associati ad un particolare record della tabella autorità

    La tabella Autori Canzoni ha quindi i seguenti campi correlati alle seguenti tabelle
    1) ID Autorità (che crea la relazione molti-a-uno con la tabella Autorità)
    2) ID Autore Musiche (che crea una relazione molti-a-uno con la tabella Entità filtrata per tipo Autore Musica)
    3) ID Autore Testi (che crea una relazione molti-a-uno con la tabella Entità filtrata per tipo Autore Testo)

    La tabella Elementi Formazione, è la tabella di unione tra tabella Entità e la tabella satellite e ha i seguenti campi correlati alle seguenti tabelle:
    1) ID Musicista (campo che crea la relazione molti-a-uno con la tabella Entità filtrata per musicisti)
    2) ID Artista (campo che crea la relazione molti-a-uno con la tabella Entità filtrata per Artista Solista, Gruppo o Artista Ospite)
    3) ID Strumento definisce lo strumento suonato dal quel determinato musicista in quel determinato gruppo o artista solista e si appoggia alla tabella satellite “Strumenti”
    4) ID Tipo Formazione che definisce se la formazione è relativa ad un album, ad un disco o ad una canzone e si appoggia sulla tabella satellite "tipo titolo e formazione"
    La Tabella Elementi Formazione ha una relazione uno a molti con la tabella "Formazione Associata" che associa l'elemento di una determinata formazione o all'album, o al disco o alla canzone specifica a cui deve essere associato.

    Infine c’è la tabella Immagini che ha questi campi correlati alle seguenti tabelle:
    1) ID Album (che crea la relazione molti-a-uno con la tabella Album)
    2) ID Disco (che crea la relazione molti-a-uno con la tabella Dischi)
    3) ID Oggetto (che crea la relazione molti-a-uno con la tabella Oggetti)
    4) ID Tipo immagine che definisce se un’immagine sia l’immagine di un oggetto, la copertina, il retro copertina, il contenuto di un cofanetto etc… ed è correlato alla tabella satellite “Tipi Immagine”
    5) ID Tipo Titolo che definisce se l’immagine è associata ad un album o ad un disco e si appoggia alla tabella satellite "tipo titolo e formazione"
    6) ID Entità (che crea la relazione molti-a-uno con la tabella Entità filtrata per copertinisti)

    Di Fatto mi trovo ad avere 14 tabelle tra tabelle principali e tabelle di unione, e 13 tabelle satellite con l’idea che forse potrei ridurre il numero di tabelle satellite, nel momento in cui riuscissi a raggruppare dati logicamente simili e gestirli tramite dei codici intermedi.
  • Re: Progettazione database: cosa è meglio fare nel definire le "tabelle parametro"?

    Mumble mumble mumble...ricordo di aver chiacchierato personalmente con te sul tuo database. Ricordo che tu andavi spedito per la tua strada...e devo confessare che poi, man mano non riuscivo più a seguirti. Rileggendo tutto (impossibile capire tutto) ho la sensazione che hai complicato la matassa più del dovuto e forse la tua domanda iniziale ci sta tutta. Veniamo un po' più al dunque tecnico…
    Io, piuttosto che frammentare in moltissime tabelle omogenee-in-sé-stesse, provo a generalizzare le varie omogeneità. Voglio dire che una Entità contiene molti DettagliEntità. Ogni singolo DettaglioEntità può avere in seno qualsiasi Titolo...e a qualsiasi cosa contenuta nell'Entità che abbia una certa rilevanza catalografica (questo lo attribuisci tu). Per le canzoni è facile-intuitivo, anche i Titoli dei singoli Album all'interno dell'Entità sono Titoli. Possono avere un Titolo anche le Immagini. Ognuno di questi Dettagli avrà un Indirizzo "tecnico" che tu stabilirai nel migliore dei modi. Per le Tracce è facile Disco1/Traccia1; Disco1/Traccia2...e puoi descriverlo in un unico campo o spezzettarlo in più campi...cercando di trovare un compromesso tra efficacia-praticità-efficienza...ma senza esagerare.

    Tabella Titoli.
    "The wall" è il titolo di un Album...e dei Pink Floyd...perché potrebbe esistere un altro "The wall" sempre Album di "Pinco Pallino". Potrebbe esistere un "The wall" canzone e un "The wall" sinfonia...certo ci si aspetta di Autori diversi...ma devi vedere quando ci si imbatte in brani Tradizionali con lo stesso titolo, stessa caratteristica e occorre distinguerli ulteriormente…
    Le distinzioni tra TitoloSingolo o TitoloSuite o SottoTitolo non devono comparire nella tabella Titoli. Queste caratteristiche tu le vai a descrivere in DettagliEntità.

    Per me Pink Floyd, Edoardo Bennato, Berliner Philharmoniker, ma anche Carlo Verdone, Alessandro Manzoni sono tutti Artisti in generale da mettere in una tabella Artisti. A seconda del loro Ruolo (da vedersi dove) diventeranno ora Autori, ora Autori e Interpreti, ora solo Interpreti.

    In un mio database distinguo nettamente le Autorità dalle Interpretazioni. Perché gli Autori sono tali fin dalla nascita di un Titolo e per sempre. Gli Interpreti possono variare infinitamente a seconda dell'Incisione...ossia Entità o meglio DettagliEntità.
    Quindi "The wall" ha come Autori "Pink Floyd"; "Michelle" ha come Autori "Lennon John"; "McCartney Paul". Un Titolo ha molti Autori. Quindi serve una tabella Autorità con i campi:
    IDAutorità (PK)
    IDAutore (FK) relazionato con Artisiti.IDArtista (in questo caso si può cambiare il nome campo dei 2 campi PK/FK)
    RuoloAutore (qui ci scrivi Parole, Musica...ma ci puoi scrivere tanto altro ancora…e se non sai cosa specificare, lasci vuoto…)
    IDTitolo (FK) (da Titoli.IDTitolo)

    Dove andare a tracciare le Interpretazioni? Mi pare di capire che tu preferisci annodare tutto all'Entità. Se vuoi generalizzare e non andare troppo per il sottile...ci può stare. Io invece ho molte Entità che io chiamo Album di AA.VV. e ogni Titolo ha i suoi Interpreti. Quindi dichiaro tutti i molti Interpreti in una tabella Interpretazioni così:
    IDIntepretazione (PK)
    IDInterprete (FK) (da Artisti.IDArtista)
    RuoloInterprete
    IDDS (che significherebbe IDDettaglioSupporto perché io le Entità li chiamo Supporti relazionato con DettagliSupporti.IDDS)

    Per ora ho focalizzato la mia attenzione solo su questi punti che io ritengo cardini. Tu vuoi tracciare molte più cose del mio immaginario e occorre analizzarle a piccole dosi.
  • Re: Progettazione database: cosa è meglio fare nel definire le "tabelle parametro"?

    Quando la notte porta consiglio...mi sono venute altre idee. Mi rendo conto che il MIO database punta a proprie ricerche RIPETITIVE e SISTEMATICHE. Invece credo che tu preferisci tracciare TUTTO CIO' CHE VEDI scritto su ogni Entità. A rigore di normalizzazione le tabelle Autorità e Interpretazioni sono simili-uguali e potrebbero essere accorpate in un unica tabella. Riscrivo tutto per farmi capire.

    Entità
    Identità (PK)
    TipoConfezione
    TipoSupporto
    Anno
    ...non so...tanti altri campi che tu avresti previsto…

    DettagliEntità
    IDDE (PK)
    Indice (qui ci scrivi dove punta ogni Titolo)
    Titolo
    Identità (FK)

    Crediti
    IDCredito (PK)
    IDArtista (FK)
    Ruolo
    IDDE (FK)

    Artisti
    IDArtista (PK)
    Artista

    Relazioni:
    Entità.IDEntità uno-a-molti DettagliEntità.IDEntità
    DettagliEntità.IDDE uno-a-molti Crediti.IDEntità
    Artisti.IDArtista uno-a-molti Crediti.IDArtista

    Al momento ho escluso tutti quei campi che possono determinare corrispondenti tabelle-satelliti...ma ovviamente tu puoi aggiungere a tuo piacimento ove lo ritieni utile.
Devi accedere o registrarti per scrivere nel forum
4 risposte