Idee sulla normalizzazione

di il
13 risposte

Idee sulla normalizzazione

Salve. Sono un novizio per quanto riguarda i database access.
Ho usato precedentemente il programma GCStar (un software open_source, che gestisce collezioni di
qualsiasi genere... automobiline, francobolli, fumetti, giochi, ed altro).
Vorrei provare a realizzare con Access una cosa simile:
Un database che al suo interno possa archiviare collezioni dello stesso tipo citato prima.
Leggendo vari testi sulla progettazione di database mi sono venute queste idee di progettazione:

1. Una tabella, come quella dell'esempio "Beni" di Access, con il campo Categoria di tipo ricerca guidata, che preleva
le informazioni dalla tabella Categoria (ad esempio... Gioco da tavola, Gioco di carte, Film, Serie televisiva, ecc...). In questo modo sarebbe ampliabile...
Ma la natura delle informazioni delle varie categorie non sono uguali tra loro.... Un gioco da tavola ad esempio può avere una "Meccanica di gioco" che può essere anche presa in esame in un Videogame, ma in un filmato o in un Libro, c'entra ben poco...
Da questo dubbio, leggendo sempre nei testi, pensavo di separare le informazioni in una tabella "dettagli" per i campi che risulterebbero vuoti, ad esempio "meccanica di gioco" quando si parla di libri, collegando la tabella con una relazione "uno-a-uno", se è giusta la mia interpretazione di questa tipologia di relazione...

2. Altrimenti fare tante tabelle, quanto sono le collezioni da inserire nel database... ma se qualcuno vuole inserire una categoria di collezione non prevista dovrebbe creare una nuova tabella, con tutto quello che c'è da inserire, per implementare la nuova collezione...

Sarei più invogliato sulla prima idea, se con una tabella "collezioni" che contiene solo i campi esattamente richiesti da tutte le collezioni (Titolo, immagine prodotto, data acquisto, di pubblicazione, e via dicendo), possa essere relazionata uno-a-Uno" alla tabella "dettagli collezione" che contiene solo i campi che verranno visualizzati solo su una (o limitate collezioni).

Questa idea dovrebbe essere quella che rende il database maggiormente Normalizzato?

13 Risposte

  • Re: Idee sulla normalizzazione

    L'approccio che usi è sbagliato, soprattutto il secondo di creare tante Tabelle.
    In questo caso devi Destrutturare, che non significa De-Normalizzare, ma devi ragionare per Attributi sulla Struttura.

    Concettualmente avrai una Tabella che farà da CATALOGO [AttributiCategoriaStruttura], ed una Tabella [AttributiCategoriaInserimento].
    Nella prima hai la Struttura che ti servirà ogni volta che inserirai un NUOVO Record nella Categoria, la seconda conterrà la valorizzazione degli Attributi specifici di quella Categoria.

    Ogni Categoria si porta appresso un Pacchetto di Attributi, ogni attributo è un Record, quindi quando aggiungi un Record appartenente una Categoria dovrai predisporre un Inserimento di N Records con gli Attributi nella Tabella [AttributiCategoriaInserimento].
    Evidente che non è il classico sviluppo scolastico... ma è abbastanza intuitivo concettualmente ma la gestione poi è un po più macchinosa.
  • Re: Idee sulla normalizzazione

    La strada di creare tante tabelle è sicuramente errata.
    Per entrare nel vivo del tuo problema, non sarebbe male conoscere la completa elencazione di valori della tabella Categorie.
    Poi spiega come l'avresti relazionata alla tua tabella Beni...ossia facci conoscere tutti i suoi campi.
    Meglio ancora prova a descrivere tutte le tabelle, campi, relazioni...
  • Re: Idee sulla normalizzazione

    L'idea di Fondo è questa:
    Una persona che colleziona diversi oggetti di qualsiasi natura...
    Nel mio caso ad esempio colleziono "Giochi da tavola" che suddivido in categorie tipo "Giochi da tavoliere", "giochi di carte" "giochi piazzamento tessere"...
    Per altri che vogliono fare altre collezioni, ad esempio francobolli, o che so Videoteca... la creazione della Tabella categorie, in cui inserire la loro personale categoria...
    Nella tabella del catalogo, oltre al campo di collegamento per la relazione Uno- A -molti con la tabella categoria, ho pensato di inserire dei campi che per natura dovrebbero essere simili in tutti gli articoli...
    Restano fuori i campi che farebbero solo parte solo di determinate categorie..
    Fino ad adesso ho progettato sulla carta, due tabelle: la prima che prevede 9 campi (Id_oggetto - Id_categoria - Immagine - Titolo - Anno 1 - Anno 2 - Valutazione/voto - Descrizione - Id_autore/editore (che per ora limito ad una sola relazione uno-a-molti) - che dovrebbero essere sempre presenti in qualsiasi categoria di collezione si vuole inserire...
    La seconda che dovrebbecontenere i campi di elementi che saranno presenti solo su determinate categorie:
    Meccaniche di gioco = Per giochi da tavolo o videogiochi
    Nr. giocatori = Idem
    Età consigliata = dovrebbe andare bene anche per video/libri/ecc..., ma potrebbe diventerebbe la quantità di qualcos'altro e via dicendo...
    Questo approccio però farebbe la seconda tabella con campi che non corrispondono sempre a tutti i record della tabella Catalogo
    resterebbero dei campi vuoti in alcuni elementi che non hanno attinenza ad averli
    Leggendo nei testi che se alcuni campi di una tabella resterebbero vuoti, sarebbe meglio suddividerli in una tabella collegata alla prima copn una relazione uno-a-uno, la mia soluzione sarebbe quella, se è giusta la mia interpretazione in un caso come questo che sto pensando...
  • Re: Idee sulla normalizzazione

    Non so se mi sono spiegato bene, nel caso avrei anche realizzato un documento word con tutte le idee, per realizzare il database sulle collezioni che mi sono venute in mente, ma che non saprei se si possono sviluppare in altre ipotetiche collezioni...
  • Re: Idee sulla normalizzazione

    Tu accenni soltanto alle varie ipotesi "collezionistiche", mentre per me sarebbe molto importante capire fino a quanta profondità di particolari vuoi arrivare, quanti ambiti "collezionistico-culturali" vuoi abbracciare. In questi casi, di grande incertezza, io preferisco ragionare con "quello che ho...adesso", poi, strada facendo, potrei migliorare il progetto. Più in concreto, io preferisco mettere in una tabella quei campi che "sicuramente" sono "omogenei", per esempio il capo Titolo è comune a qualsiasi "oggetto", mentre NrGiocatori no perchè non serve per Libri, CD... Io voterei per una tabella DettagliOggetti e lì dentro ci vai ad elencare quello che ti serve.
    La relazione uno-a-uno viene usata raramente e generalmente i programmatori preferiscono inglobare i campi nella tabella stessa.
    Sinceramente ho "filosoficamente" capito il problema della Categoria "attinente", ma non come vorresti realizzarlo nella progettazione. A conti fatti occorre anche sapere quali sono tutte quante.

    Robywekky ha scritto:


    idee, per realizzare il database sulle collezioni che mi sono venute in mente, ma che non saprei se si possono sviluppare in altre ipotetiche collezioni...
    Se domani verrà inventata una nuovissima categoria collezionistica con campi e regole che fanno saltare tutte le idee precedenti, come te la vai a cavare?
  • Re: Idee sulla normalizzazione

    Allora. le collezioni pensate fino ad adesso sono: Boardgame - cardgame - Tilesgame - Film - Serie TV - Videogiochi - Programmi - Libri (con separazione di Manualistica e narrativa) - Fumetti e Modellini da realizzare con la carta (Papercraft).
    quello che lega tutto è che possono essere sia articoli fisici che articoli digitali suddivisi in base al "Formato" (estensione di file o appartenenza ad una piattaforma, per quanto riguarda software).
    Per quanto riguarda i campi pensati che resterebbero relegati a poche collezioni sono: Meccanica di gioco (boardgame) e 4 campi di quantità = 2 dei quali sono quasi impostati a tutte le categorie (numero giocatori/Numero dischi/numero volumi/e informazionidi questa natura, mentre gli altri due sono legati alla sola categoria Boardgame, numero componenti/numero carte/e simile.

    Le collezioni sono inserite in una tabella collezioni, collegata alla tabella "Oggetti/Catalogo" tramite una relazione uno-a-Molti (un articolo specifico non può corrispondere a più categorie allo stesso tempo.... per le ripetizioni tra libri o film, vengono suddivise in base alla categoria di appartenenza, ripetendo quindi l'oggetto che comunque sarà di natura diversa.
    Altri campi come autore/Meccanica di gioco/ambientazione o genere, ed altro, sono campi di ricerca per suddividere le ripetizioni della stessa natura (Drammatico/Punta e clicca, ravensburger, Sony, e via dicendo...

    L'unico dubbio che avevo era quello se era meglio lasciare nella tabella Catalogo dei campi vuoti quando un elemento non presenta informazioni attinenti...

    L'altro aspetto più tecnico (che vedrò alla fine) e legato al campo Voto-indice gradimento (campo numerico con valore massimo 10) da rappresentare graficamente (se ci riesco), altrimenti lasciato con la visualizzazione numerica normale.
  • Re: Idee sulla normalizzazione

    Secondo me vanno fatte 2 considerazioni, forse contrapposte.
    A) Logica UNIONE: Nella tabella Oggetti, se tu volessi considerare tutte le "caratteristiche" possibili, puoi farlo (in orizzontale), ossia tanti campi. Quando si tratterà di Film i campi "meccanici" saranno vuoti, mentre per i Giochi saranno vuoti altri campi, ecc...
    B) Logica INTERSEZIONE: Nella tabella Oggetti metti solo i campi più comuni a tutte le categorie. Quando vuoi tracciare altri Dettagli, prevedi una tabella DettagliOggetti dove elenchi (in verticale) tutti i Dettagli.
    Per ottimizzare la valorizzazione verticale, occorrerebbe una gestione ben articolata di query, codici VBA ecc...

    Pro e contro.
    A)
    Pro: tracci tutto orizzontalmente, non hai bisogno di codici e ottimizzazioni.
    Contro: troppi campi, quando devi scrivere solo 2-3 cose, rischi di saltare qua e là...potrebbe alla lunga diventare fastidioso...

    B)
    Pro: gestito in maniera ottimale, potrebbe (secondo me dovrebbe) essere la soluzione a portata di utente
    Contro: devi pensare a un gioco ben articolato di query, codici VBA ecc...

    Vorrei precisare di aver fornito una mia (molto personale) analisi. Non è detto che sia necessariamente una via corretta in assoluto.
  • Re: Idee sulla normalizzazione

    Del passo B, Elencare in verticale, significa creare una tabella in cui ogni record contenga un solo dettaglio alla volta?
    Cioè record 1, meccanica_1, record_2, meccanica_2, ecc? con i relativi campi di quantità solo esclusivi a questi?
  • Re: Idee sulla normalizzazione

    Robywekky ha scritto:


    Del passo B, Elencare in verticale, significa creare una tabella in cui ogni record contenga un solo dettaglio alla volta?
    Cioè record 1, meccanica_1, record_2, meccanica_2, ecc? con i relativi campi di quantità solo esclusivi a questi?
    Sì.
  • Re: Idee sulla normalizzazione

    Ma in questo caso, se ad una meccanica equivale una quantità,
    ogni volta che si usa quella meccanica, viene assenata quella particolare quantità...
    le quantità sarebbero legate alle meccaniche?

    Poi non avevo accennato, ma le meccaniche possono esssere più di una, impostata ad un opggetto...
  • Re: Idee sulla normalizzazione

    Robywekky ha scritto:


    Ma in questo caso, se ad una meccanica equivale una quantità,ogni volta che si usa quella meccanica, viene assenata quella particolare quantità...le quantità sarebbero legate alle meccaniche?
    ...premetto che non ti seguo quando tra i Dettagli parli proprio delle "meccaniche"...non conosco la logica di certi giochi.
    Tuttavia, il senso del mio suggerimento B si basa sul fatto che un Oggetto di Categoria X avrà certamente 10 Dettagli da "valorizzare". L'ottimizzazione/accodamento record deve avvenire solo sull'associazione IDOggetto e NomeDettaglio...là dove 10 NomeDettaglio avranno una tabella apposita associata alla Categoria dell'Oggetto. Un clic di pulsante che dovrebbe provvedere ad accodarti i 10 Dettagli automaticamente, mostrerà solo i 10 NomeDettaglio, poi tu manualmente digiti le Quantità.
  • Re: Idee sulla normalizzazione

    Credo che mi utilizzerò la soluzione A e tramite query/Maschere visualizzo solo i campi che saranno associati ad una particolare categoria...
  • Re: Idee sulla normalizzazione

    Robywekky ha scritto:


    soluzione A e tramite query/Maschere visualizzo solo i campi che saranno associati ad una particolare categoria...
    Niente male anche questa soluzione. Ottima direi.
Devi accedere o registrarti per scrivere nel forum
13 risposte