Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Design de banco de dados:tabela de membros separada ou tudo em uma tabela?


Depende muito de quais são esses "outros" detalhes. Esta é uma pergunta comum e interessante, e não há uma resposta "rígida e rápida" à primeira vista. Mas se pensarmos na questão de forma mais abstrata, sobre o relacionamento real entre os atributos ("detalhes") de qualquer coisa em particular que você deseja representar, podemos encontrar alguma clareza.

Na sua pergunta, você afirma que os amigos têm detalhes "mínimos" e "outros". Em vez de classificar esses detalhes como "mínimos" ou "outros", vamos classificá-los se qualquer detalhe individual ("atômico") pode ou não ser totalmente determinado pelo que torna um amigo único.

Presumo que haja alguma chave primária (PK), como FriendID ou endereço de e-mail ou algo assim. Considerando esse identificador exclusivo, pergunte a si mesmo:"Se eu receber exatamente um FriendID (ou e-mail ou o que você estiver usando como PK), de quais detalhes desse amigo tenho certeza absoluta? Por exemplo, dado FriendID=2112, eu absolutamente sei o nome, sobrenome e data de nascimento desse amigo, mas não absolutamente saber o número de telefone desse amigo porque há mais de um deles.

Agrupe em uma tabela todos os detalhes que você conhece inequivocamente, dado o PK. Coloque os detalhes para os quais você precisa de mais dados (como "casa" ou "trabalho" no caso de números de telefone) nas tabelas "filho", com chave estrangeira de volta à tabela "pai" no PK. (Observação:é extremamente provável que o PK da tabela filha seja composto; isto é, composto pelo PK da tabela pai e o fator de diferenciação (como "casa" ou "trabalho" neste exemplo). Chaves compostas para muitos lados das relações 1-M são muito boas.)

Os geeks de banco de dados chamam essa decomposição com base em dependências funcionais .