PDA

View Full Version : Aiuto schema relazionale


mkel84
28-05-2010, 15:46
Ragazzi ho un piccolo problema con un progetto.

http://img709.imageshack.us/img709/4782/schemamb.jpg

Guardando lo schema, vi sembra coerente?
Allora io ho un dubbio e mi piacerebbe sapere come la pensate, l'associazione "Avvenuto" come la rappresento in forma tabellare?

Gremo
29-05-2010, 02:05
AVVENUTO(IdEvento, IdCentro, IdElemento) dove tutte sono FK e IdElemento è FK che può essere NULL. Magari se fornisci la descrizione testuale è meglio.

In questo caso un evento, se avvenuto, deve far riferimento per forza ad un centro ed eventualmente è collegato ad un elemento. Un elemento può far riferimento a più centri, e due eventi diversi possono far riferimento allo stesso centro, ma lo stesso elemento non può far riferimento allo stesso centro neanche se coinvolge elementi diversi.

L'ultima situazione si evita imponendo che anche IdElemento faccia parte della chiave, ma in quel caso non possono esistere eventi senza qualche elemento associato.

Spero di non aver cannato visto che sono le 3 :stordita: :D

mkel84
29-05-2010, 08:07
AVVENUTO(IdEvento, IdCentro, IdElemento) dove tutte sono FK e IdElemento è FK che può essere NULL. Magari se fornisci la descrizione testuale è meglio.

In questo caso un evento, se avvenuto, deve far riferimento per forza ad un centro ed eventualmente è collegato ad un elemento. Un elemento può far riferimento a più centri, e due eventi diversi possono far riferimento allo stesso centro, ma lo stesso elemento non può far riferimento allo stesso centro neanche se coinvolge elementi diversi.

L'ultima situazione si evita imponendo che anche IdElemento faccia parte della chiave, ma in quel caso non possono esistere eventi senza qualche elemento associato.

Spero di non aver cannato visto che sono le 3 :stordita: :D

Allora il tuo ragionamento è corretto ma a me servirebbe che per ogni associazione tra evento storico e città posso inserire più elementi questo perché un evento storico può accadere in uno o più città, l'evento storico può essere raccontato in una oppure in diverse attestazioni storiche e ognuna di queste attestazioni storiche posso avere diversi elementi associati a quell'evento. In definitiva, per ogni associazione Avvenuto devo poter aver diversi elementi e la tabella che mi hai proposto non me lo permette di fare. Se non mi sono spiegato bene ditemi pure.

Gremo
29-05-2010, 13:11
Vediamo se ho capito...

Attestazione(IdAttestazione, DataAttestazione, Descrizione, IdEvento ->)

Una stessa attestazione può far riferimento ad uno e un solo evento (ma un evento può avere associate più attestazioni).

Elemento(IdElmento, Valore, Elemento, IdAttestazione ->)
Un elemento è associato ad una e una sola attestazione (ma una attestazione può eventualmente comprenderne diversi).


Evento(IdEvento, Descrizione)
Centro(IdCentro, Nome, Descrizione, EsistenzaOdierna)
Avvenuto(IdEvento ->, IdCentro ->)


Lo stesso evento può essere avvenuto in uno o più centri, e un centro può aver visto accadere più eventi.

Ovviamente un evento è automaticamente collegato a uno o più elementi di una stessa attestazione (e avere anche più attestazioni).

PS: bell'esercizio! :)

mkel84
29-05-2010, 13:44
Vediamo se ho capito...

Attestazione(IdAttestazione, DataAttestazione, Descrizione, IdEvento ->)

Una stessa attestazione può far riferimento ad uno e un solo evento (ma un evento può avere associate più attestazioni).

Elemento(IdElmento, Valore, Elemento, IdAttestazione ->)
Un elemento è associato ad una e una sola attestazione (ma una attestazione può eventualmente comprenderne diversi).


Evento(IdEvento, Descrizione)
Centro(IdCentro, Nome, Descrizione, EsistenzaOdierna)
Avvenuto(IdEvento ->, IdCentro ->)


Lo stesso evento può essere avvenuto in uno o più centri, e un centro può aver visto accadere più eventi.

Ovviamente un evento è automaticamente collegato a uno o più elementi di una stessa attestazione (e avere anche più attestazioni).

PS: bell'esercizio! :)

Bravissimo hai capito perfettamente. :D
Un esercizio alla dottor House.

Gremo
29-05-2010, 13:57
Bravissimo hai capito perfettamente. :D
Un esercizio alla dottor House.

