Banco de Dados - Alessandro Carneiro

Propaganda
INSTITUTO FEDERAL NORTE DE MINAS GERAIS
Curso Técnico em Informática - Integrado
Disciplina: Banco de Dados
Professor: Alessandro Carneiro Ribeiro
E-mail: [email protected]
Projeto Físico de Banco de Dados
Linguagem SQL – DDL
Create Table
Alter Table
Drop Table
Modelo Físico de Banco de Dados
 Segunda etapa do projeto de Banco de Dados para um SI, cujo objetivo é obter
uma implementação do modelo conceitual do BD. Fase que depende do SGBD.
 Supondo que o SGBD a ser utilizado para implementar o BD é um SGBD
Relacional o modelo físico é composto pelas seguintes atividades:
1. Construção do DER Físico Relacional a partir do DER Conceitual (DER
Lógico).
2. Normalização das tabelas: 1 FN, 2 FN e 3 FN.
3. Construção do Dicionário de Dados.
4. Geração do código SQL para criação do BD.
5. Otimização do BD: Índices, Views, Triggers e Storeds Procedures.
6. Implementação dos esquemas de segurança: Grants.
A LINGUAGEM SQL – STRUCTURED QUERY LANGUAGE:




SQL é uma linguagem padrão de alto nível (não procedural) para SGBDs.
É padronizada pelo ANSI (American National Standards Institute), uma instituição nãogovernamental sem fins lucrativos, patrocinada por organizações de comércio, sociedades
profissionais e pela indústria e membro da Organização de Padrões Internacionais (ISO).
SQL pode ser utilizada para todas as atividades relativas a um BD (DDL e DML) podendo ser
utilizada pelo Analista, pelo DBA, por programadores, sistemas(L4G) e usuários finais.
Para efeitos didáticos e práticos de SQL vamos trabalhar com o seguinte estudo de caso:
Sistema de controle de pessoal de uma empresa
Este sistema tem como objetivo automatizar a área de recursos humanos de um determinada empresa. Os empregados
da empresa são admitidos e ficam lotados em departamentos da empresa. Estes departamentos controlam determinados
projetos. É importante saber quais foram todos os departamentos que um empregado já trabalhou. Existem dois tipos
especiais de empregados: os empregados que são administradores e os empregados que são engenheiros. Os
empregados que são administradores podem gerenciar um departamento e quando isso ocorre eles recebem um
gratificação. Não é importante saber quais foram os gerentes de um dado departamento mas somente quem é o gerente
atual. Os empregados que são engenheiros podem trabalhar em projetos previamente criados e é importante saber o dia,
a hora e a quantidade de horas, que um empregado trabalhou em um projeto. Por questões de controle interno o sistema
deve controlar também qual a máquina um dado empregado que tenha trabalhado em um dado projeto possa ter
utilizado naquele dia. Neste caso a quantidade de horas gastas pelo empregado utilizando a máquina deve ser guardado
no banco de dados. Todo projeto possui um único empregado coordenador e este coordenador só pode ser um
empregado que é do tipo administrador. Se o empregado coordena algum projeto ele também recebe um gratificação
extra. Um empregado pode ser supervisor de vários outros empregados e quem é o supervisor é um fato importante a ser
gerenciado no sistema. Um empregado sempre possui um único cargo na empresa, o que define o seu salário base. De
acordo com sua formação escolar o empregado pode receber uma gratificação extra. A empresa possui amplo plano de
benefícios distribuídos aos funcionários e isto deve ser armazenado no banco de dados. Informações dos dependentes
dos funcionários e o tipo de relação entre o funcionário e seu dependente (exemplo: esposa, filho, etc) deve ser
controlado no sistema. O contra cheque dos empregados da empresa é gerada no final de cada mês com base no salário
base e nas participações do empregado nos projetos, gerência ou coordenação de projetos. Mensalmente devem ser
emitidos relatórios estratégicos para o gerente da empresa como o total da folha de pagamento por departamento, os
empregos demitidos e admitidos no mês, os projetos em andamento com os respectivos coordenadores, a quantidade de
horas trabalhadas por cada empregado em cada projeto, a relação dos benefícios por empregado, a relação de
dependentes por empregado, a relação dos gerentes por departamento, a relação dos supervisores por empregado,
relação das máquinas utilizadas por um dado empregado classificados pelo projeto e pela data, etc.
DER Conceitual (Feito no System Architect 2001)
Entidades e Atributos
Empresa(@CodEmpresa, NomeFantasia, CGC, Endereco, Telefone)
FormacaoEscolar (@CodFormacao, Descricao, GratificacaoFormacao)
Cargo(@CodCargo, Descricao, SalarioBase, GratificacaoCargo)
Beneficio(@CodBeneficio, Descricao, Valor)
Departamento(@CodDepto, Descricao, Localizacao)
Funcionario(@CodFunc, Nome, Endereco, Telefone, DataNascimento,
DataAdmissao, DataDemissao)
Engenheiro(@CodFunc, CREA)
Administrador(@CodFunc, CRA)
Relacao(@TipoRelacao, DescricaoRelacao)
Dependentes(@CodFunc, @NrDependente, Nome, DataNascimento)
Projeto(@CodProjeto, Descricao, DataInicioProjeto, DataFimProjeto)
Maquina(@CodMaquina, Descricao, Procedimentos)
ContraCheque(@CodFunc, @DataEmissao, SalarioBase, Gratificacoes,
SalarioBruto, SalarioLiquido)
Atributos dos Relacionamentos:
PossuiCargo(DataInicioCargo)
Lotacao(@DataInicio, DataFim)
CoordenaProjeto(DataInicioCoordenacao, GratificacaoCoordenador)
GerenciaDepartamento(DataInicioGerencia, GratificacaoGerente)
BeneficioFuncionario(DataInicioBeneficio, SituacaoBeneficio)
EngenheiroMaquina(@DataUsoMaquina, HorasUsoMaquina)
Supervisiona(DataInicioSupervisao, GratificacaoSupervisao)
EngenheiroProjeto(@DataTrabalho, HorasProjeto)
DER Físico Relacional (Gerado pelo System Architect)
Cargo
CodCargo
integer [PK1]
Descricao
char(30)
SalarioBase
money
GratificacaoCargo
money
PossuiCargo
BeneficioFuncionario
CodFunc
integer [PK1] [FK]
CodBeneficio
integer [PK2] [FK]
DataInicioBeneficio
smalldatetime
SituacaoBeneficiocharacter(1)
Relacao
RelacaoDependenteTipoRelacao
char(1) [PK1]
Descricao character(20)
Dependentes
CodFunc
integer [PK1] [FK]
NrDependenteinteger [PK2]
Nome
character(40)
smalldatetime
PossuiDependentes DataNascimento
TipoRelacao char(1) [FK]
VinculoEmpresa
PossuiFormacao
FormacaoEscolar
CodFormacao
integer [PK1]
Descricao
character(30)
GratificacaoFormacao
money
Empresa
CodEmpresainteger [PK1]
NomeFantasia
character(30)
CGC
character(20)
Endereco
character(40)
Telefone
character(15)
Funcionario
CodFunc
integer [PK1]
Nome
character(40)
Endereco
character(40)
Telefone
character(15)
DataNascimento
smalldatetime
DataAdmissao
smalldatetime
DataDemissao
smalldatetime
SalarioBruto
money
SalarioLiquido
money
CodCargo
integer [FK]
DataInicioCargo
smalldatetime
CodFormacao
integer [FK]
CodEmpresa
integer [FK]
CodFuncSupervisorinteger
DataInicioSupervisao
smalldatetime
GratificacaoSupervisao
money
Lotacao
CodFunc integer [PK1] [FK]
CodDeptointeger [PK2] [FK]
DataIniciosmalldatetime [PK3]
DataFim smalldatetime
Departamento
CodDepto
integer [PK1]
Descricao
character(30)
Localizacao
character(30)
CodFuncGerenteinteger [FK]
DataInicioGerentesmalldatetime
GratificacaoGerente
money
Supervisiona
GerenciaDepartamento
ControlaProjeto
Beneficio
CodBeneficio
integer [PK1]
Descricao character(30)
Valor
money
Administrador
Engenheiro
CodFuncinteger [PK1] [FK] CodFuncinteger [PK1] [FK]
CRA
char(10)
CREA char(15)
Maquina
CodMaquina integer [PK1]
Descricao
character(30)
Procedimentos
character(50)
UsaMaquina
EngenheiroProjeto
CodFunc
integer [PK2] [FK]
CodProjeto
integer [PK1] [FK]
DataTrabalho datetime [PK3]
HorasProjeto
decimal
CodMaquina
integer [FK]
HorasUsoMaquina
decimal
CoordenaProjeto
Projeto
CodProjeto
integer [PK1]
Descricao
character(40)
DataInicioProjeto
smalldatetime
DataFimProjeto
smalldatetime
CodFuncCoordenadorinteger [FK]
DataInicioCoordenacao
smalldatetime
GratificacaoCoordenacao
money
CodDeptoControla integer [FK]
Observação:
 O modelo físico do CASE System Architect suporta relacionamentos 1:1.
