Citat:
Da li bi mogao detaljnije da objasniš to o deljenje ili normalizaciju? Tabela koju sam opisao je zapravo jedini format koji mogu da koristim u jednoj analizi i oči su mi pobelele dok nisam uspeo da dobijem podatke u tom formatu. Nije problem i da opet pretabavam podatke, samo ne znam u kom pravcu da razmišljam. Nisam razumeo šta znači kveri tipa relaciono deljenje (poznajem osnovu baza podataka ali nisam po struci IT pa ne baratam podrazumevanim pojmovima). Shvatam na koji način si mislio da se podele podaci na dve tabele, ali ne shvatam kako to menja stvari...
Ovo je počelo kao konkretni problem vezan za konkretnu situaciju ali sam shvatio da može da bude template problem pa mi je zanimljivo dad vidim kako se rešava ova situacija.
Zoran je objasnio ukratko sta je problem. Radi se o tome da tvoju tabelu koja ima mnogo kolona slicne namene razbijes na najmanje dve tabele. Ovo da bi imao maksimalnu fleksibilnost u skladistenju podataka i da bi mogao da odgovaras na pitanaj tipa "koji poligoni imaju vrednost za više od dva tipa površina?".
Tvoja tabela izgleda neako ovako:
Code:
Poligon PovTip_1 PovTip_2 PovTip_3 PovTip_4 PovTip_5 PovTip_6
Poligon 1 Y Y
Poligon 2 Y Y
Poligon 3 Y Y Y
Ima mnogo praznih celija. Mozda u tvom slucaju pisu nule i jedinice, Y/N ili su naprosto neke celije prazne. Teorijski, nema ogranicenja za broj kolona PovTip_i, pa se psotavlja pitanje koliko ti kolona treba. Sto vise, to bolje. Medjutim, veoma je tesko dobiti odgovore koji ti trebaju.
Procesom normalizacije, u tvom slucaju dobio bi dve tabele, ovako:
Code:
Tabela Poligoni:
Poligon
--------
Poligon 1
Poligon 2
Poligon 3
Tabela PridruzenePovrsine (povrsine pridruzene poligonima) (ovo je kod Zorana PoligonTipPovrsine, i ne treba ti Vrednost, barem za sada):
Poligon TipPovrsine
--------------------------
Poligon 1 PovTip_1
Poligon 1 PovTip_2
Poligon 2 PovTip_2
Poligon 2 PovTip_4
Poligon 3 PovTip_2
Poligon 3 PovTip_3
Poligon 3 PovTip_5
U tabeli PridruzenePovrsine svaki poligon izlistan je tacno onoliko puta koliko ima pridruzenih povrsina. Mnogo je kompaktnije i preglednije.
Sad mozes da izvrsis ovakav kveri:
Code:
SELECT Poligon, COUNT(*)
FROM PridruzenePovrsine
GROUP BY Poligon
koji ce ti pokazati koliko povrsina je pridruzeno kom poligonu. Ako te zanimaju procenti, mozes da vidis koliko ukupno povrsina je u igri pomocu ovog kverija
Code:
SELECT DISTINCT TipPovrsine
FROM PridruzenePovrsine
Mozes i da kombinujes dva kverija pa da dobijes procenat, da vidis koji poligoni imaju vise od 50% mogucih tipova povrsina:
Code:
SELECT
Poligon
, COUNT(*) AS BrojPovrsina
, COUNT(*)/(SELECT COUNT(*)
FROM (SELECT DISTINCT TipPovrsine
FROM PridruzenePovrsine )
) AS Procenat
FROM PridruzenePovrsine
GROUP BY Poligon
Pazi, ja ovo pisem napamet, nisi nam okacio bazu s podacima pa ne mogu da koristim prave podatke.
Ako podatke dobijas u obliku u kome ih dobijas, sa mnogo kolona i jednim redom po poligonu, nije smak sveta. Mozes da ih ivezes u Excel ili Access pa da nekom transpozicijom ih prevedes na oblik koji ti treba.
U Accessu mozes da izvrsiai ovakav kveri, da bi se podaci lepo poredjali, kao u tabeli PridruzenePovrsine :
Code:
SELECT Poligoni.Poligon, 'PovTip_1' AS TipPovrsine
FROM Poligoni
WHERE (((Poligoni.PovTip_1)="Y"))
UNION
SELECT Poligoni.Poligon, 'PovTip_2' AS TipPovrsine
FROM Poligoni
WHERE (((Poligoni.PovTip_2)="Y"))
UNION
SELECT Poligoni.Poligon, 'PovTip_3' AS TipPovrsine
FROM Poligoni
WHERE (((Poligoni.PovTip_3)="Y"))
UNION
SELECT Poligoni.Poligon, 'PovTip_4' AS TipPovrsine
FROM Poligoni
WHERE (((Poligoni.PovTip_4)="Y"))
UNION
SELECT Poligoni.Poligon, 'PovTip_5' AS TipPovrsine
FROM Poligoni
WHERE (((Poligoni.PovTip_5)="Y"))
Gde je relaciono deljenje? Na srecu, nije nam trebalo. Trebalo bi nam za pitanje tipa 'Kojim poligonima su pridruzene povrsine PovTip_1 i PovTip_3 (mogu biti i neki drugi, nas interesuju ove dve)', ili ''Kojim poligonima su pridruzene povrsine PovTip_1 i PovTip_3, ali samo te dve, ni jedna druga' ili 'Koji poligon ima pridruzene sve tipove povrsina koji se javljaju'.
Kad savladas osnove (GROUP BY, UNION, kveri unutar kverija), onda mozemo da pricamo o relacionom deljenju, nikako pre toga. Kao matematika, ako ne znas razlomke i rastavljanje na faktore ne vredi da pricamo o limesima i izvodima.
:-)