Bhè allora che dubbi avevi? Faresti la stessa traduzione?

mkel84
29-05-2010, 14:13
Non leggo come fai ad associare elemento ad avvenuto.

Gremo
29-05-2010, 14:43
Non leggo come fai ad associare elemento ad avvenuto.

Tramite attestazione, che si collega un evento e quindi ad avvenuto :stordita:

Cmq facci vedere come l'avresti fatto tu no?

mkel84
29-05-2010, 15:11
Bè il tuo ragionamento potrebbe andare bene. Come dici tu dovrei eliminare l'elemento dall'associazione avvenuto, giusto?
Io invece avevo pensato a utilizzare una chiave univoca nell'associazione avvenuto senza utilizzare la doppia chiave. Cioè:

Avvenuto(IdAvvenuto, IdEvento, IdCentro, IdElemento)

ma non ne sono tanto entusiasta.

Gremo
29-05-2010, 16:27
Facciamo un esempio con il tuo schema:

Instanze valida di Attestazione ed Elemento:

ATTESTAZIONE
IdAttestazione | IdEvento ->
a1 e1
a2 e2
a3 e1

Attestazioni diverse possono far riferimento a eventi diversi o agli stessi eventi.
NOTA: non puoi avere una cosa del tipo:
a1 e1
a1 e2
Cioè attestazioni uguali non possono far riferimento ad eventi diversi.

ELEMENTO
IdElemento | IdAttestazione ->
el1 a1
el2 a2
el3 a1

Elementi diversi fanno riferimento ad attestazioni diverse o alla stessa attestazione.
NOTA: non puoi avere una cosa del tipo:
el1 a1
el1 a2
Cioè elementi uguali non posso riferirsi ad attestazioni diverse.


Adesso prendiamo una istanza della tua relazione Avvenuto:

IdAvventuo | IdEvento -> | IdElemento -> | IdCentro ->
#1 e1 el1 c1
#2 e2 el3 c2


Domanda: è valida? Si. Facciamo il JOIN sull'attributo IdElemento con la tabella Elemento per sapere a quale attestazione fa riferimento l'evento (ometti le colonne inutili):

IdEvento | IdElemento | IdAttestazione
e1 el1 a1
e2 el3 a1


Risulta valida nello schema secondo i vincoli? Spero di non essermi confuso è da un po' che non guardo questa roba; se ho sbagliato chiedo venia :D, prendilo come un esercizio mentale ;)

mkel84
29-05-2010, 16:55
Comunque ragionandoci un po’ su non so se la tua idea va bene nel mio caso.
Cerco di fare un esempio per capire il contesto della base di dati. Es: In iraq c’è la guerra, il new york times afferma che a bagdad sono morti 50 civili mentre a Nasiriyya sono morti 10 civili, mentre El Pais afferma che a bagdad sono morti 48 civili e a Nasiriyya sono morti 10 civili.
I dati adesso vengono salvati così:

CENTRO RIFERIMENTO
IDCENTRO NOME ESISTENZAODIERNA DESCRIZIONE
1 Bagdad si null
2 Nasiriyya si null


EVENTO STORICO
IDEVENTO DESCRIZIONE
3 Guerra in Iraq


ATTESTAZIONE STORICA
IDATTESTAZIONE DESCRIZIONE
4 Giornale New York Times
5 Giornale El Pais


ELEMENTO
IDELEMENTO ELEMENTO VALORE IDATTESTAZIONE
6 vittime civili 50 4
7 vittime civili 10 4
8 vittime civili 48 5
9 vittime civili 10 5


ATTESTA
IDEVENTO IDATTESTAZIONE
3 4
3 5


AVVENUTO
IDEVENTO IDCENTRO IDELEMENTO
3 1 6
3 2 7


Ma così facendo non posso inserire la fonte diversa nella tabella avvenuto. Spero di essere stato chiaro.

Gremo
29-05-2010, 17:15
Scusa ma quindi tra attestazione ed evento c'è una relazione molti a molti? :doh: L'esempio è chiaro ma non capisco la domanda...fa un altro esempio di cose non saresti in grado di esprimere!

mkel84
29-05-2010, 19:55
Come faccio a sapere, dato le tabelle che ho, chi ha scritto che a bagdad sono morti 50 civili e chi invece ha scritto che ne sono morti 48? Io adesso non posso inserire nella tabella Avvenuto due tuple che differenziano solo nell'elemento.

mkel84
31-05-2010, 08:31
Nessun aiuto? :bsod: