Você está na página 1de 24

UNIVERSIDADEEDUARDOMONDLANE

FACULDADEDEENGENHARIA
DepartamentodeEngenhariaElectrotecnia
LicenciaturaemEngenhariaInformtica

BASEDEDADOSII
Tema:GestodasRequisiesDiriasdeumaconstrutoracivil
Discentes:
Gueze,VanDilson
Massango,JlioBoaventura
Matavele,CastroFaifane
Nhantumbo,AmliadaSnia

Docentes:
Dr.ValiJafarIssufo

Maputo,Maiode2016

ndice

ENUNCIADO DO PROJECTO

GESTODASREQUISIESDOESCRITRIODEUMACONSTRUTORA

UmaEmpresavocacionadanoramodaConstruoCivil,pretendefazeragestodasrequisies
diriasdoescritrio,osistemadevefuncionardaseguintemaneira,aRecepcionistarecebeas
requisiesfeitaspelosEncarregadosquepodemserEngenheirosouTcnicos,decadaobra,e
separaasrequisiesconsoanteotipoderequisio,quepodeserdepagamento,oudacompra
de material, das requisies nos importa guardar nr.Requisio, Obra, tipoRequisio, e
valorRequisio,darecepcionistanosinterressasabercdigo,nome,emaileonr.dotelefone,a
dataemqueoencarregadoentregaarequisioeimportante,doencarregadoimportanossaber
cdigoEncarregado,nomeEncarregado,eonomeObra,edaObraimportanosterasseguintes
InformaescdigoObra,nomeObra,tipoObra,duraoObraalocalizao,eCadaObrapossui
um Oramento que contm a seguinte informao, nr.Oramento, nomeObra, item,
designao,PreoUn,unidade,quantidade,etotal,cadarequisiodeveestaranexaauma
Cotao,naqualdeveter nr.Referencia,dataCotao,nomeInstituio,valorDaCotaoeo
nomeObra,etodasasrequisiesAutorizadasdeveseguardar,onr.daRequisio,nomeObra,
dataAutorizao,oDirectordeObraeoresponsvelpelaAutorizaodasrequisiesedele
nosimportaconservarcdigoDirector,nomeDirector.

Descrio do Projecto
OprojectotemcomotemaSistemadeGestodeRequisiesDiriasdeUmEscritriodeUma
EmpresadeConstruoCivil.

CadastrarosusuriosqueiroacederaoSistema
PermitirocadastrodasrequisiesdiriasdecadaObra;
CadastrarObras
Imprimirasrequisiesfeitassegundoadatadefinidapeloutilizador

Aparteadministrativaserusadainternamentepelosfuncionrioscadastradosnabasededadosque
iroreceberasrequisiesdecadadeobra,esepararasrequisiesdepagamentoeasrequisiesde
compradeMaterial,paraasrequisiesdecompradeMaterialosfuncionriosdevemverificarsea
requisioesteemanexoaumacotaodomaterialaserrequisitado.

MODELO ENTIDADE E RELACIONAMENTO

Diagrama Entidade Relacionamento

NORMALIZAO
1FN
Construtora(codEncarregado, codObra, nomeEncaregado (nrRequisio, codRecepcionista,
codirector,descrio,codObra,tipo_Requisio(nrRequisicao,codEncarregado (codRecepcionista, nome,
telefone (codRequisioA, codRecepcionista, nrRequisicao (codDirector, nomeDirector (nrReferencia,
codRefMaterial data,nomeInstituio,codObra(codOramento,quantidade,designao,item,codObra
(codObra,codOrcamento,nomeObra,endereo,avenida,bairro,rua,quantidade,designao,item)))))))))
2FN
Encarregado(codEncarregado,codObra,nomeEncaregado)
Requisio(nrRequisio,codRecepcionista,codirector,codObra)
Requ(nrRequisio,descrio,tipo_Requisio)
Encar_Requisicao(nrRequisicao,codEncarregado)
Recepcionista(codRecepcionista,nome,telefone)
Requ.Autorizadas(codRequisioA,codRecepcionista,nrRequisicao)
Director_Obra(codDirector,nomeDirector)
Cotao(nrReferencia,codRefMaterialdata,nomeInstituio,codObra)
Orcamento_Obra(codObra,codOrcamento,quantidade,designao,item)
Obra(codObra,nomeObra,endereo,avenida,bairro,rua)
3FN
Encarregado(codEncarregado,codObra,nomeEncaregado)
Requisio(nrRequisio,codRecepcionista,codirector,codObra)
Requ(nrRequisio,descrio,tipo_Requisio)
Encar_Requisicao(nrRequisicao,codEncarregado)
Recepcionista(codRecepcionista,nome,telefone)
Requ.Autorizadas(codRequisioA,codRecepcionista,nrRequisicao)
Director_Obra(codDirector,nomeDirector)
Cotao(nrReferencia,codRefMaterialdata,nomeInstituio,codObra)
Orcamento_Obra(codObra,codOrcamento,quantidade,designao,item)
Obra(codObra,nomeObra,endereo,avenida,bairro,rua)

