segunda-feira, 28 de novembro de 2011

Comando e Conceitos do SQL

1) O que significa a sigla SQL? Qual a finalidade dessa linguagem? Como ela se divide? Quais são os comandos principais de cada divisão? Explique-os resumidamente.

A sigla SQL significa Structured Query Language, ou Linguagem de Consulta Estruturada. SQL apresenta uma série de comandos que permitem à definição dos dados (chamada DDL – Data Definition Language), que é composta, entre outros, pelos comandos CREATE, que é destinado a criação do Banco de Dados, das Tabelas que o compõe, além das relações existentes entre as tabelas. Ela é dividida em:

DML - Linguagem de Manipulação de Dados - Primeiro há os elementos da DML (Data Manipulation Language). A DML é um subconjunto da linguagem usada para inserir, atualizar e apagar dados.

INSERT é usada para inserir um registro (formalmente uma tupla) a uma tabela existente.
UPDATE para mudar os valores de dados em uma ou mais linhas da tabela existente.
DELETE permite remover linhas existentes de uma tabela.

DDL - Linguagem de Definição de Dados - O segundo grupo é a DDL (Data Definition Language - Linguagem de Definição de Dados). Uma DDL permite ao utilizador definir tabelas novas e elementos associados. A maioria dos bancos de dados de SQL comerciais tem extensões proprietárias no DDL.

CREATE cria um objeto (uma Tabela, por exemplo) dentro da base de dados.
DROP apaga um objeto do banco de dados.

DCL - Linguagem de Controle de Dados - O terceiro grupo é o DCL (Data Control Language - Linguagem de Controle de Dados). DCL controla os aspectos de autorização de dados e licenças de usuários para controlar quem tem acesso para ver ou manipular dados dentro do banco de dados.

Duas palavras-chaves da DCL:

GRANT - autoriza ao usuário executar ou setar operações.
REVOKE - remove ou restringe a capacidade de um usuário de executar operações.
Outros comandos DCL:

ALTER PASSWORD
CREATE SYNONYM
DTL - Linguagem de Transação de Dados

BEGIN WORK (ou START TRANSACTION, dependendo do dialeto SQL) pode ser usado para marcar o começo de uma transação de banco de dados que pode ser completada ou não.
COMMIT envia todos os dados das mudanças permanentemente.
ROLLBACK faz com que as mudanças nos dados existentes desde que o último COMMIT ou ROLLBACK sejam descartadas.

DQL - Linguagem de Consulta de Dados - Embora tenha apenas um comando, a DQL é a parte da SQL mais utilizada. O comando SELECT permite ao usuário especificar uma consulta ("query") como uma descrição do resultado desejado. Esse comando é composto de várias cláusulas e opções, possibilitando elaborar consultas das mais simples às mais elaboradas.

2) Quais são os tipos de dados que a linguagem SQL padrão (ANSI) suporta? Explique cada um resumidamente.

TINYINT: Valores numéricos inteiros variando de 0 até 256

SMALLINT: Valores numéricos inteiros variando de –32.768 até 32.767

INT: Valores numéricos inteiros variando de -2.147.483.648 até 2.147.483.647

BIGINT: Valores numéricos inteiros variando de –92.23.372.036.854.775.808 até 9.223.372.036.854.775.807

BIT: Somente pode assumir os valores 0 ou 1. Utilizado para armazenar valores lógicos.

DECIMAL(I,D) e NUMERIC(I,D): Armazenam valores numéricos inteiros com casas decimais utilizando precisão. I deve ser substituído pela quantidade de dígitos total do número e D deve ser substituído pela quantidade de dígitos da parte decimal (após a vírgula). DECIMAL e NUMERIC possuem a mesma funcionalidade, porém DECIMAL faz parte do padrão ANSI e NUMERIC é mantido por compatibilidade.

SMALLMONEY: Valores numéricos decimais variando de -214.748,3648 até 214.748,3647

MONEY: Valores numéricos decimais variando de -922.337.203.685.477,5808 até 922.337.203.685.477,5807

REAL: Valores numéricos aproximados com precisão de ponto flutuante, indo de -3.40E + 38 até 3.40E + 38

FLOAT: Valores numéricos aproximados com precisão de ponto flutuante, indo de -1.79E + 308 até 1.79E + 308

SMALLDATETIME: Armazena hora e data variando de 1 de janeiro de 1900 até 6 de junho de 2079. A precisão de hora é armazenada até os segundos.

DATETIME: Armazena hora e data variando de 1 de janeiro de 1753 até 31 de Dezembro de 9999. A precisão de hora é armazenada até os centésimos de segundos.

CHAR(N): Armazena N caracteres fixos (até 8.000) no formato não Unicode. Se a quantidade de caracteres armazenada no campo for menor que o tamanho total especificado em N, o resto do campo é preenchido com espaços em branco.

VARCHAR(N): Armazena N caracteres (até 8.000) no formato não Unicode. Se a quantidade de caracteres armazenada no campo for menor que o tamanho total especificado em N, o resto do campo não é preenchido.

TEXT: Armazena caracteres (até 2.147.483.647) no formato não Unicode. Se a quantidade de caracteres armazenada no campo for menor que 2.147.483.647, o resto do campo não é preenchido. Procure não utilizar este tipo de dado diretamente, pois existem funções específicas para trabalhar com este tipo de dado.

NCHAR(N): Armazenam N caracteres fixos (até 4.000) no formato Unicode. Se a quantidade de caracteres armazenada no campo for menor que o tamanho total especificado em N, o resto do campo é preenchido com espaços em branco.

NVARCHAR(N): Armazenam N caracteres (até 4.000) no formato Unicode. Se a quantidade de caracteres armazenada no campo for menor que o tamanho total especificado em N, o resto do campo não é preenchido.

NTEXT: Armazena caracteres (até 1.073.741.823) no formato Unicode. Se a quantidade de caracteres armazenada no campo for menor que 1.073.741.823, o resto do campo não é preenchido. Procure não utilizar este tipo de dado diretamente, pois existem funções específicas para trabalhar com este tipo de dado.

3) Explique o comando SELECT. Sua sintaxe, características básicas, Cláusula Where, operadores, conectores, subconsultas, funções de agregação, cláusula order by, group by, having e compute by.

SELECT é usada para selecionar um subconjunto de tuplas de uma relação as quais devem satisfazer uma condição de seleção.

SELECT {A1, A2,..., AN | * } FROM R1, R2, ...,RN WHERE P

EQUIVALE A

ΠA1, A2,..., AN (ΣP (R1 X R2 X...X RN))

ONDE CADA AI REPRESENTA UM ATRIBUTO E CADA RI É UMA RELAÇÃO.


Caso a cláusula where seja omitida, o predicado P é verdadeiro. A lista A1, A2,..., An de atributos pode ser substituída por um asterisco (*) para selecionar todos os atributos de todas as relações presentes na cláusula from.

4) O que é uma visão (view) em SQL? Explique suas propriedades, utilidades e os comandos para a sua manipulação.

Uma visão(view) é qualquer relação que não faz parte do modelo lógico do banco de dados, mas é visível ao usuário. Sua propriedade da visão é composta com linhas e colunas como se fosse uma tabela real, a utilidade esta ligada ao aumento de segurança obtendo assim uma visão limitada e controlada dos dados que podem ser obtidos e a performance que utilizada consulta otimizada.

5) Os que são procedimentos armazenados (stored procedure)? Para que servem, o que eles permite fazer e quais comandos podemos utilizar no seu corpo e para criá-los?

São procedimentos executados no servidor, ele serve como dispensamento de banco de dados eles permitem encapsular tarefas repetitivas aceita parâmetros de entrada e retorno um valor de status o que acaba reduzindo o trafego na rede e melhorando a performance.

Comandos utilizados:

Create procedure busca
@nomedebusca varchar(50)
as
select nome1,nome2
from nome_da tabela
where nome = @nomebusca

6) Os que são gatilhos (TRIGGERS)? Para que servem, quais as vantagens na sua utilização, como funcionam e como criá-los?

