Banco de Dados Relacionais
Tabelas e Relações
- Idealizado por Ted Codd, da IBM Research, atualmente, é o modelo de dados mais utilizado pela indústria
- Baseado na teoria dos conjuntos utilizando conceitos de relações matemáticas
- Definição mais formal do termo relação (C. J. Date):
- "Dada uma coleção de n tipos ou domínios Ti (i= 1, 2, 3, ..., n), não necessariamente todos distintos, r será uma relação sobre esses tipos, se existir em duas partes, um cabeçalho e um corpo, onde:
- a. O cabeçalho é um conjunto de n atributos da forma AiTi: onde Ai (que devem ser todos distintos) são os nomes dos atributos de r e Ti são os nomes de tipos correspondentes (i= 1, 2, 3,..., n)
- b. O corpo é um conjunto de m tuplas t, onde t é por sua vez um conjunto de componentes da forma Ai:vi, no qual vi é um valor do tipo Ti - o valor do atributo correspondente ao atributo Ai da tupla t(i = 1, 2, 3, ..., n). Os valores de m e n são chamados respectivamente de cardinalidade e grau da relação r."
- O BD Relacional é representado por coleções de relações, que no mundo real assumem a forma de tabelas de registros considerada a unidade básica
- As tabelas são compostas por linhas que representam uma instância de uma entidade do mundo real
- As colunas (atributos) de uma tabela representam campos e as linhas (tuplas) representam registros
- A tabela pode ser considerada como uma relação e é então vista como um arquivo de dados onde os registros são gravados fisicamente no banco de dados seguindo uma certa ordem: de acordo com a entrada ou segundo uma chave primária
- Uma tabela somente pode ser considerada uma relação quando as seguintes condições forem satisfeitas:
- A interseção de uma linha com uma coluna deve necessariamente conter um valor atomico
- Todos os valores de uma coluna devem ser do mesmo tipo de dado
- Cada coluna deve ter um nome único
- Não há duas ou mais linhas idênticas, ou seja, com os mesmos valores em suas colunas.
Exemplo
- Exemplo: Membros de um clube de colecionadores de moedas
- Tabela 1: membros
| idmembro | nome | sobrenome | profissao | telefone | |
|---|---|---|---|---|---|
| 1221 | Sérgio | Bernardes | advogado | 3212-3219 | sbernardo@coin.com |
| 9375 | Nivaldo | Duarte | bancario | 3243-8539 | nivaldo.duarte@coin.com |
| 9439 | Andre | Ferreira | garcom | 3232-4398 | andref@coin.com |
| 3420 | Janete | Lourenco | advogado | 3212-4397 | janetelourenco@coin.com |
| 6439 | Margarete | Pires | comerciaria | 3234-3482 | mpires@coin.com |
- Nesta tabela:
- o primeiro campo de cada registro contém o mesmo tipo de dado: um código de identificação do membro chamado idmembro
- O segundo campo de cada registro contém o nome do membro
- O terceiro campo contém o sobrenome e assim por diante
- Não há nada especial na ordem dos campos, pode-se reagrupar, adicionar ou remover campos sem afetar a funcionalidade da tabela
- Porém, dentro da mesma tabela, não se pode fazer com que o campo idmembro seja o primeiro campo em um registro e o segundo campo em outro registro
- Nem se pode fazer com que um registro contenha um campo a mais ou a menos que outro registro
- Todo SGBD relacional precisa propiciar três funções para acessar os dados:
- Select: Apresenta uma tabela mostrando somente aqueles registros que tenham valores especificados em campos determinados. Ação: "Recupere todos os registros da tabela membros cuja profissão seja igual a advogado"
- Project: Apresenta uma tabela que não inclui todos os seus campos. Ação: "Obtenha somente os campos nome e sobrenome da tabela membros"
- Join: Apresenta uma combinação de duas tabelas como se elas fossem apenas uma. O resultado é uma tabela temporária que o SGBD monta combinando os valores dos registros de uma tabela com os valores dos registros de outra tabela e então combinando os campos dos dois registros juntos.
- Para mostrar o exemplo de uma combinação destas, precisamos de uma segunda tabela.
- Tabela 2: venda
| pais | moeda | ano | quantidade | idmembro | preco |
|---|---|---|---|---|---|
| Brasil | 20 reis | 1889 | 6 | 1221 | 32.00 |
| EUA | 20 gold | 1890 | 2 | 9439 | 100.00 |
| EUA | Nickel | 1899 | 100 | 9375 | 0.06 |
| EUA | Penny | 1850 | 1 | 6439 | 1.05 |
| EUA | Penny | 1850 | 4 | 1221 | 1.00 |
| EUA | Penny | 1850 | 5 | 3420 | 0.95 |
- A Tabela acima mantem as moedas a venda com seus preços e respectivos proprietários
- Observa-se um campo comum às duas tabelas chamado idmembro
- Dessa forma, podemos ordenar ao SGBD:
- "Combine as tabelas com base em idmembro que mostre":
- venda.pais
- venda.moeda
- venda.ano
- venda.quantidade
- venda.preco
- membros.idmembro
- membros.email
- "Combine as tabelas com base em idmembro que mostre":
- O resultado deve ser o seguinte:
- Tabela 3:
| pais | moeda | ano | quantidade | idmembro | preco | |
|---|---|---|---|---|---|---|
| Brasil | 20 reis | 1889 | 6 | 1221 | 32.00 | sbernardo@coin.com |
| EUA | 20 gold | 1890 | 2 | 9439 | 100.00 | andref@coin.com |
| EUA | Nickel | 1899 | 100 | 9375 | 0.06 | nivaldo.duarte@coin.com |
| EUA | Penny | 1850 | 1 | 6439 | 1.05 | mpires@coin.com |
| EUA | Penny | 1850 | 4 | 1221 | 1.00 | sbernardo@coin.com |
| EUA | Penny | 1850 | 5 | 3420 | 0.95 | janetelourenco@coin.com |
Domínios
- Designa o tipo de dado que cada coluna de uma tupla pode conter
- Normalmente dá-se o nome aos domínios como forma de identificá-los e também auxiliar na interpretação do valores que eles representam
- Também devem ser declarados num domínio, o tipo de dado que deve ser aceito e o tamanho da informação
- Exemplos:
- CNPJ: 14 dígitos divididos em três blocos:
- http://www.geradorcnpj.com/algoritmo_do_cnpj.htm
- 1o. o número da inscrição propriamente dito
- 2o. localizado após a barra, representa um código único para a matriz ou filial
- 3o. representados pelos dois últimos valores chamados de dígitos verificadores (DV)
- Os dígitos verificadores (DV) são criados a partir dos doze primeiros. O cálculo é feito em duas etapas utilizando o módulo de divisão 11.
- Processo: Calcular os dígitos verificadores de um CNPJ hipotético, por exemplo, 11.444.777/0001-XX.
- CPF: 11 dígitos: 9 + 2
- Titulo de Eleitor: 8 + 2
- Código de Barras:
- CNPJ: 14 dígitos divididos em três blocos:
- Um domínio também pode ser útil para restringir os dados que devem ser gravados em um atributo/campo
- Exemplos:
- Data Nascimento: A partir de 01/01/1900
- Estado Civil:
- Casado, Solteiro, Viúvo, Separado, Divorciado, ...
- Situação Aluno:
- Regular, Trancado, Jubilado, Abandono, Desistente Oficial, Transferência Interna, Transferência Externa, Portador de Diploma
- Assim como na Matemática, todos os elementos pertencentes a um conjunto devem ser distintos, uma tabela de bancos de dados deve conter registros, que também são únicos, ou seja, os valores de todos os seus campos não podem se repetir.
- Da mesma forma, não se pode ter registros cujo campo que seja chave primária esteja sem valor, normalmente definido como nulo ou branco. Em SQL, isso pode ser resolvido, acrescentando a cláusula NOT NULL à linha que o atributo é definido (Restrição de Integridade da Entidade)
- Outro tipo de restrição muito importante é a Restrição de Integridade Referencial que existe entre duas tabelas e cuja função é prevenir a inconsistência de dados.
- Exemplo: Controle de Estoque
- Descreva um conjunto de tabelas que controlem dados de produtos com suas categorias
- Tabela Categorias possua um relacionamento com a tabela Produtos
- Cada produto se enquadra em uma categoria
- Suponha que um registro de Categoria seja excluido da tabela Categorias
- A tabela Produtos contém registros que fazem referência à categoria excluída
- Teríamos então os registros órfãos
- Solução: Chave Estrangeira
Chaves
- Chave é um componente de uma relação que pode ser formada por um ou mais atributos, cuja função é permitir identificar uma linha na relação, ou registro numa tabela
- Superchave:
- Representa uma restrição capaz de prevenir a existência dos mesmos valores em atributos de duas ou mais entidades diferentes, o que em síntese torna possível identificar uma entidade unicamente
- É um conjunto de um ou mais atributos que, tomados coletivamente, nos permitem identificar de maneira unívoca uma entidade em um conjunto de entidades. Em outras palavras, não podem existir duas ou mais linhas da tabela com o(s) mesmo(s) valores de uma Super-Chave
- Exemplo:
- O atributo CPF do conjunto de entidades CLIENTE é suficiente para distinguir uma entidade CLIENTE de outra. Assim, o CPF é uma superchave
- Do mesmo modo, a combinação de NOME_CLIENTE e DATA_NASCIMENTO é superchave para o conjunto de entidades CLIENTE (?)
- Já apenas NOME_CLIENTE não é superchave de CLIENTE.
- Chave Candidata:
- Representa um conjunto mínimo de atributos que podem identificar uma tupla dentro de uma relação, da mesma forma que faria uma chave primária
- São chamadas de candidatas porque podem perfeitamente ser chaves primárias da relação
- Exemplo: Veículo com os atributos chapa, chassis e renavam
- Suponha uma combinação de nome_cliente e rua_cliente seja suficiente para distinguir todos os membros do conjunto de entidades cliente, assim como o atributo cpf, sozinho. Então (cpf) e (nome_cliente, rua_cliente) são chaves candidatas. Embora os atributos (cpf, nome_cliente), juntos, possam, distinguir as entidades cliente, sua combinação não forma uma chave candidata, uma vez que cpf, sozinho, é uma chave candidata.
- Chave Primária:
- Chave candidata escolhida para identificar unicamente uma tupla e definir uma ordem física das tuplas dentro de uma relação
- Chaves cujos atributos são usados para identificar as tuplas em uma relação. Geralmente, é escolhida a chave candidata de menor tamanho.
- Chave Estrangeira:
- Atributos de uma relação que fazem referência à chave primária de outra relação, ou até mesmo à própria
- Exercício:
- Identifique as chaves primárias:
- Uma escola necessita de um sistema de controle acadêmico
- Esse sistema deverá possibilitar que sejam persistidos os alunos, professores, disciplinas e cursos
- Deverá prover a efetivação de matrículas dos alunos em um determinado curso
- O enquadramento de professores em uma determinada disciplina
- A composição desses cursos pelas disciplinas
- Identifique as chaves primárias:



