Skip navigation

Category Archives: Banco de Dados

Posts para as aulas de Banco de Dados

Expressões

Utilizadas para retornar um cálculo no SQL

Exemplo:

Q13) Listar o nome e os salários resultantes de um aumento

de 10% para os funcionários do projeto ’Productx’

SELECT fname, minit, lname, salary*1.1 as NewSalary

FROM employee, project, works_on

WHERE ssn=essn AND pno=pnumber

AND pname=’ProductX’

Cláusula BETWEEN

Retorna os dados entre intervalos fechados definidos.

Q14) Listar todos os empregados no departamento 5 cujo

salário está entre 30000 e 40000

SELECT *

FROM employee

WHERE dno=’5’

AND salary BETWEEN 30000 AND 40000

Cláusula Order By

Ordena o resultado pela(s) coluna(s) escolhida(s), da maneira desejada: Ascendente ou Descendente

Q 15) Listar os empregados e projetos em que eles estão

trabalhando, ordenados pelo departamento e, dentro de

cada departamento, ordenado pelo último e primeiro nome

SELECT dno, fname, lname, pno

FROM employee, works_on

WHERE essn=ssn

ORDER BY dno, fname, lname

Consultas Complexas

  • consultas aninhadas e comparação de conjuntos
  • tabelas obtidas de junção
  • funções de agregação
  • cláusulas “group by” e having
Cláusula IN (pertinência)

A consulta Q4 abaixo pode ser reformulada, removendo a cláusula UNION e incluindo a cláusula IN

Q4) Listar todos os números de projetos que envolvam um empregado cujo último nome é ’Smith’ sendo que o empregado deve ser trabalhador ou gerente do departamento que controla o projeto.

(SELECT DISTINCT pnumber FROM project, department, employee

WHERE dnum=dnumber AND msgrssn=ssn AND lname=’Smith’)

UNION

(SELECT DISTINCT pnumber FROM project, works_on, employee

WHERE pno=pnumber AND essn=ssn AND lname=’Smith’)

SELECT DISTINCT pnumber FROM project

WHERE pnumber IN

(SELECT pnumber FROM project, department, employee

WHERE dnum=dnumber AND mgrssn=ssn

AND lname=’Smith’)

OR pnumber IN

(SELECT pno FROM works on,employee

WHERE essn=ssn AND lname=’Smith’);

Comparando conjuntos com ALL, ANY ou SOME

Outras cláusulas para comparação de conjuntos:

ALL

ANY ou SOME (são sinônimos)

Ex: salary > ALL (SELECT salary FROM …);

salary < ANY (SELECT salary FROM …);

salary > SOME (SELECT salary FROM …);

Ambiguidade em consultas aninhadas – (apelidos de tabelas)

Q16) Listar o nome dos empregados com dependente(s) de mesmo ’first name’ e sexo que o empregado

SELECT e.fname,e.lname

FROM employee as e

WHERE e.ssn IN

(SELECT essn FROM dependent as d

WHERE fname=dependent_name

AND e.sex=d.sex);

SELECT e.fname,e.lname

FROM employee as e, dependent as d

WHERE ssn=essn

AND fname=dependent_name

AND e.sex=d.sex;

FUNÇÃO EXISTS – consultas aninhadas correlacionadas

Q16b) Listar o nome dos empregados com dependente(s) de mesmo ’first name’ e sexo que o empregado

SELECT e.fname,e.lname

FROM employee as e

WHERE EXISTS

(SELECT * FROM dependent d

WHERE e.ssn=d.essn

AND e.fname=d.dependent_name

AND e.sex=d.sex);

FUNÇÃO NOT EXISTS – consultas aninhadas correlacionadas

Q6) Listar os nomes de empregados sem dependentes

SELECT fname,lname

FROM employee

WHERE NOT EXISTS (SELECT *

FROM dependent

WHERE ssn=essn);

Aninhamento em dois níveis

Q3b) Listar o nome dos empregados que trabalham em todos

os projetos controlados pelo departamento número 4

OBS: Observe a expressão todos no enunciado da consulta. Esta é a divisão da álgebra relacional. Em SQL a divisão pode ser especificada de diversas formas.

SELECT lname, fname FROM employee

WHERE NOT EXISTS

(SELECT * FROM project WHERE dnum=4

AND NOT EXISTS

(SELECT * FROM works_on

WHERE essn=ssn

AND pnumber=pno));

Alternativas de Divisão para SQL

Alternativas de especificação de divisão em SQL:

 Usando cláusulas NOT EXISTS e IN

 Usando cláusula NOT EXISTS e EXCEPT

 Usando cláusula FOREACH e EXISTS(não implementada no PostgreSql 8.3)

divisão usando cláusulas NOT EXISTS e IN

SELECT lname, fname FROM employee

WHERE NOT EXISTS

(SELECT * FROM works_on w1

WHERE (w1.pno IN (SELECT pnumber FROM

project WHERE dnum=4))

AND NOT EXISTS

(SELECT * FROM works_on w2

WHERE w2.ecpf=cpf AND w2.pno=w1.pno));

divisão usando cláusulas NOT EXISTS e EXCEPT

SELECT lname, fname FROM employee e

WHERE NOT EXISTS

