Relações de banco de dados usando o phpmyAdmin (chaves compostas)
-
24-09-2019 - |
Pergunta
Eu estou pouco confuso sobre como fazer um bom banco de dados relacional.Eu estou usando o phpmyAdmin para criar um banco de dados.Eu tenho quatro tabelas a seguir.Não se preocupe com o fato de lugar e preço são opcionais, eles apenas são.
- Pessoa (Obrigatório)
- Item (Obrigatório)
- Lugar (Opcional)
- Preço (Opcional)
Item é a tabela principal.Ele sempre vai ter uma pessoa vinculada.* Eu sei que você não se junta no mysql para as tabelas.Se eu quiser ligar as tabelas juntos eu poderia usar chaves compostas (usando o id de cada tabela), no entanto, é este o caminho mais correto para ligar as tabelas?Significa, também, o item será de 5 identificações, incluindo o seu próprio.Tudo isso causa valores nulos (aparentemente um grande não, não, o que eu posso entender) porque se o lugar e preço são opcionais e não são usados em uma entrada para a tabela de itens de eu ter um valor nulo lá.Por favor, ajuda!
Obrigado antecipadamente.Espero que isso faz sentido.
Solução
Valores NULL
Significa, também, o item será de 5 identificações, incluindo o seu próprio.Tudo isso causa valores nulos (aparentemente um grande não, não, o que eu posso entender) porque se o lugar e preço são opcionais e não são usados em uma entrada para a tabela de itens de eu ter um valor nulo não
Pessoalmente, eu acho que isso é uma situação em que NULL
os valores são perfeitos, e eu certamente não teria dúvidas sobre como colocar isso em meu design de banco de dados.
Uma maneira que eu já vi outros atingir a mesma coisa sem NULL
valores é criar um registro na opção de tabelas (local e preço no seu exemplo) com um ID de 0 que significa que não há nenhum registro relacionado - mas isso só faz 10 vezes mais trabalho para o desenvolvedor do aplicativo para filtrar esses registros de fora é MUITO mais fácil para fazer uma associação e se você não obter todos os registros de volta, não há registros relacionados na mesa opcional.
Apenas lembre-se de fazer um LEFT
ou RIGHT OUTER
junte-se você quiser voltar Item
s, independentemente de eles terem um Place
ou Price
associado (você vai chegar NULL
valores opcionais colunas da tabela para Item
s que não têm registros associados) e um INNER
junte-se apenas quer a Item
s que fazer um argumento opcional registro.
Chaves Compostas
Um composto é uma chave em uma tabela que é composta de mais de uma coluna.Se cada um de seus Person
, Item
, Place
e Price
todos têm um ID (mesmo se é apenas um número de incrementação automática), você não precisa de uma chave composta - apenas uma coluna de chave primária de cada tabela, e uma coluna de chave estrangeira na Item
tabela para cada tabela relacionados - por exemplo, item_id
, person_id
, place_id
, price_id
.Você afirmar que Item
tem seu próprio ID, de modo que você não precisa de uma chave composta - apenas uma chave primária na item_id
coluna.