Vous êtes sur la page 1sur 11

Cours 2 : Gestion des tables

1. Identifiant
Tous les lments crs dans SQL Server sont parfaitement identifis par leur nom qui est utilis en tant quidentifiant. En effet, deux objets de mme type ne peuvent pas avoir le mme nom sils sont dfinis au mme niveau. Par exemple, sur une instance de SQL Server, il nest pas possible davoir deux bases de donnes avec le mme nom, par contre, cest totalement possible si les bases sont dfinies sur deux instances distinctes de SQL Server. De mme, au sein dune base de donnes, il nest pas possible davoir deux tables avec le mme nom. Cest partir de lidentifiant quil est possible de manipuler via le SQL les objets. Il est donc important de dfinir correctement ces identifiants. Les identifiants sont composs de 1 128 caractres. Ils commencent toujours par une lettre ou lun des caractres suivants : _, @, #. Les caractres suivants sont des caractres alphanumriques. Bien entendu aucun identifiant ne peut correspondre un mot cl du Transact SQL. Il existe deux catgories didentifiants : les rguliers et les dlimits. Les identifiants rguliers Cette catgorie didentifiant est la plus communment utilise et cest celle privilgier. En effet, ce type didentifiant est prsent dans toutes les bases et prsente beaucoup de souplesse au niveau de lcriture des requtes car la casse nest pas conserve. Exemple : ENIEditions, RessourcesInformatiques Les identifiants dlimits Cette catgorie didentifiant permet de conserver des caractres spciaux dans les identifiants comme les caractres accentus, les espaces, mais galement de conserver la casse. Ces identifiants sont utiliss entre des crochets [] ou bien des guillemets "". Lutilisation de ce type didentifiant ne permet que rarement de gagner en clart car lcriture des requtes est plus lourde. Il est donc prfrable dutiliser des identifiants rguliers. Exemple : [ENI ditions], "Ressources Informatiques", ...

2. Les types de donnes


Lors de la dfinition dune colonne, on prcisera le format dutilisation de la donne ainsi que le mode de stockage par le type de la colonne.

a. Types de donnes systme


Ces types sont disponibles pour toutes les bases de donnes en standard. Caractres char[(n)] Chane de caractres de longueur fixe, de n caractres maximum. Par dfaut 1, maximum 8000. varchar(n|max) Chane de caractres longueur variable, de n caractres maximum. Par dfaut 1, maximum 8000 caractres. En prcisant max, la variable peut contenir des donnes de type texte allant jusqu 231 caractres. nchar[(n)] Chane de caractres unicode, maximum 4000 caractres. nvarchar (n|max) Chane de caractres unicode, maximum 4000. En prcisant max, la variable peut contenir des donnes de type texte allant jusqu 231 octets. Numriques decimal [(p[,d])] Numrique exact de prcision p (nombre de chiffres total), avec d chiffres droite de la virgule. p est compris entre 1 et 38, 18 par dfaut. d est compris entre 1 et p, 0 par dfaut. Exemple : Pour dcimal (8,3) lintervalle admis sera de 99999,999 +99999,999. Les valeurs sont gres de 1038 1038 1. numeric [(p[,d])] Identique decimal. Pour le type decimal, la prcision pourra tre parfois plus grande que celle requise. bigint Type de donnes entier cod sur 8 octets. Les valeurs stockes avec ce type de donnes sont comprises entre 2 63 (9 223 372 036 854 775 808) et 2631 (9 223 372 036 854 775 807).

AM1

Cours 2 : Gestion des tables


int Nombre entier entre 231 (2147783648) et +231 1 (+2147483647). Le type de donnes int est spcifique 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)] Numrique approch de n chiffres, n allant de 1 53. real Identique float(24). money Numrique au format montaire compris entre 922 337 203 685 477, 5808 et +922 337 203 685 477, 5807 (8 octets). Smallmoney Numrique au format montaire compris entre 214 748,3648 et +214 748,3647 (4 octets). Binaires binary[(n)] Donne binaire sur n octets (1 255), la longueur est fixe. varbinary (n|max) Donne binaire de longueur variable de n octets (1 8000). Loption max permet de rserver un espace de 231, octets au maximum. Date Pour la gestion des donnes de types date et heure SQL Server 2008 propose de nouveaux types de donnes afin doptimiser le stockage des donnes. Ces nouveaux types de donnes sont introduits pour permettre une gestion plus fine des donnes de types date et heure. Tout dabord, il existe des types particuliers pour stocker les donnes de type heure et dautres types pour stocker les donnes de type date. Cette sparation est bnfique car elle permet de donner plus de prcision tout en limitant lespace utilis par les donnes de tel ou tel type. Par exemple, est il ncessaire de conserver des donnes de type heures, minutes et secondes lorsque seule la date de naissance dun client doit tre conserve ? Sans aucun doute, non. Le simple fait de conserver ces informations peut induire des erreurs lorsque par la suite des calculs vont tre faits. Il est donc plus raisonnable et plus performant dadopter pour cette donne, un type qui ne conserve que la date. Ces nouveaux types de donnes, pour les donnes de type date et heure, vont galement permettre une meilleure compatibilit avec les autres systmes de gestion de donnes et faciliter les oprations de reprise de donnes. Bien entendu SQL Server offre la possibilit avec les types datetime2 et datetimeoffset de conserver des informations de type date et heure de faon simultane. Le type datetimeoffset permet non seulement de stocker des informations de type date et heure avec une prcision pouvant aller jusqu 100 nanosecondes, mais en plus cest lheure au format UTC qui est conserve ainsi que le dcalage (en nombre dheures) entre cette heure UTC et la zone horaire depuis laquelle travaille lutilisateur qui introduit les informations dans la base. datetime 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 aprs minuit. Les dates sont gres du 1er janvier 1753 au 31 dcembre 9999. Les heures sont gres avec une prcision de 3,33 millisecondes. smalldatetime Permet de stocker une date et une heure sur 4 octets. Les dates sont gres du 1er janvier 1900 au 6 juin 2079, la minute prs. datetime2 Plus prcis que le type datetime, il permet de stocker une donne de type date et heure comprise entre le 01/01/0001 et le 31/12/9999 avec une prcision de 100 nanosecondes. datetimeoffset Permet de stocker une donne de type date et heure comprise entre le 01/01/0001 et le 31/12/9999 avec une prcision de 100 nanosecondes. Les informations horaires sont stockes au format UTC et le dcalage horaire est conserv afin de retrouver lheure locale renseigne initialement.

AM2

Cours 2 : Gestion des tables


date Permet de stocker une date comprise entre le 01/01/0001 et le 31/12/9999 avec une prcision dune journe. time Permet de stocker une donne positive de type heure infrieure 24h00 avec une prcision de 100 nanosecondes. Spciaux bit Valeur entire pouvant prendre les valeurs 0, 1 ou null. timestamp Donne dont la valeur est mise jour automatiquement lorsque la ligne est modifie ou insre. uniqueidentifier Permet de crer un identificateur unique en sappuyant sur la fonction NEWID(). sql_variant Le type de donnes sql_variant permet de stocker nimporte quel type de donnes lexception des donnes de type text, ntext, timestamp et sql_variant. Si une colonne utilise ce type de donnes, les diffrentes lignes de la table peuvent stocker dans cette colonne des donnes de type diffrent. Une colonne de type sql_variant peut possder une longueur maximale de 8016 octets. Avant dutiliser une valeur stocke au format sql_variant dans une opration, il est ncessaire de convertir les donnes dans leur format dorigine. Les colonnes utilisant le type sql_variant peuvent participer des contraintes de cls primaires, de cls trangres ou dunicit, mais les donnes contenues dans la cl dune ligne ne peuvent excder les 900 octets (limite impose par les index). sql_variant ne peut pas tre utilis dans les fonctions CONTAINSTABLE et FREETEXTTABLE. xml Ce type permet de stocker un document xml dans une colonne au sein dune table relationnelle. Remarque : Les types text, ntext et images sont maintenus pour des raisons de compatibilit. Il faut maintenant leur prfrer varchar(max) et varbinary(max). SQL Server propose galement un certain nombre de synonymes par rapport ses propres types de base. Les synonymes sont souvent prsents pour assurer la compatibilit avec le standard ISO.

