Después de hacer esta pregunta en Stackoverflow , me pregunté dónde lo que he hecho es la mejor práctica correcta.
Básicamente, cada objeto que creo entra en un esquema con el nombre del esquema que refleja un uso. Por ejemplo, tengo los esquemas Audit
y Admin
(entre otros).
Esto a su vez no deja objetos adentro dbo
. ¿Esta bien? ¿Hay algo más que deba hacer?
sql-server
best-practices
Stuart Blackler
fuente
fuente
Respuestas:
Los esquemas no solo son una gran herramienta de seguridad (que es razón suficiente para usarlos), sino que también son perfectos para la separación lógica. Y parece que esto es lo que estás practicando.
Incluso si el requisito actual no necesita una seguridad especial, digamos que en el futuro todos los objetos de la base de datos relacionados con la Auditoría deben estar seguros para un rol de base de datos. Si estos objetos estuvieran dispersos por todo el
dbo
esquema, entonces tendría que tenerdeny
permisos explícitos en los objetos individuales. Pero con elAudit
esquema, haces un sencillodeny
y estás listo.Yo personalmente practico el uso de esquemas. Sin embargo, como todas las cosas en las bases de datos, hay un medio feliz. No crearía un esquema para cada aspecto granular de la capa de datos. Hay demasiados esquemas y separaciones. Pero supongo que no estás cerca de eso.
fuente
Un patrón típico son los esquemas basados en permisos, por lo que tendría
WebGUI
,Desktop
etc. para el código, de modo que todos los objetos tengan los mismos permisos del esquema .Si tiene grupos de usuarios claros, puede permitir eso, pero terminará con permisos superpuestos y desordenados en algún momento. Tiendo a diferir las comprobaciones de usuario / grupo a algunas comprobaciones dentro del código y no a los objetos de permisos: digamos que tiene usuarios Admin y HR Excel: todos estos ejecutan
Desktop
código.Los datos generalmente se comparten, por lo que tendría un
Data
esquema, tal vez unHistory
oArchive
esquema.Algunos códigos no son públicos (como un UDF o un proceso interno), por lo que usaría un
Helper
esquema para el código que el código del cliente no debería ejecutar.Finalmente, esquemas como
Staging
oSystem
oMaintenance
son útiles a veces.Aunque no hay objetos de usuario en el
dbo
esquema, el usuariodbo
posee todos los esquemas.fuente
Ningún objeto en el
dbo
esquema está perfectamente bien. Por lo que puedo ver, tampoco es un uso excesivo de esquemas, aunque cuántos esquemas son 'demasiados' es una pregunta bastante subjetiva (es comparable a "¿Cuántas clases debería tener mi diseño OO?").La única otra cosa que mencionaría sería otorgar permisos en el esquema en lugar de objetos individuales (su pregunta SO no especifica nada sobre los permisos).
fuente
Me gustaría usar esquemas para separar la base de datos de acuerdo con los módulos y los patrones de uso. Creo que es muy fácil entender las tablas de la base de datos, por lo tanto, el mantenimiento se vuelve más fácil. Tenía los siguientes tipos de esquema en mi último proyecto de servidor sql. LT - Tablas de búsqueda
Para módulos grandes, también los separamos en más esquemas. Por ejemplo, el módulo de personal consta de más de 5 módulos.
También incluimos esquemas como para otras actividades TEMP, MANTENIMIENTO. En el estudio de gestión, puede filtrar utilizando el nombre del esquema. Un desarrollador responsable del MÓDULO1, filtra por nombre y trabaja casi todo el tiempo solo con estas tablas. Esto hace que sea muy fácil para los desarrolladores, dbas y principiantes entender las tablas de bases de datos.
fuente
Las mejores prácticas pueden ser diferentes para el servidor SQL que para Oracle, sin embargo, mi experiencia es que cuantos menos esquemas, mejor.
Me gusta tener un esquema para el programador / dba que tenga privilegios especiales y algún código para realizar tareas de mantenimiento. Todos los datos comerciales deben ir en un esquema para que sepa dónde están. Las convenciones de nomenclatura son suficientes para diferenciar entre el uso de la tabla o el código almacenado.
Puedo ver un caso en el que tiene varias unidades de negocio que deben diferentes datos con poca superposición, cada uno con su propio esquema. De lo contrario, que sea sencillo.
fuente