Os Gatilhos ou TRIGGERS são maneiras para executar um programa quando o evento associado ocorrer, ela mantém a consistência dos dados ou então propaga as alterações de dados de uma tabela para outras, sua vantagem é que quando ocorrer alguma alteração na tabela ele é disparado e deixa gravadas todas as informações do usuário que fez a alteração, eles são criados e funcionam da seguinte forma:

CREATE TRIGGER nome_do_gatilho ON dono.nome_da_tabela
FOR INSERT (ou UPDATE OU DELETE)
As
Código da execução

domingo, 27 de novembro de 2011

4) Traduza ou Realize as consulta dos exercícios feitos em Álgebra Relacional para os comandos SQL.

 Comandos e Conceitos do SQL - Respostas


ð    Seleção

1)  Mostre o conteúdo da relação departamento.
    R: Select * From Departamento.

2) Mostre os empregados que trabalham no departamento 4.
    R: Select * From Empregado where Ndep = 4.

3) Mostre a(s) localização(ões) do departamento de pesquisa (5).
    R: Select * From Departamento where Pesquisa = 5.

4) Mostre o(s) projetos(s) do departamento 4.
    R: Select * From Projeto where Departamento = 4.

5) Mostre as informações de relação trabalha_em cujo número do projeto igual a 3.
    R: Select * From Trabalha_em where Pnro = 3.

ð    Projeção

1) Mostre o número e o nome dos dependentes.
    R: Select NSSEMP, Nome dependente From Dependente.

2) Mostre o nome e a localização dos projetos.
    R: Select Pnome, Plocalização From Projeto.

3) Mostre o nome do departamento e o código do gerente dos departamentos.
    R: Select Dnome, Sunger From Departamento.

4) Mostre o nome e a data de nascimento dos empregados.
    R: Select Pnome, DataNasc From Empregado.

5) Mostre o nome e o salário dos empregados.
    R: Select Pnome, Salario From Empregado.


ð    Seleção+Projeção

1) Mostre o código, nome e o salário dos empregados que ganham mais de 2500.
    R: Select NSS, Pnome From Empregado where Salario > 2500.

2) Mostre o nome e a localização dos projetos do departamento 5.
    R: Select Pnome, Plocalização From Projeto where Dnum = 5.

3) Mostre o número do empregado e o número do projeto cujas horas são maiores que 10.
    R: Select NSSEMP, Pnro From Trabalha_em where Horas > 10.

4) Mostre o nome e o sexo do dependente cujo número do empregado é igual a 123456789.
    R: Select Nomedependente, Sexo From Dependente Where NSSEMP = 123456789.

5) Mostre o nome, relação e a data do aniversário dos dependentes cujo número do empregado é igual a 333445555.
 R: Select Nomedependente, Relação, DataNasc From Dependente Where NSSEMP =  333445555.

ð    Junção

1) Mostre o nome e o salário do empregado e o nome e a relação dos seus dependentes.
    R: Select Pnome, Salario, Nomedependente, Relação From Empregado, Dependente
    Where NSS = NSSEMP.

2) Mostre o nome do departamento e o nome e o salário do empregado que é o seu gerente.
    R: Select Dnome, Pnome, Salario, SNNGER From Departamento Where SNNGER.

3) Mostre o nome do departamento e a sua localização.
   R: Select Dnome, DLocalização From Departamento D, Locais_Depto L Where DNumero = LDnumero.

4) Mostre o nome do projeto, sua localização e o departamento ao qual pertence.
   R: Select Pnome, PLocalização From Projeto Where Dnum.

5) Mostre o nome do empregado e o nome do projeto nos quais eles trabalharam.
 R: Select E.Pnome, P.Nome From EmpregadoE, Trabalha_em, ProjetoP Where E.NSS = Trabalha_em   NSSEMP and Trabalha_em PNRO = PNumero.

ð    Agregação

1) Mostre a quantidade de empregados do sexo masculino e a quantidade de empregados do sexo feminino.
    R: Select Sexo, Count (NSS) From Empregado Group by Sexo.

2) Mostre a quantidade de dependentes do sexo masculino e a quantidade de dependentes do sexo feminino   do empregado cujo número é 123456789.
    R: Select Sexo, Count From Empregado Group by Sexo = 123456789.

