Por que os nomes de tabela no SQL Server começam com "dbo"?

295

Pelo menos na minha instância local, quando crio tabelas, todas elas são prefixadas com "dbo". Por que é que?

pupeno
fonte

Respostas:

234

dbo é o esquema padrão no SQL Server. Você pode criar seus próprios esquemas para permitir que você gerencie melhor o espaço de nome do objeto.

Daniel
fonte
22
Como prática recomendada, eu sempre adiciono o "dbo". prefixo mesmo que não seja necessário. Na maioria das vezes, no SQL, é bom ser explícito.
30810 SurroundedByFish
3
@SurroundedByFish: Provavelmente não é uma prática recomendada, mas posso estar errado, pois não sou especialista em SQL. stackoverflow.com/a/769639/602245
Brett
13
Este artigo, de uma resposta diferente, afirma que é de fato uma prática recomendada: "O código não precisaria usar o nome totalmente qualificado, embora haja um pequeno ganho de desempenho ao fazê-lo e seja considerado uma prática recomendada".
Carl G
7
Além disso, a resposta que você vinculou também recomenda incluir o "dbo". para que o otimizador não precise procurar o esquema.
Carl G
7
dbo não é uma boa prática. Crie seu próprio esquema e sempre o use. O dbo existe apenas um truque de migração, portanto, o pré-SQL Server 2005 continua funcionando. Sim, sempre use um esquema para perf. Não, não a migração (por exemplo, dbo).
David Beckz
85

Se você estiver usando o Sql Server Management Studio, poderá criar seu próprio esquema, navegando até Bancos de dados - Seu banco de dados - Segurança - Esquemas.

Criar um usando um script é tão fácil quanto (por exemplo):

CREATE SCHEMA [EnterSchemaNameHere] AUTHORIZATION [dbo]

Você pode usá-los para agrupar logicamente suas tabelas, por exemplo, criando um esquema para informações "financeiras" e outro para dados "pessoais". Suas tabelas seriam exibidas como:

Financial.BankAccounts Financial.Transactions Personal.Address

Em vez de usar o esquema padrão do dbo.

Fenton
fonte
Você sabe se isso causa algum problema quando usamos a estrutura de entidades?
batmaci
6
Você pode usar esquemas com Entity Framework - mesmo com código primeiro se você gosta:[Table("Customer", Schema = "MySchema")]
Fenton
O 'AUTHORIZATION [dbo]' concede as mesmas permissões que o dbo no esquema ou ainda preciso conceder permissões aos usuários?
MarkMicallef