3.1 DDL - SQL
3.1.1 Criando Banco de Dados
 Somente o DBA pode executar estes comandos:
CREATE DATABASE pessoal
DROP DATABASE pessoal
3.1.2 Criando Tabelas
 Exemplo 1:
CREATE TABLE Cargo(
CodCargo
Descricao
SalarioBase
GratificacaoCargo
integer NOT NULL,
char(30) NOT NULL,
float NOT NULL,
float)
 Exemplo 2:
CREATE TABLE FormacaoEscolar(
CodFormacao
integer Not Null PRIMARY KEY,
Descricao
character(30) NOT NULL,
GratificacaoFormacao float)
 Exemplo 3:
CREATE TABLE ContraCheque(
CodFunc
integer NOT NULL,
DataEmissao
date NOT NULL,
SalarioBase
float,
Gratificacoes
float,
SalarioBruto
float,
SalarioLiquido
float,
PRIMARY KEY (CodFunc, DataEmissao) )
 Exemplo 4:
CREATE TABLE EngenheiroProjeto(
CodFunc
integer NOT NULL,
CodProjeto
integer NOT NULL,
DataTrabalho
date NOT NULL,
HorasProjeto
float)
ALTER TABLE EngenheiroProjeto ADD
PRIMARY KEY (CodFunc,CodProjeto,DataTrabalho)
 Exemplo 5:
