SGBD SQL Server 2008 R2 BTS-DSI 2 SQL SERVER 2008 Le 20/10/2010 Définitions Une base de données est un objet particulièrement difficile à définir puisqu’il est abordé en pratique selon différents points de vue : Pour un administrateur, une base de données est un ensemble fichiers contenant des données à sauvegarder et à sécuriser. Pour un utilisateur, une base de données est un espace où il peut enregistrer des informations, les retrouver et les faire traiter automatiquement par un ordinateur. Pour un développeur, une base de données est un ensemble de tables contenant des données, d'index permettant d'accélérer leur récupération et de procédures permettant d'y travailler de la manière la plus rapide et la plus sûre. Une base de données SQL est constituée d'au moins deux fichiers: 1. Un fichier de données, avec une extension .MDF ; 2. Un fichier de journal, avec une extension .LDF . Elle est composée de plusieurs familles d'objets: tables, vues, requêtes, procédures stockées, déclencheurs (triggers)… Sur tout système SQL Server, on trouve quatre bases système, correspondant chacune à une fonction propre. master, contient toute les informations nécessaires au fonctionnement du serveur. model, contient plusieurs tables système, ces tables se trouvent dans toute les bases. msdb, est la base support de l'Agent SQL Server, qui s'en sert pour connaître les tâches à automatiser, les évènements à traiter. tempdb, cette base sert seulement au stockage temporaire. Création d'une base de données. Pour créer une base de données SQL Server, il est possible d'utiliser soit SQL Server Management Studio, soit du code Transact SQL(T-SQL). Démarrez / Tous les programmes / Microsoft SQL Server 2008 R2 / SQL Server Management Studio et cliquer sur le bouton Se conn pour se connecter à une instance du moteur de base de données SQL Server. En utilisant SQL Server Management Studio 1. Dans l'Explorateur d'objets, Cliquez avec le bouton droit sur Bases de données, puis cliquez sur Nouvelle base de données… 2. Dans la fenêtre Nouvelle base de données, entrez le nom de la base de données. 3. Pour créer la base de données en acceptant toutes les valeurs par défaut, cliquez sur OK, sinon effectuez les étapes facultatives ci-après cliquez sur OK. A.MAKAYSSI SGBD SQL Server 2008 R2 BTS-DSI 2 4. Pour modifier le nom du propriétaire, cliquez sur (…) afin de sélectionner un autre propriétaire. Remarque: L'option Utiliser l'indexation de texte intégral est toujours activée et estompée, car toutes les bases de données utilisateur sont activées pour la recherche en texte intégral à partir de SQL Server 2008. 5. Pour modifier les valeurs par défaut des données primaires et des fichiers journaux de transactions, dans la grille Fichiers de la base de données, cliquez sur la cellule appropriée, puis entrez la nouvelle valeur. En utilisant du code Transact SQL Comme de nombreuses instructions Transact-SQL, l'instruction CREATE DATABASE nécessite un paramètre obligatoire : le nom de la base de données. Au cours de la création d'une base de données avec le langage Transact SQL, il faut préciser : Le nom logique du fichier pour le manipuler avec le langage Transact SQL. Le nom physique pour préciser l’emplacement du fichier. Une taille initiale. Une taille maximale. Un pas d’incrémentation. Exemple1: CREATE DATABASE MaBase ON (NAME =MaBaseData, FILENAME= 'D:\MabaseData.mdf', SIZE = 20, MAXSIZE = 100, FILEGROWTH=1) LOG ON (NAME =MaBaseLog, FILENAME= 'D:\MabaseLog.ldf', SIZE = 10, MAXSIZE = 50, FILEGROWTH=1) GO NAME : Nom logique du fichier. FILENAME: Emplacement et nom physique du fichier. SIZE: Taille initiale du fichier en mégaoctets (MB). La taille par défaut est de 1 mégaoctet. MAXSIZE: Taille maximum du fichier indiquée en mégaoctets. Si aucune valeur n’est précisée, alors la taille du fichier sera limitée par la place libre sur le disque. FILEGROWTH : Précise le pas d’incrément pour la taille du fichier, qui ne pourra jamais dépasser la valeur maximale. Les extensions possèdent une taille de 64 Ko. C’est donc la valeur minimale du pas d’incrément qu’il faut fixer. LOG ON : Emplacement du journal de transactions. Le journal de transactions stocke les modifications apportées aux données. À chaque INSERT, UPDATE ou DELETE, une écriture est faite dans le journal avant l’écriture dans la base. La validation des transactions est également consignée dans le journal. Ce journal sert à la récupération des données en cas de panne. A.MAKAYSSI SGBD SQL Server 2008 R2 BTS-DSI 2 Le mot clé GO sépare les instructions si plus d'une instruction est envoyée dans un même traitement. GO est facultatif lorsque le traitement contient uniquement une seule instruction. Dans l'Éditeur de requête, appuyez sur la touche F5 pour exécuter l'instruction et créer une base de données nommée MaBase Exemple2: Création d'une base de données sans paramètres: CREATE DATABASE MaBase Pour SQL Sever 2008 R2, La base de données ainsi crée se trouve par défaut dans: C:\Program Files\Microsoft SQL server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA . Remarque: Lorsque vous créez une base de données sans paramètres, SQL Server effectue une copie de la base de données model et remplace le nom de la copie par le nom de la base de données. Suppression d'une base de données. La suppression d'une base de données est une opération simple mais irréversible. En supprimant la base, vous supprimez en même temps tous les fichiers qui lui sont associées, sans les mettre dans la corbeille. Syntaxe DROP DATABASE MaBase Supprime la base de données MaBase. Remarque: Il n’est pas possible de supprimer les bases système. Renommer une base de données. Il est possible de changer le nom d'une base de données sans risque pour les données qu'elle contient Syntaxe ALTER DATABASE Gestion MODIFY NAME = BaseGestion Renomme la base appelée Gestion en base appelée BaseGestion. Gestion des tables et index Pour créer une table, vous devez fournir un nom pour la table et les noms et les types de données de chaque colonne dans la table. Il est aussi recommandé d'indiquer si les valeurs Null sont autorisées dans chaque colonne. La plupart des tables possèdent une clé primaire constituée d'une ou plusieurs colonnes de la table. Une clé primaire est toujours unique. Le Moteur de base de données applique la restriction qui veut que les valeurs de clé primaire ne peuvent pas être répétées dans la table. Les types de données Lors de la définition d’une colonne, on précisera le format d’utilisation de la donnée ainsi que le mode de stockage par le type de la colonne. a. Types de données système Ces types sont disponibles pour toutes les bases de données en standard. A.MAKAYSSI SGBD SQL Server 2008 R2 BTS-DSI 2 Caractères char[(n)] Chaîne de caractères de longueur fixe, de n caractères maximum. Par défaut 1, maximum 8000 caractères. varchar(n|max) Chaîne de caractères à longueur variable, de n caractères maximum. Par défaut 1, maximum 8000 caractères. En précisant max, la variable peut contenir des données de type texte allant jusqu’à 231 caractères. nchar[(n)] Chaîne de caractères unicode, maximum 4000 caractères. nvarchar(n|max) Chaîne de caractères unicode, maximum 4000. En précisant max, la variable peut contenir des données de type texte allant jusqu’à 231 octets. Numérique Numérique exact de précision p (nombre de chiffres total), avec d chiffres à droite de la virgule. p est compris entre 1 et 38, decimal[(p[,d])] d est compris entre 1 et p, 18 par défaut. 0 par défaut. Exemple : pour décimal (8,3) l’intervalle admis sera de -99999,999 à +99999,999. Les valeurs sont gérées de -1038 à 1038 -1. numeric[(p[,d])] Identique à decimal. Pour le type decimal, la précision pourra être parfois plus grande que celle requise. bigint Type de données entier codé sur 8 octets. Les valeurs stockées avec ce type de données sont comprises entre- 263(- 9223 372 036 854 775 808) et 263-1(9 223 372 036 854 775 807). int Nombre entier entre -231 (2147783648) et +231 -1 (+2147483647). Le type de données int est spécifique SQL Server et son synonyme integer est quant à lui compatible ISO. smallint Nombre entier entre - 215 (32768) et 215 -1 (+32767). tinyint Nombre entier positif entre 0 et 255. float[(n)] Numérique approché de n chiffres, n allant de 1 à 53. real Identique à float(24). money smallmoney Numérique au format monétaire compris entre -922 337 203 685 477, 5808 et +922 337 203 685 477, 5807 (8 octets). Numérique au format monétaire compris entre – 214 748,3648 et +214 748,3647 (4 octets). Date A.MAKAYSSI SGBD SQL Server 2008 R2 datetime BTS-DSI 2 Permet de stocker une date et une heure sur 8 octets. 4 pour un nombre de jours par rapport au 1er janvier 1900, 4 pour un nombre de millisecondes après minuit. Les dates sont gérées du 1er janvier 1753 au 31 décembre 9999. Les heures sont gérées avec une précision de 3,33 millisecondes. Smalldatetime Permet de stocker une date et une heure sur 4 octets. Les dates sont gérées du 1er janvier 1900 au 6 juin 2079, à la minute près. datetime2 Plus précis que le type datetime, il permet de stocker une donnée de type date et heure comprise entre le 01/01/0001 et le 31/12/9999 avec une précision de 100 nanosecondes. Datetimeoffset Permet de stocker une donnée de type date et heure comprise entre le 01/01/0001 et le 31/12/9999 avec une précision de 100 nanosecondes. Les informations horaires sont stockées au format UTC et le décalage horaire est conservé afin de retrouver l’heure locale renseignée initialement. Date Permet de stocker une date comprise entre le 01/01/0001 et le 31/12/9999 avec une précision d’une journée. time Permet de stocker une donnée positive de type heure inférieure à 24h00 avec une précision de 100 nanosecondes 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. Syntaxe (création) CREATE TYPE nomType {FROM typeDeBase [ ( longueur [ , precision ] ) ] [ NULL | NOT NULL ] } Exemples: Création d’un type MyType pour les colonnes telles que nom client, nom fournisseur etc. : CREATE TYPE MyType FROM VARCHAR(30) NULL Création d’un type MyNum pour des valeurs numériques entre -999 et +999 : CREATE TYPE MyNum FROM numeric(3) NOT NULL Demander la création d’un nouveau type de données depuis SQL Server Management Studio : Lancez SQL Server Management Studio. Développez votre base de données/ Programmabilité/ Types puis faites un clic-droit sur Types de données définis par l'utilisateur et choisir Nouveau type de données défini par l'utilisateur. Saisissez par exemple Montant dans la zone Nom. Et sélectionnez decimal comme type de données. Donnez 8 à la zone Précision et 2 pour Echelle. Validez par OK. Vous verrez votre type qui figure dans le groupeTypes de données définis par l'utilisateur. Pour supprimer un type défini par l'utilisateur, il suffit d'y faire un clic droit et sélectionner Supprimer. A.MAKAYSSI SGBD SQL Server 2008 R2 BTS-DSI 2 Syntaxe (suppression) DROP TYPE [ schema_name. ] type_name [ ; ] Un type ne pourra pas être supprimé s’il est utilisé dans une table de la base où il a été créé. Exemple: le code suivant supprime le type MyType DROP TYPE MyType Créer une table Dans une fenêtre Éditeur de requêtes, tapez et exécutez le code suivant pour créer une simple table nommée Produits. Les colonnes de la table sont nommées IDProduit, NomProduit, Prix, et DescriptionProduit. La colonne IDProduit est la clé primaire de la table. int, varchar(25), money, et text sont les types de données de ces colonnes. Seules les colonnes Prix et DescriptionProduit peuvent n'avoir aucune donnée lors de l'insertion ou de la modification d'une ligne. Cette instruction contient un élément facultatif (dbo.) appelé un schéma. Le schéma est l'objet de base de données qui est propriétaire de la table. Si vous êtes administrateur, dbo est le schéma par défaut. dbo représente le propriétaire de la base de données. Syntaxe: CREATE TABLE [dbo.]Produits (IDProduit int PRIMARY KEY NOT NULL, NomProduit varchar(25) NOT NULL, Prix money NULL, DescriptionProduit text NULL) GO Pour afficher les informations sur la table Produits, on utilise la procédure stockée sp_help comme suit EXEC sp_help Produits. On peut créer des colonnes virtuelles calculées: par exemple, le calcul d'un prix TTC, à partir du prix HT et du taux de TVA. Dans l'instruction CREATE TABLE, il suffit de définir la colonne par la clause PrixTTC AS (PrixHT*(1 + TVA)). Les valeurs de cette colonne ne sont pas stockées dans la table, mais recalculées à la demande. Il n'est pas possible de créer des colonnes calculées à partir de l'interface de SQL Server Management Studio. A.MAKAYSSI