Listas das Transaces

Tabela Oramento
Item

CodOrcamento CodObra

Quantidade

Designacao

1.1

12

400

Sacos de Cimento Cimpor B 25

1.2

12

1000

Chapas de Cofragem

1. Pr
i
m
ei
ra

Transaco

T1 (Requisio): O encarregado 1 faz uma consulta sobre a base de dados para verificar a
quantidade de cimento existente no sistema de forma requisitar X quantidades de cimento.
T1 em RW

T1 em SQL

Read(Orc.qtyCimento)

SELECT Quantidade
FROM Orcamento
WHERE Cod_Orcamento = 1

Orc.qtyCimento = Orc.qtyCimento-X
Write( Orc.qtyCimento)

UPDATE Orcamento
SET Quantidade = 100
WHERE Cod_Orcamento = 1

T2 (Requisio): O encarregado2 faz uma consulta sobre a base de dados para verificar a
quantidade de cimento existente no sistema de forma requisitar X quantidades de cimento.
T1 em RW

T1 em SQL

Read(Orc.qtyCimento)

SELECT Quantidade
FROM Orcamento
WHERE Cod_Orcamento = 1

Orc.qtyCimento = Orc.qtyCimento-X
Write( Orc.qtyCimento)

UPDATE Orcamento
SET Quantidade = 200
WHERE Cod_Orcamento = 1

Nessa Transaco ocorre um processo simultneo, em que temos dois encarregados a


executarem a mesma operao sobre a base de dados, temos que os encarregados fazem uma
consulta de seleco para verificarem a quantidade de cimento tendo tido um resultado de 400
sacos de cimento, e o encarregado 1 requisita 300 sacos de cimento, e o encarregado 2
requisita 200 mas o encarregado 2 quando vai fazer uma contagem fsica dos sacos de
cimento regista uma diferena que foi causada pela falta da actualizao pela base de dados
logo apos que o encarregado 1 retirou o cimento.
T1

Descri
o do
conflito

T2

Read(Orc.qtyCimento) 400
Orc.qtyCimento = Orc.qtyCimento - 300
Read(Orc.qtyCimento)400
Orc.qtyCimento = Orc.qtyCimento-200
Orc.qtyCimento = Orc.qtyCimento-200
Write( Orc.qtyCimento)100
Write( Orc.qtyCimento)200

Proposta para a soluo do Problema


Para a resoluo deste problema vamos fazer uma Serializao Por conflito em consiste no
seguinte:
8

I.

Descrever as transaces na linguagem ReadandWrite


T1 = r1(Orc.qty.Cimento),w1(Orc.qty.Cimento);
T2 = r2(Orc.qty.Cimento),w2(Orc.qty.Cimento);

S = r1(Orc.qty.Cimento),r2(Orc.qty.Cimento),w1(Orc.qty.Cimento),w2(Orc.qty.Cimento);
Ss =
2. Transaco

T1 (Requisio): O encarregado 1 faz uma consulta sobre a base de dados para verificar a
quantidade de cimento existente no sistema de forma requisitar X quantidades de cimento.
T1 em RW

T1 em SQL

Read(Orc.qtyCimento)

SELECT Quantidade
FROM Orcamento
WHERE Cod_Orcamento = 1

Orc.qtyCimento = Orc.qtyCimento-X
Write( Orc.qtyCimento)

UPDATE Orcamento
SET Quantidade = 100
WHERE Cod_Orcamento = 1

T1 (Requisio): O encarregado2 faz uma consulta sobre a base de dados para verificar a
quantidade de cimento existente no sistema de forma requisitar X quantidades de cimento.
T1 em RW