CREATE TABLE Projeto(
CodProjeto
Descricao
DataInicioProjeto
DataFimProjeto
DataInicioCoordenacao
GratificacaoCoordenacao
CodDeptoControla
CodFuncCoordenador
integer PRIMARY KEY,
char(40) NOT NULL,
date,
date,
date,
float,
integer,
integer)
 Exemplo 6:
CREATE TABLE Dependentes(
CodFunc
NrDependente
Nome
DataNascimento
TipoRelacao
integer NOT NULL,
integer NOT NULL,
character(30) NOT NULL,
smalldatetime NOT NULL,
char(1) NOT NULL)
ALTER TABLE Dependentes ADD
PRIMARY KEY (CodFunc, NrDependente)
ALTER TABLE Dependentes ADD
FOREIGN KEY (CodFunc) REFERENCES Funcionario (CodFunc)
ALTER TABLE Dependentes ADD
FOREIGN KEY (TipoRelacao) REFERENCES Relacao (TipoRelacao)
 Exemplo 7:
CREATE TABLE Departamento(
CodDepto
integer NOT NULL,
Descricao
character(30) NOT NULL,
Localizacao
character(30) NULL,
DataInicioGerente
smalldatetime NULL,
GratificacaoGerente
float NULL,
CodFuncGerente
integer NULL)
ALTER TABLE Departamento ADD CONSTRAINT Departamento_PK
PRIMARY KEY (CodDepto)
ALTER TABLE Departamento ADD CONSTRAINT
GerenciaDepartamento
FOREIGN KEY (CodFuncGerente) REFERENCES Administrador (CodFunc)
 Exemplo 8:
