lucajeck
20-06-2007, 23:04
Ciao a tutti, volevo chiedere se cortesemente qualcuno potrebbe correggere questa query e magari suggerirmi un
metodo migliore nel caso in cui sia giusta, anche se ne dubito.
Sia dato il seguente schema relazionale:
Organizzazione(codice, nome, città, data_fondazione) codice è chiave
Socio(codice, nome, città_resistenza, data_nascita, data_affilizione, organizzazione) codice è chiave
Evento(codice, descrizione, data, organizzazione_ospitante) codice è chiave
Contatto(codice, modalità, data, socio_contattante, socio_contatto) codice è chiave
Invito(codice_evento, codice_socio, ruolo) codice_evento e codice_socio sono chiave
Si osservi che la relazione Socio contiene informazioni su tutti gli associati, specificando, per ciascuno di essi,
l'organizzazione di appartenenza. Inoltre la relazione Invito continene informazioni sulla partecipazione dei soci
agli eventi, specificando anche il ruolo svolto dai soci delle varie partecipazioni. La relazione Contatto contiene
informazioni su tutti i contatti tra soci. Si noti che due soci, S1 ed S2, hanno avuto un contatto se S1 ha
contattato S2 oppure S2 ha contattato S1. Si osservi inoltre che gli attributi Socio.Organizzazione e
Evento.organizzazione_ospitante si riferiscono all'attributo Organizzazione.codice, mentre gli attributi
Contatto.socio_contattante e Contatto.socio_contatto si riferiscono all'attributo Socio.codice
Per ogni organizzazione il numero medio di eventi ospitati in un anno.
Create view OAC(Organizzazione, anno, evento) as
(SELECT organizzazione_ospitante, YEAR(data) as anno, codice
FROM Evento E)
Create view NumeroAnni(Organizzazione, anni) as
(Select Organizzazione, Cont(anno)
FROM AOC
GROUPBY organizzazione)
Create view NumeroEventi(Organizzazione, numeventi) as
(Select Organizzazione, Cont(evento)
FROM AOC
GROUPBY organizzazione)
SELECT NE.organizzazione, (NE.numeventi/NA.anni) as media
FROM NumeroEventi NE, NumeroAnni NA
WHERE NE.organizzazione=NA.organizzazione
GRAZIE A TUTTI!!
metodo migliore nel caso in cui sia giusta, anche se ne dubito.
Sia dato il seguente schema relazionale:
Organizzazione(codice, nome, città, data_fondazione) codice è chiave
Socio(codice, nome, città_resistenza, data_nascita, data_affilizione, organizzazione) codice è chiave
Evento(codice, descrizione, data, organizzazione_ospitante) codice è chiave
Contatto(codice, modalità, data, socio_contattante, socio_contatto) codice è chiave
Invito(codice_evento, codice_socio, ruolo) codice_evento e codice_socio sono chiave
Si osservi che la relazione Socio contiene informazioni su tutti gli associati, specificando, per ciascuno di essi,
l'organizzazione di appartenenza. Inoltre la relazione Invito continene informazioni sulla partecipazione dei soci
agli eventi, specificando anche il ruolo svolto dai soci delle varie partecipazioni. La relazione Contatto contiene
informazioni su tutti i contatti tra soci. Si noti che due soci, S1 ed S2, hanno avuto un contatto se S1 ha
contattato S2 oppure S2 ha contattato S1. Si osservi inoltre che gli attributi Socio.Organizzazione e
Evento.organizzazione_ospitante si riferiscono all'attributo Organizzazione.codice, mentre gli attributi
Contatto.socio_contattante e Contatto.socio_contatto si riferiscono all'attributo Socio.codice
Per ogni organizzazione il numero medio di eventi ospitati in un anno.
Create view OAC(Organizzazione, anno, evento) as
(SELECT organizzazione_ospitante, YEAR(data) as anno, codice
FROM Evento E)
Create view NumeroAnni(Organizzazione, anni) as
(Select Organizzazione, Cont(anno)
FROM AOC
GROUPBY organizzazione)
Create view NumeroEventi(Organizzazione, numeventi) as
(Select Organizzazione, Cont(evento)
FROM AOC
GROUPBY organizzazione)
SELECT NE.organizzazione, (NE.numeventi/NA.anni) as media
FROM NumeroEventi NE, NumeroAnni NA
WHERE NE.organizzazione=NA.organizzazione
GRAZIE A TUTTI!!