Normalizzazione tabelle

di il
14 risposte

Normalizzazione tabelle

Ciao a tutti sto facendo un db di una cassettiera piena di schemi: dentro ogni cassetto ci sono delle cartelle e dentro ogni cartella ci sono i disegni. ogni cartella ha una descrizione sommaria del contenuto, che compare sull'elenco delle cartelle di ogni cassetto.
per ora sono arrivato ad avere queste due tabelle e mi è stato detto di normalizzarle, potreste aiutarmi?
disegni.png
disegni.png


cartelle.png
cartelle.png

14 Risposte

  • Re: Normalizzazione tabelle

    Cerca su google normalizzazione database.

    Uno dei primi risultati a titolo d'esempio : http://www.fixinformatica.it/node/4
  • Re: Normalizzazione tabelle

    Domande:
    1. Non sappiamo se tu preferisci chiamare i Cassetti e le Cartelle con un numero (progressivo) oppure con un nome (testo).
    2. Non conosciamo il significato dei campi GR e SI. Essi devono comparire in una sola tabella.

    Osservazione:
    In linea generale, i campi di una tabella devono essere OMOGENEI ossia devono riguardare strettamente il significato del nome della tabella che li rappresenta.
  • Re: Normalizzazione tabelle

    1. i cassetti hanno un numero univoco progressivo da 1 a 20, le cartelle sono numerate progressivamente e sono legate al cassetto (ogni cassetto ha una cartella 1,2 e così via).

    2.
    GR=gruppo
    SI=sistema
    UF=unità funzionale
    insieme questi 3 elementi formano quella che si chiama "sede tecnica" ovvero una specie di codice identificativo di ogni "utenza elettrica", GR e SI mi servono per identificare sia le cartelle che i disegni in se, UF identifica l'utenza elettrica specifica quindi compare solo sulla tabella disegni perché all'interno della stessa cartella ci sono disegni riferiti a utenze elettriche diverse.
  • Re: Normalizzazione tabelle

    cele93 ha scritto:


    1. i cassetti hanno un numero univoco progressivo da 1 a 20, le cartelle sono numerate progressivamente e sono legate al cassetto (ogni cassetto ha una cartella 1,2 e così via).
    OK. Quindi entrambi NUMERICI. Quindi dobbiamo dare risalto ai loro rispettivi IDCassetto e IDCartella.

    cele93 ha scritto:


    GR e SI mi servono per identificare sia le cartelle che i disegni in se
    Il fatto che TI SERVONO per entrambi è un concetto diverso dal capire a quale tabella/parrocchia appartengono...Io ho capito che sono attributi di Cartelle.

    Vado avanti lo stesso. Questo, secondo me, il tuo scenario tabelle:

    Cassetti
    IDCassetto (numerazione automatica, chiave primaria)

    Cartelle
    IDCartella (numerazione automatica, chiave primaria)
    GR
    SI
    IDCassetto (numerico)

    Disegni
    IDDisegno (numerazione automatica, chiave primaria)
    IDDitta (numerico)
    N
    Descrizione
    UF
    Titolo
    IDCartella (numerico)

    Ditte
    IDDitta (numerazione automatica, chiave primaria)
    Ditta
    Indirizzo
    ...altri campi tipicamente anagrafici...

    Relazioni:
    Cassetti.IDCassetto uno-a-molti con Cartelle.IDCassetto
    Cartelle.IDCartella uno-a-molti con Disegni.IDCartella
    Ditte.IDDitta uno-a-molti con Disegni.IDDitta

    Usando Access, quando crei la relazione con la linea di join (leggi tutto questo sulla guida in linea), ricorda di mettere sempre il segno di spunta su "Applica integrità referenziale".
  • Re: Normalizzazione tabelle

    OsvaldoLaviosa ha scritto:


    Ditte
    IDDitta (numerazione automatica, chiave primaria)
    Ditta
    Indirizzo
    ...altri campi tipicamente anagrafici...
    dato che non è un campo strettamente necessario ma solo un indicazione del produttore del disegno (a volte non è nemmeno indicato) è necessario dedicargli una tabella??

    per il resto ok, domani aggiorno e creo le relazioni
  • Re: Normalizzazione tabelle

    Considera 2 punti di vista:
    A) Come hai detto tu, ha una importanza molto relativa. In questo caso la tua obiezione ci può stare: non vale la pena di creare una apposita tabella Ditte.
    B) La logica relazionale viene messa in moto qualora si denota una certa RIPETIZIONE SISTEMATICA di determinati valori. Quando un giorno tu dovessi rilevare questa ripetizione sistematica, io ci vedrei una tabella Ditte. Magari non ti servono tutti i campi tipicamente anagrafici (es. Indirizzo, Telefono, e-mail...). Per i valori Null, puoi prevedere un record "fantasma" con IDDitta realmente numerico, e nel campo Ditta un valore Null (vuoto). Magari imposti come valore predefinito (in tabella Disegni) il corrispondente IDDitta.
  • Re: Normalizzazione tabelle

    Ho novità riguardo la disposizione del tutto che sinceramente mi mettono un pò di confusione: le cartelle non si ripetono per ogni cassetto ma bensì funziona in questo modo:
    Ogni gruppo (GR) comprende "x" cassetti (tipo il gruppo 1 comprende dal cassetto 1 al cassetto 3), e di questi "x" cassetti le cartelle sono univoche (ad esempio cioè cassetto1=cartella 1..15, cassetto2=16..30, cassetto3=31..45, dal cassetto 4, in cui comincia un altro gruppo ricomincia la conta)... quindi il campo GR è solo un'info, è determinante per la suddivisione

    Nella tabella "Cartelle" che mi hai consigliato di fare metto ID_Cartella (contatore chiave primaria), ma poi devo mettere anche un campo "N_Cartella"??
  • Re: Normalizzazione tabelle

    cele93 ha scritto:


    quindi il campo GR è solo un'info, è determinante per la suddivisione

    Nella tabella "Cartelle" che mi hai consigliato di fare metto ID_Cartella (contatore chiave primaria), ma poi devo mettere anche un campo "N_Cartella"??
    Sicuramente sì.
    Se un domani tu volessi ri-codificare le cartelle non potresti più farlo, perché hai usato il codice (N_Cartella) invece dell' IDCartella.


    Però ti sconsiglio vivamente di evitare l'uso di underscore e dei spazi nei nomi degli oggetti del database: non servono a niente, complicano solo la vita perché sarai costretto a ricordare in quale punto gli hai messi.
    Se puoi, evita anche gli acronimi come GR: quindi usa Gruppo al posto di GR, e così via
    Utilizza solo quelli standard, es. IVA, CAP, ecc...


    Adotta un 'sistema semplice e pulito' ed utilizza sempre quello.
    Ad esempio IDCartella, IDCassetto, Codice (invece di N_Cartella), Descrizione, ...
  • Re: Normalizzazione tabelle

    Chiaro, grazie mille!
  • Re: Normalizzazione tabelle

    Ho qualche problema nella creazione delle relazioni... applicando integrità referenziale mi da errore "la relazione deve interessare lo stesso numero di campi contenenti lo stesso tipo di dati", ovviamente parlo di relazione tra "Cassetti" e "Cartelle" e tra "Cartelle" e "Disegni" essendo uno a molti. è un problema dovuto alla differenza di campi tra contatore e numerico?
  • Re: Normalizzazione tabelle

    Non sappiamo cosa hai fatto, quindi non possiamo dirti molto.
    Se hai fatto come ti ha suggerito Osvaldo, non devi avere questo problema.
  • Re: Normalizzazione tabelle

    Si ho seguito alla lettera, quando creo la relazione e spunto l'integrità referenziale mi esce l'errore
  • Re: Normalizzazione tabelle

    Considera che eri partito da una struttura tabelle alquanto disordinata. Se avevi già inserito TUOI valori, tentare di rimettere a posto, può innescare una serie di errori di "incoerenza"...uno dei quali può essere quello da te evidenziato. Considera che siamo nella sezione "Progettazione database" e io ti ho dato solo informazioni sulla corretta strutturazione delle tabelle. Questo presuppone un discorso a partire da "zero valori" iniziali...Prova a ricostruire tutto da capo e simulare con nuovi valori.
  • Re: Normalizzazione tabelle

    Trovato l'inghippo, avevo messo campo numerico in byte contro l'intero lungo del contatore e probabilmente non accetta differenze di questo tipo
Devi accedere o registrarti per scrivere nel forum
14 risposte