Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Zadatak za ER i SQL znalce...

[es] :: Baze podataka :: Zadatak za ER i SQL znalce...

Strane: 1 2

[ Pregleda: 6815 | Odgovora: 25 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Zidar
Canada

Član broj: 15387
Poruke: 3085
*.100.46-69.q9.net.



+79 Profil

icon Re: Zadatak za ER i SQL znalce...18.12.2007. u 21:58 - pre 199 meseci
Evo najopstiji slucaj, svi moguci putevi u datoj mrezi, svi moguci pravci:
Code:

WITH Mreza2 
AS
(
SELECT od, do FROM OrijentisanaMreza
UNION ALL
SELECT do,od FROM OrijentisanaMreza
)
, Grane AS
(
SELECT Od, Do, CAST('>' + Od + '>' + Do + '>' AS varchar(50)) AS [Path]
FROM Mreza2
UNION ALL
SELECT F.Od, T.Do, CAST(F.Path + T.Do + '>' AS varchar(50))
FROM Grane AS F 
JOIN Mreza2 AS T
    ON CASE WHEN F.path LIKE '%>' + T.Do + '>%'
        THEN 1 ELSE 0 END = 0
    AND F.Do  = T.Od
)
SELECT 
Od
, Do
--, [Path]
, LEFT(Path, LEN(PAth)-1) AS Path
FROM Grane
WHERE 
--Od = 'A' and Do = 'B'
OD = 'C' AND Do = 'F'

Od    Do    Path
C    F    >C>F
C    F    >C>D>F
C    F    >C>D>E>F
C    F    >C>D>A>E>F
C    F    >C>D>B>A>E>F
C    F    >C>B>A>E>F
C    F    >C>B>A>E>D>F
C    F    >C>B>A>D>F
C    F    >C>B>A>D>E>F
C    F    >C>B>D>F
C    F    >C>B>D>E>F
C    F    >C>B>D>A>E>F

Ako ovo odradite, bez WHERE dobicete 350 redova. Za malecnu mrezu od 6 i 10 grana cvorova. Ne znam da li je ovo tacan broj, resenje sam 'prepisao' iz knjige "Inside Microsoft SQL Server 2005 T-SQL Querying", autori Itzik Ben Gan, Lubor Kollar and Dejan Sarka (nas covek izgleda

I ne pitajte kako ovo u stvari radi. Common Table Expressions....

Resenje u knjizi daje i duzinu svakog puta, sto se ovde nije trazilo ;-). Dakle, izgleda da MS SQL moze da odredi sve moguce puteve u ciklicnom neorjentisanom grafu. Sta cete posle s tim silnim putevima, vas problem. Pokusajte na primer da dobijete iz ovoga najkraci put od A fo F. Bellman to radi mnogo brze i efikasnije.

[Ovu poruku je menjao chachka dana 19.12.2007. u 00:33 GMT+1]
 
Odgovor na temu

jablan

Član broj: 8286
Poruke: 4541



+711 Profil

icon Re: Zadatak za ER i SQL znalce...18.12.2007. u 23:31 - pre 199 meseci
@Zidar: Nisam imao pojma da tako nešto može... Hvala puno na ovom primeru!

Evo jedan članak sa MSDN koji još malo objašnjava ove rekurzivne kverije:

http://msdn2.microsoft.com/en-us/library/ms186243.aspx
 
Odgovor na temu

srki
Srdjan Mitrovic
Auckland, N.Z.

Član broj: 2237
Poruke: 3654
*.orionhealth.com.



+3 Profil

icon Re: Zadatak za ER i SQL znalce...19.12.2007. u 02:40 - pre 199 meseci
Ja sam znao da DB2 ima rekurzivnu WITH klauzulu ali nisam imao pojma da su to ubacili u SQL Server 2005. Ovo je odlicno!
 
Odgovor na temu

Fitopatolog
Dušan Marjanov
Novi Sad

Član broj: 90936
Poruke: 683
*.nis-naftagas.co.yu.



+3 Profil

icon Re: Zadatak za ER i SQL znalce...19.12.2007. u 08:19 - pre 199 meseci
Zidaru, svaka čast na rešenju!

Drugo rešenje, koje ne prolazi nužno kroz sve čvorove bi bilo da se napravi rekurzivna procedura za obilazak čvorova po granama. Ona bi polazila od početnog čvora, usput bi se beležili čvorovi koje je rekurzija obišla. Povratak iz rekurzije je kada se naiđe na čvor koji je već posećen (i naravno kod listova). Kraj je kada se opet dođe do početnog čvora (a već je posećen drugi čvor koji je od interesa) ili ako su posećeni svi čvorovi. Statistički gledano, na ovaj način se u proseku prolazi kroz polovinu čvorova.
 
Odgovor na temu

Zidar
Canada

Član broj: 15387
Poruke: 3085
*.100.46-69.q9.net.



+79 Profil

icon Re: Zadatak za ER i SQL znalce...19.12.2007. u 14:08 - pre 199 meseci


U MS SQL 2005 WITH ima i mnoge druge primene, koje se ne bave iteracijama. WITH kreira virtualnu temp tabelu, koja se onda upotrebi prvoj sledecoj naredbi. Ovo uproscuje ili bar cini manje nejasnim mnoge slucajeve gde bi se upotrebili subkveriji ili in-line izkazi.

Sto se tice iteracija, ima primer u Books On Line, nisam siguran da li je identican sa onim iz liknka koji je dao Jablan. Meni se dopao clanak koji je napisao neki Nigel Rivett, tejk sam tu uspeo da razumem delimicno kako cela stvar radi. Lepo se snalazim sa WITH tamo gde mi ne trebaju iteracije, a za iteracije jos uvek trazim primere po literaturi i webu pa enkako prilagodjujem svojim potrebama.

http://www.simple-talk.com/sea...lt.aspx?search=CTE+NIgel+Rivet

G. Rivett je ocigledno dobro potkovan. Pogledajte clanak "Partitioned Tables in SQL Server 2005"
 
Odgovor na temu

Fitopatolog
Dušan Marjanov
Novi Sad

Član broj: 90936
Poruke: 683
*.nis-naftagas.co.yu.



+3 Profil

icon Re: Zadatak za ER i SQL znalce...20.12.2007. u 12:30 - pre 199 meseci
Ako se prašina oko ove teme malo slegla, evo i nešto teorije: Za standardni SQL upitni jezik problem je rad sa objektima koji nisu tabele (da li smem da napišem relacije?) jer običan SQL "ne vidi" hijerarhiju ili mrežu sakrivenu u tabeli (tabelama). Zbog toga su SQLu dodate naredbe ("naočari" za stabla i mreže) za rekurziju (DB2 i MSSQL imaju bolje rešenje od Orakla). Uz prednosti koje su donele, ove naredbe imaju i svoje nedostatke: SQL kod je sada malo teži za razumevanje, postoji opasnost da se sa nekontrolisanom upotrebom preoptereti računar (postavljanje upita koji vrši višak rekurzija), tačan redosled rekurzija nije moguće uvek zadati. Zbog toga treba pažljivo proceniti kada da se ide sa SQL rekurzijom a kada praviti rekurziju peške pomoću procedura.

:-))
 
Odgovor na temu

[es] :: Baze podataka :: Zadatak za ER i SQL znalce...

Strane: 1 2

[ Pregleda: 6815 | Odgovora: 25 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.