Discussione problema algebra relazionale

gerasia

Utente Electrum
30 Gennaio 2018
288
72
52
176
salve a tutti avrei questo piccolo problemino con una query in algebra relazionale. questo è lo schema:
Codice:
CONTOCORRENTE(id_conto,saldo,data_apertura)
PRODOTTOFINANZIARIO(id_conto, id_prodotto,data_stipula,numero_rate,id_contraente)
PERSONA(id_persona,nome,cognome,data_nascita)
TITOLARECC(Id_persona,ID_conto)
TRANSAZIONE(id_contoIN,id_contoOUT,data,causale,dare_avere,importo)
TRANSAZIONEPRODOTTOFINANZIARIO(id_conto,data,causale ,importo,id_prodotto)
e questa è la query:
Codice:
Trovare le    coppie    di    persone    che    hanno    esattamente    gli    stessi    cc .
potreste aiutarmi? non so più dove sbatterci la testa
 
A te serve individuare le due chiavi degli oggetti su cui vuoi lavorare. In questo caso hai la tabella CONTOCORRENTE con il suo ID e TITOLARECC con l'id della persona e l'id del cc.

In seguito fai una join fra queste tabelle.
Raggruppi su id_conto e consideri solo gli id_conto il cui conteggio e' >1 oppure >=2, come preferisci. Ovviamente quando viene soddisfatta tale condizione farai la proiezione su id_persona per salvare tale dato

Spero sia chiaro, in caso dimmi che provo a spiegare meglio
 
forse la traccia è scritta male.
io devo trovare due persone che hanno soltanto conti correnti in comune, quindi supponendo che io e te siamo due istanze, se io ho anche un solo conto diverso dal tuo noi non entriamo nella query
 
Fallo con la negazione allora:
Cicla tutte le persone (evitando di ciclare una persona con se stessa). Se vi sono cc in comune, allora fanno parte dell'insieme da considerare.
Ovvero:
Insieme complessivo P - insieme persone con almeno un cc differente = insieme persone solo stesso cc
 
uhm, qualcosa non mi quadra, prendiamo come caso questa istanza.

nonostante hanno gli stessi conti, due confronti mi danno errato, quindi staranno nel secondo insieme da te detto, quindi l'insieme uscente sarà vuoto
 

Allegati

  • uno.jpg
    uno.jpg
    127.1 KB · Visualizzazioni: 30
  • due.jpg
    due.jpg
    104.5 KB · Visualizzazioni: 30
Dunque:
tengo ferma 1 e ciclo con due. Devo riuscire a definire se tutti i cc di 1 sono anche quelli di 2.
Per farlo consideriamo il numero di volte in cui combaciano i cc di 1 e 2 e confrontiamo tale numero con tutti i cc di 1 e 2.

Purtroppo mi viene scomodissimo scriverlo a parole scusami e non riesco ad esprimermi..

Inoltre in algebra relazionale si usa un modo di pensare completamente diverso rispetto alla programmazione sequenziale, quindi mi incarto :(

Questo algoritmo ha una falla, ma teoricamente non dovrebbe essere possibile che dia problemi: non dovrebbe essere possibile che una tupla sia ripetuta e che quindi una persona abbia due volte lo stesso cc nella tabella
 
salve a tutti avrei questo piccolo problemino con una query in algebra relazionale. questo è lo schema:
Codice:
CONTOCORRENTE(id_conto,saldo,data_apertura)
PRODOTTOFINANZIARIO(id_conto, id_prodotto,data_stipula,numero_rate,id_contraente)
PERSONA(id_persona,nome,cognome,data_nascita)
TITOLARECC(Id_persona,ID_conto)
TRANSAZIONE(id_contoIN,id_contoOUT,data,causale,dare_avere,importo)
TRANSAZIONEPRODOTTOFINANZIARIO(id_conto,data,causale ,importo,id_prodotto)
e questa è la query:
Codice:
Trovare le    coppie    di    persone    che    hanno    esattamente    gli    stessi    cc .
potreste aiutarmi? non so più dove sbatterci la testa

in sql dovrebbe essere più o meno:

SQL:
select p1.nome, p1.cognome, p2.nome, p2.cognome
from titolarecc as t1 left join titolarecc as t2 on t1.id_conto = t2.id_conto and t1.id_persona <> t2.id_persona
left join persona as p1 on p1.id_persona = t1.id_persona
left join persona as p2 on p2.id_persona = t2.id_persona

l'algebra relazionale non me la ricordo :p