Modelos

Modelo Relacional

O Modelo Relacional é um dos modelos de dados mais populares, sendo bastante utilizado em aplicações comerciais, mesmo diante do crescimento dos bancos não-relacionais.

Chegamos, enfim, ao projeto lógico de banco de dados. Aqui, conheceremos um novo modelo de dados, o Modelo Relacional. Veremos que a ideia central deste modelo não é difícil de ser entendida. No entanto, há diversos elementos que devemos considerar ao trabalharmos com esse modelo.

Entendendo o Modelo Relacional

Enquanto no Modelo Entidade-Relacionamento (MER) temos entidades que interagem entre si por meio de relacionamentos, no Modelo Relacional nosso enfoque estará em relações.

Lembre-se aqui do que eu venho falando durante a disciplina: relação do Modelo Relacional não é sinônimo para o relacionamento do MER.

Uma relação é, de forma simples, uma tabela. Este, inclusive, é o termo que costumamos utilizar de forma comum no cotidiano, inclusive ao lidarmos com códigos em SQL. Cada linha dessa tabela é chamada de tupla, equivalendo a uma entidade ou um objeto no caso do paradigma OO. O cabeçalho da tabela, por sua vez, representa os atributos daquela relação.

Veja um exemplo:

ALUNO

RGANomeEmail
123Pedro Silvapedro@ufmt.br
456Maria Franciscamaria@ufmt.br

No caso acima, a relação ALUNO possui as duas tuplas (123,"Pedro Silva","pedro@ufmt.br" e 456,"Maria Francisca","maria@ufmt.br") e os seguintes atributos: RGA, Nome, Email.

Com relação ao atributo, há ainda outro aspecto importante a ser considerado: o domínio do atributo. O domínio do atributo define o conjunto de valores possíveis a serem armazenados naquele atributo, sendo o domínio considerado para todas as tuplas daquela determinada relação.

📖 Leitura

A leitura do Capítulo 3, do livro de Elmasri e Navathe, é fortemente recomendada para a compreensão deste conteúdo, incluindo as definições conceituais completas.

Domínios e tipos de dados

Elmasri e Navathe (2011) definem um domínio como um "conjunto de valores atômicos", ou seja, indivisíveis. Embora estejam fortemente associados ao tipo de dado armazenável naquele atributo (como ocorre com as variáveis em C, por exemplo), o conceito de domínio extrapola a simples definição de um tipo de dado (integer, varchar, etc).

Sabemos que, na UFMT, cada aluno é identificado de forma exclusiva pelo RGA, composto exclusivamente por números. Em um primeiro momento, a definição do atributo pode ser feita considerando que ele deve armazenar apenas números inteiros. Isso, no entanto, não representa perfeitamente o domínio aplicado: no mundo real, o RGA não é uma sequência arbitrária de números. Logo, há um subconjunto dos números inteiros que representam ocorrências válidas de RGA. Este, então, é o domínio. Por conta dessa particularidade, os autores recomendam inclusive a criação de nomes para os domínios.

Outro exemplo possível envolve definir um intervalo válido para a nota a ser cadastrada para um estudante, com um intervalo de 0 a 10. Ou seja: não basta ser um número, precisa ser um número dentro de um intervalo. Elmasri e Navathe (2011) reforçam que essas definições são chamadas de definições lógicas de domínios.

Além do tipo de dado e do conjunto de valores possíveis, o domínio pode contemplar também o formato, como ocorre com o número de telefone: (XX) XXXXXX-XXXXX.

Esquema da relação

Para representarmos uma relação de forma textual, podemos adotar o esquema relacional: R(A1,A2...An)R(A_{1},A_{2}...A_{n}), que é composto por uma relação de nome RR, uma lista de atributos A1...AnA_{1}...A_{n}, sendo cada um desses atributos pertencente a um domínio DD em RR. Para se especificar o domínio de um atributo específico, usa-se a seguinte representação: dom(A1)dom(A_{1}).

Um outro conceito importante a ser observado aqui é grau da relação (ou aridade). Trata-se, neste caso, do número de atributos existentes em uma relação RR.

Cuidado para não confundir o grau da relação com o grau do relacionamento, que vimos em MER.

ALUNO(Nome, Cpf, Telefone_residencial, Endereco, Telefone_comercial, Idade, Media)

Podemos também representar o esquema da relação com os tipos de dados:

ALUNO(Nome: string, Cpf: string, Telefone_residencial: string, Endereco: string, Telefone_comercial: string, Idade: integer, Media: real)

Se quisermos representar os domínios, podemos:

ALUNO:
dom(Nome) = Nomes; dom(Cpf) = Cadastro_pessoa_fisica; dom(Telefone_residencial) = Numeros_telefone_nacional,3 dom(Endereco), dom(Telefone_comercial) =Numeros_telefone_nacional e dom(Media) = Media.

Estado da relação

Quando o banco de dados já está em uso, as relações (ou tabelas) terão tuplas com dados. Usamos o termo estado da relação para nos referirmos ao conjunto de tuplas inseridas naquela relação. Naturalmente, o estado de uma relação - assim como o próprio estado do banco de dados - pode mudar.

Características importantes

  1. A ordem das tuplas em uma relação não é relevante.
  2. A ordem dos atributos em um tupla é relevante.