PDA

View Full Version : Cenni concettuali su basi di dati relazionali


MEMon
20-05-2007, 14:29
Mettiamo che devo rappresentare gli esami sostenuti dagli studenti per determinati corsi, e ogni esame ha una data e un voto.

Quindi, ESAME è un'associazione fra STUDENTE e CORSO, ed ha due attributi DATA E VOTO.
Considerando i seguenti vincoli d'integrità:
1)Uno studente può sostenere al massimo 29 esami.
2)Per un dato studente, un dato corso ed una certa data, può essere registrato un unico esame con un unico voto.
3)Per una certa data e per un certo studente si può registrare un unico esame relativo ad un preciso corso.

Nemmeno vedo la differenza fra il 2 e 3 vincolo ma va beh...

Senza prendere per ora in considerazione il secondo vincolo, un modello E/R potrebbe essere qusto giusto?
Primo vincolo
http://img150.imageshack.us/img150/3140/48260863ud9.png (http://imageshack.us)

Ora, qui viene la parte che ho capito meno(fermo restando che non so se ho capito nemmeno la prima :D), ovvero considerare anche il secondo vincolo utilizzando la reificazione di ESAME.

Secondo vincolo:reificazione di ESAME
http://img520.imageshack.us/img520/8568/66827031ox9.png (http://imageshack.us)
Intanto, questa reificazione perchè esprime il vincolo 2? Come si legge questo grafo?
Io lo leggeri così:un esame è un'enitità definita da un voto ed è identificato da una data un preciso corso e un preciso studente.
Come mai VOTO non è stato utlizzato nell'identificatore composto-mixed formato da STUDENTE, DATA E CORSO???
Andiamo avanti...considerando che le associazioni A e B non hanno un nome logico, manterrei quello detto prima: uno studente può sostenere al massimo 29 esami, ed un corso esiste anche se nessun studente ha sostenuto esami x quel corso.
Sbaglio di molto?

Terzo vincolo:modificazione della reificazione di ESAME
http://img413.imageshack.us/img413/6634/46787207rn5.png (http://imageshack.us)
In pratica è stato tolto l'identifiatore riferito al corso, quindi ora l'identificatore composto-mixed è formato solo da STUDENTE E DATA, cos'è cambiato ai fini pratici? Come si leggere ora il grafo? Perchè rispetta il 3 vincolo?

Il post è lungo e probabilemente noiosissimo, spero che però qualcuno mi dia una manina a capire.

MEMon
20-05-2007, 18:01
Non mi dite nulla? niente di niente? :cry: :cry:

Manugal
20-05-2007, 18:37
Attenzione a quello che scrivi. Le cardinalità tra le entità e le associazioni possono essere solo (0,N) o (1,1) o (1,N) non possono mai essere (0,29). Quando hai i vincoli di integrità quelli devono essere scritti a parte.

MEMon
20-05-2007, 18:40
Ma ne sei sicuro? Perchè questo è un esempio che c'è sul libro che sto seguendo... del quale ovviamente non ho capito la spiegazione(troppo superficiale)

Manugal
20-05-2007, 18:43
Sicuro. Sto studiando anch'io Basi di dati. ;)

Se posso consigliarti una buona dispensa che riguarda tutta la progettazione concettuale (e logica) vai su http://multicommunity.di.uniroma1.it alla sezione Laboratorio di Basi di Dati I.

MEMon
20-05-2007, 18:46
Ti ringrazio...

Andiam bene allora, il libro su cui sto studiando(tra l'altro scritto dal prof che ci tiene il corso) è pure sbagliato... :(

MEMon
20-05-2007, 18:50
E quindi come faccio ad esprimere che uno studente può sostenere al massimo 29 esami??

Comunque, del resto che ne pensi?

Manugal
20-05-2007, 18:56
Guarda magari si può fare anche come dice il tuo prof, a me però hanno insegnato che esistono solo quelle cardinalità e i vincoli vanno scritti a parte. Per quanto riguarda il resto dovrei vederlo più a fondo. :) Anche perché mi sembra che gli schemi che scrive il tuo prof sembrano un po' diversi da quelli nostri.