(SELECT pnumber FROM project WHERE dnum=4

EXCEPT

(SELECT pno FROM works_on w

WHERE w.ecpf=e.cpf))

divisão usando cláusulas FOREACH e EXISTS

SELECT lname, fname FROM employee

WHERE FOREACH

(SELECT pnumber FROM project WHERE dnum=4)

EXISTS

(SELECT * FROM works_on

WHERE ecpf=cpf AND pno=pnumber));

ATENÇÃO: este comando não funciona no PostgreSql 8.3

Tabelas obtidas de junção

Q1a) Listar o nome e endereço dos empregados que

trabalham no departamento ’Research’

SELECT fname, minit, lname, address, dnumber

FROM (employee JOIN department ON dno=dnumber)

WHERE dname=’Research’

Junção Natural

Na junção natural iguala-se atributos de mesmo nome

Qlb)Listar o nome e endereço dos empregados que trabalham no departamento ’Research’

SELECT fname, name, address

FROM (employee NATURAL JOIN

(department AS dept (dname, dno, mssn,

msdate)))

WHERE dname= ’Research’

OUTER JOIN

A cláusula {LEFT | FULL | RIGHT} OUTER JOIN mantêm no resultado todas as tuplas da tabela da esquerda, das duas tabelas ou da tabela da direita da junção, respectivamente, inserindo NULL quando não há casamento (matching)

Q8b)Para cada empregado, liste o seu primeiro acompanhado do primeiro nome de seu supervisor, mesmo se o empregado não tiver supervisor, liste seu nome

SELECT e.fname as employee_name,

s.fname as supervisor_name

FROM (employee AS e LEFT OUTER JOIN

employee AS s ON e.supercpf =s.cpf)

Exemplo Q8b’)

Q8b’)Liste o primeiro nome do supervisor e o primeiro nome de seus supervisionado, ordenado pelo primeiro. Mesmo se o empregado não for supervisor de ninguém, liste seu nome na primeira coluna e mesmo se o empregado não tiver supervisor, liste seu nome na segunda coluna.

SELECT s.fname as supervisor_name,

e.fname as employee_name

FROM (employee AS e FULL OUTER JOIN

employee AS s ON e.supercpf =s.cpf)

ORDER BY 1

Junções aninhadas

Q2a) Para todo projeto localizado em ’Stafford’, listar o número do projeto, o número do departamento que o controla e o último nome do gerente do departamento

SELECT pnumber, dnum, lname

FROM ((project JOIN department ON dnum=dnumber

(JOIN employee ON mgrssn=ssn))

WHERE plocation = ’Stafford’

Funções de agregação

• COUNT

• SUM

• MAX

• MIN

• AVG

• etc.

Exemplo Q19

Q19) Listar a soma de salários de todos os empregados,o maior salário e a média de salários

SELECT

SUM(salary), MAX(salary), MIN(salary) AVG(salary)

FROM employee;

Q20) Listar a soma de salários, o maior salário e a média de salários, somente para funcionários do departamento ‘Research’

SELECT

SUM(salary), MAX(salary), MIN(salary), AVG(salary)

FROM employee, department

WHERE dno=dnumber AND dname=’Research’;

Q21) Listar o número de empregados

SELECT COUNT(*) FROM employee;

Q23) Listar o número de salários distintos

SELECT COUNT(DISTINCT salary) FROM employee;

Funções de agregação em subconsultas

Q5) Listar o nome dos empregados que têm dois ou mais dependentes

SELECT lname, fname

FROM employee

WHERE (SELECT COUNT(*)

FROM dependent

WHERE essn=ssn) >= 2;

Cláusulas group by

Q24) Listar para cada departamento seu número, a quantidade de empregados e a média salarial de seus empregados

SELECT dnumber, COUNT(*), AVG(salary)

FROM department, employee

WHERE dno=dnumber

GROUP BY dnumber;

OBS: o agrupamento deve incluir todas as colunas da projeção que não incluem função de agregação

Group by com duas colunas

Q25) Listar para cada projeto seu número, nome e a quantidade de empregados que trabalham no projeto.

SELECT pnumber, pname, COUNT(*)

FROM project, works_on

WHERE pno=pnumber

GROUP BY pnumber, pname;

Cláusulas group by e having

Q26) Listar para cada projeto onde trabalham mais de dois empregados seu número e a quantidade de empregados que trabalham no projeto

SELECT pnumber, pname, COUNT(*)

FROM project, works_on

WHERE pno=pnumber

GROUP BY pnumber, pname

HAVING COUNT (* )> 2;

Cláusulas group by e consultas aninhadas com cláusula IN

Q28) Listar para cada departamento que tem mais que 5 empregados, o número do departamento e o número de empregados que ganham mais que 40000

SELECT dno, COUNT(*)

FROM employee

WHERE salary > 40000

AND dno IN

(SELECT dnumber FROM department

WHERE(SELECT COUNT(*)

FROM employee e2

WHERE e2 .dno=dnumber)>5)

SQL/DML e o PostgreSQL

EXERCÍCIOS DE IMPLEMENTAÇÃO

=> Exercícios de consultas simples no esquema company

=> Exercicios de consultas complexas no esquema company e exercícios usando o esquema SEE

Bibliografia:

[SK] Capítulos 3,4,5

Os comandos da Linguagem de Modelagem de Dados do SQL são responsáveis por:

