Bancos de Dados
O Modelo Relacional
• O modelo de dados relacional foi introduzido por Codd em
1970 através de um artigo acadêmico
• A base é o conceito de relação da matemática (teoria de
conjuntos e lógica de predicados de primeira ordem)
• Sua simplicidade e eficiência garantiram a ele amplo
predomínio nos sistemas comerciais atuais
• Este capítulo traz:
– Características básicas do modelo – Restrições e sua definição
Conceitos do Modelo Relacional
• Domínio
– Um domínio D é um conjunto de valores atômicos – Por atômico entende-se indivisível
– A definição do domínio pode começar com a especificação de um tipo de dado
– Exemplos
• Telefones_Nacionais: até 12 dígitos numéricos; tem que ser um telefone válido
• Idade: inteiro positivo entre 0 e 99
• CPF_Valido: 11 dígitos numéricos, sendo que os últimos 2 obedecem à regra de dígito verificador
Conceitos do Modelo Relacional
• Domínio (cont)
– Um tipo ou formato de dado pode também ser especificado para cada domínio
– Exemplo: Telefones_nacionais: (0dddd)dddd-dddd, onde d=[0-9]
– Informações adicionais podem ser necessárias para caracterizar o domínio. Ex.: altura de uma pessoa definida em metros (valor real) ou centímetros (valor inteiro)
Conceitos do Modelo Relacional
• Esquema de uma relação
– R(A1, A2, ..., An), onde R é a relação e Ai são atributos
– Cada atributo Ai corresponde ao nome do papel desempenhado por algum domínio D no esquema da relação R
– D é denominado o domínio de Ai e é indicado por dom(Ai)
– O esquema de uma relação é usado para descrever essa relação, e por isso é chamado de nome da relação
– O grau de uma relação (n) é o número de atributos desse esquema de relação
– Exemplo:
• ALUNO(Nome, CPF, Telefone, Endereço, Idade, numMatrícula)
Conceitos do Modelo Relacional
• Atributos
– A cada atributo corresponde um domínio
– A especificação dos domínios é feita da seguinte forma:
• ALUNO: dom(CPF) = CPF_Valido,
dom(Nome) = Nomes,
dom(Telefone) = Telefones_Nacionais, dom(Endereço) = Endereços,
dom(numMatrícula) = NúmerosDeMatrícula
• Domínio Nomes: conjunto de até 50 caracteres
• Domínio Endereços: conjunto de até 150 caracteres
• Domínio NúmerosDeMatrícula: seqüência de 7 dígitos numéricos no padrão dddddd-d
• Domínio CPF_Valido: 11 dígitos numéricos, sendo que os últimos 2 obedecem à regra de dígito verificador
• Domínio Telefones_Nacionais: até 12 dígitos numéricos; tem que ser um telefone válido
Conceitos do Modelo Relacional
• Relações e tuplas
– Uma relação (ou estado da relação) r de um esquema de relação R(A1, A2, ..., An), também representada por r(R) é um conjunto de
n-tuplas r = {t1, t2, ..., tn}.
– Cada tupla ti é uma lista ordenada de n valores t = <v1, v2, ..., vn>, onde cada valor vi é um elemento pertencente a dom(Ai), ou um valor especial chamado nulo
– O i-ésimo valor na tupla t, que corresponde ao atributo Ai, é representado como t[Ai]
Conceitos do Modelo Relacional
• Outra definição para relação:
– r(R) é uma relação matemática de grau n nos domínios dom(A1), dom(A2), ..., dom(An), que é um subconjunto do produto cartesiano dos domínios que definem R
– O produto cartesiano gera todas as possíveis combinações de valores dos domínios existentes
– Se representa a cardinalidade do domínio, então o número total de possíveis tuplas diferentes é
))
(
)
(
)
(
(
)
(
R
dom
A
1dom
A
2dom
A
nr
⊆
×
×
K
×
)
(
)
(
)
(
A
1dom
A
2dom
A
ndom
⋅
⋅
K
⋅
) (Ai domConceitos do Modelo Relacional
• De todas essas possíveis combinações, o estado atual da
relação reflete apenas as tuplas válidas, que representam
um determinado estado do mundo real em um determinado
momento
• Como o estado do mundo real se altera, então a relação
também é alterada, se transformando em outro estado
• É possível que diversos atributos compartilhem o mesmo
domínio, porém estarão desempenhando papéis diferentes
– Ex.: atributos diferentes para telefone residencial e telefone comercial
Conceitos do Modelo Relacional
• Características das relações
– Ordenamento das tuplas: matematicamente, não existe
ordenamento, porém na implementação alguma ordem terá que ser estabelecida
• É possível definir a relação estabelecendo pares (atributo, valor)
– Valores nas tuplas: cada valor em uma tupla é atômico; não são permitidos atributos multivalorados ou compostos
• Este é o pressuposto da primeira forma normal
• Atributos multivalorados podem ser codificados em relações separadas
• Mais recentemente vem sendo implementado o conceito de relações
aninhadas
– Valor nulo: podem existir diversos tipos (ex: não disponível, não se aplica, etc.), porém isso dificulta a implementação
Conceitos do Modelo Relacional
• Interpretação de uma relação
– O esquema de uma relação pode ser interpretado como uma
afirmação (assertion): cada aluno possui nome, CPF, endereço,
telefone e número de matrícula
– Assim, cada tupla pode ser interpretada como um fato, uma determinada instância da afirmação
– Algumas relações podem representar fatos sobre entidades, enquanto outras podem representar fatos sobre relacionamentos
Conceitos do Modelo Relacional
• Notação do modelo relacional, resumo
Restrições Relacionais
• Um banco de dados típico contém diversas relações, cujas
tuplas estão relacionadas de diversas maneiras
• O estado do banco de dados corresponde ao conjunto dos
estados das relações em um determinado instante
• Restrições são regras derivadas do mundo real e que atuam
sobre os valores armazenados no BD
Restrições Relacionais
• Categorias de restrições:
– Inerentes ao modelo de dados
– Baseadas no esquema do banco de dados
• Podem ser expressas usando o modelo
• Especificadas usando a DDL no nível físico
– Restrições da aplicação
• não podem ser expressas diretamente nos esquemas • são implementadas nos programas da aplicação
• Existem ainda dependências de dados (funcionais e
Restrições Relacionais
• Vários tipos de restrições baseadas no esquema podem ser
especificadas em um esquema de banco de dados
relacional
– Restrições de domínio – Restrições de chave
– Restrições de integridade das entidades – Restrições de integridade referencial
Restrições Relacionais
• Restrições de domínio
– Em cada tupla, o valor de cada atributo deve ser um valor atômico pertencente ao domínio correspondente ao atributo
– Tipos de dados associados a atributos: short int, int, long int, float, double, char, string,
varchar, date, time, timestamp, money
• Outros: extensões de tipos de dados e tipos enumerados
Restrições Relacionais
• Restrições de chave
– Por definição, todos os elementos de um conjunto são distintos
– Portanto, todas as tuplas precisam ser distintas, ou seja, duas tuplas não podem ter a mesma combinação de valores para todos os seus atributos
– É necessário que existam subconjuntos de atributos (SK) de modo que, para duas tuplas distintas quaisquer t1 e t2, se tenha a restrição t1[SK] != t2[SK]
– SK é chamado de superchave do esquema da relação R, e a superchave especifica uma restrição de unicidade
Restrições Relacionais
• Restrições de chave
– Cada relação possui pelo menos uma superchave: o conjunto de todos os atributos
– Uma superchave pode possuir atributos redundantes
– Uma chave K de um esquema de relação R é uma superchave de R, porém a remoção de um atributo de K faz com que deixe de ser uma superchave
• Portanto, uma chave é uma superchave mínima
– Uma chave é determinada a partir do significado dos atributos, e sua propriedade deve ser invariável no tempo
• Se há o risco de, em algum ponto no futuro, alguma tupla vir a repetir o valor da chave, então a chave é inválida
Restrições Relacionais
• Restrições de chave
– Um esquema de uma relação pode possuir mais de uma chave – Nesse caso, cada uma das chaves é denominada chave candidata – É usual designar uma das chaves como chave primária da relação
• Restrições em nulo
– Pode-se definir se valores nulos são ou não permitidos em um dado atributo
Esquemas de BD Relacionais
• As restrições vistas até agora aplicam-se a relações simples
e a esquemas de relações simples
• No banco de dados como um todo, deve existir a garantia
de que seu conteúdo esteja sempre íntegro e coerente
• Definições importantes no contexto de BD relacionais
– Um esquema de um BD relacional S é um conjunto de esquemas de relações S = {R1, R2, ..., Rm} e um conjunto de restrições de integridade RI
– Um estado do banco de dados relacional BD de S é um conjunto de estados de relação BD = {r1, r2, ..., rm} tal que cada ri é um estado de Ri, e tal que os estados da relação ri satisfazem as restrições de integridade especificadas em RI
Esquemas de BD Relacionais
• Traduzindo:
– As restrições de integridade fazem parte do esquema do BD
– Assume-se que as restrições de integridade são mantidas em todos os estados do banco de dados
– O modelo relacional inclui as restrições de domínio, de chave (já vistas), de integridade das entidades e de integridade referencial (a seguir)
– Restrições definidas pelo usuário são tratadas separadamente, e o SGBD não as garante sozinho; é necessário desenvolver código para cuidar delas
• Exemplo: esquema empregado/departamento/projeto fig.
5.5 e estado válido fig. 5.6.
Mais Restrições Relacionais
• Restrição de integridade da entidade
– Nenhuma chave primária pode ter valor nulo
– Se isso fosse permitido, então estaríamos admitindo que existem tuplas que não conseguimos identificar
– Se duas ou mais tuplas estiverem nesse estado, não conseguiremos distinguí-las, violando a regra básica da chave primária
Mais Restrições Relacionais
• Restrição de integridade referencial
– Especificada entre duas relações
– Utilizada para manter a consistência entre tuplas dessas duas relações
– A regra informal é que uma tupla em uma relação que se refere a outra relação deve corresponder a uma tupla existente naquela relação
• Ex: em EMPREGADO existe um atributo NUD; o valor de NUD em cada tupla de EMPREGADO deve coincidir com um valor de
Mais Restrições Relacionais
• Para formalizar a definição da restrição de integridade
referencial, é necessário primeiro definir chave estrangeira
(foreign key)
• Um conjunto de atributos FK no esquema da relação R
1é
uma chave estrangeira de R
1que referencia uma relação
R
2se ele satisfizer às seguintes regras:
– Os atributos em FK possuem o(s) mesmo(s) domínio(s) que os atributos da chave primária PK
• os atributos FK referenciam ou se referem à relação R2
– Um valor de FK em uma tupla t1 do estado corrente r1(R1) ocorre como um valor de PK para alguma tupla t2 no estado corrente r2(R2), ou é nulo
• Se FK não for nulo, então temos t1[FK] = t2[PK], e diz-se que a tupla
t1 referencia ou se refere à tupla t2.
Mais Restrições Relacionais
• Em um BD com muitas relações, é provável que existam
diversas restrições de integridade referencial
• As restrições de integridade referencial geralmente são
definidas a partir dos relacionamentos entre as entidades
no esquema conceitual
• Observe que uma chave estrangeira pode se referir à sua
própria relação
– Ex.: NSSUPER em EMPREGADO se refere a um empregado, portanto ao atributo NSS da própria relação EMPREGADO
• O diagrama do esquema relacional pode indicar as
restrições de integridade referencial (fig. 5.7)
Mais Restrições Relacionais
• Todas as restrições de integridade devem ser especificadas
no esquema do banco de dados relacional se quisermos que
o SGBD as implemente
• As restrições são especificadas usando a DDL
• A maioria dos SGBD suporta restrições de integridade de
entidades e restrições de chave, e possui recursos para
suportar a integridade referencial
Mais Restrições Relacionais
• Restrições de integridade semântica
– São definidas de acordo com o problema, e portanto não
correspondem a uma situação genérica, como nas restrições vistas até agora
• Exemplo: “o número máximo de horas mensais por projeto para cada empregado é de 100 horas”
– São definidas usando uma linguagem de especificação de
restrições, ou mecanismos como gatilhos (triggers) e declarações
Mais Restrições Relacionais
• Outra classificação de restrições:
– Restrições de estado: definem as condições que devem ser atendidas em cada estado válido do banco de dados
– Restrições de transição: definem regras para a alteração do estado do banco de dados
• São especificadas usando regras ativas e triggers (vide EN cap. 23) • Exemplo: “o salário de um empregado só pode aumentar”
Operações de Atualização
• Existem duas classes de operações no modelo relacional:
operações de recuperação e operações de atualização
• As operações de atualização precisam ser aplicadas sem
violar a integridade do banco de dados
– Inserir (INSERT) – Excluir (DELETE) – Alterar (UPDATE)
• Existem políticas que devem ser adotadas para definir o
comportamento do SGBD para garantir a integridade do
banco em operações de atualização
Operações de Atualização
• É necessário garantir, em cada operação, que o estado do
banco de dados continue válido
• Alternativas para ação em caso de tentativa de violação de
alguma restrição:
– Rejeitar a operação
– Tentar corrigir o motivo da violação
• Neste caso, a correção pode também esbarrar em alguma outra restrição
• Pode ser necessário definir uma política geral para essas tentativas de correção, dependendo da situação
Operação INSERT
• INSERT fornece uma lista de atributos para uma nova
tupla t que está sendo inserida em uma relação R
• Inserir pode violar qualquer um dos tipos de restrição
– Domínio: violada se algum atributo não estiver contido no domínio definido
– Chave: violada se o valor já existir em outra tupla
– Entidade: violada se o valor da chave primária for nulo
– Integridade referencial: violada se o valor de alguma chave estrangeira em t se referir a uma tupla não existente na outra relação
Operação INSERT
• Em caso de violação de restrições, a ação default é rejeitar
a inserção
• Existe a possibilidade de tentar corrigir o motivo da
rejeição da inserção, porém isso não é usual
– Ex.: violação da integridade referencial: pode ser disparada uma inserção na tabela referenciada de modo a eliminar a causa do problema; essa inserção pode violar a integridade referencial com outras tabelas, em cascata
– Ex.: ao constatar uma violação, o SGBD poderia solicitar ao usuário que preenchesse algum campo onde nulo não fosse permitido
Operação DELETE
• A operação DELETE é (obviamente) usada para excluir
tuplas
• A única restrição de integridade que a operação DELETE
pode violar é a integridade referencial
– Isso ocorre quando a tupla que está sendo excluída é referenciada por chaves estrangeiras em outras tuplas no BD
• Para determinar qual(is) a(s) tupla(s) a excluir, é usada
uma condição
Operação DELETE
• Existem três comportamentos possíveis quando uma operação de exclusão causa uma violação da integridade:
– Rejeitar a exclusão
– Propagar a exclusão (provocar um efeito cascata), excluindo todas as tuplas que referenciam a tupla escolhida
– Modificar os valores dos atributos referenciados que causam a violação, por exemplo substituindo-os por nulo ou fazendo com que referenciem uma tupla válida
• Naturalmente, se o atributo referenciado for parte da chave primária ele não poderá ser alterado para nulo
• Conforme o caso, pode-se combinar esses comportamentos
• O SGBD deve permitir a especificação do comportamento desejado em caso de violação de integridade
Operação UPDATE
• A operação de atualização (UPDATE) serve para alterar os
valores de um ou mais atributos em uma ou mais tuplas de
alguma relação R
• É necessário especificar uma condição para indicar que
tuplas devem ser alteradas
• As seguintes violações podem ser causadas:
– Domínio: idem a INSERT
– Chave e Entidade: modificar o valor de uma chave primária é
equivalente a excluir uma tupla e incluir outra; nisso, as restrições e problemas de INSERT e DELETE têm que ser observadas
– Integridade referencial: possivelmente violada se algum atributo de chave estrangeira for alterado; o SGBD deve garantir que o novo valor se refira a algum valor existente na relação referenciada