Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Utilisation de schémas de base de données dans SQL Server

Cet article explique ce que sont les schémas de base de données, leurs avantages et comment créer et utiliser des schémas dans SQL Server.

Dans un système de gestion de base de données relationnelle tel que SQL Server, la base de données contient divers objets. Il peut s'agir de tables, de procédures stockées, de vues et de fonctions. Dans une base de données, le schéma fait référence à la collection logique d'objets de base de données. Vous pouvez utiliser des schémas pour séparer les objets en fonction de l'application, des droits d'accès et de la sécurité.

Schémas SQL Server

SQL Server fournit les schémas logiques intégrés suivants :

  • dbo
  • sys
  • invité
  • INFORMATION_SCHEMA

Chaque schéma SQL Server doit avoir un utilisateur de base de données en tant que propriétaire de schéma. Le propriétaire du schéma a un contrôle total sur le schéma. Vous pouvez également modifier le propriétaire du schéma ou déplacer des objets d'un schéma à un autre.

Les schémas SQL Server offrent les avantages suivants :

  • Fournit plus de flexibilité et de contrôle pour la gestion des objets de base de données dans des groupes logiques
  • Vous permet de déplacer rapidement des objets entre différents schémas
  • Vous permet de gérer la sécurité des objets au niveau du schéma
  • Permet aux utilisateurs de gérer des groupes logiques d'objets au sein d'une base de données
  • Permet aux utilisateurs de transférer la propriété entre différents schémas

Supposons que pour la base de données de votre organisation, vous souhaitiez regrouper des objets en fonction des départements. Par exemple, les tables et les procédures stockées du service RH doivent être logiquement regroupées dans le schéma [RH]. De même, les tables du service financier doivent figurer dans le schéma [Fin]. Chaque schéma (groupe logique) contient des objets SQL Server tels que des tables, des procédures stockées, des vues, des fonctions, des index, des types et des synonymes.

Remarque :Le schéma est une entité étendue à la base de données. Vous pouvez avoir le même schéma dans différentes bases de données d'une instance SQL Server.

Par défaut, SQL Server utilise le schéma [dbo] pour tous les objets d'une base de données. Nous pouvons interroger SCHEMA_NAME() pour obtenir le schéma par défaut de l'utilisateur connecté.

SELECT SCHEMA_NAME() AS defaultschema;

Liste de tous les schémas de base de données dans la base de données actuelle

Vous pouvez obtenir une liste des schémas à l'aide d'une requête SSMS ou T-SQL. Pour ce faire dans SSMS, vous devez vous connecter à l'instance SQL, développer la base de données SQL et afficher les schémas sous le dossier de sécurité.

Vous pouvez également utiliser sys.schemas pour obtenir une liste des schémas de base de données et de leurs propriétaires respectifs.

SELECT s.name AS schema_name,
u.name AS schema_owner
FROM sys.schemas s
INNER JOIN sys.sysusers u ON u.uid = s.principal_id
ORDER BY s.name;

Création d'un schéma SQL Server à l'aide de CREATE SCHEMA

Pour créer un nouveau schéma SQL Server, nous utilisons l'instruction CREATE SCHEMA t-SQL. Sa syntaxe est illustrée ci-dessous.

CREATE SCHEMA <schema_name>
AUTHORIZATION <owner_name>
  • Schema_name :il s'agit du schéma que nous voulons créer
  • Autorisation :il s'agit du nom du propriétaire du schéma

Le script pour créer les schémas [HR], [Admin] et [Fin] avec le propriétaire du schéma [dbo] est illustré ci-dessous.

CREATE SCHEMA HR AUTHORIZATION dbo;

GO

CREATE SCHEMA Admin AUTHORIZATION dbo;

Go

CREATE SCHEMA Fin AUTHORIZATION dbo;

GO

Vous pouvez actualiser la base de données et afficher le schéma nouvellement créé comme indiqué ci-dessous.

Créer une nouvelle table dans un schéma

Pour créer des objets tels qu'une table, nous devons spécifier le nom du schéma dans lequel l'objet sera créé. Par exemple, le script suivant crée [TableA] dans différents schémas [HR], [Admin] et [Fin].

CREATE TABLE HR.TableA
(
ID int identity(1,1) PRIMARY KEY,
[Name] varchar(100)
)
CREATE TABLE [Admin].TableA
(
ID int identity(1,1) PRIMARY KEY,
[Name] varchar(100)
)
CREATE TABLE [Fin].TableA
(
ID int identity(1,1) PRIMARY KEY,
[Name] varchar(100)
)

Vous pouvez joindre les tables système sys.tables et sys.schema pour répertorier le nom de la table avec leurs schémas. Par exemple, la requête ci-dessous renvoie [TableA] avec son schéma.

