Compito 27/05/2014 - Esercizio C

Tema:

Dato il seguente schema relazionale R❬{A,B,C,D,E,F,G}, {AB→EG, EF→DA, B→C, CB→A}❭

  1. dare una copertura canonica;
  2. dare almeno una chiave;
  3. dire se esistono almeno due chiavi;
  4. dire se lo schema è in 3NF (giustificando la risposta), e se non lo è trasformarlo in 3NF specificando gli schemi delle relazioni risultanti.

Nota: il tema è stato sviluppato con la parte teorica qui: https://diario.softml.it/su-chiavi-superchiavi-e-terza-forma-normale/

Sviluppo:

1) calcolo le chiusure

AB+ = {AB} (banale)

AB+ = {ABEG} (per 1)

AB+ = {ABCEG} (per 3 - fine)

EF+ = {EF} (banale)

EF+ = {ADEF} (per 2 - fine)

B+ = {B} (banale)

B+ = {BC} (per 3)

B+ = {ABC} (per 4)

B+ = {ABCEG} (per 1 - fine)

CB+ = {ABCEG} (come B+)

2) espando la parte destra

AB→E

AB→G

EF→A

EF→D

B→C

BC→A

3) semplifico, se possibile, la parte sinistra

Siccome B→C, BC→A si può riscrivere come C→A.

Siccome B→C e C→A, AB→E e AB→G si può riscrivere come B→E e B→G.

B→E

B→G

EF→A

EF→D

B→C

C→A

4) creo le relazioni in 3NF:

R1 = ❬{A,B,C,E,G}, {B→ACEG}❭

R2 = ❬{A,D,E,F}, {EF→AD}❭

5) verifico di avere una chiave in una relazione o ne creo una nuova

dal punto 1 capisco che non ho una chiave.

BF sono attributi presenti solo a sinistra (determinanti), quindi provo a verificare se questo insieme fa da chiave.

BF+ = {BF} (banale)

BF+ = {BEF}

BF+ = {BEFG}

BF+ = {ABEFG}

BF+ = {ABDEFG}

BF+ = {ABCDEFG} (contiene tutti gli attributi quindi è chiave)

Creo una relazione contenente la chiave

R3 = ❬{B,F}❭

Compito 09/09/2014 - Esercizio C

Tema:

Dato il seguente schema relazionale R❬{A,B,C,D,E,F,G,H}, {DHC→AG, ED→C,
BD→EF, C→E}❭

  1. dare una copertura canonica;
  2. dare almeno una chiave;
  3. dire se esistono almeno due chiavi;
  4. dire se lo schema è in 3NF (giustificando la risposta), e se non lo è trasformarlo in 3NF specificando gli schemi delle relazioni risultanti.

Nota: il tema è stato sviluppato con la parte teorica qui: https://diario.softml.it/su-chiavi-superchiavi-e-terza-forma-normale/

Sviluppo:

1) calcolo le chiusure

  1. DHC+ = {CDH}
  2. DHC+ = {ACDGH}
  3. DHC+ = {ACDEGH} (fine)
  1. ED+ = {DE}
  2. ED+ = {CDE} (fine)
  1. BD+ = {BD}
  2. BD+ = {BDEF}
  3. BD+ = {BCDEF} (fine)
  1. C+ = {C}
  2. C+ = {CE} (fine)

Nessuna è superchiave.

2) espando la parte destra

DHC→G

DHC→A

ED→C

BD→E

BD→F

C→E

3) semplifico, se possibile, la parte sinistra

Siccome E è determinata da BD, nella dipendenza funzionale ED→C la D è ridondante e la posso togliere.

Calcoliamo la chiusura di BD per prova:

  1. BD+ = {BD}
  2. BD+ = {BDEF}
  3. BD+ = {BCDEF} (fine)

Dal momento che la DF non è cambiata, abbiamo la prova che possiamo toglierla.

4) creo le relazioni in 3NF:

R1 = ❬{ACDGH}, {DHC→AG}❭
R2 = ❬{CE}, {E→C}❭
R3 = ❬{BDEF}, {BD→EF}❭
R4 = ❬{C}, {C→E}❭

posso accorpare la 2 e la 4: R2 = ❬{CE}, {E→C, C→E}❭

5) verifico di avere una chiave in una relazione o ne creo una nuova

dal punto 1 capisco che non ho una chiave.

Sicuramente i termini che compaiono solo a sinistra faranno parte della chiave. Proviamo a calcolare la chiusura di questa:

  1. BDH+ = {BDH}
  2. BDH+ = {BDEFH}
  3. BDH+ = {BCDEFH}
  4. BDH+ = {ABCDEFGH} (fine)

La situazione finale quindi è:

R1 = ❬{ACDGH}, {DHC→AG}❭
R2 = ❬{CE}, {E→C, C→E}❭
R3 = ❬{BDEF}, {BD→EF}❭
R4 = ❬{BDH}❭ *chiave

Soluzione

  1. dare una copertura canonica

Vedi sopra.

  1. dare almeno una chiave

BDH

  1. dire se esistono almeno due chiavi

No, esiste solo la chiave BDH, poiché corrisponde esattamente all'insieme di attributi esclusivamente determinanti (presenti solo a sinistra)

  1. dire se lo schema è in 3NF (giustificando la risposta), e se non lo è trasformarlo in 3NF specificando gli schemi delle relazioni risultanti.

Lo schema non è in 3NF perché nessuna delle relazioni contiene la chiave.

Facile da usare / cap. 6 – Roberto Polillo

http://www.rpolillo.it/libri/facile-da-usare/

Mini disclaimer: questi appunti non sono una recensione, non sono un riassunto, non rappresentano una valutazione del libro. Sono gli elementi che soggettivamente (cioè per me) sono da appuntarsi. Alcuni elementi, magari molto importanti, ma per me noti, potrebbero essere tralasciati. Quindi, cliccate sul link qui sopra, che fate prima: la licenza permette anche una lettura interessante senza spendere soldi.

Ingegneria del software

Mi appunto questa frase, che "smonta" il modello a cascata di sviluppo del software:

Ogni nuovo strumento cambia i bisogni del suo utilizzatore e genera nuovi bisogni, che suggeriscono modifiche non previste allo strumento stesso.

In un certo senso questa frase ricalca il principio di Peter, secondo cui - in maniera un po' pessimistica - un sistema sarà caricato sempre di più finché non smette di funzionare bene.