– Comandos de inserção de tuplas em tabelas

– Comandos de alteração e supressão de tuplas

– Comandos de consulta (básicos e complexos)

Def. A SQL/DML(Data Manipulation Language) é um subconjunto da SQL usada para recuperar, inserir, atualizar e suprimir dados de tabelas do BD.

• INSERT – inserção de linhas;

• DELETE – supressão de linhas;

• UPDATE – atualização de dados;

• SELECT – recuperação de tabelas;

OBS: serão mostradas características do padrão SQL implementadas pelo PostgreSQL, omitindo funcionalidades adicionais e destacando eventuais omissões.

Insert

INSERT INTO tabela [ ( coluna [, …] ) ]

{ DEFAULT VALUES

|VALUES ( { expressão | DEFAULT } [, …] )

[, …]

| comando-select

}

Exemplo 1

INSERT INTO tabela VALUES (expressão [, …] )

INSERT INTO employee

VALUES (‘John’, ‘B’, ‘Smith’, ‘123456789’,

DATE ‘1965-01-09’, ‘731 Fondren, Houston, TX’,

‘M’, 30000, ‘333445555’, 5);

Compatibilidade de tipos:

employee (fname VARCHAR (15) NOT NULL,

minit CHAR, lname VARCHAR (15) NOT NULL,

ssn CHAR(9) PRIMARY KEY, bdate DATE,

address VARCHAR(30), sex CHAR CHECK (sex IN (’M’, ’F’)),

salary DECIMAL(10,2), superssn CHAR(9), dno INT NOT NULL)

Exemplo 2

INSERT INTO tabela ( coluna [, …] )

VALUES (expressão [, …] )

INSERT INTO employee(fname, minit, lname, ssn, dno)

VALUES (‘John’, ‘B’, ‘Smith’, ‘123456789’, 5);

Exemplo 3

INSERT INTO tabela comando-select

INSERT INTO works_on

SELECT ssn, pnumber, 0

FROM employee, project;

Delete

DELETE FROM tabela [ [ AS ] alias ]

[ WHERE condição

| WHERE CURRENT OF cursor_name ]

DELETE FROM employee WHERE ssn = ‘123456789’

OBS: o uso de cursores será visto posteriormente

Update

UPDATE tabela [ [ AS ] alias ]

SET {coluna = { expresssão | DEFAULT }

| ( coluna [, …] ) =

( { expressão | DEFAULT } [, …] )

} [, …]

[ WHERE condição

| WHERE CURRENT OF cursor_name ]

OBS: o uso de cursores será visto posteriormente

Update Exemplo 1

UPDATE employee

SET address = ‘Av. Joao Naves de Avila, 2121’,

salary = salary * 1.5

WHERE ssn = ‘123456789’

Update Contra-Exemplo

UPDATE works_on

SET (pno, hours) =

(SELECT pnumber, 10

FROM project WHERE pnumber = 1)

WHERE essn=’123456789′;

OBS: o padrão permite associação de uma lista de atributos com uma tupla resultante da saída de uma consulta, mas isto não foi implementado pelo PostgreSql 8.3, onde as expressões devem ser independentes. Logo o comando acima não funciona no PostgreSql 8.3 (teste isso nas versões mais recentes)

Update Exemplo 2

UPDATE works_on

SET (pno, hours) = (1, 10)

WHERE essn=’123456789′;

Select

SELECT [ALL | DISTINCT]

* | expressão [ AS nome_saida ] [, …]

FROM item_from [, …]

[ WHERE condição ]

[ GROUP BY expressão [, …] ]

[ HAVING condição [, …] ]

[ { UNION | INTERSECT | EXCEPT } [ ALL ] select ]

[ ORDER BY expressão [ ASC | DESC | USING operador ]

[ NULLS { FIRST | LAST } ] [, …] ]

[ FOR { UPDATE | SHARE }

[ OF nome_tabela [, …] ] [ NOWAIT ] […] ]

–Consultas básicas e complexas

Considerando os diversos parâmetros do comando SELECT,

para efeito didático, vamos dividir nosso estudo em:

 consultas básicas: na condição do WHERE não existe

outro SELECT

 consultas complexas: são consultas aninhadas, onde na

condição do SELECT existe outra cláusula SELECT.

SELECT-FROM-WHERE

Formato de comando SELECT para consultas básicas:

SELECT lista-de-atributos

FROM lista-de-tabelas

WHERE condição

OBS:

– condições sem cláusula SELECT;

– os exemplos a seguir seguem a numeração de EN e estão

baseados no BD company;

Restrição + Projeção

QO) Listar a data de nascimento e o endereço dos

empregados com nome : John B. Smith.

SELECT bdate, address

FROM employee

WHERE fname=’John’

AND minit=’B’

AND lname=’Smith’;

Restrição + Projeção + Junção

Q1) Listar o nome e endereço dos empregados que trabalham

no departamento ’Research

SELECT fname, minit, lname, address

FROM employee, department

WHERE dno=dnumber AND dname=’Research’

Junção com duas condições

Q2) Para todo projeto localizado em ’Stafford’, listar o

número do projeto, o número do departamento que o

controla e o último nome, endereço e data de nascimento

do gerente do departamento.

SELECT pnumber, dnum, lname, address, bdate

FROM project, department, employee

