Author
tijanab5225
View
83
Download
2
Embed Size (px)
DESCRIPTION
prikaz baze podataka u spediciji
Baze Podataka 2
Seminarski rad
Transport i logistika u pedicijiBeograd, 2013.
Sadraj
2Sadraj
31Verbalni opis informacionog sistema
42Proireni model objekti veze (PMOV)
42.1Otpremnica
52.2NalogZaIskladistenje
62.3NalogZaUskladistenje
72.4MedjunarodniTovarniList
82.5JedinstvenaCarinskaDeklaracija
93Relacioni model
104Korisniki definisani tipovi
115Denormalizacija
115.1Pre-joining (2NF): StavkaOtpremnica
135.2Pre-joining (3NF): Otpremnica
156Optimizacija
156.1Keeping single detail with master: Artikal
186.2Storing derivative values: Otpremnica
216.3Indeksi
216.4Vertikalno particionisanje
227Konaan relacioni model
1 Verbalni opis informacionog sistemaRad obuhvata funkcije prijema i transporta namirnica u pediciji Milped. Za potrebe rada koristie se otpremnica, nalog za uskladitenje, nalog za iskladitenje, meunarodni tovarni list i jedinstvena carinska deklaracija.Tok procesa poinje sa izdavanjem otpremnice po nalogu za transport odreenog artikla primaocu. Na otpremnici se nalaze detalji poiljke (tip robe, koliina, teina, podaci poiljaoca, podaci primaoca itd.).
Da bi odreeni artikal bio otpremljen primaocu stvara se potrebni nalog za iskladitenje.
Isto tako, po prijemu robe u samo skladite se formira nalog za uskladitenje sa relevantnim podacima poiljke.
Pri transportu robe bilo primaocu ili ka samom skladitu, po prelasku dravne granice, potrbna papirologija sadri meunarodni tovarni list koji sadri sve podatke poiljke, preko samih detalja proizvoda (tip rode, naziv artikla, koliina, teina itd.) do carinskih taksi, bruto i neto cena poiljke i podaci o primaocu kao i o slubenicima na carini.
U ovom sluaju jedinstveni tovarni list se takoe podrazumeva. On se izdaje na osnovu meunarodnog tovarnog lista. 2 Proireni model objekti veze (PMOV)1.1 Otpremnica
1.2 NalogZaIskladistenje
1.3 NalogZaUskladistenje
1.4 MedjunarodniTovarniList
1.5 JedinstvenaCarinskaDeklaracija
2 Relacioni model
Artikal(idArtikal, naziv, tezina);
Radnik(idRadnik, imePrezime);
TipRobe(idTipRobe, naziv);
Zemlja(idZemlja, naziv);
Grad(idZemlja, idGrad, naziv);
PravnoLice(idPravnoLice, naziv, adresa, telefon, fax, idZemlja, idGrad);
Otpremnica(idOtpremnica, datum, napomena, idRadnik, idTipRobe, idPravnoLice, idPravnoLice);
StavkaOtpremnica (idOtpremnica, idStavkaOtpremnica, kolicina, idArtikal);
MarkaVozilo(idMarkaVozilo, naziv);
TipVozilo(idTipVozilo, naziv)
Vozilo(idVozilo, naziv, kapacitet, idMarkaVozilo, idTipVozilo);
NalogZaIskladistenje(idNalogZaIskladistenje, datum, tezinaRobe, adresaIskladistenja, napomena, idZemlja, idGrad, idOtpremnica, idVozilo, idPravnoLice, idRadnik, idRadnik, idTipRobe);
NalogZaUskladistenje(idNalogZaUskladistenje, datum, tezinaRobe, adresaIskladistenja, napomena, idZemlja, idGrad, idOtpremnica, idVozilo, idPravnoLice, idRadnik, idRadnik, idTipRobe);
MedjunarodniTovarniList(idMedjunarodniTovarniList, datum, adresaPreuzimanja, adresaIsporuke, ukupnaTezina, idVozilo, idOtpremnica, idRadnik, idTipRobe, idPravnoLice, idPravnoLice, idZemlja, idGrad, idZemlja, idGrad);
Carina(idCarina, naziv);
JedinstvenaCarinskaDeklaracija(idJedinstvenaCarinskaDeklaracija, datum, ukupnaTezina, cenaRobe, idPravnoLice, idPravnoLice, idCarina, idMedjunarodniTovarniList, idTipRobe);
StavkaJedinstvenaCarinskaDeklaracija(idJedinstvenaCarinskaDeklaracija, rb, vrsta, osnovica, stopa)3 Korisniki definisani tipoviGO
CREATE TYPE DatumVreme FROM DATETIME;
END
public struct Adresa {
public string zemlja;
public int opstina;
public string grad;
public string adresa;
public string broj;
public string getAdresa(){
return string.Format({0}, {1} {2}, {3} {4},zemlja, opstina, grad, adresa, broj);
}
}
4 Denormalizacija
4.1 Pre-joining (2NF): StavkaOtpremnica4.1.1 Pre denormalizacije
#idOtpremnica#idStavkaOtpremnica
OtpremnicaStavkaOtpremnica
datum
Otpremnica(idOtpremnica, datum, napomena, idRadnik, idTipRobe, idPravnoLice, idPravnoLice);
StavkaOtpremnica (idOtpremnica, idStavkaOtpremnica, kolicina, idArtikal);
4.1.2 Nakon denormalizacije
#idOtpremnica#idStavkaOtpremnica
OtpremnicaStavkaOtpremnica
datumdatumOtpremnica
Otpremnica(idOtpremnica, datum, napomena, idRadnik, idTipRobe, idPravnoLice, idPravnoLice);
StavkaOtpremnica (idOtpremnica, idStavkaOtpremnica, kolicina, idArtikal, datumOtpremnica);
4.1.3 Tabela trigera
TABELAOPERACIJAKOLONAPOTREBANOPIS
OtpremnicaINSERTNE
UPDATEdatumDATriger vri izmenu kolone datumOtpremnica u tabeli StavkaOtpremnica na osnovu kolone datum u tabeli Otpremnica.
DELETENE
StavkaOtpremnicaINSERTDATriger vri izmenu kolone datumOtpremnica na osnovu kolone idOtpremnica.
UPDATEidOtpremnicaDATriger ne dozvoljava direktnu izmenu kolone idOtpremnica.
datumOtpremnicaTriger ne dozvoljava direktnu izmenu kolone datumOtpremnica.
DELETENE
4.1.4 Definicija trigeraUpdate:Triger vri izmenu kolone datumOtpremnica u tabeli StavkaOtpremnica na osnovu kolone datum u tabeli Otpremnica.GO
CREATE TRIGGER UpdateOtpremnicaON OtpremnicaAFTER UPDATE
AS
DECLARE @idOtpremnica INTEGER = (SELECT idOtpremnica FROM inserted)
DECLARE @datumOtpremnica DATETIME = (SELECT datum FROM inserted)
BEGIN
ALTER TABLE StavkaOtpremnica DISABLE TRIGGER ALL
UPDATE StavkaOtpremnica
SET datumOtpremnica = @datumOtpremnica
WHERE idOtpremnica = @idOtpremnica
ALTER TABLE StavkaOtpremnica ENABLE TRIGGER ALL
ENDInsert: Triger vri izmenu kolone datumOtpremnica na osnovu kolone idOtpremnica.Update: Triger ne dozvoljava direktnu izmenu kolone idOtpremnica. Triger ne dozvoljava direktnu izmenu kolone idOtpremnica.
GO
CREATE TRIGGER InsertUpdateStavkaOtpremnicaON StavkaOtpremnicaAFTER INSERT, UPDATEAS
DECLARE @idOtpremnica INTEGER = (SELECT idOtpremnica FROM inserted)
DECLARE @idStavkaOtpremnica INTEGER = (SELECT idStavkaOtpremnica FROM inserted)DECLARE @datumOtpremnica DATETIME = (SELECT datum FROM Otpremnica WHERE idOtpremnica = @idOtpremnica)
BEGIN
UPDATE StavkaOtpremnica
SET datumOtpremnica = @datumOtpremnica
WHERE idOtpremnica = @idOtpremnica AND idStavkaOtpremnica = @idStavkaOtpremnicaEND4.2 Pre-joining (3NF): Otpremnica4.2.1 Pre denormalizacije
#idTipRobe#idOtpremnica
TipRobesadrziOtpremnica
naziv
Otpremnica(idOtpremnica, datum, napomena, idRadnik, idTipRobe, idPravnoLice, idPravnoLice);
TipRobe(idTipRobe, naziv);
4.2.2 Nakon denormalizacije
#idTipRobe#idOtpremnica
TipRobesadrziOtpremnica
nazivnazivTipRobe
Otpremnica(idOtpremnica, datum, napomena, idRadnik, idTipRobe, idPravnoLice, idPravnoLice, nazivTipRobe);
TipRobe(idTipRobe, naziv);
4.2.3 Tabela trigeraTABELAOPERACIJAKOLONAPOTREBANOPIS
TipRobeINSERTNE
UPDATEnazivDATriger vri izmenu kolone nazivTipRobe u tabeli Otpremnica na osnovu kolone naziv u tabeli TipRobe.
DELETENE
OtpremnicaINSERTDATriger vri izmenu kolone nazivTipRobe na osnovu kolone idTipRobe.
UPDATEidNacinTransportDATriger vri izmenu kolone nazivTipRobe na osnovu kolone idTipRobe.
nazivTipRobeTriger ne dozvoljava direktnu izmenu kolone nazivTipRobe.
DELETENE
4.2.4 Definicija trigeraUpdate:Triger vri izmenu kolone nazivTipRobe u tabeli Otpremnica na osnovu kolone naziv u tabeli TipRobe.GO
CREATE TRIGGER UpdateTipRobeON TipRobeAFTER UPDATE
AS
DECLARE @idTipRobe INTEGER = (SELECT idTipRobe FROM inserted)
DECLARE @nazivTipRobe VARCHAR (100) = (SELECT naziv FROM inserted)
BEGIN
ALTER TABLE Otpremnica DISABLE TRIGGER ALL
UPDATE Otpremnica
SET nazivTipRobe = @nazivTipRobe
WHERE idTipRobe = @idTipRobe
ALTER TABLE Otpremnica ENABLE TRIGGER ALL
END
Insert:Triger vri izmenu kolone nazivTipRobe na osnovu kolone idTipRobe.Update:Triger vri izmenu kolone nazivTipRobe na osnovu kolone idTipRobe. Triger ne dozvoljava direktnu izmenu kolone nazivTipRobe.
GO
CREATE TRIGGER InsertUpdateOtpremnicaON OtpremnicaAFTER INSERT, UPDATE
AS
DECLARE @idTipRobe INTEGER = (SELECT idTipRobe FROM inserted)
DECLARE @idOtpremnica INTEGER = (SELECT idOtpremnica FROM inserted)
DECLARE @nazivTipRobe VARCHAR (100) = (SELECT naziv FROM TipRobe WHERE idTipRobe = @idTipRobe)
BEGIN
UPDATE Otpremnica
SET nazivTipRobe = @nazivTipRobe
WHERE idOtpremnica = @idOtpremnicaEND
5 Optimizacija5.1 Keeping single detail with master: Artikal5.1.1 Pre optimizacije
#idOtpremnica
Otpremnica
#idStavkaOtpremnica#idArtikal
StavkaOtpremnicasadrziArtikal
kolicina
Otpremnica(idOtpremnica, datum, napomena, idRadnik, idTipRobe, idPravnoLice, idPravnoLice, nazivTipRobe);
StavkaOtpremnica (idOtpremnica, idStavkaOtpremnica, kolicina, idArtikal, datumOtpremnica);
Artikal(idArtikal, naziv, tezina);
5.1.2 Nakon optimizacije
#idOtpremnica
Otpremnica
#idStavkaOtpremnica#idArtikal
StavkaOtpremnicasadrziArtikal
kolicinaukupnoIsporuceno
Otpremnica(idOtpremnica, datum, napomena, idRadnik, idTipRobe, idPravnoLice, idPravnoLice, nazivTipRobe);
StavkaOtpremnica (idOtpremnica, idStavkaOtpremnica, kolicina, idArtikal, datumOtpremnica);
Artikal(idArtikal, naziv, tezina, ukupnoIsporuceno);
5.1.3 Tabela trigera i procedura
TABELAOPERACIJAKOLONAPOTREBANOPIS
OtpremnicaINSERTDATriger ne dozvoljava direktan unos kolone ukupnaTezina.
UPDATEukupnaTezinaDATriger ne dozvoljava direktnu izmenu kolone ukupnaTezina.
DELETENE
StavkaOtpremnicaINSERTDATriger vri izmenu kolone ukupnaTezina u tabeli Otpremnica pozivom procedure.
UPDATEkolicinaDATriger vri izmenu kolone ukupnaTezina u tabeli Otpremnica pozivom procedure.
DELETEDATriger vri izmenu kolone ukupnaTezina u tabeli Otpremnica pozivom procedure.
5.1.4 Definicija trigera i procedura
GO
CREATE PROCEDURE ProcedureDodaj @idArtikal INTEGER, @kolicina INTEGERAS
BEGIN
UPDATE Artikal
SET ukupnoIsporuceno = ukupnoIsporuceno + @kolicina
WHERE idArtikal = @idArtikalENDGO
CREATE PROCEDURE ProcedureOduzmi @idArtikal INTEGER, @kolicina INTEGERAS
BEGIN
UPDATE Artikal
SET ukupnoIsporuceno = ukupnoIsporuceno - @kolicina
WHERE idArtikal = @idArtikalENDGO
CREATE TRIGGER InsertStavkaOtpremnicaON StavkaOtpremnicaAFTER INSERTASDECLARE @idArtikal INTEGER = (SELECT idArtikal FROM inserted)
DECLARE @kolicina INTEGER = (SELECT kolicina FROM inserted)BEGIN
EXEC ProcedureDodaj @idArtikal, @kolicinaENDGO
CREATE TRIGGER DeleteStavkaOtpremnicaON StavkaOtpremnicaAFTER DELETEASDECLARE @idArtikal INTEGER = (SELECT idArtikal FROM deleted)
DECLARE @kolicina INTEGER = (SELECT kolicina FROM deleted)BEGIN
EXEC ProcedureOduzmi @idAritkal, @kolicinaEND5.2 Storing derivative values: Otpremnica5.2.1 Pre optimizacije
#idOtpremnica
Otpremnica
#idStavkaOtpremnica#idArtikal
StavkaOtpremnicasadrziArtikal
kolicinatezina
Otpremnica(idOtpremnica, datum, napomena, idRadnik, idTipRobe, idPravnoLice, idPravnoLice, nazivTipRobe);
StavkaOtpremnica (idOtpremnica, idStavkaOtpremnica, kolicina, idArtikal, datumOtpremnica);
Artikal(idArtikal, naziv, tezina, ukupnoIsporuceno);
5.2.2 Nakon optimizacije
#idOtpremnica
Otpremnica
ukupnaTezina
#idStavkaOtpremnica#idArtikal
StavkaOtpremnicasadrziArtikal
kolicinatezina
Otpremnica(idOtpremnica, datum, napomena, idRadnik, idTipRobe, idPravnoLice, idPravnoLice, nazivTipRobe, ukupnaTezina);
StavkaOtpremnica (idOtpremnica, idStavkaOtpremnica, kolicina, idArtikal, datumOtpremnica);
Artikal(idArtikal, naziv, tezina, ukupnoIsporuceno);
5.2.3 Tabela trigera i procedura
TABELAOPERACIJAKOLONAPOTREBANOPIS
OtpremnicaINSERTDATriger ne dozvoljava direktan unos kolone ukupnaTezina.
UPDATEukupnaTezinaDATriger ne dozvoljava direktnu izmenu kolone ukupnaTezina.
DELETENE
StavkaOtpremnicaINSERTDATriger vri izmenu kolone ukupnaTezina u tabeli Otpremnica pozivom procedure.
UPDATEkolicinaDATriger vri izmenu kolone ukupnaTezina u tabeli Otpremnica pozivom procedure.
DELETEDATriger vri izmenu kolone ukupnaTezina u tabeli Otpremnica pozivom procedure.
5.2.4 Definicija trigera i procedura
GO
CREATE PROCEDURE ProcedureOtpremnica @idOtpremnica INTEGERAS
DECLARE @ukupnaTezina REAL = (SELECT SUM (StavkaOtpremnica.kolicina * Artikal.tezina) FROM StavkaOtpremnica INNER JOIN Artikal ON (StavkaOtpremnica.idArtikal = Artikal.idArtikal) WHERE idOtpremnica = @idOtpremnica)BEGIN
UPDATE Otpremnica
SET ukupnaTezina = @ukupnaTezina
WHERE idOtpremnica = @idOtpremnicaENDGO
CREATE TRIGGER InsertUpdateOtpremnicaON OtpremnicaAFTER INSERT, UPDATE
AS
DECLARE @idOtpremnica INTEGER = (SELECT idOtpremnica FROM inserted)
BEGIN
EXEC ProcedureOtpremnica @idOtpremnicaENDGO
CREATE TRIGGER InsertUpdateStavkaOtpremnicaON StavkaOtpremnicaAFTER INSERT, UPDATE
AS
DECLARE @idOtpremnica INTEGER = (SELECT idOtpremnica FROM inserted)
BEGIN
EXEC ProcedureOtpremnica @idOtpremnicaENDGO
CREATE TRIGGER DeleteStavkaOtpremnicaON StavkaOtpremnica
AFTER DELETE
AS
DECLARE @idOtpremnica INTEGER = (SELECT idOtpremnica FROM deleted)
BEGIN
EXEC ProcedureOtpremnica @idOtpremnicaEND5.3 IndeksiCREATE INDEX indArtikal ON StavkaOtpremnica (idArtikal)5.4 Vertikalno particionisanje
5.4.1 Pre particionisanjaArtikal(idArtikal, naziv, tezina, ukupnoIsporuceno);5.4.2 Nakon particionisanjaArtikal(idArtikal, naziv, tezina);
ArtikalDetalji(idArtikal, ukupnoIsporuceno);
5.4.3 Spajanje particionisanih tabelaCREATE VIEW ArtikalViewASSELECT a.idArtikal, a.naziv, a.tezina, d.ukupnoIsporucenoFROM Artikal a, ArtikalDetalji dWHERE a.idArtikal = d.idArtikal6 Konaan relacioni modelArtikal(idArtikal, naziv, tezina);
ArtikalDetalji(idArtikal, ukupnoIsporuceno);
Radnik(idRadnik, imePrezime);
TipRobe(idTipRobe, naziv);
Zemlja(idZemlja, naziv);
Grad(idZemlja, idGrad, naziv);
PravnoLice(idPravnoLice, naziv, adresa, telefon, fax, idZemlja, idGrad);
Otpremnica(idOtpremnica, datum, napomena, idRadnik, idTipRobe, idPravnoLice, idPravnoLice, nazivTipRobe, ukupnaTezina);
StavkaOtpremnica (idOtpremnica, idStavkaOtpremnica, kolicina, idArtikal, datumOtpremnica);
MarkaVozilo(idMarkaVozilo, naziv);
TipVozilo(idTipVozilo, naziv)
Vozilo(idVozilo, naziv, kapacitet, idMarkaVozilo, idTipVozilo);
NalogZaIskladistenje(idNalogZaIskladistenje, datum, tezinaRobe, adresaIskladistenja, napomena, idZemlja, idGrad, idOtpremnica, idVozilo, idPravnoLice, idRadnik, idRadnik, idTipRobe);
NalogZaUskladistenje(idNalogZaUskladistenje, datum, tezinaRobe, adresaIskladistenja, napomena, idZemlja, idGrad, idOtpremnica, idVozilo, idPravnoLice, idRadnik, idRadnik, idTipRobe);
MedjunarodniTovarniList(idMedjunarodniTovarniList, datum, adresaPreuzimanja, adresaIsporuke, ukupnaTezina, idVozilo, idOtpremnica, idRadnik, idTipRobe, idPravnoLice, idPravnoLice, idZemlja, idGrad, idZemlja, idGrad);
Carina(idCarina, naziv);
JedinstvenaCarinskaDeklaracija(idJedinstvenaCarinskaDeklaracija, datum, ukupnaTezina, cenaRobe, idPravnoLice, idPravnoLice, idCarina, idMedjunarodniTovarniList, idTipRobe);
StavkaJedinstvenaCarinskaDeklaracija(idJedinstvenaCarinskaDeklaracija, rb, vrsta, osnovica, stopa) EMBED Visio.Drawing.15
EMBED Visio.Drawing.15
EMBED Visio.Drawing.15
EMBED Visio.Drawing.15
EMBED Visio.Drawing.15
EMBED Visio.Drawing.15
EMBED Visio.Drawing.15
EMBED Visio.Drawing.15
2