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

Como lidar com o armazenamento massivo de registros em banco de dados para fins de autorização do usuário?


O fato é que, se você deseja permissões no nível do artigo por usuário então você precisa de uma maneira de relacionar User s para o Article s eles podem acessar. Isso requer um mínimo você precisa de N*A (onde A é o número de artigos com permissão exclusiva).

A abordagem 3NF para isso seria, como você sugeriu, ter um UsersArticles set... que seria uma mesa muito grande (como você notou).

Considere que esta tabela seria muito acessada... Esta me parece uma das situações em que uma abordagem um pouco desnormalizada (ou mesmo noSQL) é mais apropriada.

Considere o modelo que o Twitter usa para suas tabelas de seguidores de usuários:

Jeff Atwood sobre o assunto

E blog de alta escalabilidade

Uma amostra dessas peças é uma lição aprendida no Twitter de que consultar seguidores de uma tabela normalizada coloca um estresse tremendo em um Users tabela. A solução deles foi desnormalizar os seguidores para que os seguidores de um usuário sejam armazenados em suas configurações de usuário individuais.

Imagino que uma abordagem semelhante possa ser usada para fornecer permissões de artigo e evitar um UsersArticles tremendamente estressado mesa única.