b. Types de donnes dfinis par lutilisateur


Il est possible de dfinir ses propres types de donnes, soit par lintermdiaire de Management Studio, soit par la commande CREATE TYPE.

AM3

Cours 2 : Gestion des tables


Syntaxe (cration)

CREATE TYPE nomType {FROM typeDeBase [ ( longueur [ , precision ] ) ] [ NULL | NOT NULL ] | EXTERNAL NAME nomAssembly [ .nomClasse] } [ ; ] Il est possible de dfinir un type de donnes en sappuyant sur la dfinition dune classe. Cette option est lie lintgration du CLR dans SQL Server. Cette intgration est dtaille plus tard dans cet ouvrage.
Syntaxe (suppression)

DROP TYPE [ schema_name. ] type_name [ ; ] Un type ne pourra pas tre supprim sil est utilis dans une table de la base o il a t cr. Demander la cration dun nouveau type de donnes depuis SQL Server Management Studio :

AM4

Cours 2 : Gestion des tables


Dfinition du nouveau type de donnes "Montant" depuis SQL Server Management Studio :

3. Grer les tables


Une table reprsente une structure logique dans laquelle les donnes vont tre ranges. Pour permettre une bonne organisation des informations, chaque table est constitue de colonnes afin de structurer les donnes. Chaque colonne est parfaitement identifie par son nom, qui est unique lintrieur de la table, et par son type de donnes. Les donnes sont rparties entre plusieurs tables. Les contraintes dintgrit permettent de garantir la cohrence des donnes. Les trois oprations de gestion de table sont la cration (CREATE TABLE), la modification (ALTER TABLE) et la suppression (DROP TABLE). Ces oprations peuvent tre ralises en Transact SQL ou par SQL Server Management Studio par un utilisateur "dbo" ou ayant reu le droit CREATE TABLE.

a. Crer une table


Ltape de cration des tables est une tape importante de la conception de la base car les donnes sont, organises par rapport aux tables. Cette opration est ponctuelle et elle est en gnral ralise par ladministrateur (DBA : DataBase Administrator) ou tout au moins par la personne charge de la gestion de la base.La cration dune table permet de dfinir les colonnes (nom et type de donnes) qui la composent ainsi que les contraintes dintgrit. De plus, il est possible de dfinir des colonnes calcules, un ordre de tri spcifique la colonne ainsi que la destination des donnes de type texte ou image.
Syntaxe

CREATE TABLE nom_table ( nom_colonne {typecolonne|AS expression_calcule} [,nom_colonne ... ][,contraintes...]) nom_table Peut tre sous la forme base.propritaire.table. nom_colonne Nom de la colonne qui doit tre unique dans la table. typecolonne Type systme ou type dfini par lutilisateur. contraintes Rgles dintgrit (traites ultrieurement dans cet ouvrage). AS expression_calcule

AM5

Cours 2 : Gestion des tables


Il est possible de dfinir une rgle de calcul pour les colonnes qui contiennent des donnes calcules. Bien entendu, ces colonnes ne sont accessibles quen lecture seule, et il nest pas possible dinsrer des donnes ou de mettre jo ur les donnes dune telle colonne. Remarque : Il est possible de crer 2 milliards de tables par base de donnes. Le nombre maximal de colonnes par table est de 1024. La longueur maximale dune ligne est de 8060 octets (sans compter les donnes texte ou image). Exemples Cration de la table ARTICLES :

b. Modifier une table


La modification de table est effectue par la commande ALTER TABLE ou par linterface graphique de SQL Server Management Studio. Lors dune modification de table, il est possible dajouter et de supprimer des colonnes et des contraintes, de modifier la dfinition dune colonne (type de donnes, classement et comportement vis vis de la valeur NULL), dactiver ou de dsactiver les contraintes dintgrit et les dclencheurs. Ce dernier point peut savrer utile lors dimport massif de donnes dans la base si lon souhaite conserver des temps de traitements cohrents.
Syntaxe

