Sono nelle fasi di pianificazione / progettazione di un nuovo progetto e ho difficoltà a trovare un buon modo per gestire uno dei requisiti:
Users must be able to create a new record and save it as "Incomplete" without filling out all required fields.
Questo è un requisito che si applicherà a quasi tutti i tipi di record modificabili dall'utente nell'applicazione.
I record hanno un numero di stati potenziali e in uno stato diverso da "Incomplete" devono avere tutti i campi obbligatori compilati.
È abbastanza semplice, ma ho difficoltà a capire come archiviarlo in modo da non sacrificare la capacità di applicare la correttezza dei dati sui record "completati".
Il modo più semplice per gestire questo requisito sarebbe quello di rendere nullable tutti i campi dell'oggetto business e della sua tabella di database e quindi eseguire controlli di convalida rigorosi contro i record ogni volta che vengono spostati dallo stato Incomplete. Tuttavia, non mi piace l'idea di imporre la maggior parte dei requisiti di correttezza dei dati puramente nel codice a livello di applicazione piuttosto che nel design del database, quindi sto cercando di trovare qualche altra opzione.
Mantenere uno schema separato per i record incompleti è un'idea che è stata discussa, ma c'è il timore che aggiunga troppi costi aggiuntivi, poiché ora abbiamo uno schema separato da estendere ogni volta che qualcosa cambia e dovremo gestire i record in movimento da uno all'altro quando sono completati.
Esiste una best practice per questo tipo di problema? Dovremmo solo mordere il proiettile e rendere nullable tutti i campi?
(Lo stack tecnologico che stiamo usando è ASP.NET WebAPI su SQL Server 2014, ma sembra piuttosto applicabile a qualsiasi stack supportato da un database relazionale)