Quero criar uma tabela para armazenar o relacionamento de amizade no meu projeto da web
Deve satisfazer pelo menos as quatro condições a seguir:
que enviam a solicitação de adição de amigo, por exemplo (se A TO B, esta coluna será A)
que recebem a solicitação de adição de amigo, por exemplo (se A TO B, esta coluna será B)
status atual, por exemplo (0 indica rejeitado enquanto 1 indica aceito ou 2 indica não processado
nosso relacionamento de amizade é bilateral
Se algum de vocês tiver experiência com isso, qualquer sugestão será bem-vinda
meu design atual (acho ruim agora) é assim, essas são as colunas
frienshipId
fromUserId
toUserId
status
requestTime
database-design
Oi 福气 鱼
fonte
fonte
Respostas:
Eu criaria uma tabela muito parecida com a sua. Estou usando tipos de dados e sintaxe do SQL Server, talvez seja necessário ajustar dependendo da sua plataforma.
A indexação da tabela será crítica à medida que a tabela cresce para dezenas e centenas de milhões.
fonte
No PostgreSQL:
Para listar amizades, uma visão:
Você pode usá-lo assim:
fonte
O que faz você pensar que seu design atual é ruim? Aqui está uma tabela de criação para Oracle:
Se o banco de dados for Oracle, convém considerar uma coluna virtual indexada que limitará os dados às entradas necessárias para consultas específicas. Por exemplo, você pode ter uma coluna virtual chamada AcceptedFromUserId que usa a função DECODE (StatusId, 1, FromUserId, NULL). O índice conteria apenas AcceptedUserIds e, portanto, seria menor que um índice para todos os UserIds. Se você limpar regularmente solicitações rejeitadas, uma coluna virtual indexada em PendingToUserId poderá ser mais útil.
Uma alternativa se você tivesse particionamento seria particionar a tabela no StatusId.
Se você não precisar de várias solicitações de amizade entre os mesmos usuários ao mesmo tempo, poderá abandonar o FriendId usando FromUserId, ToUserId e StatusId como sua chave principal. Nesse caso, você também deve considerar tornar a tabela uma tabela organizada por índices.
fonte
Esquema:
Do PHP:
fonte
friends
definição da tabela é suspeito de erro de sintaxe.)