Solo nelle applicazioni meno complicate il modello potrebbe essere un duplicato del database e non necessariamente anche allora.
Fondamentalmente ciò presuppone una mappatura 1 a 1 tra i dati presentati al consumatore e la struttura della tabella del database (sia quella relazionale o altro) e in realtà è raramente il caso.
Se guardiamo MVC il modello è il modello per la vista - anche se questo rappresenta solo una singola riga da un singolo tavolo, le probabilità sono che ci saranno ricerche, campi che presentati al il consumatore ha un valore ma, come memorizzato nel database, ha un ID, il tuo modello potrebbe quindi contenere i valori di visualizzazione e anche i dati effettivi che sono persistenti.
Quindi entriamo in tutti i tipi di domande interessanti sulla convalida: cosa e come e dove.
Ora fai un altro passo - nota che ho detto "consumatore" - cosa succede se quel consumatore non è un utente finale che guarda uno schermo, che cosa è una singola pagina App che utilizza un'API. A questo punto dal punto di vista del client di fronte all'app non esiste un database - ma esiste un modello ...
Ciò che questo ci sta dando è una separazione logica dove guardiamo i modelli che sono appropriati al contesto in cui sono utilizzati - uno per l'interfaccia utente forse diverso per l'uso in business logic e quindi un modello di archiviazione che può be essere relazionale e coinvolgere più tavoli. Trattandoli separatamente e assicurandoci una comoda mappatura tra di loro, ci ritroviamo con una grande flessibilità nella nostra struttura generale (in cui il "sistema" può quindi distribuire abbastanza banalmente più applicazioni).
Ovviamente se tutto ciò che fai è CRUD diretto su tabelle di dati, allora la relazione tra modello di dati e modello di visualizzazione potrebbe essere abbastanza vicina, ma se si utilizza un database relazionale ci sarà sempre qualche mappatura.