Você está na página 1de 16

14/12/20

Modelação de Bases de Dados

Modelo Relacional –
Implementação
Valéria Pequeno

Criação e Manipulação da Base de Dados

INTRODUÇÃO À LINGUAGEM SQL

Introdução
• Nas aulas passadas …

Modelo
Modelo Lógico Normalizações
Conceptual

• Agora ...

Vamos criar uma base de dados usando SQL

1
14/12/20

Introdução
• SQL (Structures Query Language) foi desenvolvida
primeiramente pela IBM com o intuito de implementar o
modelo relacional proposto por Codd.
• SQL é uma linguagem estruturada para manipulação dos
dados contidos em um SGBD, tais como Oracle ou SQL Server
• SQL conecta aplicações às bases de dados

Aplicação
Online
SQL
Aplicação SQL Base de
Desktop
SQL Dados
Intranet

Introdução
• SQL é um standard ANSI e ISO mundialmente aceito para BD
relacionais
• ANSI: American National Standards Institute
• ISO: International Organization for Standardization
• Importância: reduz a incompatibilidade entre os sistemas
• Padrões SQL:
• SQL-86 SQL-89 SQL-92 SQL:1999 SQL:2003
• Sistemas comerciais oferecem a maioria senão todas, as
características do padrão SQL-92, além de estender a linguagem
com características especiais (proprietárias de cada SGBD)
• Aspectos da linguagem variam de implementação para
implementação, alguns podem até não estar disponíveis para um
dado SGBD, normalmente as variações de sintaxe são poucas

Introdução
• SQL é uma linguagem …
• Estruturada: possui uma sintaxe formal
• Declarativa: dizemos o que queremos, não como o computador
(ou SGBD) vai realizar o que pretendemos
• Mapeamento entre modelo lógico e modelo físico (resumo)
Modelo Lógico Modelo Físico
Português Inglês
Esquema da relação Tabela Table
Tuplo Linha /Registo Row
Atributo Coluna / Atributo / Campo Column
Chave primária Chave primária Primary Key
Chave estrangeira Chave estrangeira Foreign Key

2
14/12/20

SQL
• Sub-dividida em 4 sub-linguagens: DDL, DML, DCL e DTL

DDL (Data Definition Language – Linguagem de Definição de Dados)

DDL -> Estrutura


• Utilizada para a construção e alteração das estruturas da BD
(tabelas, colunas, etc.)
• Exemplos:
• Descrever a estrutura das tabelas
• Exibir a BD
• Criar, alterar e remover tabelas

SQL
• Sub-dividida em 4 sub-linguagens: DDL, DML, DCL e DTL

DML (Data Manipulation Language – Linguagem para Manipulação


de Dados)

DML -> Dados

• Manipulação de dados significa: inserir, alterar, remover e consultar


os dados da BD
• Exemplos:
Listar todos os empregados cujo salário é maior que 1200 euros
Alterar o nome João S. Por João Silva na tabela empregado

SQL
• Sub-dividida em 4 sub-linguagens: DDL, DML, DCL e DTL

DCL (Data Control Language – Linguagem de Controle de Dados)

DCL -> Controle

• Utilizada para fazer a gestão da BD


• Contém comandos para dar/remover permissão de acesso aos
dados, editar configurações de desempenho da BD, importar ou
exportar dados, etc..
• Exemplo:
• O chefe do departamento de RH tem acesso aos dados de todos os
empregados de uma empresa, mas não tem acesso as contas da
empresa

3
14/12/20

SQL
• Sub-dividida em 4 sub-linguagens: DDL, DML, DCL e DTL

DTL (Data Transaction Language – Linguagem de Transação de


Dados)

DTL -> Transação


• Utilizada para controlar transações na BD.
• Uma transação é a unidade lógica da BD contendo um conjunto de
ações onde tudo é feito ou nada é feito.
• 3 comandos:
• Iniciar uma transação (BEGIN TRANSACTION)
• Efetivamente realizar as operações na BD de modo permanente
(COMMIT)
• Cancelar as ações/operações feitas (ROLLBACK)

10

SQL
• SQL é limitada e está longe de ser perfeita
• SGBDs usualmente fornecem extensões para suprir
necessidades específicas
• Exemplo:
• Funções para tornar as consultas em datas mais eficientes.
• O que vamos ver …
• DDL e DML básico
• De acordo com o padrão SQL
• Praticamente funciona em todos os SGBDs, mas a sintaxe pode
mudar ligeiramente
• Bibliografia
• Fundamentos de Bases de Dados, Feliz Gouveia, FCA
• SQL, Luis Damas, FCA

11

DDL
• A DDL permite especificar informações sobre relações,
incluindo:
• O esquema de cada relação

• O domínio de valores (tipo de dado) associado com cada atributo

• Restrições de integridade

• Além disso, para cada relação podemos definir: Não faz parte dos
comandos
• O conjunto de índices básicos da DDL
• Informações sobre segurança e autorização
• Estrutura física de armazenamento da relação no disco

12

4
14/12/20

Tipos de dados em SQL


• Char(n): string de caracteres de tamanho fixo N, onde N é
definido pelo utilizador
• Varchar(n): string de caracteres de tamanho variável. N é o
tamanho máximo da string
• Int: inteiro (um conjunto finito dos números inteiros)
• SmallInt: subconjunto do tipo int
• Numeric(p,e): número com ponto decimal fixo. P indica a
precisão (o tamanho do número que se deseja armazenar) e e
indica o tamanho da parte decimal.
• Real, double precision: número com ponto flutuante
• Float(n): número com ponto flutuante, com pelo menos N
dígitos de precisão (número antes do ponto decimal

13

Alguns Tipos de Dados em SQL


Padrão SQL-92 Oracle
Char(n) Char(n)
Varchar(n) Varchar2(n)
int Integer
SmallInt SmallInt
Numeric(p,e) Number(p,e)
Real/double precision Float(63)/Float(126)
Float(n) Float(n)
Date Date
Timestamp Timestamp

14

Criação de Tabelas
• Uma relação em SQL é criada usando o comando:
create table R (A1 D1, A2 D2, ..., An Dn,
(restrição_de_integridade1),
...,
(restrição_de_integridadek))

• R é nome da relação/tabela
• Ai é o nome de um atributo da relação, com Di o seu
respectivo tipo de dados
• Exemplo:
create table professor (
ID char(5),
nome varchar(20),
nome_depto varchar(20),
salario numeric(8,2));
(*) Fonte dos exemplos: Database System Concepts - 6th Edition, ©Silberschatz, Korth and Sudarshan

15

5
14/12/20

Criação de Tabelas (cont)


• Not null Valor nulo não faz parte do domínio do atributo
• Primary key (A1, ..., An ) Chave primária
• Foreign key (A1, ..., An ) references R Chave estrangeira
• Exemplo:
create table professor (
ID char(5),
nome varchar(20) not null,
nome_depto varchar(20),
salario numeric(8,2),
primary key (ID),
foreign key (nome_depto) references departamento);

• Quando declaramos uma primary key, automaticamente seus


atributos já são associados com not null

16

Criação de Tabelas (exemplos)


create table estudante (
ID varchar(5),
nome varchar(20) not null,
nome _depto varchar(20),
tot_cred numeric(3,0),
primary key (ID),
foreign key (nome)_depto references departamento);

create table takes (


ID varchar(5),
course_id varchar(8),
sec_id varchar(8),
semester varchar(6),
year numeric(4,0),
grade varchar(2),
primary key (ID, course_id, sec_id, semester, year) ,
foreign key (ID) references student,
foreign key (course_id, sec_id, semester, year) references section);

17

Criação de Tabelas (exemplos)

create table course (


course_id varchar(8),
title varchar(50),
dept_name varchar(20),
credits numeric(2,0),
primary key (course_id),
foreign key (dept_name) references department);

18

6
14/12/20

Exercício 1
• Crie a BD (usando o SQL padrão) especificada no esquema abaixo:
Empregado (PrimeiroNome, InicialMeio, UltimoNome, NumEmpregado,
DataNascimento, Endereco, Sexo, Salario, NumSupervisor, NumDepto)
Empregado [NumSupervisor] referencia Empregado [NumEmpregado]
Empregado [NumDepto] referencia Departamento[NumDepto]
Departamento (NomeDepto, NumDepto, NumGerente, DataInicioGerencia)
Departamento[NumGerente] referencia Empregado [NumEmpregado]
Localizacao_Depto (NumDepart, Localizacao)
Localizacao_Depto [NumDepart] referencia Departamento[NumDepto]
Projeto (NomeProj, NumProj, Localizacao, NumDepto)
Projeto[NumDepto] referencia Departamento[NumDepto]
Trabalha_em (NumEmpregado, NumProj, Horas)
Trabalha_em [NumEmpregado] referencia Empregado [NumEmpregado]
Trabalha_em [NumProj] referencia Projeto [NumProj]
Dependente (NumEmpregado, NomeDependente, Sexo, DataAniversario, Parentesco)
Dependente[NumEmpregado] referencia Empregado [NumEmpregado]

19

Atualização de Tabelas
• Drop Table
• Remove uma tabela
• Exemplo:
drop table estudante

• Alter Table
• Faz alterações na estrutura de uma tabela
• Exemplos:
• Adicionar um atributo:alter table professor add especialidade char(15)
• Remover um atributo: alter table professor drop especialidade

• Também podemos alterar chaves primárias, chaves


estrangeiras, índices, etc.

20

Consultando as Bases de Dados

ÁLGEBRA RELACIONAL

21

7
14/12/20

Introdução
• Relembre: uma relação (ou mais precisamente um esquema de
relação) é representado por:
• R(A1 , A2, …, An ) onde:
• A1, A2, …, An são atributos
• A1 é a chave primária da relação R
• Exemplo:
• Aluno(Numero, nome, contacto)
• O estado de uma relação R (também chamado relação),
representado por r, é o conjunto de tuplos (a1,a2,...,an) os quais são
os valores atuais do esquema da relação em um dado instante
• Exemplo:
• (12345,”João Maia”,213456789)
• A ordem dos atributos é relevante, entretanto, a ordem dos tuplos
não!

22

Álgebra Relacional
• “É uma linguagem procedimental que define operações sobre a base
F. Gouveia
de dados, através de expressões algébricas”
• Proposta por Codd (1969)

• Opera sobre conjunto de tuplo (relações) e contém um conjunto de


operadores relacionais
• A álgebra relacional é fechada:
• Operadores aceitam uma ou duas operações e sempre resultam em
uma relação
• É possível composição de operadores, encadeando-os em
expressões

23

Álgebra Relacional
• Consiste de 5 operações básicas:
• Seleção ( s )

• Projeção ( Õ )

• União ( È ) Para além dessas


existem ainda: eliminar
• Diferença ( – ) duplicados, ordenar,
agrupar e agregar
• Produto cartesiano ( x )
• Outras operações:
• Interseção ( Ç )

• Junção ( ⋈)
• Renomear ( r )

24

8
14/12/20

Seleção (𝛔)
• Seleciona tuplos que sa_sfaç̧am à condição de seleção
• Diminui o número de tuplos de uma relação
• Sintaxe:
• 𝛔condição_de_seleção (relação)

• Relação
• resultado de alguma operação da álgebra relacional

• pode envolver operadores de comparação


(=, >, ≥, <, ≤, ≠ )
• pode combinar condições usando-se ∧,∨, ⁊

25

Seleção
• Relação Aluno número Nome Dt_ingresso Curso BI

1001 João 22-09-2004 010 22734567


1002 Pedro 22-09-2005 010 22834567
1003 Gabriel 22-09-2004 013 22349856
1004 Ana 22-09-2005 010 22343449
1005 Eva 22-09-2004 013 22039484

• Seleção: scurso=010 ^ número ≥ 1002 (Aluno)

número Nome Dt_ingresso Curso BI

1002 Pedro 22-09-2005 010 22834567


1004 Ana 22-09-2005 010 22343449

26

Projeção (∏)
• Projeta os atributos solicitados
• produz uma relação com o mesmo número de tuplos que a
original mas como menos atributos
• Faz uma partição vertical na relação
• Sintaxe:
• ∏lista_de_atributos (relação)

• Relação
• resultado de alguma operação da álgebra relacional

• lista de atributos separados por


vírgulas

27

9
14/12/20

Projeção
• Relação Aluno número Nome Dt_ingresso Curso BI

1001 João 22-09-2004 010 22734567


1002 Pedro 22-09-2005 010 22834567
1003 Gabriel 22-09-2004 013 22349856
1004 Ana 22-09-2005 010 22343449
1005 Eva 22-09-2004 013 22039484

• Projeção: Õ número,nome (Aluno) Número Nome


1001 João
1002 Pedro
1003 Gabriel
1004 Ana
1005 Eva

28

União (∪)
• Dada duas relações R e S, gera uma relação que contém todos
os tuplos pertencentes a R, a S, ou a ambas R e S
• Exige que R e S sejam união compacveis
• Duas relações são compacveis se:
• possuem o mesmo grau
• seus atributos possuem os mesmos nomes e domínios
• A relação resultante não contém tuplos duplicados (são
removidos)
• Sintaxe:
•R∪S
• R e S:
• Relação
• resultado de alguma operação da álgebra relacional

29

União
• Relações Departamento e Depto
Departamento Depto
codDep Nome codDep Nome
A Tecnologia A Informático
B Saúde C Humanas
C Humanas E Financeiro

• Departamento È Depto

codDep Nome
A Tecnologia
A Informático
B Saúde
C Humanas
E Financeiro

30

10
14/12/20

Diferença (-)
• Dada duas relações R e S, gera uma relação que contém todos
os tuplos pertencentes a R que não pertencem a S
• Exige que R e S sejam união compatíveis
• Sintaxe:

•R-S

• R e S:
• Relação
• resultado de alguma operação da álgebra relacional

31

Conjunto Diferença
• Relações Departamento e Depto
Departamento Depto
codDep Nome codDep Nome
A Tecnologia A Informático
B Saúde C Humanas
C Humanas E Financeiro

• Departamento - Depto

codDep Nome
A Tecnologia
B Saúde

32

Interseção (∩)
• Dada duas relações R e S, gera uma relação que contém todos
os tuplos pertencentes tanto a R quanto a S
• Exige que R e S sejam união compatíveis
• Sintaxe:

•R∩S

• R e S:
• Relação
• resultado de alguma operação da álgebra relacional

• Importante: R Ç S = R – (R – S)

33

11
14/12/20

Interseção
• Relações Departamento e Depto
Departamento Depto
codDep Nome codDep Nome
A Tecnologia A Informático
B Saúde C Humanas
C Humanas E Financeiro

• Departamento Ç Depto
codDep Nome
C Humanas

34

Produto Cartesiano (×)


• Combina tuplos de duas relações, as quais não precisam ter
atributos comum
• Tuplos da relação resultante:
• todas as combinações de tuplos possíveis entre as relações
participantes
• Permite combinar informações de relações com esquemas
diferentes
• Sintaxe:
•R×S
• R e S:
• Relação
• resultado de alguma operação da álgebra relacional

35

Produto Cartesiano
• Relações Depto e Curso
Depto Curso
codDep NomeD codCurso NomeC
A Tecnologia 010 LEI
B Saúde 011 IG
013 MM

codDep NomeD CodCurso NomeC


• Produto cartesiano:
A Tecnologia 010 LEI
Depto X Curso
• R e S: A Tecnologia 011 IG
• Grau da relação: nº de A Tecnologia 013 MM
atributos de Depto + nº de
atributos de curso B Saúde 010 LEI
R e S:
• relacional
• Cardinalidade da relação: nº B Saúde 011 IG
de tuplos de Depto * nº de
B Saúde 013 MM
tuplos de curso
• relacional

36

12
14/12/20

Produto Cartesiano
• Relações Depto e Curso
Depto Curso
codDep Nome codCurso Nome
A Tecnologia 010 LEI
B Saúde 011 IG
013 MM

codDep Depto.Nome CodCurso Curso.Nome


• Produto cartesiano:
A Tecnologia 010 LEI
Depto X Curso
A Tecnologia 011 IG
A Tecnologia 013 MM
B Saúde 010 LEI
B Saúde 011 IG
B Saúde 013 MM

37

Renomear (𝜌)
• Renomeia
• nome da relação
• nomes dos atributos da relação
• nome da relação e nomes dos atributos
• Sintaxe:

• 𝜌S(B1,B2, ..., Bn)(relação)


• Relação
• resultado de alguma operação da álgebra relacional

• Novos nomes para os atributos da relação

• Novo nome para a relação

38

Renomear
• Relações Depto
Depto
codDep Nome
A Tecnologia
B Saúde

• Renomear:
r Departamento (Depto)
Departamento
codDep Depto.Nome
A Tecnologia
B Saúde

39

13
14/12/20

Junçã o ou junçã o interna (⋈)


• Combina tuplos relacionados de duas relações
• Somente os tuplos de uma relação que têm um correspondente
tuplo na outra relação fazem parte do resultado
• Sintaxe:
• R ⋈ condição_de_junção S

• R e S:
• Relação
• resultado de alguma operação da álgebra relacional

40

Junção
• Relações Depto e Curso
Depto Curso
codDep Nome codCurso Nome CodDep
A Tecnologia 010 LEI A
C Saúde 011 IG A
013 MM B
014 LEB B

• Depto Depto.CodDep=Curso.CodDepCurso

Depto.codDep Depto.Nome codCurso Curso.Nome Curso.CodDep


A Tecnologia 010 LEI A
A Tecnologia 011 IG A

41

Para além destes


Tipos de Junção existem outros tais
como: junção natural

• LEFT [OUTER] JOIN (Junção –externa – esquerda)


• R⟕S
• Mantém cada tuplo de R no resultado, preenche com valores nulos
os tuplos de S que não sa}sfazem a condição de junção
• RIGHT [OUTER] JOIN Junção –externa – direita)
• R⟖S
• Mantém cada tuplo de S no resultado, preenche com valores nulos
os tuplos de R que não sa}sfazem a condição de junção
• FULL [OUTER] JOIN (Junção –externa – completa)
• R⟗S
• Mantém cada tupla de R e de S no resultado, preenche com valores
nulos os tuplos de R e S que não sa}sfazem a condição de junção

