Solo scrivendo la richiesta hai già risposto alla tua domanda
tabella per gestire il log delle modifiche apportate al db, quindi quando qualcuno ha inserito , modificato o eliminato un articolo
Codice:
CREATE TABLE tabella_modifiche (
id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
id_articolo ...,
id_utente ...,
data_aggiornamento TIMESTAMP NOT NULL,
tipo_aggiornamento CHAR(32) NOT NULL
);
Questa tabella rappresenta una relazione con attributi tra gli utenti e gli articoli.
I campi id_articolo ed id_utente dovrebbero essere chiavi esterne.
Il campo data_aggiornamento rappresenta il momento in cui l'utente ha "aggiornato" l'articolo (per "aggiornamento" si intende anche creazione, modifica o cancellazione), e può essere di un tipo qualunque che sia adatto a rappresentare un istante di tempo (TIMESTAMP, DATETIME...).
Il campo tipo_aggiornamento indica se l'aggiornamento è una creazione, una modifica o una cancellazione. Puoi usare delle stringhe o dei codici numerici per rappresentare questa informazione.
Il campo id serve solo per assegnare una chiave primaria efficiente alla tabella. Una scelta più logica per la chiave primaria sarebbe la terna (id_articolo, id_utente, data_aggiornamento), ma sospetto che una chiave così composta rallenterebbe le operazioni di inserimento ed estrazione dei dati. Ti invito a fare delle prove in merito.
A seconda del tipo di uso che ne farai (recuperare la lista delle modifiche di un utente oppure recuperare la lista delle modifiche per un articolo), potrebbe risultare utile aggiungere l'attributo INDEX alle colonne id_utente od id_articolo.
Per popolare la tabella dovrai semplicemente eseguire degli INSERT INTO... ogni volta che un utente esegue qualche operazione su un articolo.
Essendo una tabella di log, dubito che avrai mai la necessità di cancellare dei record, se non per ruotare i log. In quel caso puoi semplicemente cancellare le righe per la data_aggiornamento è più vecchia di una soglia da te fissata.