IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement SQL Server Discussion :

dbo - database owner


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    202
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 202
    Par défaut dbo - database owner
    Hello,

    Dans sql management studio, toutes mes tables sont préfixées par dbo. dans le listing dans la partie gauche de l'écran.
    Si je fait un drag and drop sur le nom de la table pour l'utiliser dans une requête, ça me drag ce préfixe avec le nom de la table.
    Sauf que si je veux executer la requete sans avoir d'erreur, je dois virer ce préfixe dbo.

    C'est un peu une perte de temps...

    La question que je me posais, c'est à quoi ça sert ce préfixe. Pourquoi sql management studio s'entête t il à placer cet élément devant le nom de la table systématiquement ?

    D'avance merci

  2. #2
    Membre Expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Par défaut
    Sauf que si je veux executer la requete sans avoir d'erreur, je dois virer ce préfixe dbo.
    C'est très étrange? Avez vous des captures d'écrans?

    dbo est le schéma par défaut auquel sont rattachées vos tables... vous pouvez créer plusieurs schéma pour 'grouper' vos tables par exemple.
    Baser vos tables sur des schémas différents permet par exemple de gérer leurs droits directement au niveau du schéma...

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 009
    Billets dans le blog
    6
    Par défaut
    Il faudrait commencer à apprendre le langage SQL !
    Ce préfixe dbo est le schéma SQL par défaut de l'objet.
    Tous les objets d'une base sont rangés dans des schémas SQL. Si vous ne précisez pas le schéma SQL lors du CREATE, l'objet est créé dans le schéma par défaut associé à l'utilisateur SQL qui créé l'objet.
    Si lors de la création de l'utilisateur vous n'avez pas précisé de schéma par défaut, alors c'est le schéma par défaut de la base qui est utilisé.
    Il n'est pas possible de créer des objets non rattachés à un schéma SQL.
    Ne pas utiliser les schémas en préfixe des objets est idiot, car cela posera des problèmes de performances : le SGBDR doit rechercher quel est le schéma à utiliser dans le contexte de lancement de la requête et cela peut varier d'un utilisateur à l'autre.
    Autrement dit, le serveur, en l'absence de la précision du schéma SQL et pour chaque objet, est obligé de faire une phase de résolution de nom du style :
    1) quel est le schéma par défaut de l'utilisateur
    2) l'objet existe t-il dans le schéma par défaut de l'utilisateur
    3) si non, quel est le schéma par défaut de la base
    3 ) l'objet existe t-il dans le schéma par défaut de la base.
    Tout ceci prend du temps au détriment des performances…
    Pire, cela oblige parfois à recompiler procédures et plan de requête !
    Vous constaterez qu'il existe toujours plusieurs schémas SQL dans votre base de données (allez les voir dans l'arborescence de votre base à sécurité / schémas). Ceux en db_ sont là pour rétrocompatibilité et vous pouvez les retirer. sys est le schéma des objets systèmes (ceux que SQL Server utilise en interne) INFORMATION_SCHEMA est la norme SQL pour les objets de méta données (vues du "catalogue")…. entre autres !

    Il existe d'autres avantages à utiliser des schéma SQL. Voir l'article que j'ai écrit à ce sujet : http://blog.developpez.com/sqlpro/p5...es-schema-sql/

    Si vous aviez lu mon livre http://sqlpro.developpez.com/booksql05/, vous auriez su cela... Extrait :
    "
    3.2.3.1 Le SCHEMA, ou module d'une base de données

    La notion de SCHEMA permet de modulariser une base de données. En fait, une base de données (donc un CATALOG selon la norme) comporte au moins un schéma dans lequel on trouvera les objets de la base (tables, vues, routines...). Comprenez qu'il n'est pas possible de créer une table directement dans le CATALOG, mais qu'il faut passer par le schéma. Ainsi, une base de données peut posséder autant de SCHEMA qu'on le désire, chaque schéma pouvant correspondre à un module dans le sens que l'on donne à ce mot pour désigner une bibliothèque de code ou un espace de nom dans un langage itératif. Seule différence avec ces derniers, SQL ne permet qu'un seul niveau de schéma.

    Ainsi, dans l'exemple donné ci-avant, la base de données créée comporte automatiquement un schéma. Dans MS SQL Server, le schéma par défaut porte le nom dbo, c'est pourquoi à défaut de spécifier différents schémas, tous les objets créés sont préfixé par dbo pour signifier leur appartenance à ce schéma.

    De fait, une base de données comporte toujours au moins un schéma par défaut. Nous verrons que de manière similaire, tout utilisateur SQL est associé à un schéma par défaut qui peut être différent du schéma par défaut de la base de données.

    Les avantages de la notion de SCHEMA sont considérables : outre la modularisation des objets de la base (permettant de la répartir dans différentes "unités"), le schéma permet de gérer des privilèges (autorisations) de manière souple et efficace, mais aussi de créer de toutes pièces tous les éléments d'une base de données sans que l'ordre ait une importance.
    En fait, un SCHEMA est un nom logique d'une subdivision d'une base de données et tout objet d'une base devrait être systématiquement préfixé par le schéma dans lequel il repose.
    Notons enfin qu'un schéma appartient toujours à un utilisateur, celui qui l'a créé.

    Ainsi, à l'aide d'une spécification de schéma, on peut commencer par créer un utilisateur et ses privilèges sur une vue qui sera créée après, vue qui elle même peut précéder la création des tables sur laquelle elle repose. Cette particularité peut paraître surprenante, mais elle possède deux avantages :
    • ne pas se soucier de l'ordre de dépendance des objets, et par ce fait permettre de créer des contraintes mutuellement dépendantes;
    • résoudre de fait un problème auquel se heurtent les développeurs débutants : celui de connaître l'ordre de création des tables liées par l'intégrité référentielle…

    L'ordre SQL de création d'un schéma revêt la syntaxe suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    CREATE SCHEMA { nom_schéma |
                    AUTHORIZATION propriétaire |
                    nom_schéma AUTHORIZATION propriétaire }
       [ DEFAULT CHARACTER SET jeu_de_caractères ]
       [ PATH nom_schéma {, nom_schéma ... } ] ]
       [ <objet> | <privilège> [, <objet> | <privilège> ...] ]
     
    <objet> ::= 
    CREATE { DOMAIN | TABLE | VIEW | ASSERTION |
             CHARACTER SET | COLLATION | 
             TRANSLATION | TRIGGER | TYPE |
             PROCEDURE | FUNCTION | ROLE } définition_objet
     
    <privilège> ::= 
    GRANT définition_privilège
    Le propriétaire est en fait l'utilisateur qui créé les objets dans le schéma. Un schéma a toujours un propriétaire.
    La clause PATH permet de définir les schémas dans lesquels il faudra rechercher, dans l'ordre de spécification, les différentes routines à utiliser (fonctions, procédures).
    ...
    "

    Quant à vos problèmes personnels d'écriture des requêtes, vous vous y prenez mal. Sans doute rajoutez-vous des crochets inutiles ou d'autres éléments fantaisistes !

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2007
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 260
    Par défaut Et pourtant...
    Bonjour,

    Je tombe sur ce sujet à la suite d'une recherche car je trouve ce pré-fixage un peu lassant.

    En allant dans la base de données et en ouvrant le dossier tables la liste de celles ci est affichée.
    Il serait pratique de pouvoir naviguer vers une table en tapant le début de son nom (comme on le fait pour un fichier dans un explorateur windows : Si je tape sur T je suis positionné sur le premier fichier commençant par T)
    Mais comme tout est préfixé par le nom du schéma ça ne peut fonctionner. Il faut utiliser l'ascenseur. Un peu fastidieux.

    Selon moi SQLManager pourrait par exemple ranger les tables par schéma dans des dossiers distincts. Un dossier par schéma. Et dans le dossier ne pas préfixer les nom d'objets.

    A moins quelqu'un sache naviguer rapidement vers une table avec le clavier ?

    C'est plus un soucis d'interface que d'intérêt ou non pour les schémas.
    Dans la même veine si quelqu'un pratique une interface de programmation sqlserver différente de management studio ça m'intéressait de la connaître.

    Pozzo

  5. #5
    Expert confirmé
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Par défaut
    Selon moi SQLManager pourrait par exemple ranger les tables par schéma dans des dossiers distincts. Un dossier par schéma. Et dans le dossier ne pas préfixer les nom d'objets.
    Cela pour être une idée en effet. Enfin de manière générale, et je n'engage que mon point de vue, sera de pouvoir créer ses propres vues un peu comme sous SharePoint.

    A moins quelqu'un sache naviguer rapidement vers une table avec le clavier ?
    Lorsque je commence à avoir énormément d'objets je passe soit par les filtres dans SSMS (pratique mais pas forcément parfait) ou directement par les vues systèmes. Le problème de l'interface est qu'elle devient très longue et se fige lorsque beaucoup d'objets sont présents.

    ++

Discussions similaires

  1. Accéder à une autre version, un autre owner que dbo ?
    Par PeD012 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 06/04/2015, 15h01
  2. select owner database
    Par vinczente dans le forum Oracle
    Réponses: 6
    Dernier message: 28/09/2006, 16h59
  3. Réponses: 3
    Dernier message: 04/07/2006, 18h07
  4. [IB6] Comment changer le Database Owner ?
    Par qi130 dans le forum Débuter
    Réponses: 5
    Dernier message: 29/03/2005, 22h07
  5. Tutoriels et liens pour le Borland Database Engine
    Par Community Management dans le forum Paradox
    Réponses: 0
    Dernier message: 25/03/2002, 11h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo