Ho recentemente aderito a un progetto che utilizza un modello di database che, per me, non è convenzionale. Ogni colonna, eccetto la chiave primaria, è nullable. Invece, il vincolo viene applicato nel codice utilizzato per accedere al database.
Il ragionamento degli sviluppatori è che è più flessibile farlo, e poiché l'API REST che espone questi dati dovrebbe essere l'unico punto di accesso ai dati, non vi è alcun rischio che i dati corrotti entrino nel database.
È qualcosa di cui non avevo mai sentito parlare prima, e non sono riuscito a trovare alcuna risorsa per sostenerlo. Posso apprezzare il loro ragionamento e non riesco davvero a sondare alcun buco in esso, ma il mio istinto dice che questo metodo è assolutamente sbagliato.
Quindi ha senso inserire vincoli nel codice invece che nel database? Il prodotto di database di scelta è SQL Server.