WHERE plocation=’Stafford’

AND dnum=dnumber

AND ssn=mgrssn

Ambiguidade de nomes de atributos

Suponha que DNUMBER e NAME são os nomes dos

atributos DNO e LNAME em EMPLOYEE,

respectivamente. Além disso, suponha que NAME é o

nome do atributo DNAME em DEPARTMENT.

Então:

employee(fname, minit, name, ssn, bdate, address, sex,

salary, superssn, dnumber)

department(name, dnumber, mgrssn, mgrstartdate)

Qualificando atributos

Q1a) Listar o nome e endereço dos empregados que

trabalham no departamento ’Research’ considerando os

esquemas abaixo

employee(fname, minit, name, ssn, bdate, address, sex,

salary, superssn, dnumber)

department(name, dnumber, mgrssn, mgrstartdate)

SELECT fname, minit, employee.name

FROM employee, department

WHERE employee.dnumber=department.dnumber

AND department.name=’Research’

Apelidos de Tabelas (Renomeação)

Q8) Para cada empregado, liste o seu primeiro e o seu último

nome acompanhados do último nome de seu supervisor.

SELECT e.fname, e.lname, s.lname

FROM employee AS e, employee AS s

WHERE e.superssn=s.ssn

Q1b’) Listar o nome e o endereço dos empregados que

trabalham no departamento ’Research’ considerando as

novas tabelas employee e department e usando apelidos

SELECT fname, minit, e.name, address

FROM employee e, department d

WHERE e.dnumber=d.dnumber

AND d.name=’Research’

Exemplo Q1c–Omitindo WHERE e uso do * para consulta sem projeção

Qlc’) Listar todos os valores de atributos de todos os empregados

SELECT * FROM employee

Produto Cartesiano

Q1Ob) Listar o produto cartesiano de empregados e departamentos

SELECT *

FROM employee, department

Tabela x relação// multset ou bags x set // Cláusula DISTINCT

Q11a) Listar todos os salários distintos

SELECT DISTINCT salary

FROM employee

Cláusula UNION

Q4) Listar todos os números de projetos que envolvam um

empregado cujo último nome é ’Smith’ sendo que o

empregado deve sertrabalhador ou gerente do

departamento que controla o projeto.

(SELECT DISTINCT pnumber

FROM project, department, employee

WHERE dnum=dnumber AND msgrssn=ssn AND lname=’Smith’)

UNION

(SELECT DISTINCT pnumber

FROM works_on, employee

WHERE essn=ssn AND lname=’Smith’)

Cláusula LIKE

Q12) Listar o nome de todo empregado cujo endereço está

em Houston, Texas

SELECT fname, minit, lname

FROM employee

WHERE address LIKE ’%Houston%TX%’

Like usando underline _

Q12a) Listar o nome de todos os empregados nascidos na

década de 50

SELECT fname, minit, lname

FROM employee

WHERE bdate LIKE ’_ _ 5%’

Considerando o DER desenvolvido no trabalho anterior:

Faça o mapeamento do DER anterior para o modelo relacional, incluindo as restrições de chave, integridade referencial e de domínio.

Desenhe um DER para o Sistema de Eventos Esportivos descrito abaixo

O SEE tem como objetivo armazenar dados de modalidades esportivas (ex: Natação), categorias (ex: 100m costas), competições,locais, pessoas e equipes participeantes,. Além disso, armazenar dados de empresas patrocinadoras e resultados das competições.

Uma categoria deve ter nome, tipo (individual ou coletiva) e gênero. Cada competição tem uma data, horário, local e refere-se a uma fase da categoria, sendo que deve existir pelo menos uma fase final por categoria.

Os atletas ou equipes se inscrevem em categorias e participam de competições. Cada atleta (ou equipe) terá um resultado nba competição, incluindo um escore e uma indicação de colocação na competição e na categoria. O vencedor da competição final será o vencedor da categoria. Cada local terá um endereçou, capacidade de público e lista de modalidades esportivas. As pessoas terão CPF, nome, idade e serão do tipo funcionário ou atleta. Dos atletas deve-se registrar as categorias inscritas. Os funcionários podem ser responsáveis por locais. Cada local deve ter um responsável. O árbitro é um tipo especial de funcionário para o qual deve-se registrar as modalidades. Cada equipe terá um nome e uma lista de atletas participantes. Cada empresa patrocinadora terá um cnpj, nome, endereço e tipo de patrocínio (atleta, equipe e/ou evento). Nos dois primeiros casos deve-se registrar quem são os patrocinados, no último caso deve-se régistrar o valor do patrocínio.

  • deduzir dependências funcionais a partir de um conjunto dado;
  • junção sem perda e preservação de dependências funcionais;
  • projeto relacional por síntese;

 

Fecho de DF – F+
Seja F o conjunto de dependências funcionais que são especificadas no esquema de relação R, o conjunto de todas as dependências que incluem F e todas as dependências que podem ser deduzidas de F, é chamado de fechamento de F, ou fecho de F, sendo denotado por F+.
Obs.: uma DF X → Y é deduzida de um conjunto de dependências F especificado em R, SE:
Sempre que r satisfizer todas as dependências em F,  ENTÃO X → Y também se mantém em r.

 