T1 em SQL

Read(Orc.qtyCimento)

SELECT Quantidade
FROM Orcamento
WHERE Cod_Orcamento = 1

Orc.qtyCimento = Orc.qtyCimento-X
Write( Orc.qtyCimento)

UPDATE Orcamento
SET Quantidade = 50
WHERE Cod_Orcamento = 1

Nessa Transaco ocorre um processo simultneo, em que temos dois encarregados a


executarem a mesma operao sobre a base de dados, temos que os encarregados
fazem uma consulta de seleco para verificarem a quantidade de cimento e tem como
resultado 400, e faz uma actualizao na base de dados, ficando um remanescente de
200 sacos, o encarregado 2 tambm executa a mesma operao sobre a base de dados
etem como resultado 200 e faz uma actualizao ficando um remanescente de 150, e a
base de dados termina num estado consistente. Mas por algo motivo a operao T1 faz
um rollback provocando uma inconsistncia na base de dados
T1

Descri
odo
conflito

T2

Read(Orc.qtyCimento) 400
Orc.qtyCimento = Orc.qtyCimento - 200
Write( Orc.qtyCimento)200
Read(Orc.qtyCimento)200
Orc.qtyCimento = Orc.qtyCimento-50
Orc.qtyCimento = Orc.qtyCimento-200
Write( Orc.qtyCimento)150

10

Para este problema a soluo consiste em fazer um bloqueio em 2 fazes de forma a


evitar o rollback da Transaco T1 nesse caso a nossa Operao ficaria
T1

T2

Lock X (Orc.qty.Cimento);
Read(Orc.qtyCimento) 400
Orc.qtyCimento = Orc.qtyCimento - 200
Write( Orc.qtyCimento)200

UnLock X(Orc.qty.Cimento);
UnLock X(Orc.qty.Cimento);
Read(Orc.qtyCimento)200
Orc.qtyCimento = Orc.qtyCimento-50
Orc.qtyCimento = Orc.qtyCimento-200
Write( Orc.qtyCimento)150

Proposta da Soluo do Problema

11

3.Transaco

T1 (Requisio): O encarregado 1 faz uma consulta sobre a base de dados para verificar a
quantidade de cimento existente no sistema de forma requisitar X quantidades de cimento.
T1 em RW

T1 em SQL

Read(Orc.qtyCimento)

SELECT Quantidade
FROM Orcamento
WHERE Cod_Orcamento = 1

Orc.qtyCimento = Orc.qtyCimento-X
Write( Orc.qtyCimento)

UPDATE Orcamento
SET Quantidade = 100
WHERE Cod_Orcamento = 1

12

T1 (Requisio): O encarregado 1 faz uma consulta sobre a base de dados para verificar a
quantidade de cimento existente no sistema de forma requisitar X quantidades de cimento.
T1 em RW

T1 em SQL

Read(Orc.qtyCimento)

SELECT Quantidade
FROM Orcamento
WHERE Cod_Orcamento = 1

Orc.qtyCimento = Orc.qtyCimento-X
Write( Orc.qtyCimento)

UPDATE Orcamento
SET Quantidade = 100
WHERE Cod_Orcamento = 1

Descrio do conflito

13

Nessa Transaco ocorre um processo simultneo, em que temos dois encarregados a


executarem a mesma operao sobre a base de dados, temos que os encarregados
fazem uma consulta de seleco para verificarem a quantidade de cimento e tem como
resultado 400, e faz uma actualizao na base de dados, ficando um remanescente de
200 sacos, o encarregado 2 tambm executa a mesma operao sobre a base de dados
e tem como resultado 200 e faz uma actualizao ficando um remanescente de 150, e
a base de dados termina num estado consistente. Mas por algo motivo a operao T1
faz um rollback provocando uma inconsistncia na base de dados
T1

T2

Read(Orc.qtyCimento) 400
Orc.qtyCimento = Orc.qtyCimento - 200
Write( Orc.qtyCimento)200
Read(Orc.qtyCimento)200
Orc.qtyCimento = Orc.qtyCimento-50
Orc.qtyCimento = Orc.qtyCimento-200
Write( Orc.qtyCimento)150

Lista das Transaces Ocorrentes na Base de Dados

1.

Requisio de pagamento/ Material

