Homepage  Il progetto dsy.it è l'unofficial support site dei corsi di laurea del Dipartimento di Scienze dell'Informazione e del Dipartimento di Informatica e Comunicazione della Statale di Milano. E' un servizio degli studenti per gli studenti, curato in modo no-profit da un gruppo di essi. I nostri servizi comprendono aree di discussione per ogni Corso di Laurea, un'area download per lo scambio file, una raccolta di link e un motore di ricerca, il supporto agli studenti lavoratori, il forum hosting per Professori e studenti, i blog, e molto altro...
In questa sezione è indicizzato in textonly il contenuto del nostro forum


.dsy:it. .dsy:it. Archive > Didattica > Corsi A - F > Basi di dati ~ informatica triennale
 
Algebra Relazionale
Clicca QUI per vedere il messaggio nel forum
mark
mi è venuto un dubbio

VENDITA(CodVend,CodCli,CodProd,Qta)
VENDITORE(Codice,Nome, Città)
CLIENTE(CodiceCli,NomeCli,CittàCli)

determinare codice dei venditori che hanno venduto solo a clienti della propria città


Mi è venuto in mente di suare l'equijoin


PCodice (VENDITORE) |\| Città=CittàCli (CLIENTE)

dove il simbolo |\| è l'equi-join

mostrielo
VENDITA(CodVend,CodCli,CodProd,Qta)
VENDITORE(Codice,Nome, Città)
CLIENTE(CodiceCli,NomeCli,CittàCli)


Devi prima trovare l'insieme dei venditori che hanno venduto a clienti della propria città; poi devi trovare l'insieme dei venditori che non hanno venduto a clienti della propria città; infine devi sottrarre dal primo insieme il secondo: il risultato è l'insieme di quelli che hanno venduto SOLO a clienti della propria città

mark
mi chiedo perchè non dovrebbe funzionare l'equi-join

Gusher
Originally posted by mark
mi chiedo perchè non dovrebbe funzionare l'equi-join


Non funziona perchè in quel modo proietti tutti i venditori che abitano nella stessa citta dei clienti; ciò non implica che quel venditore ha venduto a un solo cliente della stessa città e nemmeno che esita una vendita che metta appunto in relazione Venditore e Cliente. Senza contare il fatto che potresti avere anche tuple doppie (n volte lo stesso venditore perchè esistono n clienti nella stessa città...).
Potresti avere venditori che non hanno venduto un cazzo ma che compaiono in quanto esite un cliente della stessa città oppure venditori che hanno venduto si a un cliente della medesima città ma hanno venduto anche ad altri clienti NON della stessa città.

mark
Originally posted by mostrielo
VENDITA(CodVend,CodCli,CodProd,Qta)
VENDITORE(Codice,Nome, Città)
CLIENTE(CodiceCli,NomeCli,CittàCli)


Devi prima trovare l'insieme dei venditori che hanno venduto a clienti della propria città; poi devi trovare l'insieme dei venditori che non hanno venduto a clienti della propria città; infine devi sottrarre dal primo insieme il secondo: il risultato è l'insieme di quelli che hanno venduto SOLO a clienti della propria città


è quel solo che trae in inganno. Signfica che se trovo venditori che hanno venduto sia a clienti della stessa città che a clienti un una città differente non devono essere considerati ?

Gusher
Originally posted by mark
è quel solo che trae in inganno. Signfica che se trovo venditori che hanno venduto sia a clienti della stessa città che a clienti un una città differente non devono essere considerati ?


Esatto.

mark
vediamo se ho capito qualcosa
(
(P codice(VENDITORE) |\| codvend=codice (P codvend (VENDITA)))
=
(P cittàcli(CLIENTE) |\| codcli=codicecli (P codicli(VENDITA)))
)
-
(
(P codice(VENDITORE) |\| codvend=codice (P codvend (VENDITA)))
<>
(P cittàcli(CLIENTE) |\| codcli=codicecli (P codicli(VENDITA)))
)

mancano un pò di parentesi

spiego:
partendo dall'ultima linea; proietto da VENDITA il codcli e faccio equi-join con codice di CLIENTE per estrarne la citta.
Stessa cosa per venditore e creo una relazione che contiene venditori che hanno venduto a clienti della stessa città

Le prime due righe invece creo relazione di venditori che non hanno venduto a clienti della stessa città quindi sottraggo...:oops:

rancidox
Ciao a tutti,
avrei un problemino nel risolvere questo esercizio di algebra relazionale:
Praticamente ho questo:

uomini(nome_uomo,età);
donne(nome_donna,età);
uomo_piace(nome_donna,nome_uomo);
donna_piace(nome_uomo,nome_donna);
matrimonio(nome_donna,nome_uomo);

Vorrei sapere la seguente:

donne sposate a le quali piaccciono tutti gli uomini sposati tranne suo marito..
è un pò un casino legato a quel TUTTI qualcuno saprebbe aiutarmi!?!?

Credo che in SQL è una cosa del genere

select d.nome_donna,d.età from donne d
where d.nome_donna in (select nome_donna from matrimonio)
and (select count(*) as a from matrimonio) = ( (select count(*) as b from donna_piace dp where dp.nome_donna=d.nome_donna) - 1)
and (select nome_uomo from matrimonio m where m.nome_donna=d.nome_donna) not in (select ddp.nome_uomo as dpnu from donna_piace ddp where ddp.nome_donna=d.nome_donna)


GRAZIE IN ANTICIPO!

Powered by: vbHome (lite) v4.1 and vBulletin v2.3.1 - Copyright ©2000 - 2002, Jelsoft Enterprises Limited
Mantained by dsy crew (email) | Collabora con noi | Segnalaci un bug | Archive | Regolamento |Licenze | Thanks | Syndacate