Domanda

Sto costruendo un sito Web Content Management, che comprenderà anche altre caratteristiche. Quando un utente amministratore elimina un elemento attraverso il pannello di amministrazione, vorrei che questo elemento di essere spostati in un 'cestino' per 30 giorni (poi cancellato automaticamente).

Qual è il modo migliore di implementare questa funzionalità?

Un'idea che avevo era di avere una colonna po 'eliminati' nel mio tavolo, quindi mostrare solo i record WHERE Hide=0. Tuttavia questo significherebbe dover ricordare di mettere questa condizione in atto ogni volta che SELECT dalla tabella.

Un altro idea che avevo era quello di avere una seconda tabella in cui i record sarebbero stati trasferiti in una volta cancellato. Tuttavia ho molte tabelle in uso nel mio sito, in modo da questo significherebbe raddoppiare la quantità di tavoli, e avendo strutture della tabella duplicati (che potrebbe causare problemi di coerenza in futuro).

Idealmente mi piacerebbe avere un tavolo 'RecycleBin', che tutti i record vengono spostati, ma questo potrebbe contenere 100s di colonne per essere in grado di memorizzare i dati di tutte le diverse tabelle.

Se qualcuno ha altre idee che sarebbe stato più apprezzato.

Grazie.

È stato utile?

Soluzione

La maggior parte delle implementazioni so usare una colonna deleted (non un valore booleano, ma un timestamp, in modo da poter dire quando è stato eliminato). Sì, è necessario aggiungere questo a tutte le vostre domande, ma forse si sta utilizzando uno strato ORM, in modo da avere solo aggiungere una volta? Io vi suggerisco di andare in questo modo.

Wikipedia utilizza più tabelle per la corrente e le versioni archiviate dei loro articoli, ma che è perché sono out-of-campionato enorme, e le versioni attuali sono richiesti molto più spesso rispetto alle versioni precedenti.

Se si desidera utilizzare una tabella di RecycleBin, si potrebbe prendere in considerazione la serializzazione le righe e mettendoli in una colonna value invece di memorizzare tutte le singole colonne. Naturalmente, questo funziona solo se non c'è bisogno di interrogare sui contenuti delle singole colonne di elementi eliminati, dal momento che sarà molto costoso.

Altri suggerimenti

Utilizzando una colonna isDeleted è una tecnica buona.

È possibile combinare questo con una eliminazione al posto del grilletto che utilizzerà la bandiera al posto di un normale operazione di eliminazione. Si può anche avvolgere il tavolo con vista, in modo che solo le righe non-cancelli sono esposti nella vista.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top