2.

Autorizao das Requisies

3.

Entrada de requisies no escritrio

4.

Quantidade de requisies Autorizadas.

5.

Cadastro do Funcionrio

6.

Cadastro de Uma Obra

14

Tabela de Acesso Logico das Operaes

Operao
01

Frequncia
10/Dia

Conceito
Encarregado
Elabora
Requisio

E/R
E
R
E

R/W
W

Media de
Ocorrncia
10

15

02

03

04
05

06

20/Dia

Director Obra
Autoriza
Requisies

E
R
E

20

30/Dia

Recepcionista
Recebe
Requisio

E
R
E

30

Recepcionista
1/Dia
Guarda
Requisies Autorizadas
Director Obra
10/Semestre Cadastra
Funcionrio
2/Meses

Encarregado
Cadastra
Obra

E
R
E
E
R
E
E
R
E

1
R
10
W
2
W

MATRIZ CRUD

Anlise do Volume das Transaces

Funcionalidade/
Entidade

Encarregado

Director
Obra

Recepcionist Requisio Obra


a

Funcion
rio
16

01

CRUD

02

R
RU

03
04

R
R

05
06

RU

RU

CRUD

CRUD

17

Desnormalizaco
Tabela Normalizada

Se quisermos que o sistema nos retorne o valor total das requisies, seria
interessante criar um campo totalValorRequisitado na tabela Requisio
Material, de forma que toda a vez que quisermos obter o total das
requisies no tenhamos que percorrer todas as tabelas para chegar nesse
valor. Porque para obter o valor total temos que percorrer todas as tabelas.

Modificando a tabela normalizada temos a seguinte situao

Para Obtermos o valor total das requisies feitas num dia j no precisamos percorrer todas as 3
tabelas, bastando apenas fazer um select na tabela requisio Material, que ele ira nos retornar o
valor total das requisies feitas no dia.
Mas no entanto ser muito difcil manter o atributo derivado valorTotalRequisicao Actualizado.

18

Proposta de ndices

CREATE TABLE IF NOT EXISTS recepcionista` (


apelido VARCHAR(20) NOT NULL,
nome` VARCHAR(45) NOT NULL,
nrCell` INT(11) NOT NULL,
sexo` CHAR(1) NOT NULL,senha` INT(10) NOT NULL,
email` VARCHAR(45) NOT NULL,
PRIMARY KEY (`codRecepcionista`),
INDEX `nrCell_idx` (`nrCell` ASC),CONSTRAINT `nrCell`
FOREIGN

KEY

(`nrCell`),REFERENCES

`requisicoes`.`telfone`

(`nrCell`)ON DELETE CASCADE ON UPDATE CASCADE);

Create INDEX indicePorNome ON recepcionista


With STRUCTURE = BTREE,
Key(nome);

19

ResumosobreParties
Parties
Esta optimizao tem como objectivo reduzir os custos de acesso aos dados eliminando
informao transferida inutilmente da memria secundria para a memria central.

Tipos:

Horizont
ais

Vertica
Para o nosso is
projecto identificamos uma tabela, na qual fizemos uma partio Horizontal na qual
consiste em subdividir as tuplas em sub-tabelas de mesmo esquema. A tabela inicial
pode ser facilmente recuperada pela unio das suas sub-tabelas. Agrupar-se-o as
tuplas que tm grandes hipteses de serem acedidos em conjunto.
Tabela Requisicao Material
20

Tabela No Particionada
Nr. Requi.

Cod.Obra Descrio
201301

Sacos de Cimento

Quantidad
e
200

Pr.Total

Nr.Cotao

01
02

201301

Varao 10 mm

300

20.000

2222

03

201404

Sacos de Cimento

200

40.000

3333

04

201505

Sacos de Cimento

100

30.000

44444

60.000

1111

Tabela Particionada
Nr. Requi.
01
02

Nr. Requi.

Cod.Obra Descrio
201301

Sacos de Cimento

Quantidad
e
200

201301

Varao 10 mm

300

Cod.Obra Descrio

03

201404

Sacos de Cimento

Quantidad
e
200

04

201505

Sacos de Cimento

100

Pr.Total

Nr.Cotao

60.000

1111

20.000

2222

Pr.Total

Nr.Cotao

40.000

3333

30.000

44444

21

Optimizao de Consultas

22

23