Fecho de DF – F+ – Exemplo
F = {(Dep_nr → Cpf_gerente), (Cpf_gerente → Telefone_ger)}
F |= (Dep_ nr → Telefone_ger); % Lê-se: de F deduzimos…
Como não há mais DF a deduzir de F, temos que:
F+ = F ∪ {(Dep_ nr → Telefone_ger)}

 

Regras de inferência em DF

Captura de Tela 2014-09-24 às 20.50.22

 

Fecho de X sob F – X+

Captura de Tela 2014-09-24 às 20.52.40

 

X+ sob F – Exemplo

 

Captura de Tela 2014-09-24 às 20.53.40

Equivalência de conjuntos de DF

 

Captura de Tela 2014-09-24 às 20.54.28

 

Equivalência de conjuntos de DF –
Exemplo/Exercício calcule F+ e G+

 

 

Captura de Tela 2014-09-24 às 20.55.38

 

Conjunto mínimo de DF

 

Captura de Tela 2014-09-24 às 20.56.02

 

Cobertura mínima de F

 

Captura de Tela 2014-09-24 às 20.57.11

 

Alg. 16.2 – Cobertura mínima de F
Alg. 16.2a – Chave

Captura de Tela 2014-09-24 às 21.05.08

 

Decomposição de R

O conjunto F de dependências funcionais que devem ser mantidas nos atributos de R é especificado pelos projetistas de banco de dados e se torna disponível aos algoritmos de projeto.
Ao utilizar as dependências funcionais, os algoritmos decompõem o esquema de relação universal R em um conjunto de esquemas de relação D = {R1, R2, …, Rm}, que se tornará o esquema do banco de dados relacional; D é chamado de decomposição de R.

 

Preservação de atributo

D = {R1, R2, …, Rm}, temos de garantir que cada atributo em R aparecerá em pelo menos um esquema de relação Ri na decomposição, de modo que nenhum atributo seja perdido. Formalmente, temos

Captura de Tela 2014-09-24 às 21.09.52

Esta é chamada de condição de preservação de atributo de uma decomposição.

 

Preservação de dependência – Intuição

Seria útil se cada dependência funcional X→Y especificada em F aparecesse diretamente em um dos esquemas de relação Ri na decomposição D ou pudesse ser deduzida das dependências que aparecem em alguma Ri.
Informalmente, essa é a condição de preservação de dependência

 

Preservação de dependência – Definição

Captura de Tela 2014-09-24 às 21.11.17

 

Preservação de dependência e 3FN

 

Captura de Tela 2014-09-24 às 21.13.09

 

Junção sem perda (não aditiva)

Captura de Tela 2014-09-24 às 21.14.23

Alg. 16.3 – Testa junção não aditiva 

 

Captura de Tela 2014-09-24 às 21.16.31

 

Captura de Tela 2014-09-24 às 21.17.17

 

Teste de junção não aditiva para
decomposições binárias

 

Captura de Tela 2014-09-24 às 21.18.12

 

 

Decomposições sucessivas

Captura de Tela 2014-09-24 às 21.18.51

 

Preservação de dependência e 3FN

O Algoritmo 16.4, a seguir, cria uma decomposição de preservação de dependência D = {R1, R2, …, Rm} de uma relação universal R com base em um conjunto de dependências funcionais F, tal que cada Ri em D está na 3FN.
Isso garante apenas a propriedade de preservação de dependência; mas não garante a propriedade de junção não aditiva.

 

Alg. 16.4 – Síntese para 3FN com preservação de dependência

Captura de Tela 2014-09-24 às 21.20.32

 

 

 

Motivação: alguns problemas de redundância não
são detectados pelas DF
Então, outras dependências são definidas, por
exemplo:
 Dependências Multivaloradas
 Dependências de Junção
 Dependências de Inclusão

 

Dependência Multivalorada –  O Problema

Seja a relação CPL(curso, professor, livro), onde:
– O professor P pode lecionar o curso C
– O livro L é recomendado para o curso C

Captura de Tela 2014-09-24 às 19.15.07

Chave é CPL

Livros e professores são independentes

Está na FNBC, mas há redundância

Sugere outra FN que nos leve a normalização de CPL para CP e CL

 

Dependência Multivalorada – Intuição

Sejam r, R, X e Y conforme definido, a dependência multivalorada X → → Y é válida  sobre r de R se para cada valor de X em r está  associado um conjunto de valores de Y e esse  conjunto é independente dos valores de Z=R – (X∪ Y)

• Intuitivamente o valor de um atributo determina  um conjunto de valores de outro atributo!!!

 

Dependência Multivalorada – Definição

Captura de Tela 2014-09-24 às 19.17.44

 

15: as tuplas t1, t2, t3 e t4, não são necessariamente distintas.

 

Dependência Multivalorada-Exemplo 1

Captura de Tela 2014-09-24 às 19.19.18

 

Dependência Multivalorada–Exemplo 2

 

 

Captura de Tela 2014-09-24 às 19.20.05

 

Dependência Multivalorada – Definição alternativa

Se X → → Y Então
πYZ(σX=x(R))=πY(σX=x(R)) x πZ(σX=x(R)).
Garante que dado o valor de X os valores de Y e Z  são independentes.
Se existe ti com (X=A e Y=B) e existe tj com (X=A e Z=C) Então deve existir  tk com (X=A, Y=B e Z=C).

 

