Mysql
 sql >> Database >  >> RDS >> Mysql

Come gestire l'archiviazione massiccia di record nel database per scopi di autorizzazione dell'utente?

Il fatto è che se desideri autorizzazioni a livello di articolo per utente allora hai bisogno di un modo per mettere in relazione User s all'Article s possono accedere. Ciò richiede un minimo hai bisogno di N*A (dove A è il numero di articoli con autorizzazione univoca).

L'approccio 3NF a questo sarebbe, come hai suggerito, avere un UsersArticles set... che sarebbe un tavolo molto grande (come hai notato).

Considera che questa tabella sarebbe molto accessibile... Mi sembra una delle situazioni in cui un approccio leggermente denormalizzato (o addirittura noSQL) è più appropriato.

Considera il modello utilizzato da Twitter per le tabelle dei follower degli utenti:

Jeff Atwood sull'argomento

E blog sull'elevata scalabilità

Un esempio di quei pezzi è una lezione appresa su Twitter che interrogare i follower da una tabella normalizzata mette un enorme stress su un Users tavolo. La loro soluzione era denormalizzare i follower in modo che i follower di un utente vengano archiviati nelle impostazioni dei singoli utenti.

Immagino che un approccio simile potrebbe essere utilizzato per fornire i permessi degli articoli ed evitare UsersArticles tremendamente stressati tavolo unico.