Pourquoi les noms de table dans SQL Server commencent-ils par «dbo»?

Réponses:

234

dbo est le schéma par défaut dans SQL Server. Vous pouvez créer vos propres schémas pour vous permettre de mieux gérer votre espace de noms d'objets.

Daniel
la source
22
Comme meilleure pratique, j'ajoute toujours le "dbo". préfixe même s'il n'est pas nécessaire. La plupart du temps en SQL, il est bon d'être explicite.
SurroundedByFish
3
@SurroundedByFish: Probablement pas une meilleure pratique, mais je peux me tromper car je ne suis pas un expert SQL. stackoverflow.com/a/769639/602245
Brett
13
Cet article d'une réponse différente affirme qu'il s'agit en fait d'une meilleure pratique: "Le code n'aurait pas à utiliser le nom complet, bien qu'il y ait un léger gain de performances en le faisant et soit considéré comme une meilleure pratique."
Carl G
7
En outre, la réponse que vous avez liée recommande également d'inclure le «dbo». afin que l'optimiseur n'ait pas à rechercher le schéma.
Carl G
7
dbo n'est pas une bonne pratique. Créez votre propre schéma et utilisez-le toujours. dbo existe uniquement une astuce de migration donc pré-SQL Server 2005 continue de fonctionner. Oui, utilisez toujours un schéma pour la perf. Non, pas celui de la migration (par exemple dbo).
David Betz
85

Si vous utilisez Sql Server Management Studio, vous pouvez créer votre propre schéma en accédant à Bases de données - Votre base de données - Sécurité - Schémas.

Pour en créer un à l'aide d'un script est aussi simple que (par exemple):

CREATE SCHEMA [EnterSchemaNameHere] AUTHORIZATION [dbo]

Vous pouvez les utiliser pour regrouper logiquement vos tables, par exemple en créant un schéma pour les informations "financières" et un autre pour les données "personnelles". Vos tableaux s'afficheraient alors comme:

Financial.BankAccounts Financial.Transactions Personal.Address

Plutôt que d'utiliser le schéma par défaut de dbo.

Fenton
la source
Savez-vous si cela pose problème lorsque nous utilisons le framework Entity?
batmaci
6
Vous pouvez utiliser des schémas avec Entity Framework - même avec du code en premier si vous le souhaitez:[Table("Customer", Schema = "MySchema")]
Fenton
Est-ce que l '«AUTORISATION [dbo]» accorde les mêmes autorisations que dbo sur le schéma, ou dois-je toujours accorder des autorisations aux utilisateurs?
Mark Micallef