Soy principalmente un desarrollador de aplicaciones, pero tengo que hacer todo el trabajo inicial de la base de datos para mi proyecto actual (por cierto ... es MS SQL Server 2008 ). Como primera decisión, estoy tratando de averiguar si dividir mi estado usando bases de datos separadas o usando esquemas separados en la misma base de datos. He leído un poco sobre los esquemas de SQL Server y parece una forma natural de separar dominios de objetos (lo que me gusta ), pero no estoy seguro de si puede haber costos ocultos para este patrón.
¿Cuáles son las cosas más prácticas que debo considerar al seleccionar entre estos dos enfoques? Si evito el dbo.mytable
favor myschema.mytable
, ¿crearé otros desafíos ( o problemas ) para mi arquitectura?
Como nota al margen ... En algún momento, esto será entregado a un DBA real para mantener / apoyar, así que estoy tratando de asegurarme de no hacerles la vida más difícil.
fuente
Respuestas:
Comenzaré diciendo que no considere los esquemas como espacios de nombres o dominios de objeto en el sentido OO. Los esquemas son esencialmente contenedores de permisos con algún valor agregado (ver más abajo)
Además, "esquemas separados" o "bases de datos separadas" son 2 conceptos diferentes. Los datos que deben ser transaccional y referencialmente coherentes deben estar en la misma base de datos. Ver una base de datos o diez? Artículo de blog para más.
En esa base de datos, puede o no usar esquemas para organizar sus objetos.
Personalmente, soy fanático de los esquemas y siempre los uso, pero para cosas como permisos y agrupación lógica. Para eso, lo remitiré a las preguntas anteriores donde puede ver que la opinión general está a favor de ellas:
Para el caso de bases de datos separadas, vea la respuesta de Aaron , pero todo esto depende del requisito de "coherencia transaccional y referencial".
fuente
De acuerdo con @gbn. Diseñé soluciones usando esquemas para separación y bases de datos para separación, y creo que usar bases de datos es mucho más práctico. Un par de razones:
<schema>
frente a todas las referencias de objetos. Esto se presta a una gran cantidad de SQL dinámico, a muchos inicios de sesión de aplicaciones diferentes con esquemas predeterminados (lo que significa que su código no usaría el prefijo de esquema, confiando en el esquema predeterminado del usuario de la aplicación, puede conducir a una acumulación masiva de caché del plan y una depuración difícil), o una gran cantidad de procedimientos almacenados para administrar (imagine solo un informe simple, si necesita uno por esquema, entonces el código cambia, ahora tiene que cambiar el mismo código varias veces, una vez para cada esquema).fuente