3) Mostre o nome e o salário do empregado e a quantidade de dependentes que possui.
  R: Select Pnome, Salario, Count (Nomedependente)  From Empregado, Dependente Where NSS =   NSSEMP   Group by Pnome, Salario.
  
4) Mostre a despesa total de cada departamento com os salários dos empregados.
    R: Select Ndep, Salario, Count (Empregado).
                       
5) Mostre a soma total das horas empregadas em cada projeto.
    R: Select PNRO, Count NSSEMP From Trabalha_em Where Horas.
                       

sábado, 26 de novembro de 2011

Álgebra Relacional – Exercícios

Respostas

Seleção

1) Mostre o conteúdo da relação departamento.
     R: σ (Departamento).

2) Mostre os empregados que trabalham no departamento 4.
     R: σ (Ndep = 4) (Empregado).

3) Mostre a(s) localização (ões) do departamento de pesquisa (5).
     R: σ (Dnome) (Departamento).


4) Mostre o(s) projetos(s) do departamento 4.
     R; σ (Projeto) (Departamento).

5) Mostre as informações de relação trabalha_em cujo número do projeto igual a 3.
     R: σ (Pnro = 3) (Trabalha_em).

 Projeção

1) Mostre o número e o nome dos dependentes.
     R: π NSSEMP, Nome dependente (Dependente).

2) Mostre o nome e a localização dos projetos.
     R: π Pnome, Plocalização (Projeto).

3) Mostre o nome do departamento e o código do gerente dos departamentos.
     R: π Dnome, Sunger (Departamento).

4) Mostre o nome e a data de nascimento dos empregados.
     R: π Pnome, DataNasc (Empregado).

5) Mostre o nome e o salário dos empregados.
     R: π Pnome, Salario (Empregado).

Seleção+Projeção

1) Mostre o código, nome e o salário dos empregados que ganham mais de 2500.
     R: π NSS, Pnome, Salario (σ (Empregado) χ (Salario > 2500)).

2) Mostre o nome e a localização dos projetos do departamento 5.
     R: π Pnome, Plocalização (σ (Dnum = 5) χ (Projeto)).

3) Mostre o número do empregado e o número do projeto cujas horas são maiores que 10.
     R: π NSSEMP, Pnro (σ (Horas > 10) χ (Trabalha_em)).

4) Mostre o nome e o sexo do dependente cujo número do empregado é igual a 123456789.
     R: π Nomedependente, Sexo (σ (NSSEMP = 123456789) χ (Dependente)).

5) Mostre o nome, relação e a data do aniversário dos dependentes cujo número do empregado é igual a 333445555.
     R: π Nomedependente, Relação, DataNasc (σ (NSSEMP = 333445555) χ (Dependente)).



Junção


1) Mostre o nome e o salário do empregado e o nome e a relação dos seus dependentes.
     R: π Pnome, Salario, Nomedependente, Relação (Empregado χ NSS = NSSEMP Dependente). 


2) Mostre o nome do departamento e o nome e o salário do empregado que é o seu gerente. 
     R: π Dnome, Pnome, Salario, SNNGER (Departamento χ Pnome = Salario SNNGER). 


3) Mostre o nome do departamento e a sua localização. 
     R; π Dnome, D.Localização (Departamento D χ Dnumero = L.Dnumero Locais_Depto L). 


4) Mostre o nome do projeto, sua localização e o departamento ao qual pertence. 
     R: π Pnome, PLocalização, Dnum (Projeto χ Pnome = PLocalização Dnum). 


5) Mostre o nome do empregado e o nome do projeto nos quais eles trabalharam. 
     R: π E. Pnome, P. Pnome (Empregado E χ ( E.NSS = NSSEMP Trabalha_em) χ 
          (Pnro = Pnumero Projeto P)). 


Agregação 


1) Mostre a quantidade de empregados do sexo masculino e a quantidade de empregados do sexo feminino.           
     R: Sexo Á Count (Empregado). 
2) Mostre a quantidade de dependentes do sexo masculino e a quantidade de dependentes do sexo feminino do empregado cujo número é 123456789. 
     R: Sexo Á Count (NSSEMP = 123456789) (Dependente). 
