ESERCIZIO : Forma normale di Boyce-Codd

di il
13 risposte

ESERCIZIO : Forma normale di Boyce-Codd

Buon giorno .

Vorrei risolvere questo esercizio per capire bene come applicare la : Forma normale di Boyce-Codd - BCNF.

Chiedo soltanto di aiutarmi a capire come procedere .

Posso dire che una relazione è in forma normale di Boyce-Codd (BCNF, Boyce-Codd Normal Form) quando rispetta le caratteristiche fondamentali del modello relazionale (1FN) e in essa ogni
determinante è una chiave candidata, cioè ogni attributo dal quale dipendono altri attributi
può svolgere la funzione di chiave.

Basandomi su questa definizione dovrei riuscire a capire se questa relazione e' in prima forma normale:

Prima forma normale
Una relazione si dice in prima forma normale (1FN) quando rispetta i requisiti fondamentali del
modello relazionale, in particolare ogni attributo è elementare, non ci sono righe uguali e non
ci sono attributi ripetitivi.

a me sembra che nella tabella non ci siano ne righe uguali e non ci sono attributi ripetuti .
SECONDO ME QUESTO SCHEMA RISPETTA LA PRIMA FORMA NORMALE :

Secondo voi ?
Inoltre vorrei riuscire a individuare la chiave o le chiavi primarie . CodCorso e Docente secondo me e' una chiave primaria pero' o dei dubbi .
Allegati:
17659_702e20bf6305396db294e6e805b60186.png
17659_702e20bf6305396db294e6e805b60186.png

