Lycée lissan eddine ibn_elkhatib laayoune SGBDR 1 Pr H.LAARAJ 2015/2016 2 1 introduction : SQL server 1
3 SQL server SQL-Server est un SGBDR Client-Serveur qui utilise TRANSACT-SQL dans ses transactions. Client Requête (Transact-SQL) Serveur Résultats (seulement les donnes) Base de Données Application CLIENTE Application SERVEUR : SQL-SERVER (SGBDR) 4 Objets de SQL Server Les bases de données contiennent un certain nombre d objets logiques. Il est possible de regrouper ces objets en trois grandes catégories : Gestion et stockage des données : tables, type de données, contraintes d intégrité, valeur par défaut, règles et index. Accès aux données : vues et procédures stockées. Gestion de l intégrité complexe : déclencheur (Trigger) 2
5 2 Création une base de données 6 la base de données La création d une base de données est une étape ponctuelle, réalisée par un administrateur SQL Server. Avant de tenter de créer une base de données, il est important de définir un certain nombre d éléments de façon précise : le nom de la base de données qui doit être unique sur le serveur SQL, la taille de la base de données, les fichiers utilisés pour le stockage des données. Une base peut être créée de deux façons différentes : par l intermédiaire de l instruction Transact SQL CREATE DATABASE ; par l intermédiaire de SQL Server Management Studio. 3
7 CREATE DATABASE nom_bd ON ( NAME = nom logique de fichier, FILENAME = chemin de fichier.mdf, SIZE = taille en MB, MAXSIZE = taille en MB, FILEGROWTH = pas d increment en MB ou % ) LOG ON ( NAME = nom logique de fichier log, FILENAME = chemin de fichier log.ldf, SIZE = taille en MB, MAXSIZE = taille en MB, FILEGROWTH = pas d increment en MB ou % ) 8 Exemple: Créer une base de données nommée "BD-inscription". Cette base aura les caractéristiques suivantes: Un fichier de données: taille initiale: 3 Mo croissance du fichier: 20 % taille maximale: 10 Mo Un fichier "Journal": taille initiale: 1 Mo croissance du fichier: 10% taille maximale: illimité 4
9 Solution CREATE DATABASE BD-inscription ON ( NAME = 'inscription_data', FILENAME = 'C:\inscription_Data.mdf', SIZE = 3MB, MAXSIZE = 10MB, FILEGROWTH = 20%) LOG ON ( NAME = 'inscription_log', FILENAME = 'C:\inscription_log.ldf', SIZE = 1MB, MAXSIZE = UNLIMITED, FILEGROWTH = 10%); 10 3 les tables, view 5
11 3.1 création des tables: CREATE TABLE nom_table( champ type,.) créer les tables suivantes : Etudiant( code, nom, prenom, date_naiss, note, numcla) Classe (numcla, libelle ) Solution : CREATE TABLE Etudiant( code int, nom nvarchar(40), prenom nvarchar(40), date_naiss date, note decimal(4,2), numcla int ) CREATE TABLE Classe (numcla int, libelle nvarchar(40) ) 12 3.2 les contraintes d intégrités Contraintes de clé primaire : ALTER TABLE nom_table ADD CONSTRAINT nom_contrainte PRIMARY KEY(nom_champ); Le champ code de la table Etudiant ALTER TABLE Etudiant ADD CONSTRAINT pk_code PRIMARY KEY(code); 6
13 Contraintes de clés étrangeres : ALTER TABLE nom_table ADD CONSTRAINT nom_contrainte FOREIGN KEY(nom_champ) REFERENCES nom_table(champ); Le champ numcla de la table etudiant ALTER TABLE Etudiant ADD CONSTRAINT fk_numclasse FOREIGN KEY(numCla) REFERENCES classe(numcla); 14 Contraintes de validation Les contraintes de validations (CHECK) vont permettre de définir un certain nombre de règles simples de gestion des données. ALTER TABLE nom_table ADD CONSTRAINT nom_contrainte CHECK (règles); Définir la règle suivante : La note de l étudiant doit être compris entre 0 et 20 ALTER TABLE etudiant ADD CONSTRAINT contrainte_note CHECK (note between 0 and 20); 7
15 Les index Les index vont permettre d accéder plus rapidement aux différentes informations. CREATE INDEX nom_index ON nom_table(nom_champ); Définir un index pour le champ numcla de la table Etudiant CREATE INDEX ix_numcla ON Etudiant(numCla); 16 Exercice pratique : Dans MS sql server : Créer la base de données bd1 Créer les 3 tables suivantes avec toutes les contraintes possibles etudiant (NumEtd INT, nom nvarchar(23),prenom nvarchar(23),adresse nvarchar(123),ville nvarchar(23)) matiere (NumMat INT, libelle nvarchar(23)) notation (NumEtd INT,NumMat INT,note decimal(4,2),dateevaluer datetime) Insérer les enregistrements dans ses 3 tables 8
17 Solution create database bd_scolarite3 create table etudiant (NumEtd INT primary key, nom nvarchar(23),prenom nvarchar(23),adresse nvarchar(123),ville nvarchar(23)) create table matiere (NumMat INT primary key, libelle nvarchar(23)) create table notation (NumEtd INT,NumMat INT,note decimal(2,2),dateevaluer datetime, Constraint pk_numetd_nummat primary key(numetd,nummat), Constraint fk_numetd foreign key(numetd) references etudiant( NumEtd), Constraint fk_nummat foreign key(nummat) references matiere( NumMat)) 18 Types de données définis par l utilisateur Il est possible de définir ses propres types de données, soit par l intermédiaire de Management Studio, soit par la commande CREATE TYPE. CREATE TYPE nom_type FROM type_base { null / not null} Définir un "type de données utilisateur" nommé texte de type nvarchar(20) non null et attribuer ce type aux champs nom de la table etudiant? CREATE TYPE texte FROM nvarchar(20) not null ALTER TABLE Etudiant ALTER COLUMN nom texte 9
19 Les règles une règle est un objet qui permet de spécifier les valeurs acceptables qui peuvent être insérées dans une colonne. CREATE RULE nom_regle AS condition_expression Rq: la procédure sp_binderule (nom_regle, table.champ )permet d attribuer la règle à un champ donné en argument Créer la règle suivante «la note de l étudiant doit être compris entre 0 et 20» Puis, attribuer la règle au champ note de la table notation CREATE RULE regle_note AS @note between 0 and 20 exec sp_bindrule regle_note, notation.note Remarque : On peut utiliser d autre méthode pour appliquer cette règle en utilisant la contrainte check 20 La valeur par défaut La valeur par défaut permet de préciser la valeur qui va être positionnée dans la colonne si aucune information n est précisée lors de l insertion de la ligne. CREATE DEFAULT nom_val_defaut AS valeur Rq: la procédure sp_bindefault (nom_val_defaut, table.champ )permet d attribuer la valeur par défaut à un champ donné en argument Créer la valeur par défaut suivante: valdefautnom (Valeur = anonyme ) et attribuer cette valeur par défaut au champ nom dans la table Etudiant. CREATE DEFAULT valdefautnom AS anonyme exec sp_bindefault valdefautnom,'etudiant.nom Remarque: la 2eme méthode on utilise la contrainte default: ALTER TABLE Etudiant ADD CONSTRAINT valdefautnom DEFAULT anonyme FOR nom 10
21 Les schémas Un schéma est ensemble logique d objets à l intérieur d une base de données à la manière de bibliothèque package ou des espaces de noms. Par exemple : dbo.etudiant signifier que l objet table etudiant est liée au schéma dbo. CREATE SCHEMA mon_schema Créer le schéma ecole Puis, Ajouter à ce schéma la table professeur ( code, nom ) CREATE SCHEMA ecole CREATE TABLE ecole.professeur( code int, nom nvarchar(40)) 22 séquence Une séquence est un objet lié au schéma défini par l'utilisateur qui génère une séquence de valeurs numériques (exemple : 12,14,16,18,20, ) Creation d une sequence CREATE SEQUENCE schema_name. sequence_name AS integer_type START WITH <constant> INCREMENT BY <constant> MINVALUE <constant> NO MINVALUE MAXVALUE <constant> NO MAXVALUE CYCLE NO CYCLE Utilisation d une sequence l instruction: NEXT VALUE FOR schema_name.sequence_name permet d obtenir le numéro séquentiel suivant. Remarque : On peut attribuer une séquence à un champ en utilisant la contrainte default: ALTER TABLE nom_table ADD CONSTRAINT nom_defaut DEFAULT valeur FOR nom_champ 11
23 Exemple: Créer la séquence seq qui permet de générer une séquence de valeurs numériques (10,12,14,16, ). Puis, attribuer la séquence seq au champ code de la table professeur Solution : 1. CREATE SEQUENCE ecole.seq AS int START WITH 10 INCREMENT BY 2 2. ALTER TABLE ecole.professeur ADD CONSTRAINT def DEFAULT NEXT VALUE FOR ecole.seq FOR code 24 3.3 view Une vue est une table virtuelle, dans laquelle il est possible de rassembler des informations provenant de plusieurs tables. les données ne sont pas stockées dans une table de la base de données. CREATE VIEW Nom_de_la_Vue (colonnes) AS SELECT... Exemple: 1. Créer la view v1 qui permet de visualiser les noms et prénoms des étudiants ainsi que ses notes? 2. Afficher les informations de la view v1? Solution : 1. CREATE VIEW v1 AS SELECT nom,prenom,note FROM etudiant e,notation n WHERE e.numetd=n.numetd 2. SELECT * FROM v1 12