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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top