3)  Mostre o nome e o salário do empregado e a quantidade de dependentes que possui.
 R: Pnome, Salario Á Count (Nomedependente) (Empregado χ NSS = NSSEMP Dependente).

4) Mostre a despesa total de cada departamento com os salários dos empregados.
     R: Ndep Á Count NSS, AVERAGE Salario (Empregado).

5) Mostre a soma total das horas empregadas em cada projeto.
     R: PNRO 
Á SUM NSSEMP, AVERAGE Horas (Trabalha_em).

quinta-feira, 24 de novembro de 2011

Álgebra Relacional


1) Quantos e quais são os grupos nos quais a álgebra relacional está dividida? Identifique quais operações pertencem a cada um deles.

A Álgebra Relacional é um conjunto de operações sobre modelos relacionais de dados e podem ser divididas em dois grupos, que são eles:

Operadores Tradicionais:
 União
 Intersecção
 Diferença
 Produto Cartesiano

Operadores Relacionais:
 Seleção
 Projeção
 Junção
 Divisão

  
2) Explique a Operação SELECT e PROJECT. Quando usar, Para que usar, Como usar, diferenças, etc.
  
SELECT

É usada para construir um subconjunto na horizontal e para selecionar tuplas de uma relação, estas tuplas devem satisfazer uma condição de seleção, por exemplo, a seleção de um subconjunto de tuplas da relação EMPREGADOS que trabalham para o departamento 5 ou que tenham salário maior que 5000, cada uma dessas condições é especificada individualmente usando a operação SELECT:

NDEP = 5 (EMPREGADO)
SALÁRIO > 5000 (EMPREGADO)


PROJECT

Na relação como uma tabela, então o operador SELECT seleciona algumas linhas da tabela enquanto descarta outras. O operador PROJECT, por outro lado, seleciona certas colunas da tabela e descarta outras , se existir o interesse sobre certos atributos da relação, pode-se usar o PROJECT para projetar a relação sobre esses atributos, por exemplo, para cada empregado, os atributos PNOME, SNOME e SALÁRIO; pode-se usar o PROJECT:

SNOME, PNOME, SALÁRIO (EMPREGADO)



3) Explique a Operação UNION, INTERSECTION E DIFFERENCE. Quando usar, para que usar, como usar, etc.

A operaçao UNION tem a finalidade de unir tuplas. Devemos usa-lo quando por exemplo desejadas unir R U S esta operação vai unir todas as tuplas de R e S e excluir as tuplas duplicadas.

INTERSECTION diferente de union vai incluir somente as tuplas comuns entre as entidades. Esta operação é utilizada quando por exemplo desejamos unir por exemplo as tuplas iguais de R ... S .

DIFFERENCE por sua vez vai incluir as tuplas que não estão na outra entidade, por exemplo R - S esta operação vai incluir as tuplas de R que não estão em S.


4) Explique a Operação CARTESIAN PRODUCT. Quando usar, Para que usar, Como usar, etc.

A operação CARTESIAN PRODUCT, denotada por c, é também uma operação de conjunto binária, mas as relações sobre as quais são aplicadas não necessitam ser união compatível. 
Esta operação é usada para combinar tuplas de duas relações tal que tuplas relacionadas possam ser identificadas.
O CARTESIAN PRODUCT cria tuplas com atributos combinados de duas relações. Pode-se então selecionar apenas as tuplas que estejam relacionadas especificando uma condição de seleção apropriada, como foi feita no exemplo. Devido à sequência:
CARTESIAN PRODUCT seguido de SELECT, ser muito comum para se identificar tuplas relacionadas de duas relações, uma operação especial JOIN foi criada para especificar esta seqüência como uma única operação. Assim, a operação CARTESIAN PRODUCT é raramente utilizada isoladamente. Em geral, o resultado de R(A1, A2, ..., An) x S(B1, B2, ..., Bm) é a relação Q com n + m atributos Q(A1, A2, ..., An, B1, B2, ..., Bm) nesta ordem.
A relação resultante Q tem uma tupla para cada combinação de tuplas. Assim, se R tem nR tuplas e S tem nS tuplas, então RxS terá nR*nS tuplas. Para ilustrar, considere que se deseja recuperar para cada empregado do sexo feminino uma lista de nomes de seus dependentes.