MEMon
20-05-2007, 19:01
Si infatti sto notando...ma che palle, mi ricorda i tempi in cui alle superiori si dovevano fare i diagrammi di flusso per ogni stronzata di programma che si voleva fare.

Ma sta roba è davvero utile???

Sicuramente pratica NO.

Manugal
20-05-2007, 21:49
Guarda anch'io credevo all'inizio che non fosse utile. Adesso ci è stato dato un progetto di una base di dati e dobbiamo fargli anche questo diagramma. Se fai bene questo diagramma, fidati hai risolto il 60%-70% del progetto. Perché da qua dipendono tutte le anomalie che potrebbero esserci una volta che progetterai la base di dati. Poi certo si riesce a farlo anche senza credo.

MEMon
21-05-2007, 13:04
Sarà... a me sembra una forzatura, forzati di rappresentare graficamente il modo di pensare di una persona, che non è il mio! Complica solo le cose.


Detto questo, se qualcuno vuole rispndere al primo post è ancora in tempo :D

yorkeiser
21-05-2007, 13:26
Gli E-R fanno cag**e

MEMon
21-05-2007, 13:27
Puoi dirlo forte!!!

k0nt3
21-05-2007, 13:54
Sarà... a me sembra una forzatura, forzati di rappresentare graficamente il modo di pensare di una persona, che non è il mio! Complica solo le cose.


Detto questo, se qualcuno vuole rispndere al primo post è ancora in tempo :D
tu assumi che al progetto ci lavori da solo.. immagina di lavorare in un team! un diagramma è forse il modo migliore per esprimere l'idea che hai in testa e farla capire a tutti.
comunque non puoi esprimere vincoli del tipo massimo 29 oggetti.. devi mettere per forza 0..N e poi specificare anche in linguaggio naturale il vincolo.