CREATE TABLE Funcionario(
CodFunc
integer NOT NULL,
Nome
character(30) NOT NULL,
Endereco
character(30) NULL,
Telefone
character(15) NULL,
DataNascimento
smalldatetime NULL
CHECK (DataNascimento > "01/01/1900") AND
(DataNascimento <= getdate() ),
DataAdmissao
smalldatetime NOT NULL
DEFAULT (getdate()) ,
DataDemissao
smalldatetime NULL,
CodCargo
integer NULL,
DataInicioCargo
smalldatetime NULL,
CodFormacao
integer NULL,
CodEmpresa
integer NOT NULL
DEFAULT (1),
CodFuncSupervisor
integer NULL,
DataInicioSupervisao smalldatetime NULL,
GratificacaoSupervisao float NULL
CHECK (GratificacaoSupervisao >= 0),
PRIMARY KEY (CodFunc),
FOREIGN KEY (CodCargo) REFERENCES Cargo(CodCargo),
FOREIGN KEY (CodFormacao) REFERENCES
FormacaoEscolar(CodFormacao),
FOREIGN KEY (CodEmpresa) REFERENCES Empresa(CodEmpresa),
FOREIGN KEY (CodFuncSupervisor) REFERENCES
Funcionario(CodFunc) )
 Exemplo 9: Regras no MS SQL Server:
CREATE TABLE Aluno(
RA
CHAR(15) PRIMARY KEY,
Nome
CHAR(30) NOT NULL,
Endereco
VARCHAR(100) NOT NULL,
Estado
CHAR(2) NOT NULL DEFAULT("MG"),
DataNascimento SMALLDATETIME NULL)
CREATE RULE regra_estado
AS @est IN ("MG", "BA", "SP", "PR", "RJ", "RS", "AM", "AC", "RN")
SP_BINDRULE "regra_estado", "Aluno.Estado"
CREATE RULE regra_data AS @data > "01/01/1900" AND @data < getdate()
SP_BINDRULE "regra_data", "Aluno.DataNascimento"
SP_BINDRULE "regra_data", "Funcionario.DataInicioCargo"
SP_UNBINDRULE "regra_estado", "Aluno.Estado"
 Exemplo 10:
ALTER TABLE Dependentes ADD telefone char(15) NULL.
ALTER TABLE Dependentes ALTER COLUMN telefone char(20).
ALTER TABLE Dependentes DROP telefone.
ALTER TABLE Departamento DROP CONSTRAINT GerenciaDepartamento
 Exemplo 11: Implementado relacionamentos 1:1
CREATE TABLE Curso(
Cod_Curso integer PRIMARY KEY,
Descricao char(30),
DataCriacao smalldatetime,
Cod_Coordenador integer UNIQUE
FOREIGN KEY REFERENCES Professor(CodCurso))
 Exemplo 12:
DROP TABLE Funcionario
DROP TABLE Cargo
Observação Importante: Só é possível remover uma tabela se ela não for
referenciada por nenhuma outra tabela (ou seja um de seus atributos não for FK em
outra tabela).
 Exemplo 13: Especificando as opções de implementação dos relacionamentos
(Microsoft SQL Server só aceita na forma de trigger):
CREATE TABLE Departamento(
CodDepto
integer PRIMARY KEY,
Descricao
character(30) NOT NULL,
Localizacao
character(30) NULL,
CodFuncGerente
integer NULL,
FOREIGN KEY (CodFuncGerente) REFERENCES Administrador (CodFunc)
ON DELETE RESTRICT ON UPDATE CASCADE)
CREATE TABLE Projeto(
CodProjeto
integer PRIMARY KEY,
Descricao
character(40) NOT NULL,
DataInicioProjeto
smalldatetime NULL,
DataFimProjeto
smalldatetime NULL,
CodDeptoControla
integer NULL
FOREIGN KEY REFERENCES Departamento(CodDepto)
ON DELETE SET NULL ON UPDATE CASCADE,
CodFuncCoordenador
integer NULL
FOREIGN KEY REFERENCES Administrador(CodFunc)
ON DELETE RESTRICT ON UPDATE CASCADE)
Exercícios: Gere manualmente o script de criação dos seguintes BD:
a) Sistema de Controle de Histórico Escolar:
b) Sistema de Controle uma Loja para Eletrodomésticos:
c) Sistema de Controle de Supermercado:
Download