ALTER TABLE nomtable { [ ALTER COLUMN nom_colonne { nouveau_type_donnes [ ( longueur [ , precision ] ) ] [ NULL | NOT NULL ] } ] | ADD nouvelle_colonne | [ WITH CHECK | WITH NOCHECK ] ADD contrainte_table | DROP { [ CONSTRAINT ] nom_contrainte | COLUMN nom_colonne } | { CHECK | NOCHECK } CONSTRAINT { ALL | nom_contrainte } WITH NOCHECK Permet de poser une contrainte dintgrit sur la table sans que cette contrainte soit vrifie par les lignes dj prsentes dans la table. NULL, NOT NULL Permettent de dfinir une contrainte de nullit ou de non nullit sur une colonne existante de la table. CHECK, NOCHECK Permettent dactiver et de dsactiver des contraintes dintgrit. Exemple Ajout dune colonne :

c. Supprimer une table


La suppression dune table entrane la suppression de toutes les donnes prsentes dans la table. Les dclencheurs et les index associs la table sont galement supprims. Il en est de mme pour les permissions dutilisation de la table. Par contre, les vues, procdures et fonctions qui rfrencent la table ne sont pas affectes par la suppression de la table. Si elles rfrencent la table supprime, alors une erreur sera leve lors de la prochaine excution.

AM6

Cours 2 : Gestion des tables


Syntaxe

DROP TABLE

nomtable [,nomtable...]

La suppression dune table supprimera les donnes et les index associs. La suppression ne sera pas possible si la table est rfrence par une cl trangre.

4. Mise en oeuvre de lintgrit des donnes


Pour assurer la cohrence des donnes dans la base, il est possible de grer au niveau du serveur un ensemble de fonctionnalits qui permettent de centraliser les contrles et les rgles de fonctionnement dicts par lanalyse. La mise en oeuvre de lintgrit des donnes peut se faire de manire procdurale par les valeurs par dfaut (DEFAULT) et les dclencheurs (TRIGGER) ou de manire dclarative par les contraintes (CONSTRAINT) et la proprit IDENTITY. Lintgrit des donnes traduit les rgles du modle relationnel, rgle de cohrence (intgrit de domaine), existence de valeurs nulles, rgle dunicit (intgrit dentit) et cls trangres (intgrit rfrentielle).

a. Les valeurs par dfaut


Depuis SQL Server 2005, les objets DEFAULT nont plus cours et ne doivent pas tre mis en place dans le cadre de nouveaux dveloppements. En effet, ce type dobjet nest pas conforme la norme du SQL. Mme si les instructions CREATE DEFAULT, DROP DEFAULT, sp_bindefault et sp_unbindefault sont toujours prsentes, il est prfrable de dfinir la valeur par dfaut lors de la cration de la table (CREATE TABLE) ou de passer par une instruction de modification de table (ALTER TABLE). Comme toujours, ces oprations peuvent tre excutes sous forme de script ou par lintermdiaire de SQL Server Management Studio.

b. Les rgles
Afin de proposer une gestion plus uniforme des diffrents lments de la base, en gnralisant lutilisation des instructions CREATE, ALTER et DROP, et pour tre plus proche de la norme, SQL Server 2008 ne propose plus la gestion des rgles en tant quobjet indpendant. Les contraintes dintgrit qui pouvaient tre exprimes sous forme de rgle doivent tre dfinies lors de la cration de la table par linstruction CREATE TABLE. Elles peuvent galement tre ajoutes/supprimes sur une table existante par lintermdiaire de linstruction ALTER TABLE. Pour assurer la continuit des scripts, SQL Server continue dinterprter correctement les instructions CREATE RULE, DROP RULE, sp_bindrule, sp_unbindrule.

c. La proprit Identity
Cette proprit peut tre affecte une colonne numrique entire, la cration ou la modification de la table et permet de faire gnrer, par le systme, des valeurs pour cette colonne. Les valeurs seront gnres la cration de la ligne, successivement en partant de la valeur initiale spcifie (par dfaut 1) et en augmentant ou diminuant ligne aprs ligne dun incrment (par dfaut 1).
Syntaxe

CREATE TABLE nom (colonne typeentier IDENTITY [(depart, increment)], ...) Il ne peut y avoir quune colonne IDENTITY par table ! La proprit IDENTITY doit tre dfinie en mme temps que la colonne laquelle elle est rattache. La dfinition dune colonne identity peut intervenir dans une commande CREATE TABLE ou bien dans une commande ALTER TABLE. Exemple

d. Les contraintes dintgrit


Les contraintes permettent de mettre en oeuvre lintgrit dclarative en dfinissant des contrles de valeur au niveau de la structure de la table elle mme. La dfinition des contraintes se fait sous forme de script par lintermdiaire des

AM7

Cours 2 : Gestion des tables


instructions CREATE et ALTER TABLE. Il est galement possible de les dfinir depuis SQL Server Management Studio. Il est recommand de passer, lorsque cela est possible, par des contraintes dintgrit la place de dclencheurs de base de donnes car les contraintes dintgrits sont normalises et elles limitent le codage donc le risque derreur. Elles sont intgres dans la dfinition de la structure de la table et leur vrification est plus rapide que lexcution dun dclencheur.
Syntaxe

ALTER TABLE nomTable {ADD|DROP} CONSTRAINT nomContrainte ...[;]

NOT NULL

SQL Server considre la contrainte de nullit comme une proprit de colonne. La syntaxe est donc : CREATE TABLE nomtable (nomcolonne type [{NULL | NOT NULL}] [? ...]) NOT NULL Spcifie que la colonne doit tre valorise en cration ou en modification. Il est prfrable de prciser systmatiquement NULL ou NOT NULL, car les valeurs par dfaut de cette proprit dpendent de beaucoup de facteurs : Pour un type de donnes dfini par lutilisateur, cest la valeur spcifie la cration du type. Les types bit et timestamp nacceptent que NOT NULL. Les paramtres de session ANSI_NULL_DFLT_ON ou ANSI_NULL_DFLT_OFF peuvent tre activs par la commande SET. Le paramtre de base de donnes ANSI NULL peut tre positionn. Depuis SQL Server 2005, il est possible de modifier la contrainte de NULL/NOT NULL avec une commande ALTER TABLE pour une colonne qui existe dj. Bien entendu, les donnes dj prsentes dans la table doivent respecter ces contraintes.

PRIMARY KEY

Cette contrainte permet de dfinir un identifiant cl primaire, cest--dire une ou plusieurs colonnes nacceptant que des valeurs uniques dans la table (rgle dunicit ou contrainte dentit).
Syntaxe

[CONSTRAINT nomcontrainte]PRIMARY KEY (nomcolonne[,...]) nomcontrainte Nom permettant didentifier la contrainte dans les tables systme. Par dfaut, SQL Server donnera un nom peu facile manipuler. Exemples Table catgorie, identifiant CODE_CAT :

Ajout de la cl primaire la table Lignes_cdes (un index ordonn existe dj sur Numero_cde) :

AM8

Cours 2 : Gestion des tables

Gestion de la cl primaire par SQL Server Management Studio :

Il nest pas possible de supprimer la cl primaire si : elle est rfrence par une contrainte de cl trangre. un index xml primaire est dfini sur la table.

UNIQUE

Cette contrainte permet de traduire la rgle dunicit pour les autres cls uniques de la table ou identifiants cls secondaires. Cette contrainte possde les mmes caractristiques que PRIMARY KEY deux exceptions prs : il est possible davoir plusieurs contraintes UNIQUE par table ; les colonnes utilises peuvent tre NULL (non recommand !). Lors de lajout dune contrainte dunicit sur une table existante, SQL Server sassure du respect de cette contrainte par les lignes dj prsentes avant de valider lajout de la contrainte. La gestion de cette contrainte est assure par un index de type UNIQUE. Il nest pas possible de supprimer cet index par lintermdiaire de la commande DROP INDEX. Il faut supprimer la contrainte par lintermdiaire de ALTER TABLE.
Syntaxe

[CONSTRAINT nomcontrainte] UNIQUE (nomcolonne [,...]) Exemple Lassociation des colonnes Designation et Prixht doit tre unique dans la table ARTICLES :

REFERENCES

Cette contrainte traduit lintgrit rfrentielle entre une cl trangre dune table et une cl primaire ou secondaire dune autre table.

AM9

Cours 2 : Gestion des tables


Syntaxe

CONSTRAINT nom_contrainte [FOREIGN KEY (colonne[,_])] REFERENCES table [ ( colonne [ ,... ] ) ] [ ON DELETE { CASCADE | NO ACTION | SET NULL | SET DEFAULT } ] [ ON UPDATE { CASCADE | NO ACTION | SET NULL | SET DEFAULT } ] La clause FOREIGN KEY est obligatoire lorsquon utilise une syntaxe contrainte de table pour ajouter la contrainte. Loption de cascade permet de prciser le comportement que doit adopter SQL Server lorsque lutilisateur met jour ou tente de supprimer une colonne rfrence. Lors de la dfinition dune contrainte de rfrence par les instructions CREATE TABLE ou ALTER TABLE, il est possible de prciser les clauses ON DELETE et ON UPDATE. NO ACTION Valeur par dfaut de ces options. Permet dobtenir un comportement identique celui prsent dans les versions prcdentes de SQL Server. ON DELETE CASCADE Permet de prciser quen cas de suppression dune ligne dont la cl primaire est rfrence par une ou plusieurs lignes, toutes les lignes contenant la cl trangre faisant rfrence la cl primaire sont galement supprimes. Par exemple, avec cette option, la suppression dune ligne dinformation dans la table des commandes provoque la suppression de toutes les lignes dinformation de la table lignes_commande. ON UPDATE CASCADE Permet de demander SQL Server de mettre jour les valeurs contenues dans les colonnes de cls trangres lorsque la valeur de cl primaire rfrence est mise jour. SET NULL Lorsque la ligne correspondant la cl primaire dans la table rfrence est supprime, alors la cl trangre prend la valeur null. SET DEFAULT Lorsque la ligne correspondant la cl primaire dans la table rfrence est supprime, alors la cl trangre prend la valeur par dfaut dfinie au niveau de la colonne. Exemple Cration de la cl trangre code_cat dans la table ARTICLES :

DEFAULT

La valeur par dfaut permet de prciser la valeur qui va tre positionne dans la colonne si aucune information nest prcise lors de linsertion de la ligne. Les valeurs par dfaut sont particulirement utiles lorsque la colonne naccepte pas les valeurs NULL car elles garantissent lexistence dune valeur. Il faut toutefois conserver lesprit que la valeur par dfaut est utilise uniquement lorsquaucune valeur nest prcise pour la colonne dans linstruction INSERT. Il nest pas possible de complter ou dcraser une valeur saisie par lutilisateur. Pour raliser ce type dopration, il est ncessaire de dvelopper un dclencheur de base de donnes. Une valeur par dfaut peut tre dfinie pour toutes les colonnes lexception des colonnes de type timestamp ou bien celles qui possdent un type identity.

AM10

Cours 2 : Gestion des tables


Syntaxe

[CONSTRAINT Nom contrainte] DEFAULT valeur [FOR nomcolonne] valeur La valeur doit tre exactement du mme type que celui sur lequel est dfinie la colonne. Cette valeur peut tre une constante, une fonction scalaire (comme par exemple : USER, CURRENT_USER, SESSION_USER, SYSTEM_USER) ou bien la valeur NULL. Exemple Valeur par dfaut pour le Nom du client :

CHECK

La contrainte de validation ou contrainte CHECK, permet de dfinir des rgles de validation mettant en rapport des valeurs issues de diffrentes colonnes de la mme ligne. Ce type de contrainte permet galement de sassurer que les donnes respectent un format prcis lors de leur insertion et mise jour dans la table. Enfin, par lintermdiaire dune contrainte de validation, il est possible de garantir que la valeur prsente dans la colonne appartient un domaine prcis de valeurs.
Syntaxe

[CONSTRAINT Nomcontrainte] CHECK (expression boolenne) Exemple Mise en oeuvre du contrle du prix positif de larticle :

AM11