Dependência Multivalorada – Propriedades

• toda dependência funcional é dependência multivalorada mas o recíproca não é necessariamente verdadeira

• Se (X→ → Y) e (Z=R-X ∪ Y) então X → → Z
• Se Y for subconjunto de X ou R=(X ∪ Y) então a MVD (X → → Y) é trivial
• Se a MVD não for trivial, para garantir a MVD,  teremos que repetir valores em tuplas, gerando redundância…isto leva à 4FN

 

Quarta forma normal – 4FN

 

Captura de Tela 2014-09-24 às 19.22.29

Dependência de Junção

 

 

Captura de Tela 2014-09-24 às 19.22.56

 

Quinta forma normal – 5FN

Captura de Tela 2014-09-24 às 19.24.04

 

Dependência de Junção – Exemplo

 

Exemplo: Seja X = (ecod, pno) e Y=(ecod, place)
e SKILL = X natural join Y

● DJ(X, Y) é uma dependência de junção em SKILL
● SKILL (ecod, pno, place) não está na 5FN pois X e Y não contêm uma superchave de SKILL
● Como vimos anteriormente, SKILL sequer está na 4FN. De fato a dependência multivalorada é um caso particular de dependência de junção, generalizando: DJ(X, Y) ≡ (X∩ Y) → → (X-Y)

Quinta forma normal – 5FN – Exemplo

Exemplo: está na 5FN
emp(ecod, ename, title)
proj(pno, pname, budget)
asg(ecod, pno, resp, dur)
pay(title, sal)
Obs: – uma relação na 5FN não pode ser decomposta sem perda de informação
– dependência de inclusão: define que algumas colunas estão contidas em outras. Chave estrangeira é um exemplo de dependência de inclusão

 

Normalização 2 – Considerações finais

A decomposição multivias para a 5FN é restrição semântica bastante peculiar e a normalização para a 5FN raramente é feita nestes termosUma alternativa à decomposição da relação universal é utilizar ferramentas de projeto conceitual e mapeamento para o relacional.
Por exemplo, um mapeamento do Modelo de Entidades e Relacionamentos para o Modelo Relacional gera esquemas de BD na terceira forma normal.

 

 

Site da disciplina de SBD do prof. Ilmério da Facom-UFU

 

http://www.facom.ufu.br/~ilmerio/sbd

O Trabalho é individual e deve ser entregue manuscrito.

 

1. OBJETIVO
Implementar o protótipo de uma aplicação usando um SGBD conforme instruções a
seguir.
2. O QUE DEVE SER FEITO
• Definir o assunto da aplicação considerando um problema com o mínimo de cinco entidades, incluindo relacionamentos totais, parciais, de diferentes cardinalidades, além de especializações de entidades;
• Elaborar um diagrama conceitual DER para a aplicação;
• Mapear o diagrama conceitual para o modelo relacional;

3. O QUE DEVE SER ENTREGUE EM PAPEL(OU EM MEIO DIGITAL
EM FORMATO PDF)
• o modelo conceitual(Diagrama DER);

• O diagrama do modelo relacional
• uma análise de dependências funcionais e normalização do esquema relacional gerado por meio do mapeamento do EER;

 

Data de Entrega: Semana seguinte à da prova.

 

“O Objetivo básico do projeto de banco de dados é possibilitar ao usuário obter a informação exata em um limite aceitável de tempo, de maneira a executar sua tarefa dentro da organização” (Teorey e Fry)
“O Objetivo do projeto de um banco de dados relacional é gerar um conjunto de esquemas relacionais que nos permita armazenar informações sem redundância desnecessária, apesar de nos permitir recuperar a informação facilmente” (Korth e Silberschatz)

  • Ciclo de vida para o Desenvolvimento de Sistemas de Bancos de Dados
  1. Análise das Necessidades
  2. Projeto Conceitual (DER)
  3. Projeto Físico
  4. Implementação
  5. Monitoração
  6. Sintonização
  7. (Manutenção -> retorna ao 1)

Sistemas de Gerenciamento de Base de Dados (SGBD) encapsulam do 3 ao 5 em um único processo, necessitando apenas ser Sintonizado (ou configurado)

  • Perigos potenciais no projeto de Banco de Dados Relacionais
    • Repetição da informação
      • Informações repetidas consomem espaço de armazenamento e dificultam a atualização
    • Incapacidade de representar parte da informação
      • Por vezes há a necessidade de se incluir valores nulos
    • Perda de Informação
      • Projetos mal elaborados sugerem a decomposição de esquemas relacionais com muitos atributos
  • Dependências Funcionais
    • Dada uma relação R, o atributo Y de R é funcionalmente dependente do atributo X de R, ou:
      • R.X -> R.Y
    • Se e somente se cada valor X em R for associado precisamente a um mesmo valor Y em R, a qualquer momento
    • (Y e X podem ser compostos)

 

Regras para encontrar Dependências Funcionais

 

 

Separação
A -> BC então A -> B e A -> C Exemplo:
CPF -> nome, endereço então CPF -> nome e CPF -> endereço
Leia o exemplo acima da seguinte maneira:
Se com um número de CPF eu encontro o nome e o endereço de uma pessoa, então com este mesmo número eu posso encontrar apenas o nome e com este mesmo número eu posso encontrar apenas o endereço.