5) Explique as Operações de junção (JOIN) e divisão (DIVISION). Quando usar, Para que usar, Como usar, etc.

Operações de Junção (JOIN)

A combinação de uma operação de seleção aplicada sobre uma operação de produto cartesiano é usual em aplicações de BD. É através dela que dados de tabelas relacionadas são associados. Por isso, foi criada a operação de junção, que corresponde exatamente à seqüência de operações em questão.

A operação JOIN, denotada por , é usada para combinar tuplas relacionadas de relações em uma única tupla. Esta operação é muito importante para quaisquer bases de dados relacionais, pois permite processar relacionamentos entre relações

É uma operação que produz uma combinação entre as linhas de uma tabela com as linhas correspondentes de outra tabela, sendo em princípio correspondente a uma seleção pelos atributos de relacionamento sobre um produto cartesiano dessas tabelas:

A |x| B = A.chave1 = B.chave2 ( A x B )

A operação de junção foi criada justamente porque esse tipo de combinação de tabelas é de uso muito comum, facilitando com isso a escrita de expressões. A tabela resultante de uma junção tem todas as colunas da primeira tabela e todas da segunda tabela. Isso faz com que os valores dos campos utilizados como critério para a correspondência entre as linhas apareça duplicado, já que um vem da primeira tabela e outro da segunda. Existe uma variação da junção, chamada junção natural, que fornece o mesmo resultado, mas sem essa repetição de valores, uma das colunas correspondentes aos atributos de relacionamento é descartada.

Operações de Divisão (Division)

É uma operação adicional que produz como resultado a projeção de todos os elementos da primeira tabela que se relacionam com todos os elementos da segunda tabela.

Ex.: queremos saber os nomes dos departamentos que possuem todos os cargos:

NmDepto, CdCargo ( depto |x| funcionário ) CdCargo ( cargo )


6) Explique as Operações de AGREGAÇÃO. Quando usar, Para que usar, Como usar, etc.

Operações de Agregação

São aquelas que, quando aplicadas, tomam uma coleção de valores e retornam um valor simples como resultado.
O primeiro tipo de consulta que não pode ser expressa na álgebra relacional é conhecido como funções agregadas sobre coleções de valores da base de dados.
Por exemplo, pode-se querer recuperar a média ou total salarial de todos os empregados ou o número de tuplas de empregados. As funções normalmente aplicadas para coleções de valores numéricos são: SUM, AVERAGE, MAXIMUM e MINIMUM. A função de contagem de tuplas é normalmente chamada COUNT. Cada uma destas funções pode ser aplicada a todas as tuplas de uma relação.
Um outro tipo comum de consulta envolve o agrupamento de tuplas de uma relação pelo valor de alguns de seus atributos e então a aplicação de alguma função agregada independente para cada grupo de tuplas.
Um tipo de requisição comum envolve o agrupamento de tuplas em uma relação pelo valor de alguns atributos e depois pela aplicação de uma função de agregação neste grupo.
Ex. Agrupar os empregados pelo número de seu departamento, e aplicar a função média no atributo salário em cada grupo. Desta forma saberemos a média dos salários.
É importante destacar que o resultado da aplicação de qualquer função de agregação sempre será uma relação e não um número.


TABELA DOS SÍMBOLOS:



domingo, 20 de novembro de 2011

Normalização

1) Quais são as diretrizes informais para o projeto de esquema de relações? Explique resumidamente cada uma.

Diretriz 1ª: Projetar um esquema de relação de maneira que seja simples descrever seu significado. Normalmente, isso significa que não se pode combinar atributos de múltiplos tipos de entidades e tipos de relacionamentos numa simples relação. Intuitivamente, se um esquema de relação corresponde a um tipo de entidade ou tipo de relacionamento, o significado tende a ser claro. Por outro lado, tende ser uma mistura de múltiplas entidades e relacionamentos e, assim, semanticamente não-clara.

