Principal Engenharia Reversa Banco de dados de linhas de ônibus em Java, JDBC e HSQLD Prática com tecnologias de BD Resumo prova 1 Modelagem ER 1 - Revisado Modelagem ER 2 Modelagem ER 3 Heuser - Cap 5 Heuser - Ex 3.3 Heuser - Ex 3.7 Heuser - Ex 3.8 Heuser - Ex 3.10 Heuser - Ex 6.12 Heuser - Ex 6.15 Consultas SQL Sub-consultas SQL Silberschatz - Cap04 Junções SQL Triggers

Modelagem Entidade Relacionamento

Entidade: conjunto sobre o qual se deseja manter informações no banco de dados.
Relacionamento: associação entre as entidades.
Atributos: "campos" de cada entidade.
Exemplo:
Entidades: Programador, projeto.
Relacionamento: Programador trabalha em projeto
Atributos: Programador: Nome, endereço, telefone, e-mail...; projeto: título, data de início, data de duração, ...

Cardinalidade

Número de ocorrências de cada entidade em um relacionamento.
Máxima: número máximo de ocorrências (1 => apenas uma, n => várias)
Mínima: número mínimo de ocorrências (0 => nenhuma (opcional), 1 => pelo menos uma (obrigatória))
Exemplo:
Máxima:
Programador trabalha em 1 projeto;
Projeto possui N (vários) programadores.
Mínima:
Programador trabalha em 1 projeto (obrigatório);
Projeto possui 0 projetos (opcional - ao criar um projeto, ele não terá nenhum programador).

Atributos

Obrigatórios;
Opcionais;
Monovalorados: apenas um valor;
Multivalorados: mais de um valor;
Atômico: indivisível;
Composto: pode ser separado (nome, sobrenome);
Identificadores: Atributos únicos em cada entidade, identificam cada ocorrência.
  Simples: Pessoa(CPF, Nome, ...)
  Composto: Jornal(Ano, Edição, ...)

Relacionamento identificador

Quando uma entidade não faz sentido se separada de outra. Neste caso, temos uma "entidade fraca". Exemplo: Empresa possui Filial => Filial é uma entidade fraca de empresa, possuindo um relacionamento identificador. Assim, a chave primária de Filial provavelmente será composta pela chave primária de Empresa (a qual também será uma chave estrangeira) e um número que identifica da filial dessa empresa:
Empresa(idEmpresa, Nome, ...)
Filial(idEmpresa, idFilial, Endereço, ...)

Generalização/Especialização

Quando uma entidade é especializada de outra, ou seja, uma entidade possui os mesmos atributos/relacionamentos de outra, além de seus próprios atributos.
Exemplo:
Pessoa (idPessoa, Nome, Telefone, email, idDepartamento, ...)
Motorista(idPessoa, CNH, ...)
Engenheiro(idPessoa, CREA, ...)
Uma especialização pode ser total, quando uma ocorrência pode ser apenas uma entidade especializada (no caso anterior, poderíamos ter apenas engenheiros ou motoristas, mas nunca uma ocorrência de apenas "pessoa").
Ou ainda parcial, quando podemos ter ocorrências da entidade geral (no caso anterior, poderíamos ter uma ocorrência de "pessoa" não relacionada com engenheiro ou motorista).

Modelagem Lógica Relacional

Cada entidade torna-se uma tabela.

Chaves

Atributos "especiais" de uma identidade.
Primária: atributo único, identificador. Estrangeira: atributo que é a chave primária em outra tabela. Serve para relacionar uma tabela com outra.
Exemplo:
Pessoa(idPessoa, Nome, idDepto)
idDepto referencia Depto.idDepto
Depto(idDepto, Nome, ...)

Transformação ER -> Relacional

1) Entidade torna-se tabela;
2) Relacionamentos
  a)Atributos adicionais (normalmente 1:N)
  b)Tabela adicional (normalmente N:N)
  c)Fusão de tabelas (normalmente 1:1)
Atributos Multivalorados: tornam-se tabelas ou é especificado um número máximo de atributo (por exemplo, telefone1 e telefone2, ou então cria-se uma tabela "telefone").

Normalização

Eliminar redundâncias (repetições, armazenamento de dados "duplicados").
Engenharia refersa (a partir de um banco de dados pronto, tabelas criadas, ou então de um tela de um programa, montar o diagrama entidade relacionamento)

1FN

Eliminar tabelas aninhadas, ou seja, quando campos (colunas) em uma tabela são formados por várias outras colunas

2FN

Estar na 1FN e elimintar dependência funcional parcial, ou seja, quando um atributo em uma tabela é dependente de apenas uma parte da chave primária dela

3FN

Estar na 2FN e eliminar dependência funcional transitiva, ou seja, quando um atributo em uma tabela é dependente de outro atributo, que não faz parte da chave primária.
Dependências funcionais ocorrem quando, para todas as ocorrências de certo valor de atributo em uma tabela, outro atributo tem sempre o mesmo valor.