Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    Verificare se schema è in forma normale

    Ciao a tutti, mi sembra che il titolo del 3d sia abbastanza esplicativo.

    C'è un modo semplice per verificare se uno schema è in terza forma normale o in forma normale di Boyce e Codd?

    Lo sto guardando per ore, e non mi sembra ci siano anomalie di aggiornamento, cancellazione, ecc.

    Provo a postarvelo!

    UTENTE (email, password, nome, cognome, vip)

    PROFILO (emailUTENTE, sesso, data_nascita, comune_nascita, comune_res, prov_res, stato_res, hobbies)

    SCUOLA (cod, tipo, nome_scuola, comune_scuola, via)

    FREQUENZA (codSCUOLA, emailUTENTE, annoinizio, annofine)

    STATUS (emailUTENTE, statusId, status, data_s)

    NOTA (emailUTENTE, notaId, nota, data_n)

    AMICIZIA (utenteDaUTENTE, utenteAUTENTE, stato)

    TAG (notaIdNOTA, notaEmailNOTA, tagEmailUTENTE)

    EVENTO (codev, nomeev, tipoev, comuneev, inizioev, organizzatoreUTENTE)

    INVITO (codevEVENTO, invitatoUTENTE, statodiconferma)

  2. #2
    Davvero nessuno sa dirmi come posso verificare se uno schema è in qualche forma normale?

  3. #3
    ok, secondo me dovrebbe uscire:
    utente, scuola, frequenza, status, nota, amicizia, evento, invito soddisfano la prima forma normale, la seconda, la terza e quella di Boyce e Codd.
    mentre profilo soltanto la prima, in quanto prov_res dipende da comune_res e non completamente dalla chiave e stato_res dipende da prov_res che dipende da comune_res, quindi essendoci una dipendenza transitiva non può essere nè in seconda forma nè in terza.

    Che ne pensate?

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,469
    qualche idea ce l'avrei, ma essendo specializzato in filosofia non vorrei trarti in inganno

  5. #5
    Se hai qualche idea, anche filosofica, ti prego dammi una mano!
    Quando scrivo un post in questo forum non mi risponde praticamente nessuno...

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,469
    Originariamente inviato da michellemabelle
    Se hai qualche idea, anche filosofica, ti prego dammi una mano!
    Quando scrivo un post in questo forum non mi risponde praticamente nessuno...
    aiaiaiaiaiiiii... è come invitare un vampiro ad entrare in casa...
    vabbè partiamo maieuticamente...

    bon, come saprai benissimo
    data un'istanza r di uno schema
    I(U) e due sottoinsiemi non
    vuoti di U, esiste una dipendenza
    funzionale (in r) se
    per ogni coppia di tuple
    di r con gli stessi valori sul
    primo sottoinsieme,
    allora la coppia di tuple hanno
    gli stessi valori anche sul secondo
    sottoinsieme.
    In questo caso il primo sottoinsieme
    determina funzionalmente il secondo.
    1->2.

    In generale 1->2 non banale se
    2 non è un sottoinsieme di 1
    (dipendenze del tipo
    sesso,stipendio->stipendio)
    ---
    OK, allora
    la 1NF vuole che tutti gli attributi
    abbiano domini atomici

    la 2NF sse ogni attributo non primo
    (non appartenente a nessuna chiave)
    dipende completamente da ogni chiave

    BCNF sse per ogni dipfunz non banale
    1->2, 1 è una superchiave dello schema
    ---
    Vedi subito che le dipfunz non le
    "vedi" dai dati, bensì dagli attributi
    dello schema, o meglio dalla loro semantica.
    ---
    E fin qui siamo al "normale".
    Operativamente, per avere una BCNF,
    si splitta sulla base delle dipfunz.

    Primissima cosa da fare è,quindi,
    individuare esaustivamente le dipfunz
    (ecco che salta fuori la semantica
    degli attributi)

    Ma non basta, perchè devi verificare
    che ricostruendo l'insieme iniziale
    (join) l'ottieni uguale.

    Ecco quindi lo split (o decomposizione)
    buono, ovvero quando il join naturale
    delle proiezioni della relazione
    sui sottoinsiemi partizionati è uguale alla relazione stessa

    Operativamente si controlla che il join sia eseguito su una superchiave di uno
    dei due sottoinsieme.

    La cosa "bella" è che introducendo
    nuove tuple puoi violare la condizione
    precedente, ossia ricostruire una
    relazione DIVERSA da quella di partenza

    E quindi tocca preservare le dipendenze funzionali, altrimenti son cazzi acidi (versione breve)

    Traduzione: tu progetti partendo da certi presupposti, e bon.
    Poi però i presupposti vengono violati, e sei fregato (bello, eh? tipico esempio da esame bastard-inside...)

    La cosa ancora più fica è che, talvolta,
    non puoi avere una decomposizione BCNF
    mantenendo le dipfunz (altra domandina...).

    Ecco quindi che salta fuori la 3NF,
    che è una versione rilassata,
    ovvero sse ogni attributo non primo
    NON dipende transitivamente da nessuna chiave o, come prima con l'aggiunta
    OR ogni attributo in 2 è primo
    (cioè è almeno in una chiave)

    ---
    Qualche esempio ti può interessare?
    (solo se hai un bastard inside, altrimenti no).
    ---
    Per la 3NF brutalmente
    **** devi individuare come prima TUTTE le dipfunz ****

    e poi operi bovinamente
    Una relazione per ogni gruppo di dipfunz con lo stesso determinante, e poi metti nello schema gli attributi in almento una dipfunz del gruppo

    Se hai più determinanti che si determinano l'un l'altro, li fondi (hai più chiavi alternate)

    E cilegina si verifica che esista uno schema la cui chiave è anche chiave dello schema iniziale
    ---
    Tutto chiaro?

    Prima decomponi in 3NF,
    e POI verifichi se è pure BCNF
    (per inciso se una relazione ha una
    sola chiave allora, banalmente,
    3NF==BCNF)

    Se non è BCNF
    1) lo lasci stare
    2) lo splitti in BCNF, però controllando
    che ricostruendo con query ottieni lo
    stesso insieme iniziale
    [cosa per nulla banale]
    3) ti inventi un diverso progetto che
    possa diventare BCNF

    ---
    Supersintesi

    uno schema relazionale in forma normale NON ha certi difetti, ma può averne altri.
    I difetti che non ha sono ridondanza e casini in aggiornamento
    Si usano 3NF e BCNF decomponendo gli schemi, sulla base delle dipfunz
    Se la decomposizione non preserva le
    dipfunz son dolori, ma in generale bisogna sempre controllare con query di non aver modificato il dominio iniziale


    ---
    Applicazione filosofica
    1) normalizzare non è nei 10 comandamenti
    2) puoi introdurre casini assurdi soprattutto con BCNF e "occulti"
    3) i costi aumentano vertiginosamente (join)
    4) se hai molte modifiche => son dolori dal punto di vista delle prestazioni
    5) la ridondanza è oggi praticamente irrilevante come occupazione di spazio

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,469

    Re: Verificare se schema è in forma normale

    [QUOTE]Originariamente inviato da michellemabelle
    UTENTE (email, password, nome, cognome, vip)
    /QUOTE]
    Cominciamo a vedere le dipfunz.

    Che mi dici di vip? cos'è?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.