Este documento discute os tipos de relações entre tabelas em uma base de dados, incluindo relações um-para-muitos [1: M] e muitos-para-muitos [M: M]. Ele explica como modelar essas relações usando chaves estrangeiras e primárias e fornece exemplos de uma loja de decoração.
1. Bases de dados: Relações [1:M] e [M:M]
Carlos Santos
LabMM 4 - NTC - DeCA - UA
Aula 04, 26-02-2013
2. Motores de armazenamento para as tabelas
No MySQL
• MyISAM
• Motor tradicional no MySQL
• Maior portabilidade das tabelas
• Armazena mais dados, num menor espaço
• Permite a compressão dos dados
• InnoDB
• Suporta chaves estrangeiras (integridade referencial)
• Mecanismos de recuperação
• Suporta transações
3. BDs na modelação de problemas do mundo real…
Os problemas a modelar por uma BD, são normalmente constituídos por
múltiplas entidades (objetos)
• Vendedores, Encomendas, Clientes, Artigos…
As entidades (objetos) têm relações entre si
• Uma encomenda tem apenas um vendedor responsável
• Um vendedor pode ser responsável por várias encomendas
Uma BD é uma representação de entidades (objetos) e das relações
existentes entre estas no mundo real.
4. Estratégias na análise de narrativas
Responder às seguintes perguntas para modelar a BD
• Quais as entidades a considerar?
• O que caracteriza cada uma dessas entidades?
• Que dados das diferentes entidades é necessários armazenar/extrair?
• Quais as tabelas a incluir na BD e como se caracterizam as suas colunas?
• Qual a chave primária de cada tabela?
• Que relações existem entre as tabelas?
5. Estratégias na análise de narrativas
Identificar os nomes/sujeitos/substantivos do texto da narrativa
• Entidades/Objetos -> Tabelas
Identificar o que caracteriza cada entidade
• Propriedades -> Colunas -> Tipo de dados -> Parâmetros
Identificar ou definir colunas que identifiquem univocamente cada
instância (registo) armazenada da entidade
• Chaves candidatas -> Chaves primárias
Identificar e caracterizar (nos dois sentidos) as relações entre as
entidades existentes
• Relações
6. Estratégias na análise de narrativas
Dicas:
• Se nem todos os objetos de uma tabela podem ser representados através
dos mesmo campos, então deve ser ponderada a hipótese de dividir essa
tabela em várias tabelas.
• Caso sejam identificadas tabelas com estruturas idênticas então deve ser
ponderada a possibilidade de agrupar esses objetos numa única tabela.
7. Tipos de relações no mundo real
Um-para-um
• Um objeto de uma tabela está relacionado apenas com um objeto da
outra tabela (nos dois sentidos)
• São relações pouco comuns
Um-para-muitos
• Um objeto de uma das tabelas pode estar relacionado com muitos objetos
da outra tabela (apenas numa sentido)
Muitos-para muitos
• Qualquer objeto de qualquer uma das tabelas pode estar relacionado com
muitos objetos da outra tabela
8. Relações no mundo real (EER)
Notação Crow’s Foot (utilizada no MySQL Workbench)
9. Exemplo: loja de decoração
Clientes
NomeCliente
ApelidoCliente
MoradaCliente
ContactoCliente
Vendedores Encomendas Tipo (priv/empr)
NomeVend nrEncomenda
ApelidoVend DataEncomenda
MoradaVend DataPagamento
Sexo
ContatoVend
DataNascimento
DataEntradaEmpresa
Produtos
NomeProd
DescricaoProd
Preco
Peso
Dimensoes
10. Exemplo: loja de decoração (modelo ER - lógico)
Clientes
idCliente
NomeCliente
ApelidoCliente
MoradaCliente
Vendedores Encomendas ContactoCliente
Tipo (priv/empr)
idVend nrEncomenda
NomeVend DataEncomenda
ApelidoVend DataPagamento
MoradaVend
Sexo
ContatoVend
DataNascimento
DataEntradaEmpresa Produtos
idProduto
NomeProd
DescricaoProd
Preco
Peso
Dimensoes
11. Modelo lógico vs modelo físico
O modelo lógico representa todas as lógicas inerentes ao problema:
tabelas, campos, chaves primárias e as suas relações.
O modelo físico é uma versão mais completa do modelo lógico, sendo
adicionada a informação necessária para que esse modelo possa ser
implementado num SGBDR.
Na maioria dos casos, esta passagem consiste na especificação dos
mecanismos que permitem implementar num SGBDR as relações
identificadas no modelo lógico. A ter em atenção:
• É um processo baseado num conjunto de regras pré-determinadas;
• Algumas ferramentas, por exemplo, o MySQL Workbench, permitem
“automatizar” este processo (pelo menos parcialmente).
12. Um para muitos [1:M]
Relações um-para-muitos: Como criar?
• Identificar a chave primária da tabela do lado do “um”
• Adicionar uma chave estrangeira na tabela do lado do “muitos” (o tipo
de dados deste campo tem que ser idêntico ao tipo de dados da chave
primária)
• Criar uma ligação (JOIN) entre as duas tabelas com base nas duas
chaves referidas anteriormente
13. Um para muitos [1:M]
• Cada cliente poderá realizar várias encomendas
• Cada encomenda será realizada apenas por um cliente
Tabela de partida (Clientes)
• Chave primária (PK)
• Sem valores nulos ou repetidos
Tabela de chegada (Encomendas)
• Chave estrangeira (FK - foreign key)
• Contem valores existentes na PK da outra tabela
• Que podem repetir-se
• Pode conter também valores nulos
Uma relação cria uma ligação (Join) entre as duas tabelas
14. Um para muitos [1:M]
• Cada cliente poderá realizar várias encomendas
• Cada encomenda será realizada apenas por um cliente
[1:n] Non-Identifying Relationship -------
• Pode existir uma encomenda sem um cliente
• FK Clientes_idCliente pode conter valores nulos
• Pode existir um cliente sem uma encomenda
• PK IdCliente pode conter valores inexistentes na FK Clientes_idCliente
Non-Identifying -> Entidades existem de forma independente!
15. Um para muitos [1:M]
Clientes Encomendas
idCliente nomeCliente nrEncomenda dataEncomenda Clientes_idCliente
1 João 1 2010-‐02-‐23 1
2 Maria 2 2010-‐04-‐11 2
3 Manuel 3 2010-‐03-‐13 2
4 2010-‐05-‐21 1
5 2010-‐06-‐25
16. Muitos para muitos [M:M]
Relações muitos-para-muitos: Como criar?
• Identificar as chave primária das duas tabela envolvidas na relação
• Adicionar uma nova tabela de relação com duas chaves estrangeiras
(que vão servir de ligação às chaves primárias das duas tabelas do
modelo lógico)
• A chave primária da nova tabela é obtida pela associação das duas
chaves estrangeiras - chave primária composta
• Criar duas ligações (JOIN) do tipo [1:M]:
• Uma ligação (JOIN) da chave primária da primeira tabela para a chave
estrangeira correspondente da tabela de relação
• Uma ligação (JOIN) da chave primária da segunda tabela para a chave
estrangeira correspondente da tabela de relação