Estoy diseñando algunas aplicaciones que compartirán 2 o 3 tablas de bases de datos y todas las otras tablas serán independientes de cada aplicación. Las bases de datos compartidas contienen principalmente información del usuario, y puede darse el caso donde otras tablas necesitan ser compartidas, pero ese es mi instinto para hablar.Base de datos por aplicación VS Una gran base de datos para todas las aplicaciones
Estoy inclinado sobre la base de datos para toda la solución de aplicaciones, ya que quiero tener la integridad de referencia, y no voy a tener que seguir la misma información al día en cada una de las bases de datos, pero probablemente voy para finalizar con una base de datos de más de 100 tablas donde solo grupos de diez tablas tendrán información relacionada.
La base de datos por enfoque de aplicación me ayuda a mantener todo más organizado, pero no sé cómo mantener las tablas relacionadas en todas las bases de datos actualizadas.
Entonces, la pregunta básica es: ¿cuál de los dos enfoques recomienda?
Gracias,
Jorge Vargas.
Edición 1:
Cuando hablo de no ser capaz de tener la integridad referencial, es porque no hay manera de tener claves externas de las tablas cuando esas tablas se encuentran en diferentes bases de datos, y por lo menos una de las mesas por la aplicación necesitará una clave externa para una de las tablas compartidas.
Edición 2:
Enlaces a preguntas relacionadas:
- SQL design around lack of cross-database foreign key references
- Keeping referential integrity across multiple databases
- How to salvage referential integrity with mutiple databases
Sólo el segundo tiene una respuesta aceptada. Todavía no he decidido qué hacer.
Respuesta:
he decidido ir con una base de datos por aplicación con referencias entre bases de datos a una base de datos compartida, la adición de puntos de vista para cada base de datos que imitan las tablas de la base de datos compartida, y el uso de NHibernate como mi ORM Como el sistema de membresía, usaré el asp.net.
También usaré disparadores y eliminaciones lógicas para tratar de mantener al mínimo el número de ID que tendré volando alrededor de livin 'la vida loca sin un padre. El esfuerzo de desarrollo necesario para mantener sincronizadas las bases de datos es demasiado y el resultado es muy poco (como todos han señalado). Por lo tanto, preferiría abrirme camino a través de los registros huérfanos.
Dado que el uso de un ORM y vistas fue sugerido por primera vez por svinto, obtiene la respuesta correcta.
Gracias a todos por ayudarme con esta difícil decisión.
¿Qué quiere decir con que no necesitaré molestarme si estoy usando algún tipo de ORM? ¿Cómo puede un ORM ayudarme a resolver mi problema? Si pudiera dar algunos consejos sobre esto, realmente lo agradecería. Me gusta el enfoque de vista que mencionas, pero aún tendré el problema de integridad referencial. Voy a tener que intentarlo para ver cómo funciona. –
Señale sus claves externas a las vistas y con la integridad referencial está de acuerdo. Si usa un ORM, codifica eso en lugar de las tablas, por lo que no necesita preocuparse por todo excepto cuando crea tablas nuevas o establece índices, claves, etcétera. – svinto
¿Es posible señalar claves externas a vistas con MS SQL Server 2005? Esta respuesta http://stackoverflow.com/questions/447122/can-i-have-a-foreign-key-referencing-a-column-in-a-view-in-sql-server/447151#447151 dice que no es posible Trataré de hacerlo con el código SQL ya que el diseñador solo me mostró las tablas y te avisaré si puedo hacer que esto funcione. Gracias. –