2009-08-13 20 views
13

Estoy buscando una política por defecto de rendimiento para tratar con el prefijo .dbo.El dbo. prefijo en nombres de objeto de base de datos, ¿puedo ignorarlo?

que se dan cuenta de que la DBO. el prefijo es más que ruido sintáctico, sin embargo, he superado los últimos 8 años de desarrollo basado en MS omitiendo escribir el dbo. prefijo e ignorando su función.

Aparte de un problema de rendimiento con los bloqueos de compilación de proc almacenados, ¿hay una desventaja de omitir el tipeo ".dbo" en SQLqueries y procedimientos almacenados?

Otros antecedentes: Todo mi desarrollo es de nivel medio web basado en seguridad integrada basada en una cuenta de servicio de nivel medio.

Respuesta

12

[dbo]. [Xxx]

El motor de SQL Server siempre analizar la consulta en pedazos, si no se utiliza el prefijo definitivamente en marcha la búsqueda de objeto en nombre similar con diferentes usuarios antes de que se utiliza [ dbo]. Le sugiero que siga el mecanismo de prefijo no solo para satisfacer las mejores prácticas, sino también para evitar problemas técnicos de rendimiento y hacer que el código sea escalable.

No sé respondí a su pregunta, pero estos son sólo mi cuota de conocimiento

+0

Ok, creo que lo tengo. Sin embargo, ahora estoy confundido acerca de la relación entre (1) "dbo". como un mecanismo de espacio de nombres de esquema, (2) el rol de propietario de la base de datos de SQL Server y (3) usuarios que pueden mapear a los prefijos de esquema y/o ser miembros del rol de propietario de databAse. –

+0

pero contextual si un Grupo/Función/Usuario posee un objeto no hay razón por la que sea propietario/miembro de dbo. Crean Esquemas solo cuando necesitan diversificar los permisos a Objeto. Espero que haya ayudado. –

+0

No creo que sea una buena práctica. Algunos proveedores de hosting cambian dbo a algo tonto ... ¿entonces qué? Cambia todos los dbo a su estúpido prefijo. Quién sabe por qué ... pero lo hacen y no podemos cambiarlo; Hurra. – ppumkin

9

mayoría de las veces se puede pasar por alto. A veces tendrás que escribirlo. A veces, cuando se tiene que escribirla solo tendrá que teclear un extra '':

SELECT * FROM [LinkedServer].[Database]..[Table] 

que necesitará para empezar a ver para que si empezar a usar esquemas adicionales mucho más, en la que podría tener dos esquemas en la misma base de datos que ambas tienen tablas con el mismo nombre.

2

"sin embargo, pasé los últimos 8 años de desarrollo basado en MS omitiendo escribir dbo. Prexfix e ignorando su función".

Esta es su respuesta. Si su base de datos funciona bien, está bien. Las mejores prácticas no reemplazan las pruebas reales en su sistema real. Si su rendimiento es bueno y el mantenimiento está bien, es mejor que pase su tiempo en otro lugar donde pueda obtener mejores resultados por su dinero proverbial.

+3

Wow ... No podría estar más en desacuerdo ... Las mejores prácticas son justo lo que dicen las palabras. Si bien tienes razón de que puedes "escaparte", sigue siendo una programación de aficionados descuidada. – PseudoToad

1

Después de trabajar en el mundo de Oracle, aconsejaría evitar omitir la declaración de esquema. Recuerde ahora que las versiones de SQL Server posteriores a 7.0 admiten varios esquemas por base de datos; es importante distinguirlos para asegurarse de que está utilizando las tablas adecuadas.

Si puede asegurarse de que nunca tendrá dos espacios de nombres de esquema separados por base de datos, puede ignorarlo. El dbo. el prefijo no debe hacer nada para afectar el rendimiento por sí mismo: el análisis es una parte tan pequeña de la consulta SQL como para ser insignificante.

3

El problema principal no es la seguridad, es la resolución de conflictos de nombres, en el caso de que su aplicación alguna vez se despliegue junto con otra aplicación que use los mismos nombres en la base de datos.

Si empaqueta y vende su producto, le recomiendo encarecidamente que utilice esquemas, por el bien de sus clientes. Si se desarrolla para una compra en particular, entonces no es una gran preocupación.

+0

¿No es esto por * no * el uso del dbo. prefijo en todo tu código? Si dejas fuera el dbo. prefijo, entonces su aplicación puede ejecutarse fácilmente bajo un esquema diferente. Si tiene todos los nombres de tabla calificados explícitamente como dbo.x, entonces no puede cambiar a un esquema diferente sin buscar y reemplazar a través de toda su base de código. Entonces, si dos aplicaciones diferentes usan el dbo explícito. prefijo, no pueden desplegarse uno al lado del otro sin riesgo de conflictos de nombres. –

3

Sí se puede ignorar - en su mayor parte - si nunca jamás crear nada fuera de la (por defecto) esquema "dbo" .Un lugar que no se puede ignorar que es cuando se llama a una función almacenada - que siempre tiene que tener la notación "en dos partes":

select * from dbo.myFunc 

Sin embargo, se considera una buena práctica de utilizar siempre el "dbo. " prefijo (u otros prefijos de esquema, si su base de datos tiene varios esquemas).

Marc

Cuestiones relacionadas