Acumulação
A -> B então AC -> B
Exemplo:
CPF -> endereço então CPF, idade -> endereço
Leia o exemplo acima da seguinte maneira:
Se com um número de CPF eu encontro o endereço de uma pessoa, então com este mesmo número mais a idade da pessoa eu posso encontrar o endereço também.

Transitividade
A -> B e B -> C então A -> C
Exemplo:
CPF -> código-cidade e código-cidade -> nome-cidade então CPF -> nome-cidade
Leia o exemplo acima da seguinte maneira:
Se com um número de CPF eu encontro o código da cidade de uma pessoa, e com o código da cidade eu encontro o nome da cidade, então com o número do CPF eu posso encontrar o nome da cidade.

Pseudo-Transitividade
A -> B e BC -> D então AC -> D
Exemplo:
CPF -> código-funcionário e código-funcionário, mês -> salário-funcionário então CPF, mês -> salário-funcionário
Leia o exemplo acima da seguinte maneira:
Se com um número de CPF eu encontro o código do funcionário, e com o código do funcionário mais um certo mês eu encontro o salário que ele recebeu naquele mês, então com o número do CPF mais um certo mês eu posso encontrar o salário que ele recebeu naquele mês.

 

  • Normalização
    • Processo de transformações das relações (tabelas representando entidades e relacionamentos) em novas relações pela aplicação de projeções (quebra e granularização das tabelas)
    • Consequências:
      • Diminuem problemas de anomalias e inconsistências
      • Relações simplificadas e estrutura regular
      • Aumento da integridade dos dados
      • Necessidade de realização de agregamentos
      • Eventual queda na performance
    • 5 Formas normais
    • 1a. Forma Normal:
      • Todos os atributos admitem apenas valores atômicos1ec455344c8a1517c98c97f5a583641e
    • 2a. Forma Normal
      • Cada atributo não chave é dependente de toda a chave primária238e398f3558556612e5c8d287375225
      • Problemas Solucionados
        • Inserção
          • Fornecedor somente poderá ser cadastrado quando fornecer pelo menos 1 peça
        • Remoção:
          • Ao se remover algum pedido remove-se também a informação de localidadeassociadaao fornecedor a que se refere o pedido
        • Atualização
          • Redundância de informações em diversas tuplas. Ex: Mudança do endereço de um fornecedor
    • 3a. Forma Normal
      • Cada atributo chave é dependente não transitivo da chave primáriac55fdeda421c251c152ab89f7ce9b8d0
      • Problemas Solucionados 3a. FN
        • Inserção:
          • Não se pode registrar o fato de uma cidade ter um determinado porte até que haja um fornecedor daquela cidade
        • Remoção:
          • Removendo-se o último fornecedor de uma cidade perde-se a informação porte
        • Atualização:
          • Quando uma cidade muda de porte pode ser necessário atualizar diversas tuplas de fornecedor

 

Captura de Tela 2014-09-17 às 20.35.10

 

 

    • Restrições de Integridade
      • Integridade de Chave
      • Integridade de Entidade
      • Integridade Referencial
    • Tipos:
      • Restrições implícitas
      • Restrições Explícitas
        • Especificação procedimental
        • Especificação declarativa
        • Especificação de Triggers
  •  Forma normal de Boyce-Codd – FNBC
    Uma relação R está na forma normal de Boyce-Codd
    se para toda dependência funcional X → Y associada
    com R uma das seguintes afirmações é verdadeira:

    • Y ⊆ X (i.e, X → Y é DF trivial);ou
    •  X é superchave de R;

Exemplo:
Está na FNBC: emp(ecod, ename, title), pay(title, sal),
É raro uma relação estar na 3FN e não estar na
FNBC, mas vejamos dois exemplos.

 

Exemplo de normalização até a FNBC
Seja o esquema de lotes a venda em um Estado:
lotes(propriedadeNum, cidade, loteNum, area, preco, imposto)
chaves primária: propriedadeNum;
DF1: propriedadeNum é chave primária
DF2: (cidade, loteNum) é chave candidata
DF3: cidade → imposto; % imposto fixo por cidade
DF4: area → preco; % preço por área independente
.                                   % dos demais atributos
DF5: area → cidade; % domínio de tamanhos
.                                     % disjuntos por cidade

Está na 1FN? E na 2FN? E na 3FN? E na FNBC?

Exemplo lotes: 1FN

lotes(propriedadeNum, cidade, loteNum, area, preco, imposto)
Está na 1FN, mas não na 2FN, pois:
DF2: (cidade, loteNum) → propriedadeNum, area, preco, imposto
DF3: cidade → imposto
Imposto é parcialmente dependente da chave
(cidade, loteNum)

Exemplo lotes1 e lotes2: 2FN
lotes1(propriedadeNum, cidade, loteNum, area, preco)
lotes2(cidade, imposto)
lotes2 está na 3FN;
lotes1 está na 2FN, mas não na 3FN, pois:
DF4: area → preco;
– area não é superchave e preço não é atributo principal

Exemplo lotes1 e lotes2: 3FN
lotes1a(propriedadeNum, cidade, loteNum, area)
lotes1b(area, preco)
lotes2(cidade, imposto)
Lotes1a, lotes1b e lotes2 estão na 3FN, mas
lotes1a não está na FNBC, pois:
DF5: area → cidade;
Observe que lotes1a está na 3FN porque, embora area
não seja superchave, cidade é atributo principal.
Entretanto isso não é relevante para a FNBC

 