42

14
14/12/20

Left join
• Relações Depto e Curso
Depto Curso
codDep Nome codCurso Nome CodDep
A Tecnologia 010 LEI A
C Saúde 011 IG A
013 MM B
014 LEB B

• Depto ⟕ Depto.CodDep=Curso.CodDepCurso

Depto.codDep Depto.Nome codCurso Curso.Nome Curso.CodDep


A Tecnologia 010 LEI A
A Tecnologia 011 IG A
C Saúde NULL NULL NULL

43

Right join
• Relações Depto e Curso
Depto Curso
codDep Nome codCurso Nome CodDep
A Tecnologia 010 LEI A
C Saúde 011 IG A
013 MM B
014 LEB B
• Depto ⟖ Depto.CodDep=Curso.CodDepCurso

Depto.codDep Depto.Nome codCurso Curso.Nome Curso.CodDep


A Tecnologia 010 LEI A
A Tecnologia 011 IG A
NULL NULL 013 MM B
NULL NULL 014 LEB B

44

Full join
• Relações Depto e Curso
Depto Curso
codDep Nome codCurso Nome CodDep
A Tecnologia 010 LEI A
C Saúde 011 IG A
013 MM B
Depto ⟗ Depto.CodDep=Curso.CodDepCurso 014 LEB B

Depto.codDep Depto.Nome codCurso Curso.Nome Curso.CodDep


A Tecnologia 010 LEI A
A Tecnologia 011 IG A
C Saúde NULL NULL NULL
NULL NULL 013 MM B
NULL NULL 014 LEB B

45

15
14/12/20

Exercício 1
• Sejam as relações R(A string, B string), S(A string, B string), T(B
string, C string) e U(B string):

Calcule:
a) R ∪ S
b) R ∪ T
c) R–S
d) R⋈T
e) 𝚷A(R)
f) 𝞂A=C(R×T) g) S ⟖ T h) R ⟗ T

46

Exercı́cio 2
• Considere o esquema de BD abaixo e responda as seguintes perguntas.
Empregado (PrimeiroNome, InicialMeio, UltimoNome, NumEmpregado,
DataNascimento, Endereco, Sexo, Salario, NumSupervisor, NumDepto)
Empregado [NumSupervisor] referencia Empregado [NumEmpregado]
Empregado [NumDepto] referencia Departamento[NumDepto]
Departamento (NomeDepto, NumDepto, NumGerente, DataInicioGerencia)
Departamento[NumGerente] referencia Empregado [NumEmpregado]
Localizacao_Depto (NumDepart, Localizacao)
Localizacao_Depto [NumDepart] referencia Departamento[NumDepto]
Projeto (NomeProj, NumProj, Localizacao, NumDepto)
Projeto[NumDepto] referencia Departamento[NumDepto]
Trabalha_em (NumEmpregado, NumProj, Horas)
Trabalha_em [NumEmpregado] referencia Empregado [NumEmpregado]
Trabalha_em [NumProj] referencia Projeto [NumProj]
Dependente (NumEmpregado, NomeDependente, Sexo, DataAniversario, Parentesco)
Dependente[NumEmpregado] referencia Empregado [NumEmpregado]

47

Exercício 2 (cont.)
• Pede-se:
1. Recuperar os empregados que trabalham para o
departamento com o número 5
2. Recuperar o nome (primeiro e último nome) e o endereço
dos empregados que trabalham para o departamento com
número = 5 e salário maior que 3000
3. Recuperar o nome (primeiro e último nome) dos
empregados que tenham dependentes
4. Recuperar o nome (primeiro e último nome) dos
empregados que não tenham dependentes

48

16

Você também pode gostar