MEMon
21-05-2007, 13:56
Ok, appurato che non posso esprimere cardinalità massima come un numero(ripeto l'ho preso pari pari dal libro), mi potresti spiegare il resto?
Cosa hanno apportato le modifiche via via fatte e perchè?
Come cambia la lettura del grafo?

Questo mi interessa...

k0nt3
21-05-2007, 14:04
Nemmeno vedo la differenza fra il 2 e 3 vincolo ma va beh...

il vincolo 2 dice che a una terna (studente, data, corso) è associato un solo esame con un solo voto.
mentre il vincolo 3 dice che a una coppia (studente, data) è associato un esame, a sua volta associato a un corso.
quello che cambia in pratica è che il terzo vincolo non permette a uno studente di registrare esami diversi nella stessa data, mentre con il secondo vincolo era possibile (perchè la chiave si differenziava con il corso).

k0nt3
21-05-2007, 14:12
Ora, qui viene la parte che ho capito meno(fermo restando che non so se ho capito nemmeno la prima :D), ovvero considerare anche il secondo vincolo utilizzando la reificazione di ESAME.

Secondo vincolo:reificazione di ESAME
http://img520.imageshack.us/img520/8568/66827031ox9.png (http://imageshack.us)
Intanto, questa reificazione perchè esprime il vincolo 2? Come si legge questo grafo?
Io lo leggeri così:un esame è un'enitità definita da un voto ed è identificato da una data un preciso corso e un preciso studente.
Come mai VOTO non è stato utlizzato nell'identificatore composto-mixed formato da STUDENTE, DATA E CORSO???
Andiamo avanti...considerando che le associazioni A e B non hanno un nome logico, manterrei quello detto prima: uno studente può sostenere al massimo 29 esami, ed un corso esiste anche se nessun studente ha sostenuto esami x quel corso.
Sbaglio di molto?

se noti nel primo diagramma non esprimi il fatto che a una terna (studente, data, corso) può corrispondere un solo esame. infatti se non reifichi esame questo è impossibile da esprimere. puoi dire solo che uno studente fa N esami e ognuno è relativo a un corso, ma non puoi mettere vincoli riguardo alla data.

k0nt3
21-05-2007, 14:15
Terzo vincolo:modificazione della reificazione di ESAME
http://img413.imageshack.us/img413/6634/46787207rn5.png (http://imageshack.us)
In pratica è stato tolto l'identifiatore riferito al corso, quindi ora l'identificatore composto-mixed è formato solo da STUDENTE E DATA, cos'è cambiato ai fini pratici? Come si leggere ora il grafo? Perchè rispetta il 3 vincolo?

Il post è lungo e probabilemente noiosissimo, spero che però qualcuno mi dia una manina a capire.
scusa se ho spezzettato ma era io sono per il divide et impera :asd:

come dicevo prima ora è cambiato che uno studente non può più registrare due esami nella stessa data, anche se sono relativi a corsi diversi.

ps. magari metti dei nomi sensati nelle relazioni.. io metterei "sostiene" al posto di A e "relativo a" al posto di B

MEMon
21-05-2007, 14:15
Azz grande mi hai fatto capire!!!
In pratica col secondo vincolo io posso avere due esami con stessa data e studente, ma di un corso diverso, mentre col in 3 vincolo io posso avere due esami con studente e/o data diversi.

Perfetto!
Una cosa, nei grafici reificati, le associazioni nuove(ad esempio A e B in questo caso) vanno lette? Cioè, assumono un senso per la lettura o sono inserite solo per trasformare l'associazione ESAME in una entità?

Se ora volessi aggiungere questo vincolo: per un dato studente ed un dato corso può essere regeistrato un unico esame,con relativo voto e relativa data.
Come cambierebbe l'ultimo grafico?
In pratica sarebbe ancora più restrittivo giusto? In quanto il 3 vincolo permette che uno studente registri più esami anche dello stesso corso, purchè abbiano date diverse, mentre ora voglio che gli esami devono avere anche corso diverso.

wingman87
21-05-2007, 14:19
Premetto che grafi di questo tipo non ne ho fatti (non allo stesso modo intendo) ma mi sembra di averci capito qualcosa:

Secondo vincolo:reificazione di ESAME
http://img520.imageshack.us/img520/8568/66827031ox9.png (http://imageshack.us)
Intanto, questa reificazione perchè esprime il vincolo 2? Come si legge questo grafo?

Penso si legga così: Esame è identificato da uno studente, un corso e una data, non potranno quindi esistere altri esami con le stesse caratteristiche. Voto non è stato aggiunto tra le chiavi primarie, altrimenti si sarebbe potuto inserire un altro esame con la stessa data, lo stesso corso e lo stesso studente ma voto diverso.
Ad ogni modo questo vincolo è ridondante, infatti è già incluso nel terzo.


Terzo vincolo:modificazione della reificazione di ESAME
http://img413.imageshack.us/img413/6634/46787207rn5.png (http://imageshack.us)
In pratica è stato tolto l'identifiatore riferito al corso, quindi ora l'identificatore composto-mixed è formato solo da STUDENTE E DATA, cos'è cambiato ai fini pratici? Come si leggere ora il grafo? Perchè rispetta il 3 vincolo?

E' cambiato che prima potevo inserire due esami con stesso studente, stessa data ma diverso corso, ora questo non è più possibile.

MEMon
21-05-2007, 14:24
E se volessi che ora anche il corso deve essere diverso, mi basterebbe aggiungere un ulteriore identificatore ad ESAME composto da STUDENTE e CORSO?

wingman87
21-05-2007, 14:25
Se ora volessi aggiungere questo vincolo: per un dato studente ed un dato corso può essere regeistrato un unico esame,con relativo voto e relativa data.
Non so come si disegni però dovresti mettere studente e corso come chiave primaria e poi porre come unica la coppia data-studente

k0nt3
21-05-2007, 14:26
Perfetto!
Una cosa, nei grafici reificati, le associazioni nuove(ad esempio A e B in questo caso) vanno lette? Cioè, assumono un senso per la lettura o sono inserite solo per trasformare l'associazione ESAME in una entità?

in genere lo scopo di un diagramma ER è di essere il più leggibile possibile.. ora se tu puoi dare un nome a un'associazione devi darglielo indipendentemente dal fatto che questa è nata da una reificazione o da altro.

Se ora volessi aggiungere questo vincolo: per un dato studente ed un dato corso può essere regeistrato un unico esame,con relativo voto e relativa data.
Come cambierebbe l'ultimo grafico?
In pratica sarebbe ancora più restrittivo giusto? In quanto il 3 vincolo permette che uno studente registri più esami anche dello stesso corso, purchè abbiano date diverse, mentre ora voglio che gli esami devono avere anche corso diverso.
si in questo caso devi togliere anche la data dalla chiave di esame e ti rimangono solo le chiavi esterne :D

MEMon
21-05-2007, 14:31
si in questo caso devi togliere anche la data dalla chiave di esame e ti rimangono solo le chiavi esterne :D
Ma dopo permetto che uno studente possa registrare un unico esame per un unico corso, ma l'esame può avere la stessa data, o sbaglio?

MEMon
21-05-2007, 14:32
Non so come si disegni però dovresti mettere studente e corso come chiave primaria e poi porre come unica la coppia data-studente

Ancora non so in termini pratici come si risolve il tutto :D comunque direi che è come l'ho pensata anche io.

wingman87
21-05-2007, 14:34
Sì, è che abbiamo scritto insieme :D

k0nt3
21-05-2007, 14:38
Ma dopo permetto che uno studente possa registrare un unico esame per un unico corso, ma l'esame può avere la stessa data, o sbaglio?
guarda.. l'ho fatto di fretta comunque:
http://img442.imageshack.us/img442/8862/diagram1lp1.th.jpg (http://img442.imageshack.us/my.php?image=diagram1lp1.jpg)

ora uno studente può avere solo 1 esame relativo a un corso, perchè altrimenti la chiave non sarebbe unica

devo pensare un'attimo a quello che hai detto.. attenda in linea :fagiano:

k0nt3
21-05-2007, 14:48
hai ragione, quindi probabilmente bisogna fare un'altra reificazione

MEMon
21-05-2007, 14:48
Vediamo se riesco a leggerlo :D
Ora esame è identificato univocamente da uno STUDENTE ed un CORSO, quindi un esame per essere diverso deve avere obbligatoriamente uno dei due diversi.
Però da quel poco che ho capito fin'ora, io potrei avere due esame diversi in quanto fatti per due corsi diversi, ma aventi la stessa data, o sbaglio?

MEMon
21-05-2007, 14:49
hai ragione, quindi probabilmente bisogna fare un'altra reificazione

Ma se io unisco al digramma del punto 3, quello del punto 2 ma senza data come identifcatore, ovvero tengo il diagramma del punto 3 a aggiungo un identificatore composto da STUDENTE e CORSO, potrebbe funzionare? si può fare una cosa del genere?

k0nt3
21-05-2007, 15:02
per adesso sono arrivato a questo:
http://img521.imageshack.us/img521/4452/diagram2wk9.th.jpg (http://img521.imageshack.us/my.php?image=diagram2wk9.jpg)

se qualcuno trova che non funziona lo dichi :D

k0nt3
21-05-2007, 15:03
Ma se io unisco al digramma del punto 3, quello del punto 2 ma senza data come identifcatore, ovvero tengo il diagramma del punto 3 a aggiungo un identificatore composto da STUDENTE e CORSO, potrebbe funzionare? si può fare una cosa del genere?
ma esame non ha già l'identificatore composto da studente e corso?

MEMon
21-05-2007, 15:04
mmm no, da studente e data

k0nt3
21-05-2007, 15:04
se qualcuno trova che non funziona lo dichi :D
ecco mi trovo da solo i bug :fagiano: dovrei assicurarmi che la registrazione e l'esame siano relative allo stesso corso!

MEMon
21-05-2007, 15:06
Io intendevo una cosa così, è lecita?
http://img132.imageshack.us/img132/9485/64864293iw2.png (http://imageshack.us)

ps. voto è fuori dall'identificatore composto

wingman87
21-05-2007, 15:08
A livello di codice è possibile nel senso che basta aggiungere come clausola unique quella coppia di valori però non so come si può disegnare...

k0nt3
21-05-2007, 15:11
Io intendevo una cosa così, è lecita?
http://img132.imageshack.us/img132/9485/64864293iw2.png (http://imageshack.us)

ps. voto è fuori dall'identificatore composto
praticamente è uguale al secondo.. infatti le chiavi di esame sono sempre studente, data e corso.
il fatto che ti è venuto in mente di mettere due chiavi distinte (cosa non lecita ovviamente) in esame tende ad avvallare l'ipotesi che in realtà esame sia composto da un'altra entità. cioè ci vuole un'altra reificazione

k0nt3
21-05-2007, 15:16
mmm cosa ne dite di questo?
http://img172.imageshack.us/img172/3956/diagram3ll3.th.jpg (http://img172.imageshack.us/my.php?image=diagram3ll3.jpg)

MEMon
21-05-2007, 15:20
praticamente è uguale al secondo.. infatti le chiavi di esame sono sempre studente, data e corso.
il fatto che ti è venuto in mente di mettere due chiavi distinte (cosa non lecita ovviamente) in esame tende ad avvallare l'ipotesi che in realtà esame sia composto da un'altra entità. cioè ci vuole un'altra reificazione


mmm ma stando alla logica di sti graficini ora le chiavi sono due, una composta da studente e data, e una da studente e corso.

Quindi ora due esami per essere diversi devono avere:
1) studente e/o data diversi
2) studente e/o corso diversi