Diretriz 2ª: Projetar esquemas de relações de maneira que nenhuma anomalia de alteração ocorra em relações. Se existir alguma anomalia, isso deverá ser considerado para que as modificações pelos programas ocorram corretamente.

Diretriz 3ª: Tanto quanto possível, evite colocar atributos em um esquema de relação base cujos valores possam ser null. Se for inevitável os valores nulls, esteja seguro que eles se apliquem apenas em casos excepcionais e não se apliquem na maioria das tuplas da relação.

Diretriz 4ª: Projetar esquemas de relações tal que, quando aplicadas operações JOINNATURAIS, os atributos nas condições-joins envolvam atributos que sejam ou chaves primárias ou chaves-estrangeiras de maneira a garantir que nenhuma tupla espúria seja gerada.


2) Quais são as métricas de qualidade informal para projeto de esquemas de relações? Explique resumidamente cada uma delas.

São elas:

Semântica de atributos : Assume-se que um certo significado esteja associado aos atributos, para todo agrupamento de atributos que formam uma relação esquema. Intuitivamente, verifica-se que cada relação pode ser interpretada como um conjunto de fatos ou declarações. Este significado, ou semântica, especifica como podem ser interpretados os valores de atributos armazenados em uma tupla da relação, em outras palavras, como os valores de atributos estão relacionados uns com os outros. Em geral, é mais simples descrever a semântica de relações, ao invés da semântica de atributos de uma relação.

Redução de valores redundantes em tuplas: Uma das metas do projeto de esquemas é a minimização do espaço de armazenamento que relações da base ocupam. O agrupamento de atributos em esquemas de relações tem um efeito significativo no espaço de armazenamento.

Redução de valores nulos em tuplas: Uma relação degenerada (tabelão), pode causar valores null, o que prejudica a interpretação dos dados.
Em alguns projetos de esquemas pode-se agrupar atributos em uma “grande” relação. Se muitos atributos não se aplicarem a todas as tuplas da relação, ter-se-á muitos valores nulls na relação. Isto pode despender espaço armazenamento e pode também trazer problemas de entendimento do significado dos atributos na especificação de operações JOIN´s. Um outro problema com valores nulls é que não se pode contá-los quando operações de agregação, tais como COUNT ou SUM são aplicadas. Mais que isso, os valores nulls podem ter múltiplas interpretações, tais como:

- O atributo pode não se aplicar a tupla.
- O valor de atributo para a tupla é desconhecido.
- O valor é conhecido, porém não foi registrado ainda.

Não permissão de tuplas espúrias: Tabelas degeneradas, quando relacionadas poder gerar informações / dados errôneos, isto é, tuplas espúrias.


3) O que é e para que serve o conceito de dependência funcional? Quais são os tipos de dependência? Explique-os

Dependências Funcionais são restrições ao conjunto de relações válidas. Elas permitem expressar determinados fatos em banco de dados relativos ao empreendimento que se deseja modelar.
A noção de dependência funcional generaliza a noção de super chave. Para existir o destino (dependência à chave estrangeira) tem que exitir a origem (chave primária). O atributo deve realmente caracterizar na relação.


4) O que é e para que serve normalização de dados relacionais? Quando será utilizada a normalização na maioria das vezes?

Normalização de dados relacionais é o processo de identificação dos agrupamentos necessários e da localização correta de cada atributo que consiste num conjunto de técnicas designadas, e ainda exercitar as definições relacionadas à normalização eliminando redundâncias e inconsistências de um banco de dados, com reorganização mínima dos dados:

• Identificação das redundâncias e outros problemas
• Reorganização do banco de dados
• Reprojeto das aplicações

A normalização será utilizada quando houver redundâncias e a necessidade de reorganizar os dados, ela converte cada entidade gradualmente para Formas Normais através da aplicação sucessiva de regras que alteram o formato dos dados da 1 Forma Normal até a 5 Forma Normal.

5) O que são e quantas são as formas formais de relação? Explique-as resumidamente. Para manter eficiência e a simplicidade de processamento em certos casos podemos normalizar as relações até a 3ºFN por que?

