DB projeto: membros tabela separada ou tudo em uma mesa?
-
23-08-2019 - |
Pergunta
Eu quero criar uma mesa de amigos com informações pessoais e logon detalhes.
Qual o melhor para separar tabela de membros para 2 mesas, um contêm detalhes mínimos, em segundo lugar com outros detalhes.
ou permanecer em uma tabela?
eu tenho um monte de tabelas que contêm a chave estrangeira do membro.
Solução
Depende muito do que esses "outros" detalhes são. Esta é uma pergunta comum e interessante, e não existe uma resposta "dura e rápida" à primeira vista. Mas se pensarmos a questão mais abstrata, sobre a relação real entre os atributos ( "Detalhes") de qualquer coisa em particular que você deseja representar, podemos encontrar alguma clareza.
Em sua pergunta você indicar que os amigos têm "mínimo" e "outros" detalhes. Em vez de classificar esses detalhes como "mínimo" ou "outros", vamos classificá-los por se ou não qualquer ( "atomic") Detalhe do indivíduo pode ser totalmente determinado por tudo o que faz um amigo exclusivo.
Eu presumo que há alguma chave primária (PK), como FriendID ou e-mail ou algo assim. Considerando este identificador único, pergunte a si mesmo: "Se eu sou dado exatamente um FriendID (ou e-mail ou o que você está usando como PK) que detalhes desse amigo estou absolutamente certo de, por exemplo, dada FriendID = 2112, I absolutamente? saber primeiro nome desse amigo, sobrenome e data de nascimento, mas eu não absolutamente sabe o número de telefone desse amigo, porque há mais de um deles.
Grupo juntos em uma mesa todos os detalhes que inequivocamente sabe dada a PK. Coloque os detalhes para o qual você precisa de mais dados (como "casa" ou "trabalho" no caso de números de telefone) em tabelas de "criança", costas estrangeira-keyed para a mesa "pai" no PK. (Nota: É extremamente provável que o PK da tabela filho será composto, isto é, composto de PK da tabela mãe eo fator de diferenciação (como "casa" ou "trabalho" neste exemplo) chaves compostas para o lado muitos. de 1-M relações são muito bons.)
geeks de banco de dados chamar esta decomposição com base em dependências funcionais .
Outras dicas
Uma mesa, a menos você potencialmente precisa membro de um associado a vários conjuntos de dados (ou seja, vários endereços de email, grupos de utilizadores, dia-a-telefone, noite de telefonia, de telefonia celular, etc) .
Não há dúvida sobre isso:. Sempre dividir mesas quando faz sentido logicamente
Por exemplo: Amigo 1: Tom Jones vive em The Valley Amigo 2: Erin Jones vive sua também, já que é seu irmão
tabelas:
Friends Id Name Address 1 Tom Jones 1 2 Erin Jones 1 Adresses Id Address 1 The valley
Caso contrário, as coisas sempre vai aparecer como:
Friends Id Name Address 1 Tom Jones The Valey 2 Erin Jones The Valley
O que levará a consultas erradas.
Isso é apenas um problema, existem numerosos. Como o que se assim for tem 2 endereços de e-mail e 3 números de telefone celular? E se um streetname mudanças e 5 amigos vivem nele?
Se você está muito certo sua mesa será pequeno, e você não tem que consultá-lo, do que você poderia usar apenas uma mesa. Mas do que você pode apenas usar alguns excell como sw também, ou um pedaço de papel para que o assunto: -)
Mas, se você quer ter um banco de dados, tratá-lo como um.
Leia sobre Normalização para toda a questão.