Boas práticas

7 respostas
bancooracle
R

Bom dia/tarde/noite,

Estou criando um DB no Oracle e me deparei com a seguinte situação: tenho uma tabela1 onde existe um número único que identifica os dados dessa tabela, isso o torna como sendo a primary key e existe outra tabela2 em que esse valor seria referenciado a tabela1, isso torna esse valor uma foreign key, até ai tudo bem.
Porém na tabela 2 nem todos esses valores vão referenciar a tabela 1, o que impede a criação do vinculo pk-fk, seria uma boa prática utilizar um valor que está referenciando outra tabela sem que essa seja ligada por uma fk?
Existe uma forma de se criar a ligação mesmo que nem todos os valores fossem uma fk?

Obrigado

7 Respostas

J

Fica mais fácil você mostrar o modelo relacional e os requisitos reais.

C

Bom dia,

Não vejo motivo para fazer isso Rodrigo, para entendermos melhor poste o DER do seu banco ou mesmo a QUERY que usou para monta-lo.

Repare nesta imagem abaixo, as fk estão em vermelho e as pk estão em amarelo, a “ligação” feita entre a tabela cliente e locação é o necessário para dizer que em um banco relacional minha locação pode conter 1 ou mais clientes, Porque minha tabela locacao possui uma fk “cliente”.

R

No exemplo da imagem, a minha situação se aplicaria da seguinte forma:

Eu tenho uma tabela categoria com o cod_categoria que é o pk, e um filme que irá ter uma fk de categoria, só que em um momento o filme irá ter uma categoria que NÃO irá estar listado na tabela categoria.

Entendeu?

Dessa forma eu não posso amarrar as duas tabelas com pk-fk, mesmo que se tenha essa relação para alguns valores.

C

Ainda não entendi muito bem, consegue nos passar todos os atributos dessas duas tabelas completas?

Talvez esteja querendo dizer que na tabela filme haverá uma categoria que não pertencerá a tabela categoria? se for isso… está montando sua estrutura errada, mas se virmos a tabela dará para dizer ao certo.

R

Quando não se há um vínculo “forte” entre as tabelas, forçando haver registros em ambas para o relacionamento existir, costuma-se criar uma “entidade fraca” (caramba ainda lembro desse termo :joy:)

No seu caso poderia criar uma terceira tabela sem id próprio (ou apenas para identificação nela mesma), vinculando os registros das demais…

categoria
id_categoria

filme
id_filme

categoria_filme
id_categoria
id_filme

Dessa forma você consegue representar um relacionamento de muitos para muitos sem afetar as outras duas, a desvantagem está no JOIN pois existe uma tabela a mais para vincular exemplo:

SELECT a.nome_categoria, c.nome_filme 
FROM categoria AS a
INNER JOIN categoria_filme AS b ON a.id_categoria = b.id_categoria
INNER JOIN filme AS c ON c.id_filme = b.id_filme;
R

Dei uma pequisada e também lembrei disso, vou estudar se a criação de uma entidade fraca é realmente necessária e o quanto isso afetará no desempenho da consulta.

Obrigado

R

Como o @rodevops disse, a solução seria a criação de uma entidade fraca. Obrigado pela atenção

Criado 5 de janeiro de 2018
Ultima resposta 5 de jan. de 2018
Respostas 7
Participantes 4