Come memorizzare lo stato per la tabella di prenotazione

1

Ho una tabella delle prenotazioni (un utente compila un modulo per richiedere una prenotazione).

Ha due parti che devono essere confermate. isReservationAccepted (declinare, accettare, attendere) e hasReservationBeenSent (inviato, rifiutato, in attesa)

Non sei sicuro di come strutturare la mia tabella, pensando di creare una tabella di ricerca per ogni colonna, o forse semplicemente di crearli come int, e avendo 1 = accettato / inviato, 2 = rifiutato, 3 = in attesa.

Non sono sicuro se c'è un modo migliore (probabilmente)

    
posta datatest 05.12.2013 - 22:39
fonte

1 risposta

2

Perché non creare una tabella di proprietà per ogni proprietà (come propReservationStatus e propReservationSendStatus ) che contiene gli stati:

Id Description
---------------
 1 Decline
 2 Accept
 3 Waiting

e così via e quindi definire una colonna ReservationStatusId nella tabella come una chiave esterna nella tabella delle proprietà?

Questo scenario presenta alcuni vantaggi:

  • traduzioni dello stato indipendente dall'ID
  • migliore manutenzione / estensibilità (dopo sei mesi sapresti ancora cos'è 1/2/3?)
  • è conforme alle regole di normalizzazione del database , ad esempio se hai bisogno degli stessi valori da qualche altra parte

Sì, saranno necessarie due tabelle: una per SentStatus e una per AcceptedStatus. Suggerirei i seguenti campi (tipi pseudo sql):

Id tinyint PK NN AI
Description string NN
IsDeleted char/bool default value 0 /* you can dynamically hide/show values without changing the property table */
SortOrder int /* this way you can change the order without changing the property table */

Nella tabella Reservation crea due colonne ReservationSentStatusId e ReservationAcceptStatusId di tipo tinyint e rendili entrambi > chiavi esterne nella tabella corrispondente. Questo ha il vantaggio che non sarai in grado di aggiungere un valore non esistente come (in questo caso) 5.

Un'opzione potrebbe essere quella di creare una vista in modo da poter facilmente modificare l'ordine risp. la visibilità degli elementi della proprietà e utilizzare questa vista quando si mostrano le opzioni all'utente invece di mappare valori ai testi:

/* pseudo sql */
create view viewPropertyReservationSentStatus
begin
 select 
    Id, Description 
 from propertyReservationSentStatus 
 where IsDeleted = 0 
 order by SortOrder ascending
end

La vista può essere usata per riempire le fonti di binding per mostrare / impostare i valori in un programma / pagina web (se per esempio si sta utilizzando .net / asp.net).

    
risposta data 05.12.2013 - 22:47
fonte

Leggi altre domande sui tag