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.