Domanda

Sulla base della discussione che ho trovato qui: Database: per eliminare o non eliminare i record, Voglio concentrarmi in particolare sui dati di riferimento, aggiungi alcuni pensieri su questo e chiedi il tuo approccio preferito in generale o in base a quali criteri prendi la decisione a quale degli approcci disponibili.

Supponiamo che la seguente struttura di dati per un "database delle richieste" per i clienti, mentre le richieste possono essere consegnate tramite vari canali (telefono, posta, fax, ..; la nostra "tabella di dati di riferimento su cui voglio concentrarmi principalmente"):

Request (ID, Text, Channel_ID)
Channel(ID, Description)

Per l'inizio, assumiamo i seguenti dati all'interno di queste due tabelle:

Richiesta:

ID    | Text                                         | Channel_ID
===============================================================  
1     | How much is product A currently?             | 1 
2     | What about my inquiry from 2011/02/13?       | 1
3     | Did you receive my payment from 2011/03/04?  | 2

Canale:

ID    | Description
===============================================================  
1     | Phone
2     | Mail
3     | Fax

Quindi, come si attacca questo assumendo i seguenti requisiti:

  1. I canali possono cambiare nel tempo. Ciò significa: le loro descrizioni possono cambiare. Nuovi possono essere aggiunti, validi solo a partire da alcuni dati particolari. I canali possono essere invalidati (entro una data particolare)

  2. Ai fini della segnalazione e del monitoraggio, deve essere eventualmente identificare utilizzando quale canale una richiesta è stata originariamente presentata.

  3. Per nuove richieste, dovrebbero essere consentiti solo i canali "attualmente validi", mentre per quelli preesistenti, anche i canali che erano validi in quella particolare data dovrebbero essere consentiti.

Nella mia comprensione, questo chiede chiaramente un approccio di invalidazione più ricco che va oltre una bandiera di cancellazione, probabilmente qualcosa che incorpora un approccio "valido / valido" per la tabella dei dati di riferimento.

D'altra parte, ciò comporta diverse difficoltà durante l'acquisizione dei dati delle richieste, perché per le nuove richieste, si visualizzano solo i canali attualmente disponibili, mentre per la manutenzione di quelli preesistenti, tutti i canali disponibili a partire dalla creazione di questo record devono essere visualizzato. Ciò potrebbe non essere solo complicato dal punto di vista dello sviluppo, ma potrebbe anche essere non intuitivo per gli utenti.

Come si imposta comunemente il tuo modello di dati per i dati di riferimento che potrebbero fare nel tempo? Come si crea allora la tua interfaccia utente? Quali ulteriori parametri prendi in considerazione per la progettazione del database corretta?

È stato utile?

Soluzione

In tali casi di solito creo un'altra tabella, ad esempio, channel_versions che duplica tutti i campi da channel e ha extra create_date colonna (e il suo PK ovviamente). Per channel Definisco dopo l'inserto/aggiornamento innesca che copiano nuovi valori in channel_versions. Ora tutte le richieste da Request Tabella Fare riferimento ai record da channel_versions. Per nuove richieste devi ottenere la versione più recente di Channel da channel_versions . Per le vecchie richieste sai sempre come appariva Channel quando la richiesta è stata soddisfatta.

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