Facciamo un esempio quindi:
Io ho due corsi(C1 e C2) due studenti (S1 e S2) e due date(D1 e D2), devo provare decidere se due esami (E1 ed E2) sono diversi.

caso A(data e corso uguali ma studente differente
E1 è identificato da una coppia studente-data (S1-D2) e una coppia studente-corso(S1-C1)
E2 è identificato da una coppia studente-data (S2-D2) e una coppia studente-corso(S2-C1)
Essendo lo studente diverso gli esami sono diversi in quanto sia il punto 1) che 2) sono verificati

caso B(studente e corso uguale ma data differente
E1 è identificato da una coppia studente-data (S1-D1) e una coppia studente-corso(S1-C1)
E2 è identificato da una coppia studente-data (S1-D2) e una coppia studente-corso(S1-C1)
Essendo solo la data diversa gli esami sono uguali in quanto solo il punto 1) è verificato, ma gli esami sono dello stesso corso, cosa impossibile.


caso C(studente e data uguale ma corso differente
E1 è identificato da una coppia studente-data (S1-D1) e una coppia studente-corso(S1-C1)
E2 è identificato da una coppia studente-data (S1-D1) e una coppia studente-corso(S1-C2)
Essendo solo il corso diverso gli esami sono uguali in quanto solo il punto 2) è verificato, ma gli esami sono stati dati allo stesso momento, cosa impossibile.


