valores NULOS
Isso também significa que o item terá 5 ids, incluindo o seu próprio. Isso tudo causa valores nulos (aparentemente um grande não, não, o que eu posso entender) porque se o lugar e o preço forem opcionais e não forem usados em uma entrada da tabela de itens, terei um valor nulo lá
Pessoalmente, acho que esta é uma situação em que
NULL
os valores são perfeitos, e eu certamente não teria dúvidas em colocar isso no meu design de banco de dados. Uma maneira que eu vi outros conseguirem a mesma coisa sem
NULL
valores é criar um registro nas tabelas opcionais (local e preço no seu exemplo) com um ID de 0 que significa que não há registro relacionado - mas isso só faz 10 vezes mais trabalho para o desenvolvedor do aplicativo filtrar esses registros - é MUITO mais fácil fazer uma junção e se você não receber nenhum registro de volta, não há registros relacionados na tabela opcional. Apenas lembre-se de fazer um
LEFT
ou RIGHT OUTER
junte-se se você quiser retornar Item
s independentemente de terem um Place
ou Price
associado (você obterá NULL
valores nas colunas opcionais da tabela para Item
s que não possuem registros associados) e um INNER
participe se você somente quer o Item
s que faz tem um registro opcional associado. Chaves compostas
Uma chave composta é uma chave em uma tabela composta por mais de uma coluna. Se cada um de seus
Person
, Item
, Place
e Price
todos têm um ID (mesmo que seja apenas um número de incremento automático), você não precisará de uma chave composta - apenas uma coluna de chave primária em cada tabela e uma coluna de chave estrangeira no Item
tabela para cada tabela relacionada - por exemplo item_id
, person_id
, place_id
, price_id
. Você afirma que Item
tem seu próprio ID, então você não precisa de uma chave composta - apenas uma chave primária no item_id
coluna.