Lição 6 - PRIMEIRO PASSOS COM SQL:
Entidades, Atributos, Relacionamentos
e Integridade Referencial
Entidades, Atributos, Relacionamentos
e Integridade Referencial
A linguagem de consulta estruturada, em inglês, Structured Query Language (SQL) é um conjunto de comandos para a manipulação de banco de dados. Ela é utilizada para criar e manter a estrutura desse banco de dados, por meio da inclusão, exclusão, alteração e consulta das informações armazenadas nas tabelas. Segundo Machado (2020, p. 244), a "linguagem SQL foi desenvolvida especialmente para o ambiente relacional, podendo ser adaptada a qualquer ambiente não relacional".
Dessa forma, o objetivo desta lição é proporcionar a você o conhecimento para os primeiros passos com SQL. Aprenderemos a definição de entidade, atributos, chave candidata, chave primária e estrangeira, relacionamentos e o que é integridade referencial.
Ao final desta lição, você estará apto(a) a dar os primeiros passos usando a linguagem de consulta SQL bem como a entender e a manter a estrutura de um banco de dados.
Nesse momento, te convido a refletir sobre o modelo entidade e relacionamento (E-R) que utiliza uma coleção de objetos chamados de entidades e os seus relacionamentos entre esses objetos. Quando utilizamos o modelo entidade e relacionamento (E-R) para criar um banco de dados, definimos entidades que compõem o sistema e elas relacionam-se entre si. A entidade é uma “coisa” ou um “objeto” do mundo real, e podemos dizer que ela é o conjunto de características de alguma coisa ou de algum objeto que queremos representar no banco de dados.
Depois desta reflexão, te questiono: como identificar quais são os atributos que existem em cada uma das entidades? Como identificar a chave de acesso a tabela? Você deve estar pensando: e agora? Bem, para responder a estes questionamentos, precisamos entrar nos primeiros passos com SQL.
Para dar início, precisamos começar com as definições de entidade, visão, atributos, índices, chave candidata, chave primária e estrangeira e relacionamentos, além de entender a integridade referencial para, depois, aplicarmos tudo isso na prática e usarmos a linguagem de consulta SQL. Que tal nos aprofundarmos, ainda mais, nessas definições?
Falamos que uma entidade é uma “coisa” ou um “objeto” do mundo real. Para você entender, imagine que cada aluno em uma escola é uma entidade. Mas, afinal, o que é uma entidade? É um conjunto de características e valores para algum conjunto de propriedades que podem identificar, de maneira única, uma entidade, no nosso exemplo, um aluno (SILBERSCHATZ, 2020).
Assim, um aluno pode ter uma propriedade id_aluno, cujo valor identificará, unicamente, este estudante. O id_turma tem o valor que identificará a turma a qual esse aluno pertence. O valor 18 para o id_aluno identificará, unicamente, esse estudante na turma, e podemos dizer que o valor 18 pertence ao aluno Lucas Silva, por exemplo, na lista de chamadas da turma.
Um conjunto de entidades é um conjunto com várias entidades do mesmo tipo que compartilham as mesmas características ou propriedades ou atributos. O conjunto de todos os alunos de uma escola, por exemplo, pode ser definido como a entidade turma. Da mesma forma, a entidade definida como professores representa o conjunto de todos os professores na escola.
Uma entidade é representada por um conjunto de atributos. Assim, os possíveis atributos do conjunto de entidades da turma são: id_turma, nome, horário, turno. Os possíveis atributos do conjunto de entidades professores são: id_professor, nome, endereço, telefone.
Falamos que uma entidade é um objeto de interesse a partir do qual são colecionadas informações e que indica qualquer objeto distinguível que deva ser representado no banco de dados (DATE, 2003). Uma entidade é concreta ou abstrata.
Exemplo de entidade concreta: uma pessoa ou um produto.
Exemplo de entidade abstrata: um curso, uma oferta de curso ou uma reserva de voo.
As entidades são representadas por tabelas. Exemplo: tabela de produto, tabela de fornecedor. Elas podem ser relacionadas entre si pelos relacionamentos. Um relacionamento é uma associação entre várias entidades. Exemplo: relacionamento entre a entidade de produto e a entidade de fornecedor (“fornecedor fornece produtos”). O relacionamento é responsável por definir como uma entidade é associada com outras.
Para entender os conceitos de entidade e relacionamentos, consideraremos o exemplo de uma empresa que se chama TemTudo Ltda. A empresa deseja registrar as informações sobre os produtos que vende, os fornecedores desses produtos, os funcionários que trabalham nessa empresa e os clientes que compram esses produtos. Assim, produtos, fornecedores, empregados e clientes constituem as entidades sobre as quais a empresa precisa registrar as informações.
Além das entidades, haverá os relacionamentos interligando essas entidades. Os relacionamentos são representados por losangos e linhas de conexões. Por exemplo: temos um relacionamento entre a entidade produto e a entidade fornecedor, pois cada tipo de fornecedor fornece um tipo de produto para a empresa vender. O diagrama de entidade e relacionamentos (Diagrama E-R) mostra as entidades bem como os seus relacionamentos.
Uma entidade é representada por um conjunto de atributos. Os atributos são propriedades descritivas de cada objeto de um conjunto de entidades. A referência de um atributo para um conjunto de entidades expressa que o banco de dados armazena informações semelhantes de cada entidade no conjunto de entidades e cada entidade pode ter o seu próprio valor para cada atributo. Como exemplo dos atributos, considere os conjuntos de entidade fornecedor e produto que participam de um conjunto de relacionamento fornece (Figura 1).
Agora, imagine que a empresa TemTudo Ltda quer armazenar o atributo descritivo nome_forn com o relacionamento, a fim de gravar o nome do fornecedor que fornece um produto (SILBERSCHATZ, 2022). Possíveis atributos do conjunto de entidades fornecedor têm a possibilidade de serem id_forn, nome-forn, cnpj, endereço, cidade. Possíveis atributos do conjunto de entidade produto são id_prod, des_prod, tipo_prod. Toda entidade é descrita por um conjunto de pares, sendo: (atributo, valor do atributo), ou seja, um par para cada atributo do conjunto de entidades. Então, temos:
A entidade fornecedor é descrita pelo conjunto {(id, nome fornecedor, Smith), (CNPJ, 123.456.0000-1), (avenida, Brasil), (cidade, Maringá)}. Isso significa que a entidade descreve um fornecedor chamado Smith, cujo CNPJ é 123.456.0000-1, empresa com endereço na Avenida Brasil, em Maringá.
A entidade produto é descrita pelo conjunto {(id, descrição, chave de roda), (tipo, chave), (qt, 18)}. Isso significa que essa entidade descreve um produto chamado chave de roda, do tipo chave e possui a quantidade 18 no estoque. Por exemplo, podemos definir um relacionamento que associa o fornecedor Smith ao produto chave de roda. Isto especifica que Smith é um fornecedor que fornece o produto chave de roda.
Imaginaremos que a empresa TemTudo Ltda venda três produtos: chave de roda, chave inglesa e uma chave de fenda. A chave de roda é fornecida pelo fornecedor Smith. A chave inglesa e a chave de fenda são fornecidas pelo fornecedor Ducan. A Figura 2 mostra parte do banco de dados da empresa que consiste em dois conjuntos de entidades: fornecedor e produtos.
O esquema E-R da empresa TemTudo Ltda é capaz de definir certas restrições com as quais o conteúdo do banco de dados tem de estar de acordo. Uma restrição importante são as cardinalidades ou multiplicidade. As cardinalidades expressam o número de entidades às quais outra entidade pode estar associada por um conjunto de relacionamentos (SILBERSCHATZ, 2020). As cardinalidades são úteis na descrição de conjuntos de relacionamentos e, também, contribuem para a descrição desses conjuntos que envolvam mais de dois conjuntos de entidades.
Imaginaremos um conjunto de relacionamentos R entre o conjunto de entidades A e B, cujas cardinalidades podem ser:
Exemplo 1 – Um-para-um: uma entidade (A) está associada, no máximo, a uma entidade (B) e uma entidade (B) está associada, no máximo, a uma entidade de (A).
Exemplo 2 – Um-para-muitos: uma entidade (A) está associada a qualquer número da entidades de (B). Uma entidade de (B), entretanto, pode estar associada, no máximo, a uma entidade de (A).
Exemplo 3 – Muitos-para-um: uma entidade (A) está associada, no máximo, a uma entidade de (B). Uma entidade de (B), entretanto, pode estar associada a qualquer número de entidade de (A).
Exemplo 4 – Muitos-para-muitos: uma entidade (A) está associada a qualquer número de entidade de (B), e uma entidade de (B) está associada a qualquer número de entidade de (A).
A cardinalidade ajuda a identificar a quantidade de relacionamentos que podem existir entre os atributos de um registro da entidade A com atributo(s) da entidade B. Para ilustrar, considere o conjunto de relacionamentos FornecedorProduto. Se em um fornecedor específico um produto tem a possibilidade de pertencer a, apenas, um fornecedor, e um fornecedor pode ter diversos produtos, então, o conjunto dos relacionamentos é um-para-muitos de fornecedor e produto. Se um produto é capaz de pertencer a diversos fornecedores (como um produto comum, por exemplo, chave de fenda), o conjunto de relacionamentos é o de muitos-para-muitos.
Uma chave de acesso é um campo que recebe um valor único, que jamais se repetirá para outros registros dentro da tabela. A princípio, no Banco de Dados Relacional, teremos os tipos de chaves: a chave primária, a qual é utilizada como um identificador único de uma tupla em um banco de dados. Utilizamos a chave primária quando precisamos identificar, unicamente, um item ou uma linha na base de dados. A chave estrangeira, a qual é utilizada para fazer referência a dado presente em outra tabela, identificando, dessa forma, um relacionamento.
As chaves estrangeiras são constituídas por atributos que são chaves primárias em outra tabela. Diferentemente de uma chave primária, a estrangeira não é um campo obrigatório em uma tabela. A chave secundária pode existir em todas as tabelas, permite repetição e não serve a relacionamentos, além de ser usada para ordenar a tabela. Segundo Silberschatz (2020), temos a chave candidata que, assim como a chave primária, não se repetirá, é apenas conceitual, ou seja, não é implementada. Costuma ser usada quando temos uma relação em que existe mais de uma combinação de atributos com a propriedade de identificação única.
Para entendermos, voltamos ao nosso exemplo da empresa TemTudo Ltda. Imaginaremos que um cliente chegou na empresa para comprar uma chave de roda e uma chave de fenda, então, o vendedor fez um pedido de venda. Para cada pedido podem existir vários itens de produtos, mas o mesmo item de produto não se repete na lista de itens desse pedido de venda, pois, caso haja mais de um mesmo item de produto, apenas a quantidade é alterada. Exemplo:
pedidoVenda(id_pedido, data_pedido. valor_total)
itensProduto(id_pedido, id_Item, quant, valor_unit, codigo_barras)
Na relação itens_Produto, teremos:
id_pedido: é uma chave estrangeira que se repetirá.
id_Item: é uma chave primária que não se repetirá.
codigo_Barras: é uma chave candidata e não deverá se repetir.
Um conceito relacionado a chaves estrangeiras é o de integridade referencial: o valor que é chave estrangeira em uma tabela destino deve ser chave primária de algum registro na tabela origem e, quando esta regra não é respeitada, a integridade referencial é violada. No nosso exemplo, na relação itens_produto, temos a chave estrangeira id_pedido cujo valor está na tabela origem pedido_venda.
Hoje, a maioria dos bancos de dados relacionais impõem a integridade referencial. Assim, quando você tentar inserir, alterar ou excluir entidades nas quais há chaves estrangeiras envolvidas, é verificada a integridade referencial.
Para finalizar a nossa lição, voltaremos ao exemplo da empresa TemTudo Ltda. Vimos que a empresa deseja registrar as informações sobre os produtos que vende, os fornecedores dos produtos, os funcionários e os clientes. A Figura 7 mostra os símbolos usados para representar a entidade, o relacionamento e os atributos no diagrama entidade e relacionamento (E-R).
Primeiro, identificaremos as entidades: fornecedor, produto, cliente e funcionário. Quando um cliente chega na empresa para comprar um produto, o funcionário, no caso, o vendedor, faz um pedido de venda. Para cada pedido de venda podem existir vários itens de produtos. Então, temos, ainda, as entidades pedido venda e item de produto. Veja na Figura 8.
Agora, é com você. Complete o E-R da empresa TemTudo Ltda, adicionando as cardinalidades e os atributos. Tente, para exercitar, fazer o diagrama em uma folha de papel. Isso te ajudará na compreensão.
DATE, C. J. Introdução a Sistemas de Banco de Dados. Rio de Janeiro: Elsevier, 2003.
MACHADO, F. N. R. Banco de Dados – Projeto e Implementação. 4. ed. São Paulo: Saraiva, 2020. Disponível em: https://integrada.minhabiblioteca.com.br/reader/books/9788536532707/pageid/0. Acesso em: 4 nov. 2022.
SILBERSCHATZ, A. Sistema de Banco de Dados. São Paulo: GEN, 2020. Disponível em: https://integrada.minhabiblioteca.com.br/#/books/9788595157552/. Acesso em: 4 nov. 2022.