¿Por qué los nombres de tablas en SQL Server comienzan con "dbo"?

Respuestas:

234

dbo es el esquema predeterminado en SQL Server. Puede crear sus propios esquemas para permitirle administrar mejor el espacio de nombres de su objeto.

Daniel
fuente
22
Como práctica recomendada, siempre agrego el "dbo". prefijo aunque no sea necesario. La mayoría de las veces en SQL es bueno ser explícito.
SurroundedByFish
3
@SuritatedByFish: Probablemente no sea una mejor práctica, pero podría estar equivocado ya que no soy un experto en SQL. stackoverflow.com/a/769639/602245
Brett
13
Este artículo de una respuesta diferente afirma que, de hecho, es una mejor práctica: "El código no tendría que usar el nombre completo, aunque hay un ligero aumento de rendimiento al hacerlo y se considera una mejor práctica".
Carl G
77
Además, la respuesta que vinculó también recomienda incluir el "dbo". para que el optimizador no tenga que buscar el esquema.
Carl G
77
dbo no es una buena práctica. Crea tu propio esquema y úsalo siempre. dbo existe solo como un truco de migración, por lo que pre-SQL Server 2005 continúa funcionando. Sí, siempre use un esquema para perf. No, no la migración (por ejemplo, dbo).
David Betz
85

Si está utilizando Sql Server Management Studio, puede crear su propio esquema navegando a Bases de datos - Su base de datos - Seguridad - Esquemas.

Crear uno usando un script es tan fácil como (por ejemplo):

CREATE SCHEMA [EnterSchemaNameHere] AUTHORIZATION [dbo]

Puede usarlos para agrupar lógicamente sus tablas, por ejemplo, creando un esquema para información "financiera" y otro para datos "personales". Sus tablas se mostrarían como:

Financial.BankAccounts Financial.Transactions Personal.Address

En lugar de usar el esquema predeterminado de dbo.

Fenton
fuente
¿Sabes si eso causa algún problema cuando usamos Entity Framework?
batmaci
66
Puede usar esquemas con Entity Framework, incluso con código primero si lo desea:[Table("Customer", Schema = "MySchema")]
Fenton
¿La 'AUTORIZACIÓN [dbo]' otorga los mismos permisos que dbo en el esquema, o todavía necesito otorgar permisos a los usuarios?
Mark Micallef