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

SQL Mozgalice, mozgalica Br.6:

[es] :: Baze podataka :: SQL Mozgalice, mozgalica Br.6:

[ Pregleda: 5509 | Odgovora: 15 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Mrav
Aleksandar Mraović
.net programer u Wireless Media
Beograd

Član broj: 6532
Poruke: 279
*.adsl-1.sezampro.yu.

ICQ: 197419540


Profil

icon SQL Mozgalice, mozgalica Br.6:25.03.2007. u 13:55 - pre 145 meseci
Evo problema:

Imamo tabelu Grupa

Code:
CREATE TABLE Grupa
(IDGrupa INTEGER PRIMARY KEY IDENTITY,
 Naziv VARCHAR(50) NOT NULL,
 IDNadredjenaGrupa INTEGER NULL,
 CONSTRAINT FK_NadredjenaGrupa FOREIGN KEY (IDNadredjenaGrupa)
   REFERENCES Grupa (IDGrupa))


i recimo sledeće podatke:

Code:
INSERT INTO Grupa(Naziv, IDNadredjenaGrupa) VALUES('Grupa1',NULL);
INSERT INTO Grupa(Naziv, IDNadredjenaGrupa) VALUES('Grupa2',NULL);
INSERT INTO Grupa(Naziv, IDNadredjenaGrupa) VALUES('Grupa3',NULL);
INSERT INTO Grupa(Naziv, IDNadredjenaGrupa) VALUES('Grupa3',1);
INSERT INTO Grupa(Naziv, IDNadredjenaGrupa) VALUES('Grupa4',2);
INSERT INTO Grupa(Naziv, IDNadredjenaGrupa) VALUES('Grupa5',3);
INSERT INTO Grupa(Naziv, IDNadredjenaGrupa) VALUES('Grupa6',1);
INSERT INTO Grupa(Naziv, IDNadredjenaGrupa) VALUES('Grupa7',2);
INSERT INTO Grupa(Naziv, IDNadredjenaGrupa) VALUES('Grupa8',3);


tj. u ovom slučaju grupe 3,4,5 imaju nadređenu grupu respektivno 1,2,3 kao i grupe 6,7, i 8.

Pošto ovde imamo hijerarhiju preko polja IDNadredjenaGrupa (top level grupe su one koje imaju IDNadredjenaGrupa NULL). Možemo imati bilo koji broj nivoa grupa.
Primera radi dodaćemo i podgrupe drugom nivou grupa.

Code:
INSERT INTO Grupa(Naziv, IDNadredjenaGrupa) VALUES('Grupa9',4);
INSERT INTO Grupa(Naziv, IDNadredjenaGrupa) VALUES('Grupa10',5);
INSERT INTO Grupa(Naziv, IDNadredjenaGrupa) VALUES('Grupa11',6);
INSERT INTO Grupa(Naziv, IDNadredjenaGrupa) VALUES('Grupa12',7);
INSERT INTO Grupa(Naziv, IDNadredjenaGrupa) VALUES('Grupa13',8);
INSERT INTO Grupa(Naziv, IDNadredjenaGrupa) VALUES('Grupa14',9);


Sada naše 'stablo' ima 3 nivoa - Top level, podgrupe, i podgrupe tih podgrupa.

Problem: Napisati funkciju, pogled ili šta već u zavisnosti od dbms-a koji će za bilo koju grupu vratiti IDGrupa za top level grupu.

U našem primeru - Grupa1 za Grupu1 (top level grupa je top level za samu sebe), Grupa1 za Grupu3, Grupu2 za Grupu9 (pošto je nadređena grupi9 grupa4, a njena nadređena je grupa2 koja je top level).
Rešenje bi trebalo da obuhvati bilo koji proizvoljan broj nivoa hijerarhije.

Ovaj primer koda je za MSSQL, ali mislim da je ovako na većini drugih implementacija.

Srećno.
Lepota je u jednostavnosti.

Cis.
 
Odgovor na temu

goranvuc
Goran Vucicevic
Novi Sad

Član broj: 4934
Poruke: 1845
*.dialup.neobee.net.

Sajt: www.a3but.info


+41 Profil

icon Re: SQL Mozgalice, mozgalica Br.6:25.03.2007. u 15:41 - pre 145 meseci
Nazalost, resenje je po prirodi rekurzivno, tj. mora se resiti preko StoredProcedure ili User Defined Function sto ne podrzavaju bas svi DBMS-ovi, a View otpada kao mogucnost. Problem je prilicno jednostavan, a onaj ko se bavio problemom sledivosti u proizvodnji zna da ovakva postavka hijerarhije nije dovoljna za optimalno resenje problema.

Ja sam za kombinovanu varijantu: Hijerarhijska struktura uz dodatno polje tzv. putanje, npr za grupu 14 to bi bilo: "2.4.9" Azuriranje vrednosti putanje se moze izvesti preko mehanizma trigera. Ovakva postavka omogucava laksu manipulaciju sa nivoima i clanovima hijerarhije, a uostalom bilo je price na ovu temu vise puta.

Samo resenje prepustam drugima.

E da, da ne bude da samo znam da filozofiram, ako imamo polje putanje onda je resenje za MS SQL npr.
Code:

SELECT CAST(LEFT(Putanja, (CASE WHEN CHARINDEX('.', Putanja) = 0 THEN 1 ELSE CHARINDEX('.', Putanja) END) - 1) AS int) AS TopLevelID FROM Grupa WHERE IDGrupa = 14


Osnovna prednost ovog pristupa je u tome da kada bi vam trebali svi clanovi stabla (bez obzira na nivo) koji pripadaju npr. clanu sa ID 9 cija je putanja "2.4" onda bi upit koji prikazuje te clanove uredjene po nivoima bio:
Code:

SELECT * FROM Grupa 
WHERE Putanja LIKE (SELECT Putanja FROM Grupa WHERE IDGrupa = 9) + '.9%' 
ORDER BY LEN(Putanja) - LEN(REPLACE(Putanja, '.', '')) DESC


Evo tebi mozgalice: Napravi SQL koji ce prikazati sve clanove koji su "potomci" od nekog odredjenog clana hijerarhije bez obzira na nivo bez koristenja putanje.

[Ovu poruku je menjao goranvuc dana 25.03.2007. u 17:16 GMT+1]
Besplatni programi i komponente

www.a3but.info

Komercijalni programi za privredu i budzetske korisnike

www.clickersoftware.com
 
Odgovor na temu

Mrav
Aleksandar Mraović
.net programer u Wireless Media
Beograd

Član broj: 6532
Poruke: 279
*.wm.co.yu.

ICQ: 197419540


Profil

icon Re: SQL Mozgalice, mozgalica Br.6:26.03.2007. u 08:31 - pre 145 meseci
Ono kako bih ja rešio tako nešto u MSSQL je preko funkcije koju već imam za ovaj prvi slučaj, recimo:


Code:
SELECT * FROM Grupa WHERE dbo.VratiTopLevel(IDGrupa) = 120 AND IDGrupa <> 120


recimo vraća sve podgrupe grupe sa IDGrupa 120.

a funkcija izgleda recimo ovako:

Code:

CREATE  FUNCTION VratiTopLevel(@IDGrupe int)
RETURNS int
AS
BEGIN
DECLARE @IDParenta int;
SET @IDParenta = (SELECT IDNadredjenaGrupa FROM Grupa WHERE IDGrupa = @IDGrupe)
IF @IDParenta IS NULL
    RETURN @IDGrupe
ELSE 
    BEGIN
        DECLARE @temp int;
        EXEC @temp = dbo.VratiTopLevel @IDParenta
    END
RETURN @temp
END


Videću ako uspem da smislim prostiji način (nešto što ne bi bilo primenjivo na veći broj dbms-ova).

P.S. Uostalom rešenje koje si dao deluje zanimljivo, i rečeno je da je u rešavanju ovih problema potpuno dozvoljena promena strukture baze, samo je bitno da se postigne cilj.
Lepota je u jednostavnosti.

Cis.
 
Odgovor na temu

goranvuc
Goran Vucicevic
Novi Sad

Član broj: 4934
Poruke: 1845
*.dialup.neobee.net.

Sajt: www.a3but.info


+41 Profil

icon Re: SQL Mozgalice, mozgalica Br.6:26.03.2007. u 08:44 - pre 145 meseci
Citat:
Mrav: Ono kako bih ja rešio tako nešto u MSSQL je preko funkcije koju već imam za ovaj prvi slučaj, recimo:


Code:
SELECT * FROM Grupa WHERE dbo.VratiTopLevel(IDGrupa) = 120 AND IDGrupa <> 120


recimo vraća sve podgrupe grupe sa IDGrupa 120.


Ok, ali izgleda da se ne razumemo: Trebalo je vratiti sve potomke od nekog clana koji nije top level (kao u primeru koji sam dao), vec je npr. na trecem nivou, a ima potomke sve do npr. sedmog/osmog nivoa - to ne pokriva tvoja funkcija, morao bi da je prosiris sa parametrom Level (da se zna do kog nivoa se trazi parent), a sa tvojom postavkom strukture je to nemoguce.

Kada sam ti postavio mozgalicu hteo sam da ukazem na samo jednu od mana tvoje postavke, a ne bih da spominjem sto je na vecem broju clanova i nivoa tvoja funkcija izuzetno spora (zbog svoje rekurzivne prirode). Dakle, ovo nije kritika vec samo prilog tvom resenju. Za one koji su se vec bavili ovim tipom problema ovo nije nista novo, a za one koji jos nisu naleteli na ovakav problem ovo moze biti "koristan materijal".

Pozdrav!
Besplatni programi i komponente

www.a3but.info

Komercijalni programi za privredu i budzetske korisnike

www.clickersoftware.com
 
Odgovor na temu

Mrav
Aleksandar Mraović
.net programer u Wireless Media
Beograd

Član broj: 6532
Poruke: 279
*.adsl-2.sezampro.yu.

ICQ: 197419540


Profil

icon Re: SQL Mozgalice, mozgalica Br.6:26.03.2007. u 18:36 - pre 145 meseci
Ono što mi prvo pada na pamet je da vratim promenljivu tipa table iz funkcije koju bih popunio sa nađenim podgrupama (rekurzivno). To je na MSSQL legitimno rešenje.
Opet ako smislim šta lepše postaviću.

Slažem se da je rešenje bez držanja putanje postaje sporije (pre svega sa povećanjem broja nivoa), ali i to je rešenje.
Lepota je u jednostavnosti.

Cis.
 
Odgovor na temu

srki
Srdjan Mitrovic
Auckland, N.Z.

Član broj: 2237
Poruke: 3654
*.adsl.xtra.co.nz.



+2 Profil

icon Re: SQL Mozgalice, mozgalica Br.6:27.03.2007. u 00:44 - pre 145 meseci
Citat:
goranvuc: Nazalost, resenje je po prirodi rekurzivno, tj. mora se resiti preko StoredProcedure

Ne mora u Oracle-u. Evo resenja:

Code:
SELECT CONNECT_BY_ROOT IDGrupa
FROM GRUPA
WHERE IDGrupa=?
START WITH IDNadredjenaGrupa IS NULL
CONNECT BY PRIOR IDGrupa=IDNadredjenaGrupa

 
Odgovor na temu

srki
Srdjan Mitrovic
Auckland, N.Z.

Član broj: 2237
Poruke: 3654
*.adsl.xtra.co.nz.



+2 Profil

icon Re: SQL Mozgalice, mozgalica Br.6:27.03.2007. u 00:54 - pre 145 meseci
Citat:
goranvuc: Napravi SQL koji ce prikazati sve clanove koji su "potomci" od nekog odredjenog clana hijerarhije bez obzira na nivo bez koristenja putanje.


Code:
SELECT RPAD(' ', 2*(LEVEL-1)) || Naziv 
FROM GRUPA
START WITH IDGrupa=?
CONNECT BY PRIOR IDGRUPA=IDNADREDJENAGRUPA

To nam vrati nesto ovako (zavisi od hijerarhije):
Code:

Grupa1
  Grupa4
    Grupa10
  Grupa7
    Grupa11
 
Odgovor na temu

goranvuc
Goran Vucicevic
Novi Sad

Član broj: 4934
Poruke: 1845
*.dialup.neobee.net.

Sajt: www.a3but.info


+41 Profil

icon Re: SQL Mozgalice, mozgalica Br.6:27.03.2007. u 00:57 - pre 145 meseci
srki, nemoj stalno da me gadjas sa tim tvojim oraklom Salu na stranu, svaka cast. U drugim sistemima je ipak to malo teze.
Besplatni programi i komponente

www.a3but.info

Komercijalni programi za privredu i budzetske korisnike

www.clickersoftware.com
 
Odgovor na temu

srki
Srdjan Mitrovic
Auckland, N.Z.

Član broj: 2237
Poruke: 3654
*.adsl.xtra.co.nz.



+2 Profil

icon Re: SQL Mozgalice, mozgalica Br.6:27.03.2007. u 03:01 - pre 145 meseci
Naravno, u drugim sistemima moras da koristis stored procedures ili funkcije ali sam ipak hteo da napisem i ovo resenje jer ako neko prelazi na Oracle ili MS SQL onda bi trebalo da koristi sve mogucnosti koje te baze nude jer upravo zbog tih mogucnosti te baze mogu da budu visestruko brze od ostalih free baza. Na svu srecu Oracle i MSSQL nude besplatni express edition koji su ograniceni na 4Gb ali vecini je to dovoljno za njihove sajtove a razvoj aplikacija je mnogo brzi (sto se vidi iz ovog primera). Ja sam se toliko navikao na te dodatne mogucnosti da bi mi stvarno predstavljalo problem da prestanem to da koristim.

Nekada sam mislio da je MySql brzi od Oracle-a i MSSQL-a (cak sam i testirao) ali to je zato sto nisam znao da iskoristim sve mogucnosti. Recimo najobicniji index kada stavimo za neku kolonu mi mozemo u Oracle i MSSQL-u da napisemo REVERSE INDEX kada koristimo neki sekvencijalni ID (npr. ovde je to IDGrupa) i onda nam to mnogo vise ubrzava izvrsavanje upita nego da koristimo obican index. Takodje postoje i bitmap indeksi, analiticke funkcije i druge stvari...

[Ovu poruku je menjao srki dana 27.03.2007. u 13:29 GMT+1]
 
Odgovor na temu

savkic
Igor Savkić

Član broj: 92186
Poruke: 2540



+63 Profil

icon Re: SQL Mozgalice, mozgalica Br.6:27.03.2007. u 09:08 - pre 145 meseci
Postoji još jedan dosta zanimljiv model za predstavljanje hijerarhije koji ne zahteva specijalne osobine RDBMSa, radi sa klot SQLom. Smislio ga je Joe Celko, u nastavku šaljem njegovo objašnjenje na tu temu.

Code:

There are many ways to represent a tree or hierarchy in SQL.  This is
called an adjacency list model and it looks like this:

CREATE TABLE OrgChart 
(emp CHAR(10) NOT NULL PRIMARY KEY, 
  boss CHAR(10) DEFAULT NULL REFERENCES OrgChart(emp), 
  salary DECIMAL(6,2) NOT NULL DEFAULT 100.00);

OrgChart 
emp       boss      salary 
===========================
'Albert' 'NULL'    1000.00
'Bert'    'Albert'   900.00
'Chuck'   'Albert'   900.00
'Donna'   'Chuck'    800.00
'Eddie'   'Chuck'    700.00
'Fred'    'Chuck'    600.00

Another way of representing trees is to show them as nested sets.
Since SQL is a set oriented language, this is a better model than the
usual adjacency list approach you see in most text books. Let us
define a simple OrgChart table like this.


CREATE TABLE OrgChart 
(emp CHAR(10) NOT NULL PRIMARY KEY, 
  lft INTEGER NOT NULL UNIQUE CHECK (lft > 0), 
  rgt INTEGER NOT NULL UNIQUE CHECK (rgt > 1),
  CONSTRAINT order_okay CHECK (lft < rgt) );

OrgChart 
emp         lft rgt 
======================
'Albert'      1   12 
'Bert'        2    3 
'Chuck'       4   11 
'Donna'       5    6 
'Eddie'       7    8 
'Fred'        9   10 

The organizational chart would look like this as a directed graph:

            Albert (1, 12)
            /        \
          /            \
    Bert (2, 3)    Chuck (4, 11)
                   /    |   \
                 /      |     \
               /        |       \
             /          |         \
        Donna (5, 6) Eddie (7, 8) Fred (9, 10)

The adjacency list table is denormalized in several ways. We are
modeling both the Personnel and the organizational chart in one table.
But for the sake of saving space, pretend that the names are job
titles and that we have another table which describes the Personnel
that hold those positions.

Another problem with the adjacency list model is that the boss and
employee columns are the same kind of thing (i.e. names of personnel),
and therefore should be shown in only one column in a normalized
table.  To prove that this is not normalized, assume that "Chuck"
changes his name to "Charles"; you have to change his name in both
columns and several places. The defining characteristic of a
normalized table is that you have one fact, one place, one time.

The final problem is that the adjacency list model does not model
subordination. Authority flows downhill in a hierarchy, but If I fire
Chuck, I disconnect all of his subordinates from Albert. There are
situations (i.e. water pipes) where this is true, but that is not the
expected situation in this case.

To show a tree as nested sets, replace the nodes with ovals, and then
nest subordinate ovals inside each other. The root will be the largest
oval and will contain every other node.  The leaf nodes will be the
innermost ovals with nothing else inside them and the nesting will
show the hierarchical relationship. The (lft, rgt) columns (I cannot
use the reserved words LEFT and RIGHT in SQL) are what show the
nesting. This is like XML, HTML or parentheses.

At this point, the boss column is both redundant and denormalized, so
it can be dropped. Also, note that the tree structure can be kept in
one table and all the information about a node can be put in a second
table and they can be joined on employee number for queries.

To convert the graph into a nested sets model think of a little worm
crawling along the tree. The worm starts at the top, the root, makes a
complete trip around the tree. When he comes to a node, he puts a
number in the cell on the side that he is visiting and increments his
counter.  Each node will get two numbers, one of the right side and
one for the left. Computer Science majors will recognize this as a
modified preorder tree traversal algorithm. Finally, drop the unneeded
OrgChart.boss column which used to represent the edges of a graph.

This has some predictable results that we can use for building
queries.  The root is always (left = 1, right = 2 * (SELECT COUNT(*)
FROM TreeTable)); leaf nodes always have (left + 1 = right); subtrees
are defined by the BETWEEN predicate; etc. Here are two common queries
which can be used to build others:

1. An employee and all their Supervisors, no matter how deep the tree.

SELECT O2.*
   FROM OrgChart AS O1, OrgChart AS O2
  WHERE O1.lft BETWEEN O2.lft AND O2.rgt
    AND O1.emp = :myemployee;

2. The employee and all subordinates. There is a nice symmetry here.

SELECT O1.*
   FROM OrgChart AS O1, OrgChart AS O2
  WHERE O1.lft BETWEEN O2.lft AND O2.rgt
    AND O2.emp = :myemployee;

3. Add a GROUP BY and aggregate functions to these basic queries and
you have hierarchical reports. For example, the total salaries which
each employee controls:

SELECT O2.emp, SUM(S1.salary)
   FROM OrgChart AS O1, OrgChart AS O2,
        Salaries AS S1
  WHERE O1.lft BETWEEN O2.lft AND O2.rgt
    AND O1.emp = S1.emp 
  GROUP BY O2.emp;

4. To find the level of each emp, so you can print the tree as an
indented listing.  Technically, you should declare a cursor to go with
the ORDER BY clause.

 SELECT COUNT(O2.emp) AS indentation, O1.emp 
   FROM OrgChart AS O1, OrgChart AS O2
  WHERE O1.lft BETWEEN O2.lft AND O2.rgt
  GROUP BY O1.lft, O1.emp 
  ORDER BY O1.lft;

5. The nested set model has an implied ordering of siblings which the
adjacency list model does not. To insert a new node, G1, under part G.
 We can insert one node at a time like this:

BEGIN ATOMIC
DECLARE rightmost_spread INTEGER;

SET rightmost_spread 
    = (SELECT rgt 
         FROM Frammis 
        WHERE part = 'G');
UPDATE Frammis
   SET lft = CASE WHEN lft > rightmost_spread
                  THEN lft + 2
                  ELSE lft END,
       rgt = CASE WHEN rgt >= rightmost_spread
                  THEN rgt + 2
                  ELSE rgt END
 WHERE rgt >= rightmost_spread;

 INSERT INTO Frammis (part, lft, rgt)
 VALUES ('G1', rightmost_spread, (rightmost_spread + 1));
 COMMIT WORK;
END;

The idea is to spread the (lft, rgt) numbers after the youngest child
of the parent, G in this case, over by two to make room for the new
addition, G1.  This procedure will add the new node to the rightmost
child position, which helps to preserve the idea of an age order among
the siblings.

6. To convert a nested sets model into an adjacency list model:

SELECT B.emp AS boss, E.emp
  FROM OrgChart AS E
       LEFT OUTER JOIN
       OrgChart AS B
       ON B.lft
          = (SELECT MAX(lft)
               FROM OrgChart AS S
              WHERE E.lft > S.lft
                AND E.lft < S.rgt);

7. To convert an adjacency list to a nested set model, use a push down
stack. Here is version with a stack in SQL/PSM.

-- Tree holds the adjacency model
CREATE TABLE Tree
(node CHAR(10) NOT NULL,
 parent CHAR(10));

-- Stack starts empty, will holds the nested set model
CREATE TABLE Stack
(stack_top INTEGER NOT NULL,
 node CHAR(10) NOT NULL,
 lft INTEGER,
 rgt INTEGER);

CREATE PROCEDURE TreeTraversal ()
LANGUAGE SQL
DETERMINISTIC
BEGIN ATOMIC
DECLARE counter INTEGER;
DECLARE max_counter INTEGER;
DECLARE current_top INTEGER;

SET counter = 2;
SET max_counter = 2 * (SELECT COUNT(*) FROM Tree);
SET current_top = 1;

--clear the stack
DELETE FROM Stack;

-- push the root
INSERT INTO Stack
SELECT 1, node, 1, max_counter
  FROM Tree
 WHERE parent IS NULL;

-- delete rows from tree as they are used
DELETE FROM Tree WHERE parent IS NULL;

WHILE counter <= max_counter- 1
DO IF EXISTS (SELECT *
              FROM Stack AS S1, Tree AS T1
             WHERE S1.node = T1.parent
               AND S1.stack_top = current_top)
   THEN BEGIN -- push when top has subordinates and set lft value
        INSERT INTO Stack
        SELECT (current_top + 1), MIN(T1.node), counter, NULL
          FROM Stack AS S1, Tree AS T1
         WHERE S1.node = T1.parent
           AND S1.stack_top = current_top;

        -- delete rows from tree as they are used
        DELETE FROM Tree
         WHERE node = (SELECT node
                         FROM Stack
                        WHERE stack_top = current_top + 1);
        -- housekeeping of stack pointers and counter
        SET counter = counter + 1;
        SET current_top = current_top + 1;
     END;
     ELSE
     BEGIN -- pop the stack and set rgt value
       UPDATE Stack
          SET rgt = counter,
              stack_top = -stack_top -- pops the stack
        WHERE stack_top = current_top;
       SET counter = counter + 1;
       SET current_top = current_top - 1;
     END;
 END IF;
-- the top column is not needed in the final answer
END WHILE;
-- SELECT node, lft, rgt FROM Stack;
END;


 
Odgovor na temu

chachka
Srđan Mijatov
Programer
BUS Computers
Kikinda

Moderator
Član broj: 53780
Poruke: 575
195.252.90.*

Sajt: www.baze-podataka.net


+4 Profil

icon Re: SQL Mozgalice, mozgalica Br.6:27.03.2007. u 11:03 - pre 145 meseci
Da li iko u praksi koristi nested sets model za prezentaciju hijerarhije? Ja se nikad nisam usudio da ga upotrebim.
"The best code is no code at all." - Zidar (ES član)
"Biggest obstacle to learning SQL is unlearning procedural programming." - Joe
Celko
"Minimize code, maximize data." - A. Neil Pappalardo
 
Odgovor na temu

negyxo
Aleksandar Perkuchin

Član broj: 29751
Poruke: 876
*.sksyu.net.



+170 Profil

icon Re: SQL Mozgalice, mozgalica Br.6:27.03.2007. u 11:54 - pre 145 meseci
To je dokaz da je SQL shit u nekim stvarima i da ce prava moc doci kada se pomesaju dva sveta, imparativni i deklaritivni jezici.
 
Odgovor na temu

Dejan Topalovic
Dejan Topalović
Senior Oracle DBA & Senior PL/SQL
Developer, Erste Sparinvest (Erste
Bank), Vienna, Austria
Vienna

Član broj: 635
Poruke: 1374
*.it-austria.net.

Sajt: www.baze-podataka.net


+2 Profil

icon Re: SQL Mozgalice, mozgalica Br.6:27.03.2007. u 12:23 - pre 145 meseci
Ni ja jos nikad nisam koristio nested sets model za hijerarhijsku strukturu...

Na svu srecu, u Oracleu ima dosta built-in naredbi za obradu hijerarhijskih podataka, pogotovo u verziji 10g (CONNECT_BY_ROOT, CONNECT_BY_ISLEAF, CONNECT_BY_ISCYCLE, SYS_CONNECT_BY_PATH i td.), sto prilicno olaksava rad...
Blog - baze podataka
---------------------
Oracle OCP DBA (9i & 10g)
Oracle Database: SQL Certified Expert
Oracle OCP Developer
Certified MySQL DBA
 
Odgovor na temu

Mrav
Aleksandar Mraović
.net programer u Wireless Media
Beograd

Član broj: 6532
Poruke: 279
*.adsl-1.sezampro.yu.

ICQ: 197419540


Profil

icon Re: SQL Mozgalice, mozgalica Br.6:27.03.2007. u 18:19 - pre 145 meseci
Citat:
negyxo: To je dokaz da je SQL shit u nekim stvarima i da ce prava moc doci kada se pomesaju dva sveta, imparativni i deklaritivni jezici.


Nažalost nisam stigao time da se bavim, ali sa MS SQL serverom 2005 moguće je pisati recimo stored procedure i trigere direktno iz .net -a. Čini se da su pokušali da naprave korak upravo u ovom pravcu. E, sad pitanje je šta bi moglo da postane standard, videćemo.
Lepota je u jednostavnosti.

Cis.
 
Odgovor na temu

negyxo
Aleksandar Perkuchin

Član broj: 29751
Poruke: 876
*.sksyu.net.



+170 Profil

icon Re: SQL Mozgalice, mozgalica Br.6:27.03.2007. u 19:32 - pre 145 meseci
To sto moze da se radi u SQL Serveru sa .NET-om nije nista revolucinarno, i pre ovoga je moglo da se radi sa extended stored procedurama u nekim od native jezika, nisam siguran koji sve jezici ali C++ je podrzan, naravno ovo sa .NET-om je otislo i korak dalje ali i dalje to nije to (pretpostavljam da ORACLE ima slicnu integraciju sa javom, ali ja o tome ne znam nista). Ono sto se sada razvija je bas podrska za manipulaciju podacima deklarativnim putem i to unutar programskog jezika, sto ce naravno omoguciti laksu manipulaciju podacima a i model baze ce biti nekako blizi samim developerima. Ono sto ovu stvar cini 'problematicnom' je dosadasnji nacin izrade IS, do sada je sve bilo u stilu n-tier aplikacija a od sada sa ovim modelom, neke navike ce morati da se promene, verovatno ce se i dalje praviti slojevi ali ce redosled i poslovi koji su do sada ispodeljeni, verovatno rotirati.
 
Odgovor na temu

srki
Srdjan Mitrovic
Auckland, N.Z.

Član broj: 2237
Poruke: 3654
..lecom.global-gateway.net.nz.



+2 Profil

icon Re: SQL Mozgalice, mozgalica Br.6:05.04.2007. u 10:54 - pre 145 meseci
Nesto sam trazio na netu i naleteo na jedan clanak koji kaze da IBM-ova baza DB2 podrzava rekurizvni WITH i u toj bazi moze da se napise query koji bi bio potpuno po sql-99 standardu.

http://gennick.com/?q=with
 
Odgovor na temu

[es] :: Baze podataka :: SQL Mozgalice, mozgalica Br.6:

[ Pregleda: 5509 | Odgovora: 15 ] > FB > Twit

Postavi temu Odgovori

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