De l’intérêt des SCHÉMA SQL…

Les schémas SQL sont des unités de code à la manière des bibliothèque de code ou des espaces de noms (qui ne sont qu’une version moderne de la notion de library…). Cela confère à la structure d’une base de données, une certaine modularité.
Seule différence avec le monde itératif, SQL ne permet qu’un seul niveau de « schéma » et un objet de la base ne saurait se passer de lui. En fait toutes tables, vue, procédures… est toujours créée dans un schéma et non directement attaché à la base.

Vous pouyez créer autant de SCHEMA SQL que vous voulez.
Il est de bon ton de créer des schémas SQL verticaux et transversaux.
La verticalité s’entend par grandes fonctions de la base. Ainsi dans un ERP on ne mélangera pas les tables de production, des tables du commercial ou encore de celles de la comptabilité.
Par transversalité, j’entends des données qui peuvent être utilisées par de nombreux autres modules comme des tables de nomenclature, de référence, de paramétrage (table des codes postaux, des civilités…).

Outre la modularisation des objets de la base, il existe deux autres intérêts majeurs à la création des SCHEMA SQL :
1) la possibilité d’attribuer des privilèges à des utilisateurs au niveau du SCHEMA. Cela évite d’avoir à en créer pour chaque objet et chaque utilisateur et de revenir régulièrement sur le sujet à chaque nouvel ajout.
2) lorsque l’on créé des objets au sein du schéma, le modélisateur de la base n’a pas à se soucier de l’ordre logique de création des objets. Il peut ainsi commencer par créer une vue alors que même la table référencée par la vue n’existe pas encore….

Démonstration… (SQL Server 2000)


EXEC sp_addlogin 'CNX_SQL', 'Bienvenue chez les chtis'
GO
 
EXEC sp_addlogin 'CNX_SCH', 'Bienvenue chez les chtis'
GO
 
CREATE DATABASE DB_TEST_SCHEMA
GO
 
USE DB_TEST_SCHEMA
GO
 
EXEC sp_grantdbaccess 'CNX_SQL', 'USER_SQL'
GO
 
EXEC sp_grantdbaccess 'CNX_SCH', 'SCH_SQL'
GO
 
-- création d'un schema SCH_SQL  
CREATE SCHEMA SCH_SQL
 
GRANT SELECT  
ON SCH_SQL.V_CLIENT_CLI  
TO USER_SQL  
 
CREATE VIEW SCH_SQL.V_CLIENT_CLI  
AS  
SELECT *  
FROM   SCH_SQL.T_CLIENT_CLI  
 
CREATE TABLE SCH_SQL.T_COMMANDE_CMD  
(CMD_ID   INT NOT NULL PRIMARY KEY,  
 CLI_ID   INT NOT NULL  
          FOREIGN KEY  
          REFERENCES SCH_SQL.T_CLIENT_CLI (CLI_ID),  
 CMD_DATE DATETIME NOT NULL)  
 
CREATE TABLE SCH_SQL.T_CLIENT_CLI  
(CLI_ID   INT NOT NULL PRIMARY KEY,  
 CLI_NOM  CHAR(32) NOT NULL)  
 
-- fin de création du schéma

Démonstration SQL Server 2005 :


CREATE LOGIN CNX_SQL  
WITH PASSWORD = 'Bienvenu chez les chtis';
GO
 
CREATE DATABASE DB_TEST_SCHEMA
GO
 
USE DB_TEST_SCHEMA
GO
 
CREATE USER USER_SQL FOR LOGIN CNX_SQL
GO
 
-- création d'un schema SCH_SQL  
CREATE SCHEMA SCH_SQL  
 
GRANT SELECT  
ON OBJECT::SCH_SQL.V_CLIENT_CLI  
TO USER_SQL
 
CREATE VIEW SCH_SQL.V_CLIENT_CLI  
AS  
SELECT *  
FROM   SCH_SQL.T_CLIENT_CLI  
 
CREATE TABLE SCH_SQL.T_COMMANDE_CMD  
(CMD_ID   INT NOT NULL PRIMARY KEY,  
 CLI_ID   INT NOT NULL  
          FOREIGN KEY  
          REFERENCES SCH_SQL.T_CLIENT_CLI (CLI_ID),  
 CMD_DATE DATETIME NOT NULL)  
 
CREATE TABLE SCH_SQL.T_CLIENT_CLI  
(CLI_ID   INT NOT NULL PRIMARY KEY,  
 CLI_NOM  CHAR(32) NOT NULL)  
 
-- fin de création du schéma

--------
Frédéric Brouard, SQLpro - ARCHITECTE DE DONNÉES, http://sqlpro.developpez.com/
Expert bases de données relationnelles et langage SQL. MVP Microsoft SQL Server
www.sqlspot.com : modélisation, conseil, audit, optimisation, tuning, formation
* * * * *  Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence  * * * * *

MVP Microsoft SQL Server

Laisser un commentaire