[Tips] Modificaciones/Customizaciones no intrusivas en bases de datos
Una de las cosas que me gustó cuando empecé a trabajar con Microsoft Dynamics CRM era la manera en la que se reflejan las customizaciones sobre las entidades. Por ejemplo, la entidad Incidencia tiene su correspondiente tabla dbo.IncidentBase (Con los campos base de dicha entidad) y sí añadimos nuevos campos a esta entidad, no se añaden a esa tabla, sino que lo hace sobre otra llamada dbo.IncidentExtensionBase y así con todas las entidades que pueden ser personalizas. Esto desde mi punto de vista es una muy buena práctica y lo vamos a ver en el siguiente ejemplo:
Imagina que necesitas extender el MembershipProvider de ASP.NET porque necesitas añadir nuevos campos a la tabla de usuarios que te está pidiendo el departamento de HR
¿Cual puede ser el problema de añadir dichos campos a la tabla aspnet_Users?
Pues que sí le da a Microsoft por sacar un Service Pack o realizar modificaciones en nueva versión de NET y hace algo sobre estas tablas, puede ser que nuestros cambios no esten soportados o directamente que lo perdamos, esto se puede dar con otro tipo de base de datos siempre que lo permita el producto y sean modificacione soportadas que no nos hagan perder el soporte técnico.
Además de esta manera tenemos mejor controladas nuestras customizaciones sobre dicha base de datos.
Una buena solución es lo que hace CRM, no tocamos las tabla bases y añadimos nuestra extensión con FK a la tabla de aplicaciones y usuarios:
¿Qué os parece?
Un saludo y feliz navidad ;)