Tracciamento delle modifiche ai post

5

Attualmente sto scrivendo un sistema di ticket di supporto ... Diciamo che è una piccola applicazione per forum, o qualcosa come Uservoice.

Ora desidero che i miei utenti siano in grado di modificare i loro ticket, ma sono comunque in grado di vedere le versioni precedenti.

Quale percorso dovrei prendere in termini di progettazione di database?

Ho pensato a qualcosa di simile:

SupportTickets

  • Identifier
  • Autore
  • Soggetto
  • SupportTicketContentId

SupportTicketContents

  • Identifier
  • Contenuti
  • createdOn

Ora, quando visualizzo un ticket, dovrei semplicemente interrogare il più recente SupportTicketContent a seconda della colonna CreatedOn ...

Ma c'è un modo migliore? O c'è una migliore denominazione di queste tabelle?

    
posta SeToY 13.08.2013 - 16:39
fonte

2 risposte

2

Lavorando da Redmine e dalla sua progettazione di database hai un ticket, un articolo di giornale e qualsiasi dettaglio associato a questo.

 +--------------+     +----------------+   +----------------+
 | ticket       |     | journal        |   | journal_details|
 |--------------|     |----------------|   |----------------|
 | id           +-+   | id             +-+ | id             |
 | author       | +---+ ticket_id      | +-+ journal_id     |
 | subject      |     | author         |   | field          |
 | priority     |     | timestamp      |   | new_value      |
 | ...          |     | notes          |   | old_value      |
 |              |     |                |   |                |
 +--------------+     +----------------+   +----------------+

Non copi l'intero problema ogni volta, ma conservi tutte le informazioni relative a "intestazione" e metadati aggiornate nella tabella ticket .

Quindi, per gli aggiornamenti (note aggiuntive e qualsiasi modifica di campo), si crea una riga nella tabella del journal. Se tutto ciò che hai fatto è stato aggiungere note, basta aggiungere una voce di diario. Se, tuttavia, un campo è cambiato (come la priorità), viene aggiunta una riga di registrazione a giornale e una riga journal_detail per ogni riga modificata.

Supponiamo che tu abbia il biglietto # 123 e tu:

  • Aggiungi note ('questa è in realtà la barra')
  • Cambia l'oggetto da "foo" a "bar"
  • Modifica la priorità da "critico" a "basso"

Le seguenti cose accadono:

  • La riga del diario viene aggiunta con l'autore come te, data / ora come ora, ticket_id come 123 e le note come "questa è effettivamente la barra". Diciamo che questa riga ha un ID di 456.
  • Una riga journal_detail viene aggiunta con jounral_id di 456, campo di 'subject' new_value di 'bar', old_value di 'foo'
  • Una riga journal_detail viene aggiunta con journal_id di 456, campo di 'priority' nuovo valore di 'low', vecchio valore di 'critical'
  • Il ticket viene aggiornato con oggetto di 'bar' e priorità di 'basso'

In questo modo, se necessario, è possibile ricostruire il passato e vedere chi ha fatto cosa quando. Ma poche persone vogliono vedere cosa veramente assomiglia a un mese fa - vogliono query e display veloci rispetto ai dati attuali.

    
risposta data 13.08.2013 - 17:01
fonte
0

Risposta breve: Onestamente, la creazione di un nuovo sistema di tracciamento dei biglietti da zero è allettante e interessante! Tuttavia, proverei a stare lontano da re-inventare la ruota.

Uno degli approcci migliori sarebbe quello di chiarire tutti i requisiti aziendali e cercare alternative open source disponibili. Qui ci sono diverse alternative per iniziare:

risposta data 13.08.2013 - 16:57
fonte

Leggi altre domande sui tag