Cronologia completa dei dati, i valori correnti possono essere ricostruiti ignorando le modifiche provvisorie o invalidate

0

Mi piacerebbe creare un sito web per una scuola locale e poi offrirlo ad altri. Il principale mal di testa della scuola al momento è quello di catturare voti e commenti degli studenti alla fine di ogni periodo scolastico. I dati degli studenti sul loro attuale sistema possono essere modificati solo dallo staff dell'amministratore, che non ha sempre le informazioni più aggiornate. In passato questo ha impedito agli insegnanti di inserire voti per uno studente, perché i loro dettagli non sono presenti o non sono assegnati alla classe corretta.

Funzione 1

Vorrei creare un sistema in cui tutti i dettagli siano modificabili provvisoriamente da chiunque, ma le modifiche sono visibili solo all'editor fino a quando non sono state approvate dallo staff dell'amministratore. Pertanto, gli insegnanti potrebbero inserire gli studenti mancanti e inserire i segni senza attendere che l'amministratore risolva il problema.

Caratteristica # 2

Sono preoccupato per gli studenti che accedono agli account dei loro insegnanti e cambiano i loro marchi. Mi piacerebbe essere in grado di tenere traccia di tutte le modifiche di orario, accesso, indirizzo IP, ecc. In modo da poter ripristinare, ad esempio, tutte le modifiche apportate al conto di Mrs Sweet (in realtà sua nipote) tra le 23:00 e le 12:00 dello scorso sabato.

Sto facendo fatica a creare un progetto di database che mi consenta di tenere una registrazione permanente delle modifiche apportate dagli utenti, contrassegnare una di quelle modifiche come ignored / invalid ed essere in grado di rigenerare gli ultimi dati i valori della cronologia delle modifiche ignorando le modifiche escluse.

Esiste già un modello di design / combinazione di pattern che farà quanto sopra? Ci sono degli inconvenienti nascosti? È stato implementato altrove?

    
posta Michael Sandler 08.04.2016 - 11:42
fonte

1 risposta

2

Questo sembra un caso d'uso per l'event-sourcing.

(La seguente è una vista un po 'semplificata)

Event Sourcing funziona memorizzando "eventi", invece di dati, e quindi costruendo i dati effettivi eseguendo nuovamente gli eventi in ogni momento.

Un registro eventi potrebbe essere come:

teacher A created student "Bobby Tables"
teacher A assigned student "Bobby Tables" to class Maths
teacher H changed grade of Flunking Fred to "A+" on quiz 3 of course Math

Ovviamente lo faresti più strutturato, ma questa è l'essenza.

Per ottenere ciò che desideri, puoi aggiungere i seguenti dati a ciascun evento:

  • stato (accettato, provvisorio, rifiutato)
  • indirizzo ip
  • initiator (utente che esegue un'azione)

Forse segna anche l'utente che ha accettato / rifiutato una modifica provvisoria.

Il vantaggio di questo è che quando in seguito scopri che una modifica non è corretta, puoi cambiarne lo stato in declino e il resto verrà determinato correttamente.

    
risposta data 08.04.2016 - 18:15
fonte

Leggi altre domande sui tag