A me torna...i vincoli sono rispettati no?

MEMon
21-05-2007, 15:24
mmm cosa ne dite di questo?
http://img172.imageshack.us/img172/3956/diagram3ll3.th.jpg (http://img172.imageshack.us/my.php?image=diagram3ll3.jpg)

Secondo me è corretto, però mi sembra equivalente al mio no?
Solo che tu hai aggiunto una reificazione per fare l'identifcatore composto da studente e corso, mentre io l'ho fatto direttamente :D

k0nt3
21-05-2007, 15:25
è che un'entità non può avere due chiavi distinte, ma al massimo una sola composta. qui si tratta di logica relazionale.. questa cosa è impossibile da implementare.
l'unico modo è dividere l'esame in due entità (registrazione e esame), dire che una registrazione è relativa a un solo esame, mentre un esame ha più registrazioni e poi mettere come chiave registrazione studente e corso e come chiave di esame studente e data. mi sembra che sia quello che dici te ma detto in maniera che rispetta la logica relazionale

MEMon
21-05-2007, 15:27
Ok, capito ti ringrazio!
beh sono soddisfatto, almeno non avevo detto una cosa proprio fuori dal mondo :D

k0nt3
21-05-2007, 15:30
Ok, capito ti ringrazio!
beh sono soddisfatto, almeno non avevo detto una cosa proprio fuori dal mondo :D
insomma... quello non era un diagramma ER :D però ti mancava poco per renderlo tale ;)

EDIT: occhio solo alle cardinalità che io non ci ho pensato bene.. fallo tu!

MEMon
21-05-2007, 15:31
insomma... quello non era un diagramma ER :D però ti mancava poco per renderlo tale ;)

Dai non mi scoraggiare così!!1 :D


hehe grazie ancora comunque