Pocetnicko pitanje Relacijska algebra

poruka: 5
|
čitano: 7.230
|
moderatori: XXX-Man, vincimus
1
+/- sve poruke
ravni prikaz
starije poruke gore
13 godina
neaktivan
offline
Relacijska algebra

Pozdrav!!

 

Ok..evo ovako nov sam iz baza podataka..s obzirom da sam 'SAM' ucio relacijsku algebru

neke stvari mi nisu jasne ,tocnije neka pravila. Na ispitu

ne radimo SQL nego zadatke rjesavamo relacijskom algebrom. Sql mi je koliko toliko jasan al mi problem

predstavljaju pravila relacijske algebre ,ako upoce postoje neka odredjena pravila jer sam vidio da se neki

zadaci rjesavaju na razlicite nacine.

Bio bih Vam zahvalan kada bi i netko pokusao pomoci oko nekih nedumica vezanih uz rel.algebru :)

 

Zadatak na slici je slican kao onaj za ispit..al nije mi jasno..

 

  da li je bitan redoslijed spajanja relacija?

  i da li je rjesenje ovog zadatka dobro?

 

a)       ispisi ime i prezime kupaca koji kupuju samo kod onog prodavaca koji se zove isto kao i kupac..

 

((UPOSLENICI join   RACUN join  KUPAC)  where UPOSLENICI.ime=KUPAC.ime))[KUPAC,Ime]

 

c) Ispiši šifru artikala pod uvjetom da ih je kupio kupac Mate Matić, ili ih je prodao
uposlenik imena Jure.

 

(((UPOSLENICI join RACUN join KUPAC)join RAC_ART join ARTIKAL)where UPOSLENICI.Ime='Jure' or KUPAC.Ime='Mate' and KUPAC.Prezime='Matic')

[ARTIKAL,Sifra]

 

 

Unaprijed zahvaljujem!

 

 

 
0 0 hvala 0
17 godina
neaktivan
offline
Re: Relacijska algebra

Googlaj Relational algebra i pogledaj wikipediju. Što pretpostavljam da i jesi.

Ovo što ti koristiš neka pojednostavljena sintaksa?

Redosljed spajanja je bitan ako razlikuješ više tipova spajanja. Ako koristite samo NATURAL JOIN onda je svejedno. Kod drugih tipova spajanja (semi join) moguće je da ti jedna operacija filtira retke koje možda trebaš u drugoj. Opet je pitanje koje sve operacije definirate (pošto se sve da svest na CROSS JOIN i filtriranje). Mislim da ti je ovaj gore članak super za proć kroz relacijsku algebru. Tak i tak ćeš ju zaboravit nakon ispita.

Ovo je malo prljava sintaksa pošto nisi siguran sta se tu sa čime filtrira. Obično je sintaksa sa desna na lijevo.

[Ime,Prezime](where UPOSLENICI.Ime = KUPAC.ime (UPOSLENICI join (KUPAC join RACUN)))

Čini mi se da je ovo jedno od mogućih rješenja za 2. Čisto radi alternative
([Sifra](JOIN ARTIKAL (JOIN RACUN_ART (WHERE Kupac.Ime = 'Mate' AND KUPAC.Prezime='Matic' (KUPAC join RACUN) )))) UNION ([Sifra](JOIN ARTIKAL (JOIN RACUN_ART (WHERE UPOSLENIK.Ime = 'Jura' (UPOSLENICI join RACUN) ))))

Glavno je pitanje koji su vam sve dopušteni operatori.
13 godina
neaktivan
offline
Re: Relacijska algebra

Eh da...prakticki koristim samo Natural Join......sto znaci da redoslijed nije bitan ako sam dobro shvatio....znaci da se vase rjesenje

moglo napisati i ovako...

 

(((UPOSLENICI join KUPAC) join RACUN) where UPOSLENICI.Ime = KUPAC.ime)[Ime,Prezime]

 

..i bilo bi ok...znaci da je u biti stvar izbora nacin tj. redoslijed na koji pisemo zadatak..naravno ako koristimo Natural Join..?...

 

...eh imam jos koje pitanje....i naravno zahvaljujem na prethodnom odgovoru :).....

 

 

 