13 Risposte

  • Re: ESERCIZIO : Forma normale di Boyce-Codd

    RAGIONA !!!

    E' EVIDENTE/LAPALISSIANO/OVVIO/BANALE che non e' cosi!!!!

    Le forme normali fondamentalmente hanno il compito di formalizzare la seguente idea:

    e' inutile avere informazioni ripetute
    se i valori in due o piu' colonne (e stessa riga, evidentemente) sono in relazione 1:1 tra di loro, allora non ha senso mantenerli in queste colonne, ma conviene metterli in una tabella dedicata

    La tua tabellina e' abbondantemente ridondante: ci sono diverse infomazioni che e' assolutamente inutile tenerle li, ma conviene rimuoverle (perche' presenti gia' da qualche altra parte) ed altre che converrebbe raccogliere in una tabella dedicata!
  • Re: ESERCIZIO : Forma normale di Boyce-Codd

    Grazie per avermi risposto .
    Mi sono un po' tranquillizzato dalla difficoltà della prima lettura dell'esercizio e ho iniziato a ragionare ( credo sia l'unica maniera per risolvere questi esercizi) .
    Per prima cosa deduco quanto segue :

    CodCorso e Docente e' la chiave primaria .

    In tutte le righe in cui compare CodCorso e' ripetuto l'attributo indirizzo , titolo e facolta .
    °RIDONDANZA

    Se l'indirizzo della facolta' cambia , occorre modificare tutte le righe in cui compare contemporaneamente .
    °ANOMALIA DI AGGIORNAMENTO


    Questo e' il primo ragionamento che ho fatto .
    Vorrei capire se ci sono altre anomalie come per esempio :
    ° anomalia di inserimento
    ° anomalia di cancellazione

    Un’unica relazione è utilizzata per rappresentare
    informazioni eterogenee alcuni dati sono ripetuti in tuple diverse senza aggiungere nuova informazione dati ridondanti
    E Altro ...per devo arrivarci per gradi .

    Ti chiedo cortesemente ( se puoi di seguirmi ancora un po') cosi' da sciogliere qualche nodo complicato . Sono argomenti complessi che non basta studiare .Il difficile e' applicare la teoria alla pratica .

    Grazie .
  • Re: ESERCIZIO : Forma normale di Boyce-Codd

    Intuitivamente mi viene in mente di creare le seguenti Tabelle o dipendenze funzionali pero' sicuramente c'e' una tecnica ben precisa per ricavarsele

    Secondo me le dipendenze funzionali sono le seguenti :


    CodCorso , Titolo , Anno , Semestre
    Docente , NomeDoc , Crediti
    Facolta' , Indirizzo
  • Re: ESERCIZIO : Forma normale di Boyce-Codd

    O Forse cosi' ?


    R1
    CodCorso , Titolo , Crediti , facolta' , Indirizzo

    R2
    Docente , NomeDoc, Anno , Semestre
  • Re: ESERCIZIO : Forma normale di Boyce-Codd

    RAGIONA

    Non andare a casaccio!!!

    Ragiona per argomenti!!!!!

    Allora:

    prima banalita': La colonna Facolta' andra' a braccetto con Indirizzo. E tenerle nella tabella dei Corsi cosi' non ha senso!

    Quindi ti farai una tabella Facolta'[FacoltaId, Nome, Indirizzo] e le due colonne le sostituisci con FacoltaId.


    seconda banalita': Docente dal valore, e' chiave primaria in una tabella Docenti. E' ragionevole pensare che nella descrizione dei docenti ci sia il nome (ed e' evidente che ci possono essere due docenti con lo stesso nome ma con ID diverso!!!), Quindi, fuori dalle scatole NomeDoc

    La chiave primaria della tabella Corsi deve essere CodCorso e BASTA.

    Per fare un raffronto, la chiave primaria di una tabella e' l'equivalente dell'indirizzo di memoria di una variabile!

    Ora, corsi con CodCorsi diversi DEVONO necessariamente avere diversi Titolo, Anno, Semestre, Serve qualcosa altro? Direi proprio di no!

    Ogni corso avra', ovviamente, un Docente, e dei Crediti!
  • Re: ESERCIZIO : Forma normale di Boyce-Codd

    Allora ... seguendo il tuo prezioso suggerimento , le tabelle dovrebbero essere impostate in questo modo :


    FACOLTA [ FacoltaID ]

    DOCENTI [ Docente , Crediti ]

    CORSI [ CodCorso , Titolo , Anno , Semestre , Docente , Crediti ]
  • Re: ESERCIZIO : Forma normale di Boyce-Codd

    FACOLTA [ FacoltaID , Nome , Indirizzo ]

    DOCENTI [ Docente , Crediti ]

    CORSI [ CodCorso , Titolo , Anno , Semestre , Docente , Crediti, FacoltaID ]
  • Re: ESERCIZIO : Forma normale di Boyce-Codd

    FabioPOl ha scritto:


    FACOLTA [ FacoltaID , Nome , Indirizzo ]

    DOCENTI [ Docente , Crediti ]

    CORSI [ CodCorso , Titolo , Anno , Semestre , Docente , Crediti, FacoltaID ]
    Quindi un docente non ha nome?
    E che che centra il numero di crediti con il docente?

    RAGIONA!!!!

    Per uniformita' cambia il nome delle colonne che sono chiave primaria: ad esempio hai CodCorso (Codice Corso), allora usa CodDocente e non Docente e CodFacolta e non FacoltaId, oppure CorsoId, FacoltaId, DocenteId.

    E' buona regola (diciamo pure un ASSIOMA!!!!) usare le stesse regole o gli stessi nomi per rappresentare gli stessi concetti!
  • Re: ESERCIZIO : Forma normale di Boyce-Codd

    FACOLTA [ CodFacolta , Nome , Indirizzo ]

    DOCENTI [ CodDocente , NomeDoc ]

    CORSI [ CodCorso , Titolo , Anno , Semestre , Crediti, FacoltaID ]
  • Re: ESERCIZIO : Forma normale di Boyce-Codd

    FabioPOl ha scritto:


    FACOLTA [ CodFacolta , Nome , Indirizzo ]

    DOCENTI [ CodDocente , NomeDoc ]

    CORSI [ CodCorso , Titolo , Anno , Semestre , Crediti, FacoltaID ]
    Ma stai andando a casaccio?

    Che fine ha fatto il docente che presenzia al corso?
    Che cosa e' FacoltaID?

    Se continui ad andare avanti per tentativi, ne dovrai fare un bel po' prima di azzeccare quello giusto!
  • Re: ESERCIZIO : Forma normale di Boyce-Codd

    E' vero FacoltaID e' sbagliata , volevo indicare la chiave esterna CodFacolta.



    FACOLTA [ CodFacolta , Nome , Indirizzo ]

    DOCENTI [ CodDocente , NomeDoc ]

    CORSI [ CodCorso , Titolo , Anno , Semestre , CodDocente, Crediti, CodFacolta ]
  • Re: ESERCIZIO : Forma normale di Boyce-Codd

    Io non conosco la teoria delle 3-4-5 FN, ma mi affido solo a un certo buon senso. Io normalizzerei così:

    Facoltà
    CodFacoltà (PK)
    Indirizzo

    Corsi
    CodCorso (PK)
    Titolo
    Crediti
    CodFacoltà (FK)

    Docenti
    Docente (PK)
    NomeDoc

    CorsiSemestri
    CodCorsoSemestre (PK)
    Anno
    Semestre
    CodCorso (FK)
    Docente (FK)

    Relazioni:
    Facoltà.CodFacoltà uno-a-molti Corsi.CodFacoltà
    Corsi.CodCorso uno-a-molti CorsiSemestri.CodCorso
    Docenti.Docente uno-a-molti CorsiSemestri.Docente

    Trovo molto riduttivo che la tabella Docenti abbia solo quei campi. Resta tuttavia l'univocità del semplice campo Docente.
  • Re: ESERCIZIO : Forma normale di Boyce-Codd

    Grazie.
Devi accedere o registrarti per scrivere nel forum
13 risposte