Chavalada, en mi poco tiempo en esto del desarrollo os digo que pocas cosas tengo tan seguras como lo que voy a decir a continuación: el modelo no es una jodida base de datos. Una base de datos NUNCA puede ser el modelo. De hecho, decir que el modelo es una base de datos es la misma aberración que decir que un modelo es un XML, un CSV o un archivo de texto.
El modelo es pura abstracción: no hay sistema operativo, ni frameworks, ni tablas. Insisto, ¡NO HAY TABLAS!
El modelo no son los trazos que representan el número 8, sino el número como abstracción. Es algo conceptual, puro, casi etéreo y sagrado. Decir que el modelo es la BBDD es casi un insulto. ¿Tan poco valoras tu dominio para casarlo con una representación determinada, que para colmo siempre se acaba traduciendo en palabras como «tabla», «fila», «columna? La entidad, el concepto… lo es todo.
Ensuciarlo con terminología de bases de datos solamente denota una falta de visión del dominio. Hay gente se empeña en ver claves ajenas, inner joins, consultas de consultas, procedimientos almacenados… Todo eso está muy bien, pero no dejan de ser trazos, un bitmap, un dibujo del número 8, no el número en sí mismo.
Habrá gente que me diga que me pongo filosófico respecto al tema (como es costumbre en mí), que no hace falta ser tan extremista con el tema y que en el fondo nos basta con pensar que la base de datos es un modelo válido. Es cierto que normalmente una base de datos puede representar con cierta fidelidad un dominio, pero no deja de ser eso: una representación.
La programación como arte que evoluciona tiende a ser cada vez más cercana al dominio. Hay muchos patrones arquitecturales que hablan directamente de «Modelo». MVC, MVP, MVVM… es un hecho que trabajar cerca del modelo tiene unas ventajas (obvias). De ahí mi gusto por DDD. Por el contrario, trabajar sin un modelo suficientemente refinado y lejos del ruido de las tecnologías subyacentes tiene innumerables inconvenientes.
Conozco casos en los que se ha usado un XML como modelo. ¿Os podéis imaginar lo que pasó? Mierda, mierda y más mierda. Aplicaciones imposibles de modificar, acoplamiento infinito.
Tenemos que alejarnos de eso. Una BBDD tanto si es relacional como si no, es tan solo una manera de almacenar datos con cierta estructura. Otra cosa es que haya aún demasiada gente que ha estado tan apegada a SQL que no sepa ver más allá de filas, columnas y selects.