Modelo Relacional
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
RGA | Nome | |
---|---|---|
123 | Pedro Silva | pedro@ufmt.br |
456 | Maria Francisca | maria@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
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: , que é composto por uma relação de nome , uma lista de atributos , sendo cada um desses atributos pertencente a um domínio em . Para se especificar o domínio de um atributo específico, usa-se a seguinte representação: .
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 .
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
- A ordem das tuplas em uma relação não é relevante.
- A ordem dos atributos em um tupla é relevante.