of 25 /25
Transport i logistika u špediciji Beograd, 2013.

Baze Podataka 2

Embed Size (px)

DESCRIPTION

prikaz baze podataka u spediciji

Text of Baze Podataka 2

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