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! |
|
|
|