Академический Документы
Профессиональный Документы
Культура Документы
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", ...
AM1
AM2
AM3
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
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
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 :
AM6
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.
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
AM7
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
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
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
[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