In un'architettura correttamente disaccoppiata, l'applicazione non dovrebbe avere alcuna conoscenza del modello di database fisico. Inserire i nomi di tabelle e colonne nelle classi crea una dipendenza che potrebbe violare l'applicazione se ci sono modifiche importanti al database oltre alle semplici modifiche di tabelle e colonne.
Per un'applicazione di alcune dimensioni e complessità, le pratiche migliori sono quelle di utilizzare un ORM (Object Relational Mapper) come Entity Framework (come rilevato da Magus), NHibernate o altre opzioni più leggere. Un ORM gestisce la mappatura tra il database fisico e le tue classi in modo che ciascuna sia indipendente.
Un'altra opzione è quella di utilizzare un servizio Web di qualche tipo per fornire quel livello di astrazione tra il database fisico e l'applicazione.
Queste opzioni ti consentono di apportare modifiche all'interno di un database o persino di cambiare piattaforme di database, mantenendo al minimo le rilavorazioni.
Se stai costruendo un'applicazione molto semplice e non prevedi molte modifiche al database, un ORM o un servizio dati separato potrebbe essere eccessivo. C'è sempre un compromesso.