16
Bases de dados: Propriedades da relação e relações [1:1] Carlos Santos LabMM 4 - NTC - DeCA - UA Aula 05, 28-02-2013

LabMM4 (T05 - 12/13) - Relações 1:1

Embed Size (px)

Citation preview

Page 1: LabMM4 (T05 - 12/13) - Relações 1:1

Bases de dados: Propriedades da relação e relações [1:1]

Carlos SantosLabMM 4 - NTC - DeCA - UAAula 05, 28-02-2013

Page 2: LabMM4 (T05 - 12/13) - Relações 1:1

Muitos para muitos [M:M]

EncomendasEncomendasnrEncomenda DataEncom

1 2008-­‐01-­‐162 2008-­‐02-­‐023 2008-­‐03-­‐094 2008-­‐04-­‐125 2008-­‐05-­‐26

ProdutosProdutos

idProduto nomeProd

1 Cadeira

2 Mesa  de  Sala

3 Aparador

4 Sofá

Encomendas_has_ProdutosEncomendas_has_Produtos

Encomendas_nrEncomenda Produtos_idProduto

1 2

1 3

2 2

3 1

3 2

3 3

5 2

5 3

PROBLEMA: Como podemos adicionar uma “Cadeira” à encomenda 3?

Page 3: LabMM4 (T05 - 12/13) - Relações 1:1

Propriedades de uma relação

Vendedores

idVend NomeVend ApelidoVend MoradaVend Sexo ContatoVend DataNascimento DataEntradaEmpresa

Encomendas

nrEncomenda DataEncomenda DataPagamento

Clientes

idCliente NomeCliente ApelidoCliente MoradaCliente ContactoCliente Tipo (priv/empr)

Produtos

idProduto NomeProd DescricaoProd Preco Peso Dimensoes

Quantidade

Page 4: LabMM4 (T05 - 12/13) - Relações 1:1

Muitos para muitos [M:M] + prop. de relação

EncomendasEncomendasnrEncomenda DataEncom

1 2008-­‐01-­‐162 2008-­‐02-­‐023 2008-­‐03-­‐094 2008-­‐04-­‐125 2008-­‐05-­‐26

ProdutosProdutos

idProduto nomeProd

1 Cadeira

2 Mesa  de  Sala

3 Aparador

4 Sofá

Encomendas_has_ProdutosEncomendas_has_Produtos

Encomendas_nrEncomenda Produtos_idProduto quanFdade

1 2 1

1 3 3

2 2 4

3 1 5

3 2 1

3 3 2

5 2 5

5 3 4

Page 5: LabMM4 (T05 - 12/13) - Relações 1:1

Quanto custa?

EncomendasEncomendasnrEncomenda DataEncom

1 2008-­‐01-­‐162 2008-­‐02-­‐023 2008-­‐03-­‐094 2008-­‐04-­‐125 2008-­‐05-­‐26

ProdutosProdutos

idProduto nomeProd preco

1 Cadeira €50

2 Mesa  de  Sala €800

3 Aparador €3000

4 Sofá €1200

Encomendas_has_ProdutosEncomendas_has_Produtos

Encomendas_nrEncomenda Produtos_idProduto quanFdade

1 2 1

1 3 3

2 2 4

3 1 5

3 2 1

3 3 2

5 2 5

5 3 4

Page 6: LabMM4 (T05 - 12/13) - Relações 1:1

Um para um [1:1]

Novo cenário: uma empresa tem necessidade de gerir a ocupação de gabinetes por administradores, sendo que:

• Cada administrador possui apenas um gabinete• Cada gabinete está atribuído apenas a um administrador

Administradores

idAdmin NomeAdmin ApelidoAdmin

Gabinetes

idGabinete Localizacao

Page 7: LabMM4 (T05 - 12/13) - Relações 1:1

Um para um [1:1]

• Cada administrador possui apenas um gabinete• Cada gabinete está atribuído apenas a um administrador

1:1 Identifying Relationship ________

