Modelo Entidade Relação

migix2007

Membro
Boas..pessoal estou a desenvolver um sistema de gestão de aluguer automóvel, gostaria de saber a vossa opinião quanto ao modelo entidade relação, a ver se tem muitos erros lool,porque é primordial para o seguinte passo, queries e parte de programação
Aqui vai:
moz-screenshot.jpg

moz-screenshot-1.jpg
BD_online.JPG
 
Boas, parece-me bem, a marca poderia estar relacionada ao modelo e na tabela de carros dizias qual era o modelo apenas.
 
Boas... já melhorei um pouco o modelo,,
http://www.4shared.com/file/118388549/54f05461/BD_online.html

Agora estou a desenvolver algumas queries.. poderiam-me dar algumas sugestões quanto à funcionalidade destas:

/* 1.Quantos clientes residem em lisboa*/
select count(*) as 'Residentes lisboetas'
from Cliente
where Cliente.localidade='lisboa'


/* 2.Listar as respectivas categorias e marcas dos carros*/
select tipo,marca.marca,modelo.modelo
from carro,modelo,marca,categoria
where carro.matric=modelo.matric
and modelo.marc=marca.marc
and modelo.categ=categoria.categ


/* 3.Listar a cor, marca,modelo,e cliente de todos os carros*/
select cor,marca,modelo,nome
from Cliente,Aluguer,Carro,Modelo,Marca
where Aluguer.client=Cliente.client
and Aluguer.matric=Carro.matric
and Carro.matric=Modelo.matric
and Modelo.marc=Marca.marc



/* 5.Kilometros percorridos por cliente e respectiva matricula*/
select Cliente.nome,Carro.matric,Aluguer.kmfinal,Aluguer.Kminicial,'Kilometros Percorridos'=(kmfinal-kminicial)
from Aluguer,Cliente
where Aluguer.client=Cliente.client

where Aluguer.matric=Carro.matric


/* 6.Quantos clientes alugaram o carro em barcelos*/
select count (distinct Aluguer.fil)
from Aluguer,Filial
where Aluguer.fil=Filial.fil
and Filial.local='braga'

/* 7.Que clientes merecem promoção(por cada 1000km acumulados, merece 10 km de promoçao)*/
select Cliente.nome,kmbonus=Max(kmfinal-kminicial)
from Aluguer,Cliente
where Aluguer.client=Cliente.client
having Max(kmfinal-kminicial)>=1000

/* 8.Listar a cor, marca,modelo,e cliente de todos os automóveis. Ordenar a lista por ordem alfabética de marca dentro da mesma marca por ordem alfabética da modelo. */
select cor,marca,modelo,nome
from Cliente,Aluguer,Carro,Modelo,Marca
where Aluguer.client=Cliente.client
and Aluguer.matric=Carro.matric
and Carro.matric=Modelo.matric
and Modelo.marc=Marca.marc
order by marca,modelo

/* 9.Inserir novo cliente na base de dados*/
select * from Cliente
Insert Cliente values('10','Joao Saraiva Peixoto','09484726','rua da liberdade','4700-232','braga','253764539')

/* 10.Preço a pagar por cliente e respectivo aluguer*/
select Aluguer.client,cliente.nome,sum( duracao*precodia) as 'Preço Aluguer'
from Aluguer,Cliente,carro,modelo
where Aluguer.Client=Cliente.client
and Aluguer.matric=Carro.matric
and carro.matric=modelo.matric
group by cliente.nome,Aluguer.client

/* 11.Qual foi o cliente que alugou maior número de dias*/
select nome,'Dias alugados'=sum(duracao)
from Cliente,Aluguer
where Aluguer.client=Cliente.client
group by Cliente.nome
having sum(duracao)>= all (select sum(duracao)
from Cliente,Aluguer
where Aluguer.client=Cliente.client
group by Cliente.nome)

/* 12.Sinistros ocorridos por carro e respectivo cliente*/
select nome,modelo,marca,count(Sinistro.sini)as 'Sinistros'
from Aluguer,Carro,Seguro,Sinistro,Cliente,modelo,marca
Where Cliente.client=Aluguer.client
and Aluguer.matric=Carro.matric
and Carro.matric=Seguro.matric
and carro.matric=modelo.matric
and modelo.marc=marca.marc
and Seguro.seg=Sinistro.seg
group by nome,sini,modelo,marca

/* 13.Caução por carro alugado*/
select marca,modelo,sum(caucao)as 'Valor €'
from categoria,modelo,marca,carro
Where categoria.categ=modelo.categ
and modelo.matric=carro.matric
and modelo.marc=marca.marc
group by modelo,marca

/* 14.Preço por Aluguer*/
select alug,nome,sum(duracao*precodia) as 'Preço por Aluguer €'
from Aluguer,carro,modelo,cliente,Factura
where CLiente.client=Aluguer.client
and Aluguer.matric=carro.matric
and carro.matric=modelo.matric
group by Cliente.Nome,Aluguer.alug

/* 15.Criar uma vista pra alimentar o respectivo cliente,matricula,marca e modelo*/
create view vista as
select nome,carro.matric,marca,modelo
from cliente,aluguer,carro,modelo,marca
where cliente.nome=aluguer.client
and aluguer.matric=carro.matric
and carro.matric=modelo.modelo
and modelo.marc=marca.marca

/* 16. Seleccionar clientes que contenham a letra j*/
select*
from Cliente
where nome like'j%'

/* 17. Seleccionar clientes que pagaram maior valor por aluguer*/
select Aluguer.client,cliente.nome,sum( duracao*precodia) as 'Preço Aluguer'
from Aluguer,Cliente,carro,modelo
where Aluguer.Client=Cliente.client
and Aluguer.matric=Carro.matric
and carro.matric=modelo.matric
group by cliente.nome,Aluguer.client
having sum(duracao*precodia)is max


ps: gostaria de fazer questões, com o uso de triggers,procedures, poderiam.me dar alguma ajuda...obrigado
 
Back
Topo