g) Ispiši nazive slastičarnica koje prodaju najdraži sladoled djece koja se zovu Jure.

 

eh...sad me zanima ..slasticarnica prodaje najdrazi sladoled djeci koja se zovu Jure....dali ce uvjet izgledati ovako....

..(where DJETE.ime='Jure' and DJETE.Najdrazi_Sladoled='1').....recimo ako slasticarnica prodaje najdrazi sladoled...znaci li to da ce

DIJETE.Najdrazi_Sladoled biti (1)...u smislu slasticarnica ima najdrazi sladoled djece koja se zovu jure.....i naravno suprotna situacija...

ako slasticarnica nema najdrazi sladoled djece koja se zovu 'Jure'....nesto kao (where DIJETE.ime='Jure' and DIJETE.Najdrazi_Sladoled=NULL)....?

 

 

 

 

 

 

 

 

17 godina
neaktivan
offline
Re: Relacijska algebra
S obzirom na tvoj dijagram, vjerujem da bi to islo ovako nekako...
Koristi cu tvoj tip sintakse, a ne ono sto je definirano relacijkom algebrom.. Pretpostavit ću da JOIN zači spajanje prema vezanim atributima (FK ili samo logicki). Po pravilima to je spajanje prema istoimenim atributima ili se prethodno koristi rename operator.
WHERE je filtriranje, a projekcija je naziv atributa u uglatim zagradama.

Pošto dijete ima atribut najdrazi sladoled, idemo slijedećom putanjom...

Uzimamo svu djecu koja se zovu Jure i spajamo IDjeve njihovih najdrazih sladoleda. Dohvacamo sve slasticarnice koje prodaju te sladolede preko vezne tablice.

[SLASTICARNICE.Naziv](SLASTICARNICE join (PRODAJE join (where DIJETE.Ime = 'Jure' (DIJETE join SLADOLED)))))

NULL postoji samo ako imas definirane Outer joinove u skupu operatora. Ovdje ne bi trebao biti problem, jer se neće spajati ako su null

13 godina
neaktivan
offline
Re: Relacijska algebra

 

hm...ok kuzim...ali recimo prilikom spajanja...zasto na kraj stavljas "SLADOLED".....

recimo zasto ne moze ili mozda moze...redoslijed ici ovako..

 

[SLASTICARNICE.Naziv](SLASTICARNICE >< (PRODAJE >< (SLADOLED >< (where DIJETE.ime='Jure'(DIJETE)))))

 

 

mislim reci....redoslijed...npr. evo nesto kao neki pseudokod: SLASTICARNICA->PRODAJE->SLADOLED->(gdje je ime djeteta....'jure')DIJETE.....za razliku od vasega 

SLASTICARNICA->PRODAJE(gdje je ime djeteta...'Jure')DIJETE->SLADOLED....li to mozda ima veze za sa funkcionalnosti veza..tipa (1:N)....(1:1)...

 

....sto se tice lijevog vanjskog spoja....mozes li mi reci...da li je ova sintaksa dobra......"znaci koristim left outer join (LO)"

 

h) Ispiši nazive slastičarnica koje ne prodaju najdraži sladoled djece koja se zovu Jure.

[SLASTICARNICE.Naziv](SLASTICARNICE >< LO (PRODAJE >< (where DIJETE.Ime = 'Jure' (DIJETE >< SLADOLED)))))

 

 

 

....u skripti sam vidio primjer koji se moze rijesiti pomocu  "left outer join" .tj na dva nacina:

 

1.      Prikazati sve nastavnike koji ne predaju u školskoj godini ‘1999/00’

 

NASTAVNIK – NASTAVNIK >< (NASTAVNI_PLANwhereSKGOD=’1999/00’) [NASTAVNIK_ID]

 

ili 

 

((NASTAVNIK ><LO NASTAVNI_PLAN where SKGOD=’1999/00’) where PREDMET_ID=null) [NASTAVNIK_ID,NASTAVNIK_PREZIME,NASTAVNIK_IME]...

 

p.s.

 

umjesto "join" koristim  "><"....

 

I naravno unaprijed zahvaljujem!!! :)

 

 

 

 

 

 

 

 

1
Nova poruka
E-mail:
Lozinka:
 
vrh stranice