• Pode existir um administrador sem um gabinete• PK IdAdministrador pode conter valores que não existem ainda na FK

Administradores_idAdministrador• Não pode existir um gabinete sem um administrador

• FK idGabinete não pode conter nulos pois também é PK

Existe dependência entre os administradores e os gabinetes!

FK que também é PK!

Page 8: LabMM4 (T05 - 12/13) - Relações 1:1

Um para um [1:1]

• Cada administrador possui apenas um gabinete• Cada gabinete está atribuído apenas a um administrador

Problema: O que acontece se existirem gabinetes vazios?

FK que também é PK!

Page 9: LabMM4 (T05 - 12/13) - Relações 1:1

Solução: Criar uma tabela de relação que torne as entidades independentes.

Pode existir um administrador sem um gabinete

• PK IdAdministrador pode conter valores que não existem ainda na FK Administradores_idAdministrador

Pode existir um gabinete sem um administrador

• PK IdGabinete pode conter valores que não existem ainda na FK Gabinetes_idGabinete

A tabela de relação Administradores_has_Gabinetes conterá apenas as situações em que a um administrador foi atribuído um gabinete

Um para um [1:1]

Page 10: LabMM4 (T05 - 12/13) - Relações 1:1

Para evitar valores repetidos nas FK que constituem a PK composta da tabela de relação, as FK são configuradas com o parâmetro UNIQUE

Um para um [1:1]

AdministradoresAdministradores

idAdministrador NomeAdmin

1 João

2 Maria

3 Manuel

GabinetesGabinetes

idGabinete Localizacao

1 1012 1023 103

Administradores_GabinetesAdministradores_Gabinetes

Administradores_idAdministrador Gabinetes_idGabinete

1 2

2 3

Page 11: LabMM4 (T05 - 12/13) - Relações 1:1

Questão

Como podemos evitar a criação de nulos numa relação de 1:M?

• numa situação: 1 ou muitos• numa situação: 0 ou muitos

Por vezes pode não ser admissível implementar relações 1:M sem utilizar uma tabela de relação!

Page 12: LabMM4 (T05 - 12/13) - Relações 1:1

MySQL Workbench

Mais importante que tudo... o MySQL Workbench não é um SGBDR!

• É uma aplicação com várias ferramentas que facilitam algumas tarefas inerentes ao desenvolvimento e manutenção de BDs e SGBRs

• O MySQL Server é que é um SGBDR

Ferramentas

• Server Administration• Data Modeling• SQL Development

Page 13: LabMM4 (T05 - 12/13) - Relações 1:1

MySQL Workbench: Data modeling

Diagrama Enhanced Entity-Relationship (EER)

• Modelação da BD: entidades, propriedades e suas relações

Physical Schemata

• Schema: conjunto de objetos e regras que estruturam a BD• A ter em atenção:

• Verificar se a Collation de todas as tabelas está definida como utf8 - utf8_general_ci (suporte caracteres PT)

• Nome do schema deve ser igual ao nome da BD destino• Verificar se o Engine de todas as tabelas está definido como InnoDB

Exportar o schema da BD

• File -> Export -> Forward Engineer SQL CREATE Script…• Gera um ficheiro SQL com o código necessário para a criação da BD

Page 14: LabMM4 (T05 - 12/13) - Relações 1:1

MySQL Workbench: Data modeling: Export

Antes de criar, apaga objetos que já existam com o mesmo nome

Mostra eventuais mensagens de erro/alerta durante o processo de criação

Permite inserir dados na BD no momento da sua criação

Page 15: LabMM4 (T05 - 12/13) - Relações 1:1

MySQL Workbench: Data modeling: Export

O que é?Para que serve?

Page 16: LabMM4 (T05 - 12/13) - Relações 1:1

MySQL Workbench: SQL Development

Para que serve?

• Ligação a uma base de dados• Executar SQL Queries• Executar SQL Scripts• Editar dados de tabelas

• alternativa: phpMyAdmin