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

Denormalizacija baze

[es] :: Baze podataka :: Denormalizacija baze

Strane: 1 2

[ Pregleda: 10740 | Odgovora: 37 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Raaaa

Član broj: 155018
Poruke: 7
*.dynamic.isp.telekom.rs.



+1 Profil

icon Re: Denormalizacija baze07.03.2010. u 11:17 - pre 171 meseci
Pozdrav drugari vidim da svi imamo isti problem kod prof. Marjanovića :)

Mene interesuje sledeća stvar ako neko može da mi pomogne naime imam sledeću situaciju

Klijent(#ŠifraKlijenta, Adresa, Telefon,#PoštanskiBroj)
FizičkoLice(#ŠifraKlijenta, JMBG, Ime, Prezime, BrojLičneKarte)
PravnoLice(#ŠifraKlijenta, PIB, MatičniBroj, Naziv, Račun)
Saobraćajna(#BrojSaobraćajne, DatumIzdavanja, Napomena, DatumIstekaVaženja, Sup, RegistarskiBroj, #ŠifraKlijenta, #ŠifraVozila)

Klijent mi ima specijalizaciju na Fizičko i Pravno lice da li je moguće sad prebaciti Ime i Prezime sa Fizičkog i PIB i Naziv sa Pravnog u Saobraćajnu u time zadovoljiti denormalizaciju?

Tako da to izgleda ovako

Saobraćajna(#BrojSaobraćajne,....., #ŠifraKlijenta, #ŠifraVozila, Ime, Prezime, PIB, Naziv)

Ovo mi je prva denormalizacjia a druga mi izgleda ovako

Zastupnik(#JMBGZastupnika, Ime, Prezime, Adresa, BrojLičneKarte, #PoštanskiBroj)
Ugovor(#BrojUgovora, DatumUgovora, CenaVozila, #BrojSaobraćajne, #ŠifraKlijentakupuje, #ŠifraKlijentaprodaje, #JMBGZastupnika)

Pa sam na ugovor prebacio ime i prezime zastupnika

Ugovor(#BrojUgovora, DatumUgovora, CenaVozila, #BrojSaobraćajne, #ŠifraKlijentakupuje, #ŠifraKlijentaprodaje, #JMBGZastupnika, Ime, Prezime)

Šta mislite da li je ovo ok?

Pozdrav
 
Odgovor na temu

laden
Mladen Mijatovic
Beograd

Član broj: 146405
Poruke: 33
*.dynamic.sbb.rs.



Profil

icon Re: Denormalizacija baze07.03.2010. u 22:24 - pre 171 meseci
Mislim da je ovo sto si napisao ok, u oba slucaja je razbijanje III NF. A zar niko nije radio trigere? :( Dajte malo pomoci i komentara oko toga.
 
Odgovor na temu

yeki
bgd

Član broj: 14326
Poruke: 27
*.static.isp.telekom.rs.



+1 Profil

icon Re: Denormalizacija baze08.03.2010. u 10:03 - pre 171 meseci
Treba li uopste da se razbija II NF? Ili je dovoljno samo III NF?
A trigere pravimo za koliko tabela? Posto izgleda nije dovoljno samo za 2 tabele...
 
Odgovor na temu

miki1205
Miroslav
Projektant
Beograd, Srbija

Član broj: 253711
Poruke: 2
*.telekom.yu.



Profil

icon Re: Denormalizacija baze08.03.2010. u 14:15 - pre 171 meseci
Potrebno je uraditi 2 denormalizacije i odgovarajuće trigere za te denormalizacije.
Denormalizaciju 2NF i denormalizaciju 3NF. Da li to ima smisla i kako to izvesti, to ne znam. I ja imam problem sa tim. Uradim ja te denormalizacije ali ni jedna niti je logična niti zadovoljava poslovnu logiku ovog mog mini inf. sistema. :)

Što se tiče triggera, ja imam iskustva u PL/SQL-u, nisam nikad radio na SQL serverima 2000, My sql i slično ali sve je to "isto sra.e drugo pakovanje".

Ladene, ono što sam primetio da ti nedostaje u tvom primeru jeste na koju kolonu se odnosi update. To je važno u ovom slučaju sa denormalizacijama, jer bi triger trebao da se okida samo kad se određena kolona promeni a ne ceo red. Kod tebe se triger okida kad god se izvrši update tabele proizvod bilo da mu menjaš naziv proizvoda ili jedinicu mere.

I kod koji si ti napisao više liči na proceduru a manje na update trigger. Kod trigera se najčešće koristi karakteristika :new i :old. Gde :new.JedMere pretstavlja novu vrednost jedinice mere određenog proizvoda u tabeli Proizvod a :old.JedMere staru vrednost, odn vrednost koja se menja. Nema potrebe da u SQL upitu povezuješ tabelu proizvod i stavkuPrijemnice kad već raspolažeš sa podacima iz tabele Proizvod u trenutku okidanja triggera jer se triger izvršava nad tom tabelom.

Code:

CREATE OR REPLACE TRIGGER update_jedmere_u_proizvodu
 BEFORE
 UPDATE OF JedMere
 ON Proizvod
 FOR EACH ROW
DECLARE
 
BEGIN

UPDATE StavkaPrijemnice
SET JedMere=:new.JedMere
WHERE StavkaPrijemnice.SifraPro = :new.SifraPro;

END;



Nego, zna li neko nešto vezano za ove Korisnički definisane tipove podataka. Tu mi ništa nije jasno šta treba uraditi. Nisam baš pazio na tom času :)
Miki
 
Odgovor na temu

Zidar
Canada

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



+79 Profil

icon Re: Denormalizacija baze08.03.2010. u 15:07 - pre 171 meseci
RESENO, evo triger, nadam se da je to to. Radi ali ako neko ima zamerke neka ih slobodno iznese

[Code]
CREATE TRIGGER update_jedmere_u_proizvodu ON Proizvod
FOR UPDATE
AS
UPDATE StavkaPrijemnice
SET JedMere=Proizvod.JedMere
FROM Proizvod, StavkaPrijemnice
WHERE Proizvod.SifraPro=StavkaPrijemnice.SifraPro
[/code]

Dati triger ima najmanje dva problema, jedan logicki i drugi tehnicki.

Sta radi ovaj triger:
- kad god se promeni bilo sta u tabeli Proizvod => odradi se UPDATE nad tabelom StavkaPrijemnice
- UPDATE StavkaPrijemnice jednostavno prepise sve jedinice mere u SVIM stvakama prijemnice onim sto se nalazi u tabeli Proizvodi za SVE proizvode.

Znaci, promeni se recimo opis za 'Jabuke' u 'Jabike Delises' i ovo izazove UPADTE cele tabele StavkePrijemnice u koloni JedMere, koja se nije promenila uopste u tabeli Proizvod. Ovo je strasno jer se rade nepotrebne operacije, cak i denormalizacija ne zahteva da se radi UPDATE jedinica mere kad se promeni opis proizvoda. Ovo je tehnicki problem, jer se bespotrebno radi UPDATE nad potencijalno velikom tabelom.

Tezi od dva problema je logicki: Jos strasnije je sto se ovo uopste radi. Recimo da je proizvod "Jabuke" bio meren u "kg" jedno vreme. Onda udjemo u EU i sad se jabuke mere u "LB". Sad ce triger da promeni jedinicu mere u svim prijemnicama koje psotoje od ranije u "LB". Posto je LB = 0.454 Kg, jednim potezom si napravio haos u knjigovodstvu. Dobro, EU ne koristi LB, ali s emoze promeniti sa Kg u Tone recimo, i onda opet nastaje haos u knjigovodstvu.

Triger ne sme da dira stare rekorde, ni pod kojim uslovima. Postavlja se pitanje - kako da triger zna koji rekordi u tabeli proizvod su promenjeni, da bi mozda promenio samo te rekorde u nekoj drugoj tabeli.

U sustini, primer je jako lose izabran, a onda je triger lose napisan. I onaj za ORACLE niej bolji u tom pogledu. Konstrukcije tipa 'FOR EACH ROW" su generalno opasne, jer one to i rade - nesto rade za SVAKI red. Gde smoz aboravili WHERE?

 
Odgovor na temu

Zidar
Canada

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



+79 Profil

icon Re: Denormalizacija baze08.03.2010. u 15:44 - pre 171 meseci
Cini mi se da je triger trebalo da resi ovu situaciju:

"Kad se rekord unese u StavkePrijemnice, prepisati Jedmere iz tabele Proizvodi"

Ovo zato sto smo procesom denormalizacije uveli nepotrebnu kolonu JedMere u tabelu StavkePrijemnice.

Triger treba da bude ne tabeli StavkePrijemnice, na ON INSERT i treba da za upravo uneti rekord (to jest grupu rekorda) kopira JedMere iz tabele Proizvod. Otprilike ovako (kod pisem iz glave, sigurno negde ima neka sintaksna greska,):

Code:

CRAETE TRIGER trgSTavkePrijemnice_CopyJedMere_from_Proizvod ON dbo.StavkePrijemnice
FOR INSERT AS

UPDATE dbo.StavkePrijemnice
SET JedMere = P.JedMere
FROM StavkePrijemnice AS S
JOIN Inseretd AS I ON I.proizvodID = S.proizvodID
;

GO


Primetite da je upotrebljena SQL Serverova interna tabele "Inserted". Inserted izgleda isto kao tabela koja se modifikuje i sadrzi rekorde koji ce biti uneti ovom transakcijom. Tabela Inseretd je enprazna u slucaju da imamo UPDATE ili INSERT. Postoji i tabele "Deleted" koja se javlja u slucaju DELETE ili UPDATE. Inserted i Deleted imaju strukturu identicnu tabeli koja se menja i koriste se u trigerima da se dejstvo trigera ogranic samo na rekorde koji su se stvarno promenili. O ovome su morali da vas uce u skoli.

Dakle, nas triger cita iz tabele rekorde koji ce upravo biti uneseni u tabelu StavkePrijemnice (FROM Stavkeprijemnice JOIN Inserted) Onda svakom rekordu dodeli verenost JedMere koja mu odgovara (JOIN ON I.proizvodID = S.ProizvodID)

Da se ovo razume, potrebno je razumeti UPDATE komandu koja radi ne sa JOINovanim tabelama.

U praksi, veom je cesto da se ovako prepisuje Cena iz tabele Proizvod u tabelu StavkeRacuna na primer...


 
Odgovor na temu

laden
Mladen Mijatovic
Beograd

Član broj: 146405
Poruke: 33
91.150.70.*



Profil

icon Re: Denormalizacija baze08.03.2010. u 20:43 - pre 171 meseci
Hvala Zidar, da si samo znao koliko cesto sam ovih dana prizeljkivao tvoj post:) Ono gore mi je prvi napisan triger ikada tako da sam bio srecan samo kad sam video da radi radnju:) a pretpostavljao sam da ce biti gresaka. Trudim se da ne ocekujem ovde gotova resenja, nego da ponudim bar nesto za diskusiju, ma koliko bilo pogresno. Hvala jos jednom.
 
Odgovor na temu

Zidar
Canada

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



+79 Profil

icon Re: Denormalizacija baze08.03.2010. u 21:18 - pre 171 meseci
Samo uzivaj i srecan rad

 
Odgovor na temu

yeki
bgd

Član broj: 14326
Poruke: 27
*.static.isp.telekom.rs.



+1 Profil

icon Re: Denormalizacija baze09.03.2010. u 12:15 - pre 171 meseci
Citat:

DepoKarton (IDDepoKartona#, IDKlijenta#,DatumDK, ..., BrojRačuna#)
Račun(BrojRačuna#, BrojModela, PozivNaBroj, Suma...)
StavkeDepoKartona(IDDepoKartona#, IDKlijenta#, RBStavkeDK#, Samostalno, ....)
OvlascenoLice(IDOvlLice#, ImePrezime...)

Ja se i dalje zezam sa denormalizacijom. Moze li neko da napise primer razbijanja II nf za denormalizaciju?
Ne verujem da ce dati da se preda primer sa 2x razbijenom III nf.
Zanima me takodje da li mogu da uradim sledece: posto mi je veza StavkeDepoKartona i OvlascenoLice 1,M i 0,M, tj. u relacionom modelu je pravljena nova tabela Relacija3(IDDepoKartona#, IDKlijenta#, RBStavkeDK#,IDOvlLice#);
Da li mogu umesto pravljena te nove tabele samo da spustim FK IDOvlLice u tabelu StavkeDepoKartona i da dobijem => StavkeDepoKartona(IDDepoKartona#, IDKlijenta#, RBStavkeDK#, Samostalno, ....... IDOvlLice#) i da tako izvrsim denormalizaciju (tako cu umesto spajanja 3 tabele, imati spajanje samo 2 tabele)?

Znam da su rekli da moraju po jedan insert, update, delete trigger da se napise. Ja nisam sigurna da cu imati insert trigger...

I jos nesto za korisnicke definisane tipove - u ms sql serveru: CREATE TYPE nekiTip FROM varchar(11) NOT NULL ; i sl.
Nije valjda da na ovo misle?

 
Odgovor na temu

chachka
Srđan Mijatov
Programer
BUS Computers
Kikinda

Član broj: 53780
Poruke: 576
*.dynamic.isp.telekom.rs.

Sajt: www.baze-podataka.net


+4 Profil

icon Re: Denormalizacija baze09.03.2010. u 16:45 - pre 171 meseci
Citat:
yeki: Moze li neko da napise primer razbijanja II nf za denormalizaciju?

primer

"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

yeki
bgd

Član broj: 14326
Poruke: 27
*.static.isp.telekom.rs.



+1 Profil

icon Re: Denormalizacija baze09.03.2010. u 17:04 - pre 171 meseci
^Procitala sam ovu temu, ali mi to nije pomoglo... (videces i moj post da sam isto tako uradila, ali poprilicno sam sigurna da ce da nas vrate kad onako uradimo)
Moze li neko da okaci primer razbijanja II NF koja je prosla kod profesora?
 
Odgovor na temu

laden
Mladen Mijatovic
Beograd

Član broj: 146405
Poruke: 33
91.150.70.*



Profil

icon Re: Denormalizacija baze09.03.2010. u 17:53 - pre 171 meseci
@yeki
Nemoj siriti ovu temu tako sto pitas neke stvari vezane za faks, to sve mozes postovati na fonforum. Ovde bi bilo bolje da razradimo neku opstu pricu na temu denormalizacije, trigera itd, a to sto prof. trazi nema bas mnogo veze sa realnoscu i stvarnim zahtevima u nekom poslovnom sistemu. Btw, ja necu raditi nesto sto je mnoooooogo nelogicno, a mislim da je razbijanje II NF bas takva stvar.
 
Odgovor na temu

Zidar
Canada

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



+79 Profil

icon Re: Denormalizacija baze09.03.2010. u 18:21 - pre 171 meseci
Nikako mi nije jasno da se trosi toliko vremena na nesto sto ne treba raditi. Da bi nesto denormalizovao, treba da je prvo normalizovano. A u prirodi ne psotoje normalizovani podaci. Normalizacijom mukotrpno popravljamo ono sto u prirodnom obliku ne valja. Znaci, denormalizoacijom kvarimo nesto do cega se doslo mukom i znojem. Pa jos se sporimo oko toga koji je pravi nacin da pokvarimo ono sto smo napravili dobro...

Koji je pravilan nacin da se sa 2NF vratimo na 1NF? Da li je bolje napiti se od piva, vina ili meke rakije, pitanje je sad...

Ne mogu da verujem da neko maltretira studente ovakvim glupostima.

U realnom zivotu postoje dva - tri primera gde se moze dopustiti pod odredjenim (sve redjim) uslovim nedovoljna normalizacija, i to je sve:

- Banke ne racunaju stanje na tekucem racunu kverijima, stanje na racunu se azurira (UPDATE) posle svake transakcije. Tako banke rade. Tacka. Nema normalizacije u tom delu. Tako banke hoce, jer su navikle, nekad je glavni jezik bio COBOL. Tacka.

- Cena se prepisuje iz tabele Proizvodi u tabelu StavkeNaRecunu. Adresa se prepisuje iz tabele Kupci u tabelu Otpremnice, da bi se zapamtilo na koju je adresu roba otisla u slucaju da kupac promeni adresu kasnije. Ovo mozda i nije denormalizacija, jer postoji TrenutnaCena i CenaPoKojoj smo prodali robu na odredjeni dan. Isto i za adresu, tekuca adresa i adresa na koju smo isporucili robu, mogu da budu iste, ali i ne moraju. Nema duplikacije, pa nema ni denormalizacije, iako izgleda kao da ima.

- Datum stupanja na posao i datum prekida rada se cuvaju u istom redu, iako to krsi neko tamo pravilo koje kaze da svaki atribut sme da zavisi samo i samo od PK. Datum prekida rada zavisi od PK, ali zavisi i od Datuma pocetka rada, znaci prekrseno pravilo. Ne znam da je neko ovo razresio daljom normalizacijom, iako je svakako moguce.

To su neki primeri nedovoljno normalizovanih struktura. Mozda ima jos, ali mi tesko pada na pamet. Da sam ja profesor, pokusao bih da objasnim deci bar neke od ovih situacija, jer ce se sa time sresti u praksi. A ne da ih maltretiram trazenjem "pravilnog" nacina da se denormalizuje skup tabela. To je isto kao prihvatiti deljenje sa nulom. Jednom kad prihvatis da se sme deliti nulom, sve je moguce i nema kraja mogucnostima. Mogu da dokazem da je 1=2, na primer:

X2-X2 = X2-X2

to moze da se napise kao:

(X-X)(X+X) = X(X-X)

podelimo obe strane sa (X-X) i dobijemo

X+X = X => 1=2

Ako dakle prihvatim glupost za ispravan korak u postupku, dobicu glupost kao rezultat. A onda pomnozim obe strane sa 7, pa dobijem 7 = 14. Onda to nazovem 'optimizacijom', a deljenje sa (X-X) ostaje 'denormalizacija'

Tako je isto i sa denormalizacijom. Cuj, 'optimizacija'. Jedan doktor me izleci od gripa, a onda mi drugi prebije nogu, jer me prvi izlecio previse. I to je optimizacija. Da mi je izbio oko, bila bi denormalizacija.

Bez namere da uvredim ikoga, ali pitam se ko je ovde 'denormalan'?

:-)
 
Odgovor na temu

Zidar
Canada

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



+79 Profil

icon Re: Denormalizacija baze09.03.2010. u 18:33 - pre 171 meseci
@yeki: Ne mogu ti pomoci jer ne vidim tvoje tabele niti znam sta radis. Chachka je dao generalno resenje - ides unazad. Ili zamisli da nije normalizovana baza, pa kreni ponovo korak po korak. Kad stignes do 2NF, ti stani i izgledace kao da si se vratila sa 3NF.

Najbolje ej da pitas profesore, oni valjda naju sta se hoce ovom vezbom i kako to izvesti.

Moj poslednji post se ne odnosi na studente, vi ste zrtve u ovoj guzvi, a mi vam ne mozemo pomoci. Samo sam se iskukao, kao kad se zale ljudi na zagadjene vazdha i unistavanje okoline.

Mozda ti budem mogao pomoci su ti kad se bude pisao triger koji ce morati da obezbedi ono sto je bilo obezbedjeno referencijalnim integritetom, a mi smo ga pokvarili (optimizovali?) denormalizacijom.

Mene su u skoli ucili da 'optimal' znaci 'najbolji'. Optimizacija dakle ne znaci 'poboljsanje performansi' nego znaci 'pronalazenje najboljeg resenja'. Nikako mi ta rec 'optimizacija' ne pasuje ovde
 
Odgovor na temu

yeki
bgd

Član broj: 14326
Poruke: 27
*.dynamic.isp.telekom.rs.



+1 Profil

icon Re: Denormalizacija baze09.03.2010. u 18:50 - pre 171 meseci
Ok, hvala ti. Znam ja normalizaciju, samo me buni do koje tacke se treba denormalizvoati, a da se ne pretera...
 
Odgovor na temu

Fitopatolog
Dušan Marjanov
Novi Sad

Član broj: 90936
Poruke: 683
*.dynamic.isp.telekom.rs.



+3 Profil

icon Re: Denormalizacija baze09.03.2010. u 20:26 - pre 171 meseci
Evo još jednom:

Normalizacijom se dobija set tabela u kojima ne postoji redundansa podataka (nema čuvenih problema sa duplim ili višestrukim ažuriranjem podataka itd...). Njome smo rešili problem UNOSA i skladištenja podataka. Postupak normalizacije NE ZAVISI od prirode ulaznih podataka.

Ako je normalizovana baza dobra i sa stanovišta izveštavanja (izveštavanje troši prihvatljivu količinu vremena i drugih resursa) posao je gotov, ne treba nam denormalizacija.

Ako su performanse izveštajnih programa loše, tada se uvode IZVEDENI objekti (radi se denormalizacija baze) ali samo za one situacije za koje želimo popraviti performanse. Zato ne postoji opšti recept KAKO se radi denormalizacije. Ona se radi samo za deo kome se žele popraviti performanse.
Pedagoški bi bilo da profesor zada zadatak u kome će studenti moći da vide kako se nekom denormalizacijom nešto popravilo. Ovako ostaje suvoparan primer "denormalizacije radi denormalizacije".
 
Odgovor na temu

Zidar
Canada

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



+79 Profil

icon Re: Denormalizacija baze10.03.2010. u 16:34 - pre 171 meseci
Citat:
...samo me buni do koje tacke se treba denormalizvoati, a da se ne pretera...

To samo profesor moze da ti odgovori. Nama je lako da ovde pricamo kako profesori maltretiraju studente, medjutim profesori nisu bas blesavi. SIgurno postoji razlog zasto ovo traze od vas i najverovatnije da profesor(i) zna(ju) i dokle treba da idete sa denormalizacijom. Najprostije resenje - posalji e-mail profesoru, ili trk pred kabinet pa cekaj red za konsultacije. A i asistenti na vezbama mora da imaju neku ideju i mogu pomoci.

Ovo su nezgodna pitanja, u sivoj zoni, pa saveti koje delimo po forumu mogu vise da odmognu nego da pomognu. Ovde niko ne moze da odgovori dokle treba ici sa denormalizacijom 'a da se ne pretera', pa nem svrhe to ni pitati.

 
Odgovor na temu

sandrava
Sandra Ilic
Valjevo

Član broj: 309549
Poruke: 14
*.dynamic.isp.telekom.rs.



Profil

icon Re: Denormalizacija baze16.01.2013. u 08:39 - pre 136 meseci
Pozdrav,
Da ne otvaram novu temu pisacu ovde jer naslov mi skroz odgovara :-),posto nije odavno pisano nadam se da ce neko ugledati moj post :-)
opet mi treba podrska da li sam na dobrom putu? :-)
Uradila sam denormalizaciju 2NF izgleda kao u prilozenim stavkama,interesuje me da li ovo ima logike i jesam li dobro predstavila.Hvala unapred!

Prikačeni fajlovi
 
Odgovor na temu

[es] :: Baze podataka :: Denormalizacija baze

Strane: 1 2

[ Pregleda: 10740 | Odgovora: 37 ] > FB > Twit

Postavi temu Odgovori

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