O objetivo da normalização de um banco de dados é evitar os problemas que podem provocar falhas no projeto do banco de dados, bem como eliminar a mistura de assuntos e as correspondentes redundâncias dos dados desnecessárias. O processo de normalização aplica uma série de regras sobre as tabelas (também chamadas de relações) de um banco de dados, para verificar se estão corretamente projetadas.

Primeira Forma Normal: A primeira forma normal enuncia que cada atributo de uma entidade ou relacionamento pode armazenar apenas um valor. Tabelas com atributos multi-valorados não são consideradas em 1NF.

Segunda Forma Normal: A segunda forma normal (2NF) descreve que todo atributo deve ser determinado unicamente pela chave primária. Se existem atributos que dependem apenas de parte da chave, estes devem ser separados em tabelas onde a 2NF seja obedecida.
Terceira Forma Normal: A terceira forma normal (3NF) exige que a tabela esteja em 2NF e que todos os atributos que não são chave sejam mutuamente independentes, isto é, que não existam funções que definam um ao outro. Portanto, sempre a chave por inteiro deve definir toda a tabela.

Forma normal Boyce/Codd (BCNF): Definição que engloba as outras formas normais, e define que uma tabela está em BCNF se, e somente se, todo determinante funcional for em relação a uma chave candidata. Na prática, uma tabela está em BCNF se estiver em 3NF e não existir dependência funcional dentro da chave primária.



6) Dê exemplos de normalizações de uma relação.

Normalização de banco de dados relacional

Objetivo:
Eliminar redundâncias e inconsistências de um banco de dados, com reorganização mínima dos dados

Sub-Fases:
• Identificação das redundâncias e outros problemas
• Reorganização do banco de dados
• Reprojeto das aplicações


Redundâncias e inconsistências em atributos:

– atributo com domínio enumerável
• representado sem controle

– atributo multivalorado
• representado sem normalização

– atributo pertencente a chave
• ocorre com valor nulo

– atributo redundante
• inferido ou materializado sem controle


Tratamento de atributo com domínio enumerável:

– criar tabela definindo o domínio:
• valor
• descrição, se for o caso

– uniformizar os valores

– controlar atualizações


Exemplo de tratamento de atributo com domínio enumerável:
– TIPO_AREA em AREAESPECIAL



Exemplo de tratamento de atributo com domínio enumerável:
– DATUM em PLAT_FIXA, DGPS (e outras tabelas)



Tratamento de atributo multivalorado:
– normalizar e controlar atualizações



Tratamento de atributo pertencente a chave:
– eliminar nulos



Tratamento de atributo redundante:
– eliminar, ou
– manter e controlar consistência

Exemplo de tratamento de atributo redundante:
– TIPO_AREA em AREASHD parece ter sempre o mesmo valor
– candidato a ser eliminado



Exemplo de tratamento de atributo redundante:
– BLOCO_ANP possui vários atributos que não se aplicam (e portanto são sempre nulos)
– eliminar todos estes atributos



Exemplo de tratamento de atributo redundante:
– BLOCO_ANP, BLOC_PARC, BLOCO_PETRO e PARC podem ser representados em uma única tabela
• novo atributo para indicar o tipo de bloco
• atributos que não se aplicam ao tipo de bloco terão valores nulos



Exemplo de tratamento de atributo redundante:
– o atributo BACIA em DGPS pode ser computado já que a área de cobertura do DGPS e a área da bacia são conhecidos (a mesma situação ocorre em várias outras tabelas)
– manter para melhorar desempenho de consultas (ver tratamento de relacionamentos n-m adiante)
– controlar consistência



Redundâncias e inconsistências na representação de relacionamentos:
– binários n-1
• representados por atributos que não são chaves estrangeiras
– binários n-m:
• representados por atributos multivalorados sem controle

• Tratamento de relacionamentos binários n-1:
– substituir nomes das entidades pelas suas chaves
– transformar o atributo em chave estrangeira para a tabela que representa o conjunto de entidades



• Tratamento de relacionamentos binários n-m:
– normalizar
             • criar uma nova tabela com as chaves estrangeiras apropriadas