Exemplo lotes na FNBC
lotes1ax(propriedadeNum, loteNum, area)
lotes1ay(area, cidade)
lotes1b(area, preco)
lotes2(cidade, imposto)
Observe que a DF2 foi perdida nesta decomposição

Outro Exemplo de 3FN x FNBC
ensina(aluno, disciplina, professor)
DF1: {aluno, disciplina} → professor;
DF2: professor → disciplina; % cada professor
% leciona uma disciplina
1FN: atributos são atômicos? Sim
2FN: há dependência parcial? Não, logo está na 2FN
3FN: dependências de superchaves ou apontando para
atributos principais? sim, logo está na 3FN
FNBC: dependências de superchaves? Não, veja DF2
Como decompor ensina?

Alternativas de decomposição na FNBC
1. (aluno, professor), (aluno, disciplina)
2. (disciplina, professor), (aluno, disciplina)
3. (disciplina, professor), (aluno, professor)
Todas perdem DF1, mas em 3. evitamos tuplas falsas após
uma junção. Ex. de instância:

 

Captura de Tela 2014-09-17 às 21.10.57

 

 

 

Estudo para a Prova:

Construa um Diagrama Modelo Entidade Relacionamento tabular (Relacional) agrupando os atributos nas tabelas que vão representar as entidades e os relacionamentos do seu banco de dados

Construa os diagramas de dependências funcionais para as tabelas propostas (Diagrama relacional)
Garanta que cada atributo será atômico (isto, é, não pode ser dividido) para se obter um modelo na 1a. FN
Elimine as dependências parciais da chave primária em suas tabelas para obter um projeto na 2a. FN
Elimine as dependências transitivas nas tabelas (se houver), obtendo um esquena na 3a. FN

 

regras para mapeamento do Modelo Conceitual de Alto Nivel para o modelo Relacional (de mais baixo nivel)

1: Do Diagrama Conceitual (DER)
Tipos de Entidade (E)
Mapeadas em Relacionamentos (R)
Usando todos os atributos encontrados em (E)
A chave primária de E se torna chave primária em R
Atributos compostos de E possuem suas folhas mapeadas em R
Todos os outros atributos simples são mapeados na relação R
Atributos Multivalorados não são aplicados a essa regra
2: Se tivermos um atributo multivalorado
Cria-se uma relação com o nome do atributo multivalorado
Ex: Grau de escolaridade
Chave Estrangeira (ex: Profissional_ID)
Intenção da Relação (Nome do Grau de Escolaridade)
Ambas são uma chave primária composta
3a. Regra: Tipos de Entidades Fracas
Tipos de Entidades Fracas:     Tipos entidade que não têm seus próprios atributos-chave são chamados tipos entidade fraca
Entidades, que pertencem a um tipo entidade fraca, são identificadas por estarem relacionadas a entidades específicas do outro tipo entidade, por meio da combinação com valores de seus atributos
Chamamos esse outro tipo entidade identificador ou tipo entidade proprietária, e chamamos o tipo relacionamento entre o tipo entidade fraca e seu tipo proprietário de relacionamento identificador do tipo entidade fraca.
Sempre possui uma restrição de participação total (dependência de existência) em relação a seu relacionamento identificador, porque uma entidade fraca não poderá ser identificada sem um tipo proprietário
Nem toda a dependência de existência resulta em um tipo entidade fraca.: Por exemplo, uma entidade CARTEIRA_HABILITACAO não poderá existir a menos que esteja relacionada a uma entidade PESSOA, embora tenha sua própria chave (NumeroLicenca) e conseqüentemente não seja uma entidade fraca.

Segue a regra número 1:
Pega-se a chave primária da entidade fraca (pertencente à entidade pai) e a transforma em uma chave primária parcial do Relacionamento da Entidade Fraca
Atributos compostos de E possuem suas folhas mapeadas em R
Todos os outros atributos simples são mapeados na relação R

Adendo:
Verificar o tipo de relacionamento entre o Tipo Entidade Forte e Fraca:
Compõe a chave primária um código primário derivado da entidade pai e
Verificar se o relacionamento entre a entidade forte e fraca possui atributos
atributos podem fazer parte da chave primária

4a. Regra: O que se fazer com um relacionamento 1:1
Chave estrangeira pode estar em qualquer um (mas em apenas um) dos relacionamentos.
Normalmente utiliza-se discernimiento do contexto para identificar em qual
Excessão:
Quando o relacionamento possui atributos (ver regra 6)

5a. Regra: O que se fazer com um relacionamento 1:muitos
Chave estrangeira:
O relacionamento “muitos” é quem levará a chave estrangeira, sendo essa a chave primária do relacionamento “1”
Excessão:
Quando o relacionamento possui atributos:
atributos seguem a chave estrangeira (permanecendo no lado: “muitos”)

6a. Regra: O que se fazer com um relacionamento muitos:muitos
Cria-se uma tabela de relacionamento… (ou um relacionamento de relacionamento)
(inclui excessão à regra 4)

7a. Regra: Herança
Funciona como um tipo entidade fraca.