- fakture = Tabela u kojoj cuvamo podatke o fakturama (broj, datum, rok placanja, ...)
- stavke_faktura = Tabela u kojoj cuvamo podatke o stavkama samih faktura (sifru proizvoda, kolicinu, cenu, ...)
Tabela stavke_faktura je povezana sa tabelom fakture preko broja fakture. Zbog jednostavnosti, izostavljamo nepotrebne atribute, i zadrzavamo samo kljucne kolone. Dakle imamo:
CREATE TABLE fakture (
broj_fakture INTEGER NOT NULL,
CONSTRAINT pk_fak PRIMARY KEY (broj_fakture),
CONSTRAINT ch_fak_broj CHECK (broj_fakture > 0)
);
CREATE TABLE stavke_faktura (
broj_fakture INTEGER NOT NULL,
redni_broj_stavke INTEGER NOT NULL,
CONSTRAINT pk_sfa PRIMARY KEY (broj_fakture, redni_broj_stavke),
CONSTRAINT ch_sfa_redni_broj CHECK (redni_broj_stavke > 0),
CONSTRAINT fk_sfa_fak FOREIGN KEY (broj_fakture) REFERENCES fakture
);
U ovim tabelama su se vremenom nakupili sledeci podaci:
INSERT INTO fakture (broj_fakture) VALUES (1);
INSERT INTO fakture (broj_fakture) VALUES (2);
INSERT INTO fakture (broj_fakture) VALUES (3);
COMMIT;
INSERT INTO stavke_faktura (broj_fakture, redni_broj_stavke) VALUES (1, 1);
INSERT INTO stavke_faktura (broj_fakture, redni_broj_stavke) VALUES (1, 2);
INSERT INTO stavke_faktura (broj_fakture, redni_broj_stavke) VALUES (1, 4);
INSERT INTO stavke_faktura (broj_fakture, redni_broj_stavke) VALUES (1, 7);
INSERT INTO stavke_faktura (broj_fakture, redni_broj_stavke) VALUES (2, 1);
INSERT INTO stavke_faktura (broj_fakture, redni_broj_stavke) VALUES (2, 2);
INSERT INTO stavke_faktura (broj_fakture, redni_broj_stavke) VALUES (3, 2);
INSERT INTO stavke_faktura (broj_fakture, redni_broj_stavke) VALUES (3, 3);
INSERT INTO stavke_faktura (broj_fakture, redni_broj_stavke) VALUES (3, 4);
INSERT INTO stavke_faktura (broj_fakture, redni_broj_stavke) VALUES (3, 6);
COMMIT;
Kao sto se da videti, imaamo rupe u numerisanju redova.
Kako se stavke mogu iznova numerisati tako da nemamo rupa i da na nam tabela stavke_faktura sadrzi:
broj_fakture redni_broj_stavke
------------ -----------------
1 1
1 2
1 3
1 4
2 1
2 2
3 1
3 2
3 3
3 4
???
- Zidar (ES član)
"Biggest obstacle to learning
SQL is unlearning procedural
programming." - Joe
Celko
"Minimize code, maximize data."
- A. Neil Pappalardo