SELECT
s.name AS SchemaName,
t.name AS TableName
FROM sys.tables t
INNER JOIN sys.schemas s
ON t.schema_id = s.schema_id
WHERE t.name ='TableA'

Si vous ne spécifiez pas de schéma lors de la création de l'objet, SQL Server utilise le schéma par défaut. Par exemple, le script ci-dessous crée une TableA dans le schéma dbo.

CREATE TABLE TableA
(
ID int identity(1,1) PRIMARY KEY,
[Name] varchar(100)
)

Remarque :Vous pouvez créer une table avec un nom similaire dans les différents schémas d'une base de données.

Vous devez spécifier le schéma de la table afin d'extraire les données du schéma correct. Par exemple, comme indiqué ci-dessus, nous avons [TableA] dans tous les schémas. Par conséquent, si vous sélectionnez directement des enregistrements sans spécifier le schéma, il recherche un objet dans le schéma DBO par défaut. Par conséquent, spécifiez toujours le nom du schéma tel que SELECT * FROM HR.TableA pour la récupération des données ou l'exécution de toute opération.

Création d'une procédure stockée dans un schéma

De même, vous pouvez créer des objets tels que des procédures stockées dans des schémas spécifiés. Par exemple, le script ci-dessous crée un SP dans le schéma HR.

CREATE PROCEDURE HR.GetEmpData
AS
BEGIN
SELECT * FROM [HR].[TableA]
END

Transfert de l'objet vers un schéma différent

À un moment donné, vous pouvez être invité à déplacer l'objet vers un schéma spécifique. Par exemple, supposons que vous ayez créé un nouveau schéma [Org] et que vous souhaitiez que votre [RH].[TableA] passe du schéma [RH] au schéma [Org].

Dans ce cas, vous pouvez utiliser la commande Alter SCHEMA avec la syntaxe suivante.

ALTER SCHEMA target_schema_name
TRANSFER [ entity_type :: ] securable_name;

Le script ci-dessous transfère l'objet [HR].[TableA] vers le schéma [Org].

CREATE SCHEMA [ORG]
GO
ALTER SCHEMA ORG TRANSFER HR.TableA

Maintenant, transférons la procédure stockée [HR].[GetEmpData] vers le schéma [Org].

ALTER SCHEMA ORG TRANSFER HR.GetEmpData

Une fois que vous avez exécuté le script, il affiche la procédure stockée dans le schéma [Org].

Cependant, à l'intérieur de la procédure stockée, le code fait toujours référence au schéma [HR].[TableA].

Par conséquent, vous ne devez pas déplacer des procédures stockées, des fonctions ou des vues à l'aide de la fonction ALTER SCHEMA car elle peut avoir des références pour les objets dans la définition. Au lieu de cela, vous pouvez supprimer, créer ou modifier la procédure comme indiqué ci-dessous.

Supprimer un schéma

Vous pouvez supprimer un schéma dans une base de données SQL Server, mais le schéma ne doit contenir aucun objet. Par exemple, si j'essaie de supprimer le schéma [Org], cela donne une erreur indiquant que vous ne pouvez pas supprimer le schéma car l'objet GetEmpData y fait référence.

Par conséquent, vous pouvez soit transférer l'objet vers un schéma différent, soit supprimer d'abord les objets. Par exemple, supprimons les procédures stockées GetEmpData, puis essayons de supprimer le schéma. Nous avons de nouveau obtenu une erreur car nous avons [TableA] dans le schéma [Org].

Une fois que nous avons supprimé ou déplacé tous les objets dans le schéma de la base de données, vous pouvez alors supprimer le schéma.

Remarque :Vous ne pouvez pas supprimer les schémas système tels que dbo, information_schema, sys.

Avantages de l'utilisation de schémas de base de données

  • Les schémas de base de données nous offrent la possibilité de créer des groupes d'objets logiques dans une base de données. Si plusieurs équipes travaillent avec la même base de données, nous pouvons concevoir différents schémas pour séparer leurs objets.
  • Les schémas de base de données aident les professionnels des bases de données à gérer l'accès, car vous pouvez contrôler l'accès aux utilisateurs pour leur(s) schéma(s) respectif(s) au lieu de fournir l'accès à la base de données dans son ensemble.
  • Vous pouvez gérer plus efficacement les bases de données, car cela permet aux mêmes objets dans plusieurs schémas d'apparaître sous la forme d'un groupe logique différent.
  • Vous pouvez déplacer rapidement des objets dans différents schémas.
  • La propriété du schéma peut être attribuée à n'importe quel principal ou rôle de base de données et la propriété peut également être transférée.
  • Il fournit une couche de sécurité supplémentaire puisque vous devez connaître le schéma d'objet correct pour interroger ou manipuler des données. Vous pouvez également contrôler l'accès au schéma et aux objets appartenant au schéma.