Modelo de banco de dados adequado para um sistema de feedback do usuário (um caso interessante)
Estou desenvolvendo um aplicativo usando PHP e Yii Framework. Eu estive pensando sobre a estrutura de banco de dados mais adequada para a funcionalidade fornecida e aqui está o que eu criei. No entanto, não tenho 100% de certeza de que é assim que deve ser feito, então decidi perguntar à comunidade.
Descrição da aplicação:
Usuários registrados podem participar de um evento. Todo evento pode ter um número ilimitado de usuários, chamado "participantes do evento").
Depois que o evento termina, todo participante pode deixar um feedback sobre todos os outros participantes do mesmo evento.
Estrutura do banco de dados:
Como todo evento pode ter um número ilimitado de usuários e os usuários podem participar de um número ilimitado de eventos, criei uma tabela "Participante", que resolve a relação de muitos para muitos.
Outras tabelas são auto-explicativas.
E aqui está a coisa mais importante:
Todo participante de um evento pode ter o número máximo de feedbacks, igual ao número de participantes do mesmo evento, excluindo o participante especificado (por exemplo, se houver 5 participantes do evento, o participante determinado pode receber 4 feedbacks de participantes do mesmo evento) evento).
Deixe-me enfatizar, apenas os participantes do mesmo evento podem deixar um feedback (e apenas um) sobre o determinado participante.
Abaixo estão as etapas que eu segui para garantir a integridade do banco de dados:
Eu criei a coluna "id" na tabela "Participante" para fornecer um ID exclusivo para todos os usuários que participam de um determinado evento. Esse ID é composto (ID do usuário e ID da prática concatenados juntos). Portanto, o ID do participante 23 que participou do evento 14 seria 14-23.Você pode perguntar por que decidi criar uma coluna separada com esse ID em vez de simplesmente definir a chave primária como esta:
PRIMARY KEY (user_id, event_id)
Leia.
Quando o evento termina, cada participante pode deixar um feedback sobre os outros. Agora, esse ID de participante pode ser referência pelas chaves estrangeiras "sender_id" e "destinatário_id" na tabela de comentários.
Além disso, a chave primária da tabela de feedback também será formada pela combinação de "o ID do remetente" e o "ID do destinatário"; portanto, se o usuário 23 quiser deixar um feedback sobre o usuário 45 (ambos participaram do evento 71), o A chave primária para o feedback seria: 71-45-71-23.
Essa abordagem nos permite garantir, no nível do banco de dados, que nenhum participante deixe um feedback sobre o mesmo participante duas vezes e que um usuário não possa participar do mesmo evento duas vezes.
Questões:
Essa abordagem tem o direito de existir?Quais são os profissionais e outra maneira melhor de abordar essa funcionalidade?Posso gerar as chaves primárias com base nos valores das outras colunas automaticamente na inserção de registros?