base des donnees sql

Upload: youssef-aidi

Post on 07-Jul-2015

489 views

Category:

Documents


5 download

TRANSCRIPT

Base de donnes : SQL page 1 Bases de donnes : SQL Support de Formation n1 Objectifs Prsentation du langage SQL et de lalgbre relationnel Interrogation et mise jour dune base de donnes en SQL interactif Construction complte dune base de donnes Notions dadministration dune base de donnes en Client/Serveur Prsentation du modle client/serveur ISTA.maUn portail au servicede la formation professionnelle Le Portail http://www.ista.maQuevoussoyeztudiants,stagiaires,professionnelsde simplementintress(e)parlesquestionsrelativesauxformationshttp://www.ista.ma vous propose un contenu mis jour en permanence et richement quotidiendelactualit,etunevaritderessourcesdocumentaires,desupportsdeformation,etde documentsenligne(supportsdecours,mmoires,exposs,rapportsdestage Lesiteproposeaussiunemultitudedeconseilsconcerne la recherche d'un emploi ou d'un stagesa lettre de motivation, comment faire son CV, comment se prparer l'entretien dembaucheLes forums http://forum.ista.maragir l'actualit, poser des questiontout ceci et apporter votre pierre l'difice.Notre Concept Le portail http://www.ista.maest bas sur un concept de gratuit intgrale du contenu & un modle collaboratif qui favorise la culture dchange et le sens du partage entre les Notre Mission Diffusion du savoir & capitalisation des expriences.Notre Devise Partageons notre savoir Notre Ambition Devenir la plate-forme leader dans le domaine de laNotre Dfi Convaincre de plus en plus de personnes pour rejoindre notre communaut et accepter de partager leur savoir avec les autres membres. Web Project Manager - Badr FERRASSI :http://www.ferrassi.com -contactez :au service de la formation professionnelle uevoussoyeztudiants,stagiaires,professionnelsdeterrain,formateurs,ouquevoussoyeztout simplementintress(e)parlesquestionsrelativesauxformationsprofessionnellepropose un contenu mis jour en permanence et richement quotidiendelactualit,etunevaritderessourcesdocumentaires,desupportsdeformation,etde supportsdecours,mmoires,exposs,rapportsdestageunemultitudedeconseilsetdesrenseignementstrsutilessurtoutcequi emploi ou d'un stage : offres demploi, offresde stagesa lettre de motivation, comment faire son CV, comment se prparer l'entretien dembauchehttp://forum.ista.ma sont mis votre disposition, pour faire part de vos expriences, questionnements, susciter des rponses.N'hsitez pas interagir avec r votre pierre l'difice. est bas sur un concept de gratuit intgrale du contenu & un modle collaboratif qui favorise la culture dchange et le sens du partage entre les membres de la communaut ista.Diffusion du savoir & capitalisation des expriences. dans le domaine de la Formation Professionnelle. lus en plus de personnes pour rejoindre notre communaut et accepter de partager leur http://www.ferrassi.com terrain,formateurs,ouquevoussoyeztout professionnelle,auxmtiers, propose un contenu mis jour en permanence et richement illustr avec un suivi quotidiendelactualit,etunevaritderessourcesdocumentaires,desupportsdeformation,etde supportsdecours,mmoires,exposs,rapportsdestage). etdesrenseignementstrsutilessurtoutcequi offres demploi, offresde stage,comment rdiger sa lettre de motivation, comment faire son CV, comment se prparer l'entretien dembauche, etc. faire part de vos expriences, 'hsitez pas interagir avec est bas sur un concept de gratuit intgrale du contenu & un modle membres de la communaut ista. lus en plus de personnes pour rejoindre notre communaut et accepter de partager leur Base de donnes : SQL page 2 La connexion ODBC et lutilisation dACCESS comme client Mode demploi Pour chacun des thmes abords, ce support de formation : -prsente les points essentiels -renvoie des supports de cours, des livres ou la documentation en ligne constructeur, par lesymbole : -propose des exercices pratiques par le symbole : Autres symboles utiliss : Point important qui mrite dtre soulign eA viter tout prix ! Manip raliser avec un utilitaire graphique (qui devrait normalement simplifier le travail !) Approfondissement :travaildedocumentation ou exercice supplmentaire, faire individuellement (non intgr dans le temps de formation moyen) Base de donnes : SQL page 3 1.PRESENTATION DU LANGAGE SQL 1.1 Ressources Pour la syntaxe du langage SQL : consulter le livre SQL2 Initiation/Programmation de Christian Mare et Guy Ledant PourlutilisationdelenvironnementSQLServer :utiliser Documentationenligne de SQL Server et Aide de Transact SQL sous Analyseur de requte SQL 1.2Historique du langageS.Q.L.(StructuredQueryLanguage)estunlangagestructurpermettantdinterrogeretde modifier les donnes contenues dans une base de donnes relationnelle. Il est issu de SEQUEL : Structured English Query Language. Cest le premier langage pour les S.G.B.D Relationnels. Il a t dvelopp par IBM en 1970 pour systme R, son 1erSGBDR. S.Q.L.atreconnuparlANSIpuisimposcommenorme.Ilnexistepas de S.G.B.D.R sans S.Q.L. !Malheureusement,malgrlanormeSQL,ilexisteunensemblede dialectes qui respectent un minimum commun. Ce cours sappuiera sur le langage Transact SQL de Microsoft, en essayant de rester le plus standard possible. 1.3Notion de relation SQL 2 : Partie IApproche p. 1 25 SQL est bas sur la thorie des ensembles : il manipule des tables qui reprsentent le graphe dune relation entre plusieurs ensembles (colonnes). Chaque ligne ou tuple est un lment du graphe de la relation IdPiloteNomPilotePrenomPilote 1GAINSBOURGSerge 2FERRATJean 3NOUGAROClaude 4SCHUMMANRobert 5STROGOFFMichel 6SORRELLucien 7TAVERNIERBertrand 8FAYOLLEMarc 9LECURgis Colonne ou attribut Ligne ou tuple Base de donnes : SQL page 4 Exemple :la base de donnes Compagnie arienne que lon crera sous SQL Server dans la suite de ce cours : Schma gnral de la base Structure et contenu des tables AVION( NumAvion,TypeAvion,BaseAeroport) NumAvion : numro davion(cl primaire, numrique) TypeAvion: type davion : A320, B707 (Cl trangre vers la colonne TypeAvion de la tableTYPE, alphanumrique) BaseAeroport: identificateur de laroport o est bas lavion (cl trangre vers la colonneIdAeroport de la table AEROPORT, 3 lettres) Lien vers cl primaire Base de donnes : SQL page 5 NumAvionTypeAvionBaseAeroport 100A320NIC 101B707CDG 102A320BLA 103DC10BLA 104B747ORL 105A320GRE 106ATR42CDG 107B727LYS 108B727NAN 109A340BAS Tous les avions de mme type ont des caractristiques communes: tous les A320 possdent le mme nombre de places et sont contruits par AirBus . Pour ne pas introduire de redondance dans notre base, il faut donc crer une table TYPE pour stocker le nombre de places et le nom du constructeur. TYPE( TypeAvion,Capacite,IdConstructeur) TypeAvion :type davion(cl primaire, alphanumrique) Capacit:nombre de places (numrique) IdConstructeur:identificateur du constructeur(cl trangre vers la colonne IdConstructeur de la table CONSTRUCTEUR, numrique) TypeAvionCapaciteidConstructeur A3203001 A3403501 ATR42501 B7072502 B7273002 B7474002 DC102004 Lesnomsdesconstructeursdoiventtreconnusavantderenseignerlestypesdavion : ilfautles stockerdansunetableindpendanteCONSTRUCTEUR ,pourpouvoirlesprsenterlutilisateur dans une liste droulante. Par ailleurs, cette solution conomise de la place dans la base de donnes (N entiers au lieu de N fois 50 caractres) CONSTRUCTEUR( IdConstructeur, NomConstructeur) IdConstructeur:identificateur du constructeur (cl primaire, numrique) NomConstructeur:nom du constructeur (alphanumrique) IdConstructeurNomConstructeur 1Arospatiale 2Boeing 3Cessna 4Douglas Base de donnes : SQL page 6 Tous les avions sont bass dans un aroport. Les vols effectus par la compagnie arienne vont dun aroportdedpartunaroportdarrive.LatableAEROPORTdoitregroupertoutesles caractristiques qui concernent directement laroport : identificateur, nom, ville desservie AEROPORT( IdAeroport, NomAeroport, NomVilleDesservie) IdAeroport:identificateur de laroport(cl primaire, 3 lettres) NomAeroport:nom de laroport(alphanumrique) NomVilleDesservie:ville desservie parlaroport(alphanumrique) IdAeroportNomAeroportNomVilleDesservie BASPorettaBastia BLABlagnacToulouse BRIBriveBrive CDGRoissyParis GRESaint GeoirGrenoble LYSSaint exupryLyon NANSaint HerblainNantes NICNice cote d'azurNice ORLOrly Paris Un vol, dcrit par un numro de vol unique, relie un aroport de dpart un aroport darrive, en partant une heure donne et en arrivant une heure donne. Le mme vol est propos par la compagnie arienne des dates diffrentes, avec des moyens (pilote etavion)ventuellementdiffrents :nepasconfondrelatableVOLquidcritlescaractristiques gnralesduvol,aveclatableAFFECTATIONquidcritlesmoyensmisenuvrepourunVOL propos une date donne. VOL(NumVol,AeroportDept, Hdpart, AeroportArr, HArrive) NumVol:numro de vol(cl primaire,"IT" + 3 chiffres ) AeroportDept:identificateur de laroportde dpart (cl trangre vers la colonne IdAeroport de la table AEROPORT, 3 lettres) Hdpart:heure de dpart(type heure) AeroportArr:identificateur de laroportdarrive (cl trangre vers la colonne IdAeroport de la table AEROPORT, 3 lettres) Harrive:heure darrive (type heure) NumVolAeroportDeptHdpartAeroportArrHArrive IT100NIC7:00CDG9:00 IT101ORL11:00BLA12:00 IT102CDG12:00NIC14:00 IT103GRE9:00BLA11:00 IT104BLA17:00GRE19:00 IT105LYS6:00ORL7:00 IT106BAS10:00ORL13:00 IT107NIC7:00BRI8:00 IT108BRI19:00ORL20:00 IT109NIC18:00ORL19:00 Base de donnes : SQL page 7 IT110ORL15:00NIC16:00 IT111NIC17:00NAN19:00 Pourconnatreune desserte defaonunique,ilfautconnatrelenumrodevoletladate :la table AFFECTATION aura donc une cl primaire compose , constitue par la concatnation des colonnes NumVol et DateVol. AFFECTATION(NumVol,DateVol, NumAvion, IdPilote) NumVol:numro de vol(cl trangre vers la colonne NumVol de la table VOL) DateVol:date du vol (type date). Cl primaire : NumVol + DateVol NumAvion:numro de lavion qui assure le vol (cl trangre vers la colonne NumAvionde la table Avion, numrique) IdPilote:identificateur du pilote en charge du vol (cl trangre vers la colonne IdPilote de la table Pilote, numrique) NumVolDateVolNumAvionIdPilote IT1006 avril 20011001 IT1007 avril 20011012 IT1016 avril 20011002 IT1017 avril 20011034 IT1026 avril 20011011 IT1027 avril 20011023 IT1036 avril 20011053 IT1037 avril 20011042 IT1046 avril 20011053 IT1047 avril 20011078 IT1056 avril 20011077 IT1057 avril 20011067 IT1066 avril 20011098 IT1067 avril 20011045 IT1076 avril 20011069 IT1077 avril 20011038 IT1086 avril 20011069 IT1087 avril 20011065 IT1096 avril 20011077 IT1097 avril 20011051 IT1106 avril 20011022 IT1107 avril 20011043 IT1116 avril 20011014 IT1117 avril 20011008 Les lments dune colonne appartiennent tous au mme ensemble appel domaine Uneclquifaitrfrencelaclprimaireduneautretableestappele cltrangre : NumAvion dans Affectation Base de donnes : SQL page 8 1.4 Rappels dalgbre relationnel Toutes les requtes SQL correspondent une combinaison des 7 oprateurs dalgbre relationnel. Les Oprateurs Ensemblistes Ne sappliquent qu des relations unicompatibles : possdant le mme nombre dattributs sur les mmes domaines : l'union permet le regroupement de tuples : R1Vols destination de Paris charles de Gaulle NumVolAeroportDeptHdpartAeroportArrHArrive IT100NIC7:00CDG9:00 R2Vols destination de Paris Orly NumVolAeroportDeptHdpartAeroportArrHArrive IT105LYS6:00ORL7:00 IT106BAS10:00ORL13:00 IT108BRI19:00ORL20:00 IT109NIC18:00ORL19:00 R3 = R1 U R2Vols destination de Paris NumVolAeroportDeptHdpartAeroportArrHArrive IT100NIC7:00CDG9:00 IT105LYS6:00ORL7:00 IT106BAS10:00ORL13:00 IT108BRI19:00ORL20:00 IT109NIC18:00ORL19:00 l'intersectionpermet la cration d'une table partir de tuples communs 2 tables : R4Vols Dpart Nice NumVolAeroportDeptHdpartAeroportArrHArrive IT100NIC7:00CDG9:00 IT107NIC7:00BRI8:00 IT109NIC18:00ORL19:00 IT111NIC17:00NAN19:00 R5Vols Arrive Paris Orly NumVolAeroportDeptHdpartAeroportArrHArrive IT105LYS6:00ORL7:00 IT106BAS10:00ORL13:00 Base de donnes : SQL page 9 IT108BRI19:00ORL20:00 IT109NIC18:00ORL19:00 R6 = R4 ^ R5Vols dpart Nice, arrive Orly NumVolAeroportDeptHdpartAeroportArrHArrive IT109NIC18:00ORL19:00 ladiffrenceslectionnelestuplesd'unetableenliminantlestuplesprsentsdansune autre table. R7 = R4-R3Vols dpart Nice,arrive Province NumVolAeroportDeptHdpartAeroportArrHArrive IT107NIC7:00BRI8:00 IT111NIC17:00NAN19:00 Oprateurs Relationnels Unaires laslectionraliseundcoupagehorizontaldelatableenneconservantquelestuples satisfaisant une condition dfinie sur les valeurs d'un attribut. =Certains enregistrements et tous les attributs. Exemples : Descriptif complet des vols pour Nice : toutes les lignes de la table VOL telles que AeroportArr = 'NIC'. Descriptif complet desavions de type A320 : toutes les lignes de la table AVION telles que TypeAvion = 'A320' laprojectionpermetdeneconserverquelesattributs(colonnes)intressants;c'estun dcoupage vertical de la table. =Certains attributs et tous les enregistrements. Exemples : liste de tous les numros davions Base de donnes : SQL page 10 liste des noms et des prnoms des pilotes Oprateurs Relationnels Binaires le produit cartsien ralise la juxtaposition ou concatnation de tous les tuples d'une table avec tous les tuples d'une autre table. Si les 2 tables ont M et N tuples le rsultat aura M * N tuples. A1B1A1B1 A2B2A2B1 A3A3B1 A1B2 A2B2 A3B2 Lejointure(join),estpossibleseulementsur2tablespossdantundomainecommun.La jointureconsistejuxtaposerlestuplesdontlavaleurdunattributestidentiquedansles deuxtables.Onconstatequesouvent,lajointureportesurdesclstrangreetprimaire lies. Exemple : Faire un Planning des Vols indiquant le nom et le prnom des Pilotes IlfautconcatnerleslignesdelatableAffectationaveccellesdelatablePilote,pour lesquelles Affectation.IdPilote= Pilote.IdPilote Table Affectation NumVolDateVolNumAvionIdPilote IT1006 avril 20011001 IT1007 avril 20011012 IT1016 avril 20011002 IT1017 avril 20011034 IT1026 avril 20011011 IT1027 avril 20011023 IT1036 avril 20011053 IT1037 avril 20011042 IT1046 avril 20011053 IT1047 avril 20011078 IT1056 avril 20011077 IT1057 avril 20011067 IT1066 avril 20011098 IT1067 avril 20011045 IT1076 avril 20011069 IT1077 avril 20011038 IT1086 avril 20011069 IT1087 avril 20011065 IT1096 avril 20011077 IT1097 avril 20011051 Base de donnes : SQL page 11 IT1106 avril 20011022 IT1107 avril 20011043 IT1116 avril 20011014 IT1117 avril 20011008 Table Pilote IdPiloteNomPilotePrenomPilote 1GAINSBOURGSerge 2FERRATJean 3NOUGAROClaude 4SCHUMMANRobert 5STROGOFFMichel 6SORRELLucien 7TAVERNIERBertrand 8FAYOLLEMarc 9LECURgis Planning : jointure Affectation - Pilotes NumVolDateVolNumAvionNomPilotePrenomPilote IT1006 avril 2001100GAINSBOURGSerge IT1007 avril 2001101FERRATJean IT1016 avril 2001100FERRATJean IT1017 avril 2001103SCHUMMANRobert IT1026 avril 2001101GAINSBOURGSerge IT1027 avril 2001102NOUGAROClaude IT1036 avril 2001105NOUGAROClaude IT1037 avril 2001104FERRATJean IT1046 avril 2001105NOUGAROClaude IT1047 avril 2001107FAYOLLEMarc IT1056 avril 2001107TAVERNIERBertrand IT1057 avril 2001106TAVERNIERBertrand IT1066 avril 2001109FAYOLLEMarc IT1067 avril 2001104STROGOFFMichel IT1076 avril 2001106LECURgis IT1077 avril 2001103FAYOLLEMarc IT1086 avril 2001106LECURgis IT1087 avril 2001106STROGOFFMichel IT1096 avril 2001107TAVERNIERBertrand IT1097 avril 2001105GAINSBOURGSerge IT1106 avril 2001102FERRATJean IT1107 avril 2001104NOUGAROClaude IT1116 avril 2001101SCHUMMANRobert IT1117 avril 2001100FAYOLLEMarc Base de donnes : SQL page 12 1.5 Place de SQL dans les SGBDR LaplupartdesSGBDRdumarch(DB2-IBM,ORACLE,INFORMIX,SYBASE...)offrent plusqu'unlangagederequtepuissant(engnralSQL).Onytrouvetouteunepanoplie d'outils dits de 4me gnration : gnrateurd'crans:facilitantlasaisieetl'affichagededonnesparimbricationde requtes, gnrateur d'tats : pour la sortie d'tat de la BD sur papier ou cran, gnrateur d'application : qui fait appel aux crans et tats prcdents, et qui permet lacrationdemenusainsiquedestraitementssurlaBDparrequtessimples(en SQL)ouenimbriquantdesappelsdesprogrammesdveloppsenL3G(cequi permet de combiner puissance des outils de 4me gnration et souplesse des L3G). gnrateurdeschmaconceptuel:pourladescriptiondelastructuredesdonnes (entits, attributs, liens...). A tous les niveaux, le langage SQL normalis par l'ANSI estreconnucommelelangagederequteparexcellencequipermetlacration,la manipulationetlecontrledesdonnes;ilconstituelelienentrelesdivers composants du SGBDR comme le montre le schma suivant : GENERATEURDE RAPPORTSGENERATEURGENERATEUR GENERATEURD'ECRANS D'APPLICATI0NSDE SCHEMASCONCEPTUELSACCESRESEAUX+UTILITAIRESSQLDICTIONNAIRENOYAU Base de donnes : SQL page 13 2.DECOUVERTE PRATIQUE DULANGAGESQL 2.1 Connexion la base de donnes PUBLI Outils disponibles dans le menu Microsoft SQL Server 7.0 :Analyseur de requte SQL(interprteur SQL interactif),Enterprise Manager (administration des bases de donnes en rseau) Pour linitiation SQL, utilisez Analyseur de requte SQL Choisissez Utilisez lauthentification SQL Server :- Nom de connexion : Stage - Mot de passe :stage A la connexion,vous tes dans la base de donnes par dfaut master Pour accder la base de donnes de dmonstration publi,slectionnez la dans la liste droulante, ouutilisez l'instruction USE: USE PUBLI

Pour vrifier la connexion, faites une interrogation simple :Dans longlet Requte tapez : select * from magasins Cliquezsurlaflchevertepourlancerlarequte,quiafficheladescriptiondesmagasins : id_mag nom_mag adresse_magville pays code_postal------ ---------------------------------------- ---------------------------------------- -------------------- ---- -----------6380Eric the Read Books 788, Catamaugus Ave. Seattle WA980567066Librairie spcialise 567,Av. de la VictoireParis FR 750167067Moissons livresques 577,Boulevard Anspach. Bruxelles BE 1000 ..etc 2.2 Description de la base de donnes PUBLI Ilyaparfoisdespetitesdiffrencesentreladocumentationetlecontenureldestables=>pensez vrifier vos programmes en visualisant les contenus des tables par des requtes simples ApartirdeSQLServer7.0,labaseoriginalesurlaquellesappuienttouslesexemplesdela documentation Microsoft, est en anglais : PUBS. Vous pouvez lutiliser pour tester des syntaxes documentes dans laide, mais les exercices porteront toujours sur la version franaise de la base : PUBLI Base de donnes : SQL page 14

Publi dcrit la base de donnes dun groupe ddition. -Tous les diteurs appartenant au groupe sont dcrits dans la table diteurs.-Les diteurs ont des logo (table pub_info), emploient du personnel (table employ), et ditent des livres (table titre). -Chaque employ occupe un emploi (table emplois) -Chaquelivreestcritparunouplusieursauteurs(tableauteursettableintermdiaire titreauteur) -Pour chaque livre vendu, son/ses auteurs touchent des droits, qui sont dfinis en pourcentage du prix de vente, par tranche, en fonction de la quantit de livres vendus (table droits_prvus). -Les livres sont vendus dans des magasins (table ventes et magasins) Base de donnes : SQL page 15 -Diffrents types de remise sont consentis sur les livres vendus (table remises) Les commentaires de dtail seront donns table par table. Table diteurs Nom_colonneType de donnesNULLPar dfaut CheckCl/index id_diteurchar(4)nonoui (1) CP, ordonn. nom_diteurvarchar(40)oui villevarchar(20)oui rgionchar(2)oui paysvarchar(30)oui'USA' (1)La contrainte CHECK id_diteur est dfinie comme (id_diteur in ('1389', '0736', '0877', '1622', '1756')OR id_diteur LIKE '99[0-9][0-9]') id_diteur nom_diteurvillergionpays 0736New Moon BooksBostonMAUSA 0877Binnet & HardleyWashingtonDCUSA 1389Algodata InfosystemsBruxelles NULLBE 1622Five Lakes PublishingChicagoILUSA 1756Ramona diteurLausanne NULLCH 9901GGG&GMunichNULLGER 9952Scootney BooksNew York NYUSA 9999Editions LucerneParisNULLFR Table pub_info Nom_colonneType de donnesNULLPar dfaut CheckCl/index pub_idchar(4)nonCP, ordonn., CE diteurs(id_diteur) logoimageoui pr_infotextoui id_diteur logo (1) info_rp (2) 0736NEWMOON.BMPExemple de donnes de type text pour New Moon Books, diteur 0736 dans la base de donnes pubs. New Moon Books est situ Boston, Massachusetts. 0877BINNET.BMPExemple de donnes de type text pour Binnet & Hardley, diteur 0877 dans la base de donnes pubs. Binnet & Hardley est situ Washington, D.C. 1389ALGODATA.BMPExemple de donnes de type text pour Algodata Infosystems, diteur 1389 dans la base de donnes pubs. Algodata Infosystems est situ Bruxelles, Belgique. 16225LAKES.BMPExemple de donnes de type text pour Five Lakes Publishing, diteur 1622 dans la base de donnes pubs. Five Lakes Publishing est situ Chicago, Illinois. 1756RAMONA.BMPExemple de donnes de type text pour Ramona diteur, diteur 1756 dans la base de donnes pubs. Ramona diteur est situ Lausanne, Suisse. 9901GGGG.BMPExemple de donnes de type text pour GGG&G, diteur 9901 dans la base de donnes pubs. GGG&G est situ Munich, Allemagne. 9952SCOOTNEY.BMPExemple de donnes de type text pour Scootney Books, diteur 9952 dans la base de donnes pubs. Scootney Books est situ New York City, New York. 9999LUCERNE.BMPExemple de donnes de type text pour ditions Lucerne, diteur 9999 dans la base de donnes pubs. Les ditions Lucerne sont situes Paris, France. (1) Les informations prsentes ici NE sont PAS les donnes relles. Il s'agit du nom du fichier d'o provient le bitmap (donnes graphiques).(2)Le texte prsent ici NE constitue PAS la totalit des donnes. Lors de l'affichage de donnes text, l'affichage est limit un nombre fini de caractres. Ces informations prsentent les 120 premiers caractres de la colonne de texte. Base de donnes : SQL page 16 Table employ Tous les employs ont un coefficient actuel (colonne position_employ), compris entre le coefficient minimum et le coefficient maximum correspondant leur type demploi (niv_min et niv_max dans la table emplois) Nom_colonneType de donnesNULLPar dfaut CheckCl/index id_employempidnonoui (1) CP, non ordonn. pn_employvarchar(20)nonCompos, ordonn. (2)init_centralechar(1)ouiCompos, ordonn.(2)nom_employvarchar(30)nonCompos, ordonn.(2)id_emploismallintnon1CE emplois(id_emploi) position_employtinyintnon10 id_diteurchar(4)non'9952'CE diteurs(id_diteur) date_embauchedatetimenonGETDATE( ) (1)La contrainte CHECK est dfinie comme (id_employ LIKE '[A-Z][A-Z][A-Z][1-9][0-9][0-9][0-9][0-9][FM]') OR(id_employ LIKE '[A-Z]-[A-Z][1-9][0-9][0-9][0-9][0-9][FM]') (2)L'index compos, ordonn est dfini sur nom_employ, pn_employ, init_centrale. Les tableaux suivants prsentent le contenu de la table employ. La premire colonne (id_employ) est rpte dans la liste du dessous, devant les colonnes 6 8. Elle n'est rpte qu' des fins de lisibilit. id_employ (#1)pn_employ (#2)init_centrale (#3)nom_employ (#4)id_emploi (#5) PMA42628MPaoloMAccorti13 PSA89086MPedroSAlfonso14 VPA30890FVictoriaPAshworth6 PHB50241MPatrickHBrognon9 L-B31947F LesleyNULLBrown7 F-C16315MFranciscoNULLChang4 PTC11962MPhilipTCramer2 A-C71970FAriaNULLCruz10 PJD25939MPhilippeJDe Bueger 5 R-D39728FReneldeNULLDepr8 AMD15433FAnnMDevon3 ARD36773FAnabelaRDomingues 8 PHF38899MPeterHFranken10 PXH22250MPaulXHenriot5 PDI47470MPalleDIbsen7 KFJ64308FKarinFJosephs14 MGK44605MMattiGKarttunen6 POK93028MPirkkoOKoskitalo10 JYL26161FJanineYLabrune5 M-L67958F MariaNULLLarsson7 Y-L77953MYoshiNULLLatimer12 LAL21447MLaurenceALebihan5 ENL44273FElizabethNLincoln14 PCM98509FPatriciaCMcKenna11 R-M53550MRolandNULLMendel11 HAN90777MHelvetiusANagy7 TPO55093MTimothyPO'Rourke13 SKO22412MSvenOttlieb5 MAP77183MMiguelAPaolino11 PSP68661FPaulaSParente8 M-P91209MManuelNULLPereira8 LCQ23061MLucCQuerton5 LJR92907FLaurence JRadoux9 M-R38834FMartineRanc9 DWR65030MDiegoWRoel6 A-R89858FAnnetteNULLRoulet6 CAS28514MCarlosASantana5 MMS49649FMaryMSaveley8 CGS88322FCarineGSchmitt13 MAS70474FMargaretASmith9 HAS54740MHowardASnyder12 MFS52347MMartnFSommer10 DBT39435MDanielBTonini11 id_employ (#1)position_employ (#6)id_diteur (#7)date_embauche (#8) PMA42628M35087708/12/92 PSA89086M89138912/12/90 VPA30890F140087709/10/90 PHB50241M170073608/09/88 L-B31947F 120087702/11/91 F-C16315M227995211/02/90 Base de donnes : SQL page 17 PTC11962M215995211/11/89 A-C71970F87138910/12/91 PJD25939M246175603/01/89 R-D39728F35087709/11/89 AMD15433F200995207/12/91 ARD36773F100087701/12/93 PHF38899M75087705/12/92 PXH22250M159087708/11/93 PDI47470M195073605/09/93 KFJ64308F100073610/12/92 MGK44605M220073605/01/94 POK93028M80999911/11/93 JYL26161F172990105/12/91 M-L67958F 135138903/12/92 Y-L77953M32138906/11/89 LAL21447M175073606/03/90 ENL44273F35087707/12/90 PCM98509F150999908/01/89 R-M53550M150073609/05/91 HAN90777M120999903/11/93 TPO55093M100073606/11/88 SKO22412M150138904/05/91 MAP77183M112138912/07/92 PSP68661F125138901/12/94 M-P91209M101999901/09/89 LCQ23061M198162210/09/93 LJR92907F170999903/11/94 M-R38834F75087702/05/92 DWR65030M192138912/12/91 A-R89858F152999902/11/90 CAS28514M211999904/11/89 MMS49649F175073606/12/93 CGS88322F64138907/07/92 MAS70474F78138909/11/88 HAS54740M100073611/11/88 MFS52347M165073604/11/90 DBT39435M75087701/01/90 Table emplois A chaque type demploi, correspond un coefficient minimal (niv_min)et un coefficient maximal (niv_max) Nom_colonneType de donnesNULLPar dfaut CheckCl/index id_emploismallintnonIDENTITY(1,1)CP, ordonn. desc_emploivarchar(50)nonoui (1) niv_mintinyintnonoui (2)niv_maxtinyintnonoui (3) id_emploi desc_emploiniv_minniv_max 1Nouveau collaborateur Poste non spcifi1010 2Directeur gnral200250 3Directeur des oprations commerciales175225 4Responsable financier 175250 5Editeur150250 6Editeur en chef140225 7Directeur du marketing120200 8Directeur des relations publiques100175 9Directeur des achats75175 10Directeur de la productionr75165 11Directeur des oprations75150 12Rdacteur 25100 13Reprsentant commercial25100 14Graphiste25100 (1)La contrainte DEFAULT est dfinie comme ("Nouveau poste - pas de dnomination officielle"). (2)La contrainte CHECK niv_min est dfinie comme (niv_min >= 10). (3)La contrainte CHECK niv_max est dfinie comme (niv_max , ) WHERE avance * 2 > cumulannuel_ventes * prix Des intervalles (BETWEEN et NOT BETWEEN) WHERE cumulannuel_ventes between 4095 and 12000 Des listes (IN, NOT IN) WHERE state in ('BE', 'CH', 'LU') Des concordances avec des modles (LIKE et NOT LIKE) WHERE tlphone not like '45%' %Toute chane de zro caractre ou plus _ Tout caractre unique [a-f] Tout caractre de l'intervalle ([a-f]) ou de l'ensemble spcifi ([abcdef]) [^a-f]Tout caractre en dehors de l'intervalle ([^a-f]) ou de l'ensemble spcifi ([^abcdef]) Des valeurs inconnues (IS NULL et IS NOT NULL) where avance is null Des combinaisons de ces critres (AND, OR) where avance < 30000 or (cumulannuel_ventes > 2000 and cumulannuel_ventes < 2500) Exercice 2 : LIKE, BETWEEN, AND Base de donnes : SQL page 25 Afficherlenom,leprnom,etladatedembauchedesemploysembauchsen90,dontlenom commence par L, et la position est comprise entre 10 et 100 Exercice 3 : ORDER BY Afficher le nom et la date dembauche des employs, classs par leur identificateur dditeur,puis par leur nom de famille (sous-critre) Exercice 4 : IN, ORDER BY Afficher le nom, le payset ladresse des auteurs Franais, Suisse ou Belge, classs par pays. Expressions et fonctions Les 4 oprateurs arithmtiques de base peuvent tre utiliss dans les clauses SELECT, WHERE et ORDER pour affiner les recherches partout o il est possible d'utiliser une valeur d'attribut : Livres qui reoivent une avance sur vente suprieure 500 fois leur prix : SELECT titre, prix, avance FROM titres WHERE avance> = 500 * prix Suivant les systmes la gamme des oprateurs et des fonctions utilisables peut tre trs volue : ellecomportetoujoursdesfonctionsdetraitementdechanesdecaractres,desoprateurssur les dates, etc...Cet exemple dtermine la diffrence en jours entre la date courante et la date de publication : SELECT newdate = DATEDIFF(day, datepub, getdate()) FROM titres Requte sur les groupes : GROUP BY, fonctions de groupe, HAVING Doc. en ligne Concepts de requtes avances : Regroupement de lignes laide de Group by LaclauseGROUPBYestemployedanslesinstructionsSELECTpourdiviserunetableen groupes. Vous pouvez regrouper vos donnes par nom de colonne ou en fonction des rsultats des colonnescalculeslorsquevousutilisezdesdonnesnumriques.L'instructionsuivantecalcule l'avance moyenne et la somme des ventes annuelles cumules pour chaque type de livre: SELECT type, AVG(avance), SUM(cumulannuel_ventes) FROM titres GROUP BY type type ----------------------------------- -----------cui_moderne 51,000.00 24278cui_traditio43,000.00 19566gestion 43,000.00 30788informatique51,000.00 12875psychologie 29,000.00 9939 SANS TITRE(null)(null) (6 ligne(s) affecte(s)) Base de donnes : SQL page 26 Lesfonctionsdegroupe(oudagrgation )effectuentuncalculsurl'ensembledesvaleurs d'un attribut d'un groupe de tuples. Un groupe est un sous ensemble des tuples d'une table tel que la valeur d'un attribut y reste constante ; un groupe est spcifi au moyen de la clause GROUP BYsuividunomdel'attributl'originedugroupement.Enl'absencedecetteclausetousles tuples slectionns forment le groupe. COUNT, compte les occurrences pour un attribut, SUM, somme les valeurs de l'attribut (de type numrique), AVG, fait la moyenne (Average) des valeurs de l'attribut, MAX, MIN, donne la valeur MAX et la valeur MIN de l'attribut. Cesfonctionsimposentlaspcificationdel'attributentantqu'argument.Sicetargumentest prcddumotclDISTINCTlesrptitionssontlimines.D'autrepart,lesvaleurs indtermines (= NULL)ne sont pas prises en compte. La clause HAVING est quivalente WHERE mais elle se rapporte aux groupes. Elle porte en gnralsurlavaleurdunefonctiondegroupe :seulslesgroupesrpondantaucritrespcifi par HAVING feront parti du rsultat. Regrouper les titres en fonction du type, en liminantles groupes qui contienne un seul livreSELECT type FROM titres GROUP BY type HAVING COUNT(*) > 1 type------------cui_moderne cui_traditiogestion informatiquepsychologie Regrouper les titres en fonction du type, en se limitant aux types qui dbutent pas par la lettre c SELECT type FROM titres GROUP BY type HAVING type LIKE 'c%' type ------------ cui_moderne cui_traditio Regrouperlestitresenfonctiondutypeparditeur,enincluantseulementlesditeursdontle numro d'identification est suprieur 0800 et qui ont consenti des avances pour un total suprieur 90 000 FF, et qui vendent des livres pour un prix moyen infrieur 150 FF: SELECT id_diteur, SUM(avance), AVG(prix) FROM titres GROUP BY id_diteur HAVING SUM(avance) > 90000 AND AVG(prix) < 150 AND id_diteur > '0800' Base de donnes : SQL page 27 Mme exemple, en liminant les titres dont le prix est infrieur 60 FF, et en triantles rsultats en fonction des numros d'identification des diteurs: SELECT id_diteur, SUM(avance), AVG(prix) FROM titres WHERE prix >= 60 GROUP BY id_diteur HAVING SUM(avance) > 90000 AND AVG(prix) < 150 AND id_diteur > '0800' ORDER BY id_diteur Exercice 5 : GROUP BY, COUNT, MIN, MAXPourchaqueniveaudemploi(tableemploys,colonneposition_employ)afficherlenombre demploysdeceniveau,ladatedembauchedusalarileplusancienetduplusrcentdansle niveau Exercice 6 : GROUP BY, MAX PourchaqueIdentificateurdetitre,calculerlesdroitsprvusmaximum(tabledroits_prvus, colonne droits) Exercice 7 :GROUP BY, clause sur un sous-ensemble HAVINGAfficherlenombredesditeursregroupsparpays,enselimitantauxpaysdontlenomcontient un 'S' ou un 'R' Infos de dtails ET infos globales : COMPUTE LaclauseCOMPUTEestemployedansdesinstructionsSELECTavecdesfonctions d'agrgationligneSUM,AVG,MIN,MAXetCOUNTpourgnrerdesvaleurs statistiques partir de valeurs contenues dans des groupes de lignes. Cesvaleursstatistiques apparaissent sous forme de lignes supplmentaires dans les rsultats de la requte, ce qui vous permet de visualiser les lignes dtail et les lignes de statistiques dans un seul ensemble de rsultats.. Exemple : somme des prix des diffrents types de livres de cuisine SELECT type, prix FROM titres WHERE type like 'cui%' ORDER BY type, prix COMPUTE SUM(prix) BY type type prix------------ --------------------------cui_moderne21.00 cui_moderne136.00 sum ========================== 157.00 Exercice 8 : COMPUTE Base de donnes : SQL page 28 Pour chaque niveau de droits, afficher les identificateurs des livres correspondant, le min et la max deventesdonnantdroitceniveau(infosdedtails),etlenombredelivresdansleniveau(rcapitulatif) droitsid_titre minimum maximum----------- -------- ----------- -----------10BU1032 0 5000 10PC1035 0 2000 10BU2075 0 1000 count ======== 3 ..etc Afficherlesnomsdauteurs,leurpaysetleurvilleenlesclassantparville(infosdedtail),etle nombre dauteurs par pays (rcapitulatif) Travail sur plusieurs tables : les jointures Doc. en ligne : Principe de base des jointures SQL2 : p. 61 78 Lesoprationsdejointurepermettentd'extrairedesdonnespartirdeplusieurstablesouvues danslammebasededonnesoudansdesbasesdiffrentesenn'effectuantqu'uneseule opration.Joindredeuxouplusieurstablesrevientcomparerlesdonnesdecolonnes spcifiques,etensuiteutiliserleslignesslectionnesdanslesrsultatsdecettecomparaison pour crer une nouvelle table. Une instruction de jointure: spcifie une colonne dans chaque table ; compare les valeurs de ces colonnes ligne par ligne ; forme de nouvelles lignes en combinant les lignes qui contiennent les valeurs retenues dans la comparaison. Exemple de jointure :nom des auteurs et des diteurs vivant dans la mme ville : SELECT pn_auteur, nom_auteur, nom_diteur FROM auteurs, diteurs WHERE auteurs.ville = diteurs.ville pn_auteurnom_auteur nom_diteur ------------ ------------------ ------------------- XavierSchildwachterAlgodata InfosystemsAlain D'Autricourt Editions LucerneCharles MathieuEditions LucerneJean-Rmy Facq Editions Lucerne MarcJalabert Editions LucernePatriciaMerrellEditions Lucerne Ou avec loprateur JOIN dans la syntaxe SQL 2 : Base de donnes : SQL page 29 SELECT pn_auteur, nom_auteur, nom_diteur FROM auteursJOIN diteurs on auteurs.ville = diteurs.ville Exercice 9 : Jointure entre trois tablesAfficher les noms des auteurs parisiens, les titres et les prix de leurs livres Exercice 10 :Jointure sur quatre tables, ORDER BY, COMPUTE Pourchaquediteur,afficherlenomdelditeur,lestitresdeslivresquilpublie,lesnomsdes magasins o ils sont vendus, le nombre dexemplaires vendus dans chaque magasin, et le nombre dexemplaires vendus au total par chaque diteur : nom_diteur titre nom_magqt---------------------------------------- -------------------------------------------------------------------------------- ---------------------------------------- ------Algodata InfosystemsGuide des bases de donnes du gestionnaire press Eric the Read Books 5 Algodata InfosystemsGuide des bases de donnes du gestionnaire press Bookbeat 10Algodata InfosystemsLa cuisine - l'ordinateur : bilans clandestinsBookbeat25Algodata InfosystemsToute la vrit sur les ordinateurs Fricative Bookshop 15 sum ====== 55 nom_diteurtitre nom_magqt---------------------------------------- -------------------------------------------------------------------------------- ---------------------------------------- ------Binnet & Hardley Les festins de Parly 2 Fricative Bookshop 10Binnet & Hardley Les micro-ondes par gourmandise Doc-U-Mat: Quality Laundry and Books25

sum ====== 35 Exercice 11 : jointure sur 4 tables, GROUP BY, HAVING, SUM Afficherlesnomsdesauteursquiontvenduaumoins20livres,etlenombredelivresquilsont vendus (tables auteurs, titreauteur, titres, ventes) Les sous-requtes Doc. en ligne : Concepts de requtes avances : Principe de base des sous-requtes Une sous-requte est une instruction SELECT imbrique l'intrieur d'une instruction SELECT, INSERT, UPDATE ou DELETE, ou d'une autre sous-requte :une sous-requte peut porter sur la mme table que la requte externe ou sur une autre table. DansTransact-SQL,unesous-requtequirenvoieuneseulevaleur peut s'employer dans toutes les circonstances o une expression est autorise. Les instructions SELECT qui incluent au moins une sous-requte sont parfois appeles requtes imbriquesouinstructionsSELECTimbriques.Lefaitd'imbriqueruneinstructionSELECT l'intrieurd'uneautreexpliquelaprsencedumotstructurdansl'expressionlangage d'interrogation structur (SQL, Structured Query Language). Une sous-requte imbrique dans une instruction SELECT externe prsente la syntaxe suivante: (SELECT [ALL | DISTINCT] liste_de_slection_de_la_sous-requte[FROM {nom_de_table | nom_de_vue}[conseils-optimiseur] Base de donnes : SQL page 30 [[, {nom_de_table2 | nom_de_vue2}[conseils-optimiseur][..., {nom_de_table16 | nom_de_vue16}[conseils-optimiseur]]][clause WHERE] [clause GROUP BY] [clause HAVING]) L'instructionSELECTd'unesous-requteseplacetoujoursentreparenthses.Ellenepeutpas contenir de clause ORDER BY ouCOMPUTE. Unesous-requtepeuts'imbriquerdansuneclauseWHERE,ouHAVINGd'uneinstruction externeSELECT,INSERT,UPDATEouDELETE,oudansuneautresous-requte.Leniveau d'imbrication n'est pas limit. AnoterlecasparticulierdesrequtesimbriquesplacesaprsleSELECT,quipermettent dafficher une colonne calcule (Cf. Exercice 14). Ilexistedeuxcatgoriesdesous-requtes :lessous-requtesquirenvoientuneetuneseule valeur directement manipulable par des oprateurs de comparaison, et les requtes ensemblistes qui renvoient des listes manipulables par les oprateurs ensemblistes IN, ANY , ALL, EXISTS Mthodedeconstructiondessous-requtesrenvoyantuneetuneseule valeur Pour trouver tous les livres de mme prix que le livre Toute la vrit sur les ordinateurs , on peut procder en deux tapes, en cherchant dabord le prix du livre Toute la vrit sur les ordinateurs : SELECT prix FROM titres WHERE titre = 'Toute la vrit sur les ordinateurs' prix ------ 136,00 Puis, en utilisant ce rsultat dans une seconde requte pour trouver les livres qui ont le mme prix : SELECT titre, prix FROM titres WHERE prix = 136 titreprix ---------------------------------------------- -------------Toute la vrit sur les ordinateurs136,00 Les festins de Parly 2 136,00 Les secrets de la Silicon Valley 136,00 Privation durable d'informations : tude136,00 Ensubstituantlaconstante136,larequtequicalculeceprix,onobtientlasolutionavecsous-requte : SELECT titre, prix FROM titres WHERE prix = (SELECT prixFROM titres WHERE titre = 'Toute la vrit sur les ordinateurs') Base de donnes : SQL page 31 Aveclammedmarchedeconstructionprogressive,onpeutrpondredesquestionsplus complexes : dans tous les cas, il faut reprer dans la question, la proposition principale qui fournit la requte principale et les propositions subordonnes qui fournissent les critres de choix ; chaque subordonne devient une requte imbrique qu'il faudra d'abord tester indpendamment, sur un cas particulier. Exemple : Afficher les titres des livres dont le prix est suprieur ou gal au tiers du prix maximum, et infrieur ou gal la moyenne des prix. -- 1)trouver le prix maximum SELECT max(prix) FROM titres -- => 156.00 -- 2) trouver la moyenne des prix SELECT avg(prix) FROM titres -- => 99.4 -- 3) Ecrire la requte principale avec ces constantes SELECT titre FROM titres WHERE(prix >= 156.0/3) and(prix = (SELECT max(prix) FROM titres ) /3andprix Utilisation des types de donnes Lapremiretapeconsistecrerdes domaines ,cest--diredestypesdedonnes,qui sappliqueront aux colonnes ou attributs des tables et des colonnes. Comme en C ou en Pascal, les domaines sont dfinis par le propritaire de la base de donnes, partir des types prdfinis du langage SQL : bitentier dont la valeur est 1 ou 0.tinyint entier dont la valeur est comprise entre 0 et 255.smallint entier dont la valeur est comprise entre -215 (-32 768) et 215 - 1 (32 767).int entierdontlavaleurestcompriseentre-231(-2147483648)et231-1(2147483 647). decimal Donnes numriques fixes de prcision et d'chelle comprises entre -1038 -1 et 1038 -1.numericSynonyme de decimal. smallmoneyValeursdedonnesmontairescomprisesentre-214748,3648et+214748,3647, avec une prcision d'un dix-millime d'unit montaire.money Valeurs de donnes montaires comprises entre -263 (-922 337 203 685 477,580 8) et 263-1(+922337203685477,5807),avecuneprcisiond'undix-millimed'unit montaire.real Donnes numriques de prcision en virgule flottante comprises entre -3.40E + 38 et 3.40E + 38. Base de donnes : SQL page 39 floatDonnes numriques de prcision en virgule flottante comprises entre -1.79E + 308 et 1.79E + 308.smalldatetimeDonnes de date et d'heure comprise entre le 1er janvier 1900 et le 6 juin 2079, avec une prcision d'une minute.datetimeDonnes de date et d'heure comprises entre le 1er janvier 1753 et le 31 dcembre 9999, avec une prcision de trois centimes de seconde ou de 3,33 millisecondes.charchane de caractres de longueur fixe d'un maximum de 8 000 caractres.varcharchane de caractres de longueur variable d'un maximum de 8 000 caractres.text texte de longueur variable ne pouvant pas dpasser 231 - 1 (2 147 483 647) caractres.binarydonnes binaires de longueur fixe ne pouvant pas dpasser 8 000 octets. varbinaryDonnes binaires de longueur variable ne pouvant pas dpasser 8 000 octets.imageDonnes binaires de longueur variable ne pouvant pas dpasser 231 - 1 (2 147 483 647) octets. LasyntaxepourcrerdesnouveauxtypesnefaitpaspartiedelanormeANSIduSQL.Sous SQL SERVER il faut appeler la procdure systme sp_addtype (system procedure add type), par le mot cl executeexecute sp_addtype TypeNom, 'VARCHAR(50)', 'NOT NULL' sp_addtype nom_de_type, type_physique [, contrainte_de_valeur_NULL] nom_de_type : Nom du type de donnes dfini par l'utilisateur.

type_physique :NomdutypededonnesphysiqueprdfinideSQL Server sur lequel repose le type de donnes dfini par l'utilisateur. contrainte_de_valeur_NULL :Paramtreindiquantcommentgrerdes valeursNULLdansuntypededonnesdfiniparl'utilisateur(vaut NULL ou NOT NULL). SQLServernefaitpasdediffrenceentrelesmajusculesetlesminusculespourlesnomsde type de donnes systme. Exercice 20 Lesexercicesquisuiventvontvousguiderpourcrireunscriptdecrationdebasededonnes : Creer.SQL. Oncommenterachacunedestapesdu script (commentaire Transact SQL :/* plusieurs lignes */ ou -- fin de ligne) On dveloppera en parallle un script Supprimer.SQL quisupprime tous les objets que lon vient detraiter.Aprschaqueexercice,onrelanceralesscriptsdesuppressionetdecration,pour sassurer que tous les objets se crent correctement. A la fin de ce chapitre, on doit donc aboutir deux scripts complets qui permettent de maintenir la base (en la recrant compltement en cas de crash systme) Etape 1 : cration des types utilisateurs : TypeDate :type prdfini datetime. Obligatoire. (=> date du vol dans la table Affectation). Base de donnes : SQL page 40 TypeHoraire : type prdfini smalldatetime. Obligatoire (=> heures de dpart et darrive, dans la table Vol) TypeNom :chanevariablelimite50caractres. Obligatoire.(=>nomdupilotedanslatablePiloteetdu constructeur dans la table Constructeur) TypePrenom : chane variable limite 30 caractres. Optionnel. (=> prnom du pilote dans la table Pilote) TypeAvion :chanevariablelimite20caractres. Obligatoire.(=>typedaviondanslestablesTypeetAvion) TypeIdConstructeur:entier(smallint).Obligatoire(=>identificateurduconstructeurdanslatable Constructeur) TypeIdAeroport:chanefixede3caractres.Obligatoire.(=>identificateurdelaroportdanslatable Aroport)

TypeIdPilote :entier (smallint). Obligatoire ( => identificateur du pilotedans la table Pilote) TypeNumVol : chane fixe de 5 caractres. Obligatoire (=> identificateur du voldans la table Vol) TypeVille: chane variable limite 50 caractres. Optionnel. (=> nom de laroport et de la ville desservie dans la table Aeroport)

Avec Enterprise Manager-lancer loutil par le menu SQL Server 7.0 -Menu Action , Enregistrerunnouveauserveur SQLServerpouraccderauserveur :sansutiliserlassistant,choisirlenomduserveurdanslalistedroulante,choisir Utiliser lauthentification SQLServer, entrer votre nom de connexion et votre mot de passe -Fermer la fentre dinscription du serveur, et dvelopper les objets de la base en cliquant sur le + ct du nom du Serveur ( licne avec flche verte) -Dvelopper Basesdedonnes :seuleslesbasesdedonnesauxquellesvousavezaccs apparaissent.Dvelopperlabaseencoursdeconstruction,etlerpertoire Typesdedonnes utilisateurs . Base de donnes : SQL page 41 3.3 Cration et suppression de tables. Contraintes dintgrit Doc. en ligne : Crer et maintenir des bases de donnes : Tables Cls primaires et trangres La cl primaire est une colonne ou une combinaison de colonnes dont les valeurs identifient de faon unique chaque ligne dans la table : elle ne peut pas tre nulle. OncreuneclprimairegrcelacontraintePRIMARYKEYlorsdelacrationoudela modificationdunetable.SQLcreautomatiquementunobjet index pourlaclprimaire : lindexassurelunicitdelaclprimairedanslatable,etpermetunaccsrapideauxdonnes par la cl primaire. Unecltrangreestunecolonneouunecombinaisondecolonnesdontlesvaleurs correspondent la cl primaire d'une autre table. Elle nest pas obligatoirement unique ni dfinie (peuttreNULL),maissesvaleursdoiventcorrespondredesvaleursexistantesdelacl primaire. On cre une cl trangre par la contrainte FOREIGN KEY lors de la cration ou de la modification dune table. Intgrit des donnes dans une base Assurer l'intgrit des donnes, cestprserver la cohrence et l'exactitude des donnes stockes dans une base de donnes en validant le contenu des diffrents champs, en vrifiant la valeur des champs l'un par rapport l'autre, en validant les donnes dans une table par rapport une autre, etenvrifiantquelamisejourd'unebasededonnesestefficacementetcorrectement effectue pour chaque transaction. 4 contraintes dintgrit :=Intgritdentit :unicitdelaclprimaire(PRIMARYKEY)oudautrescls (UNIQUE) =Intgrit de domaine : plage des valeurs possibles pour une colonne. On peut restreindre cetteplageenattribuantlacolonneuntypedfiniparlutilisateur,ouparune contrainte CHECK avec une rgle. =L'intgritrfrentiellegarantitlarelationentreunecl primaire unique dans une table etlesclstrangresquiyfontrfrencedanslesautrestables.Exemple :avantde supprimer une ligne dans la table PILOTE, il faut supprimer toutes les lignes de la table VOL quifont rfrence ce pilote.Pour assurer lintgrit rfrentielle,SQL Server interdit de : -ajouterdesenregistrementsunetablelielorsqu'il n'y a aucun enregistrement associ dans la table primaire ; -changer des valeurs ou effacer des enregistrements dans une table primaire qui engendrerait des enregistrements orphelins dans une table lie; Par exemple, avec les tables ventes et titres dans la base de donnes pubs, l'intgrit rfrentielle est base sur la relation entre la cl trangre (id_titre) de la table ventes et la cl primaire (id_titre) de la table titres, comme le montre l'illustration suivante: Base de donnes : SQL page 42 Exemples de cration de table : CreateTable Vouspouvezcrerdestablespermanentesoudestablestemporaires(localesouglobales). Unetabletemporairelocaleestvisibleuniquementpourlaconnexionquil'acre.Unetable temporaireglobaleestdisponiblepourtouteslesconnexions.Lestablestemporaireslocales sont supprimes automatiquement la fin de la session courante. Les tables temporaires globales sont supprimes la fin de la dernire session qui les utilise Lorsque vous crez une table, nommez ses colonnes, dfinissez un type de donne pour chaque colonne,prcisezsiellespeuventcontenirdesvaleursNULL,dfinissezdescontraintespar loption CHECK, des valeurs par dfaut par DEFAULT CREATE TABLE emplois ( id_emploismallint PRIMARYKEY,desc_emploi varchar(50) NOT NULLDEFAULT 'Nouveau poste', niv_min tinyint NOT NULL CHECK (niv_min >= 10), niv_maxtinyintNOT NULL CHECK (niv_max = 10) ou avec mot cl CONSTRAINT :CONSTRAINT CK_id_employ CHECK (id_employ LIKE '[0-9][0-9][0-9][0-9][FM]' ) IDENTITY : valeur numrique autoincrmentale (valeur initiale et valeur de lincrment) IDENTITY(10,3)(=> valeurs: 10, 13, 16) Exercice 21 :Cration des tables et des contraintes Complterlescriptdecrationpourcrerlestablesdelabase Compagniearienne ,dcrite dansleschmagnral.Pourchaquetable,ondfiniraleslienscltrangre-clprimaireen suivant le schma. Dfinitions de contraintes supplmentaires sur les tables : AVION : la cl primaire NumAvion est autoincrmente partir de 100, par pas de 1. TYPE : la cl primaire TypeAvion commence obligatoirement par une lettre la capacit est comprise entre 50 et 400 : cette colonne est obligatoire, avec un dfaut de 100 CONSTRUCTEUR : la cl primaire IdConstructeur est autoincrmente partir de 1, par pas de 1 PILOTE : la cl primaire IdPilote est autoincrmente partir de 1, par pas de 1 AEROPORT : la cl primaire IdAeroport ne comporte que des lettres la colonne NomVilleDesservie est optionnelle la colonne NomAeroport est obligatoire VOL : la cl primaire NumVol est constitue du prfixe " IT" suivi de trois chiffres AFFECTATION : la cl primaire est compose des colonnes NumVol et DateVol la cl trangre IdPilote peut tre NULL (en attente daffectation un pilote) Commencer par tablir la liste de dpendance :-numroter0lestablesindpendantes,1lestablesquinedpendentquedetables indpendantes, 2 celles qui dpendent des prcdentes -crer les tables en commenant par les indpendantes, et en suivant lordre de la liste de dpendance. Vrifier la cration des tables sous Entreprise Manager Exercice 22 : Script de test Testerlescontraintesdintgritenfaisantdesessaisderemplissageparlinstruction INSERT et des suppressions par DELETE : vrifier les valeurs par dfaut, les domaines de validit des colonnes PartirdesvaleursdcritesdanslechapitreI,enremplissantlestablesdanslordredela liste de dpendance. Nom contrainte Base de donnes : SQL page 44 Exercice 23 :Script de destruction des types utilisateurs et des tables Pourdtruire une table :DROP TABLE AVION GO LeGOobligelemoteurfairelasuppressionimmdiatementetpermetderecrerla table ( sinon erreur Il y a dj un objetAviondans la base de donnes ) Attention :ilfautdtruirelestablesdanslordreinversedelacration,ensupprimant dabord les tables dpendantes Dtruire les types la fin, quand ils ne sont plus utiliss par aucune table : exec sp_droptypeTypeNom Avec Enterprise Manager Danslerpertoire Basesdedonnes , Tables ,visualisezetvrifiezlestablesetleurs contraintes.=Pour visualiser les proprits dune table, double-clicker sur son nom, ou avec le bouton droit de la souris, choisir Modifier une table =Pourobtenirlesdtailssurlescontraintes,etlesclstrangres :cliquersurlebouton Proprit de table et dindex , dans la fentre de modification de table. Base de donnes : SQL page 45 3.4Cration de vues Doc. en ligne : Crer et maintenir des bases de donnes : Vues SQL2 : p. 133 149 Quand utiliser des vues ? Une vue est une table virtuelle dont le contenu est dfini par une requte SELECT. Comme une table relle,la vue possde des colonnes nommes et des lignes de donnes, mais elle nest pas stocke dans la base de donnes, et na pas dexistence propre, indpendamment des tables. Lesvuesamliorentlascuritenpermettantdecontrlerlesdonnesquelesutilisateurs peuventvisualiser,etlergonomie,enprsentantlesdonnessousuneformefamilire, indpendamment de la structure interne de la base. Unevuepeuttremanipuleexactementcommeunetable :lorsquonmodifieunevue,on modifieenfaitlestablessurlesquellesellesappuie.Inversement,sionmodifielestables,les modificationssontreportesautomatiquementdanstouteslesvuesquileurfontrfrence.La suppression dune vue ninflue pas sur le contenu de la table associe. Par contre la suppression dune table supprime toutes les vues qui lui font rfrence. Fonction CREATE VIEW CREATE VIEW vuetitres AS SELECT titre, type, prix, datepub FROM titres Ou avec les colonnes explicitesCREATE VIEW vueEtiquette (TitreOuvrage, PrixOuvrage) AS SELECT titre, prix FROM titres Limitations : Base de donnes : SQL page 46 Vous pouvez crer des vues uniquement dans la base de donnes courante. Vous pouvez construire des vues partir d'autres vues ou de procdures qui font rfrence des vues. Sivousremplissezunevue par une instruction SELECT, vous navez en gnral pas besoin de donner les noms des colonnes, qui seront ceux du SELECT, sauf dans les cas suivants : -colonnes drives d'une expression arithmtique, d'une fonction ou d'une constante.-plusieurscolonnes issues de tables diffrentes auraient le mme nom. -on veut donner un nom la colonne de la vue, diffrent du nom de la colonne dans la table (prsentation pour lutilisateur de la base de donnes) Vous ne pouvez pas associer des rgles, des valeurs par dfaut ou des Dclencheurs des vues, ni construire des Index partir de vues. Vousnepouvezpascrerdevuestemporairesetvousnepouvezpascrerdevuespartirde tables temporaires. VousnepouvezpasmodifierparUPDATE,INSERTouDELETElesvuesquidriventde plusieurs tables par jointure, ou qui contiennent les clauses GROUP BY,ou DISTINCT, ou qui omettent un attribut obligatoire de la table (dclar NOT NULL) : ces vues ne seront accessibles quen lecture. Pourunetablemodifiable,laclauseWITHCHECKOPTIONcontrlelesmodificationssurla vue.

Exercice 24 cration dune vue Depart Onveutdisposerdunevuequivisualiselesdpartsdujour,partirdeParis,avecla prsentation ci-dessous : NumVol De AHeure de DpartHeure d'arrive IT101ORLBLA11H1512H40 IT102CDG NIC12H3114H00 IT110ORL NIC15H2416H00 Remarques : -LatableAEROPORTdonnelalistedesaroportsdesservantchaqueville :ORLY(ORL)etCharlesde Gaulle (CDG) pour la ville de Paris. La table AFFECTATION donne les dates de tous les vols.

-UtiliserlafonctionDATENAME()deTransactSQLpourextrairelheureetlesminutesdescolonnes VOL.HdpartetVOL.HArrive,quisontstockesensmalldatetime :DATENAME(hh,Hdpart)renvoie lheure du dpart, DATENAME (mi, Hdpart) renvoie les minutes -On obtient la date du jour par la fonction GETDATE(). Cette date ne peut pas tre compare directement AFFECTATION.DateVol, car elle comprend les heures, minutes, secondes. Le plus simple est de comparer lequantimedujourdeladatecourante,auquantimedeladateduvol :lafonctionDATENAME (dayofyear, uneDate) extrait le quantime du jour de la date uneDate Tester la vue par un select simple. Rajouter la cration de la vue dans le script de cration de la base, et sa suppression dans le script de suppression. Base de donnes : SQL page 47 3.5 Dfinition des permissions sur les objets dune base de donne Contrle daccs aux donnes dans un SGBD L'accsauxdonnesestcontrlparleSGBDaumoyendel'identificationdel'utilisateurqui lorsdelaconnexiondoitfournirlenomd'utilisateuretlemotdepasseassoci.Chaqueobjet dunebase de donnes mmorise la liste des utilisateurs autoriss le manipuler : son crateur et les autres utilisateurs qui auront t habilits par lui. Ladministrateur systme de SQL SERVER (compte sa) est le seul possder tous les droits sur toutes les bases de donnes : cration dune nouvelle base, suppression Ces droits ne peuvent pas lui tre retirs (indpendants des droits explicites sur la base) Le propritaire dune base de donnes (DBO : Data Base Owner) a tous les droits sur les objets de sa base, et peut les donner dautres utilisateurs par la commande GRANT ou leur retirer des droits par la commande REVOKE Attribution de droits : GRANT SQL2 : p. 171-173 La requte GRANT permet de donner un utilisateur ou un groupe dutilisateurs la permission dutilisercertainesinstructionsdecrationoudesuppressiondobjet(CREATETABLE, CREATE VIEW, DROP TABLE, DROP VIEW) ou des droits daccs sur des objets donns par SELECT, INSERT, UPDATE, DELETE, ALTER,ou ALL . Pour autoriser l'accs un objet pour tous les utilisateurs on utilisera le groupePUBLICPermissions d'instruction : GRANT {ALL |liste_d'instructions} TO {PUBLIC | liste_de_noms} GRANT CREATE DATABASE, CREATE TABLE TO Marie, Jean Permissions d'objet : GRANT {ALL | liste_de_permissions}ON {nom_de_table [(liste_de_colonnes)] | nom_de_vue [(liste_de_colonnes)] | nom_de_procdure_stocke | nom_de_procdure_stocke_tendue}TO {PUBLIC | liste_de_noms} Il faut dabord accorder des permissions gnrales au groupe public, puis prciser en accordant ou en retirant des permissions spcifiques certains utilisateurs : GRANT SELECT ON auteurs TO public go

-- Marie , Jean et Pierre auront tous les privilges sur la table auteursGRANT INSERT, UPDATE, DELETE ON auteurs TO Marie, Jean, Pierre Base de donnes : SQL page 48 Suppression de droits : REVOKE Doc. en ligne :chercher REVOKE(T-SQL) Permissions d'instruction : REVOKE {ALL | liste_instructions} FROM {PUBLIC | liste_de_noms} REVOKE CREATE TABLE, CREATE DEFAULT FROM Marie, Jean Permissions d'objet : REVOKE {ALL | liste_de_permissions} ON {nom_de_table [(liste_de_colonnes)] | nom_de_vue [(liste_de_colonnes)] | nom_de_procdure_stocke | nom_de_procdure_stocke_tendue} FROM {PUBLIC | liste_de_noms} Exercice 25 :dfinition des permissions sur les tables et les vues Dans chaque groupe de quatre, un des comptes reprsentera lusager de base qui consulte leshoraires,lesdeuxautresserontdesemploysdelaroportdotsdepermissions limites,quiassistentlepropritairedelabase :unresponsabledeshorairesetun responsable de la planification Sous le compte du propritaire de la base (DBO)qui a tous les droits sur la base : -Crerlestroisnouveauxutilisateursdansvotrebase( usager,Responsable_horaires, Responsable_planification),correspondantauxtroiscomptesdaccs devotregroupe, avec la syntaxe :

exec sp_adduser nom_de_connexion,nom_utilisateur_base -Pour lusager, permettre la lecture de la vue Depart, pour consultation dans laroport. Aucun droit sur les tables ! -Le responsable des horaires a tous les droits sur Vol, et peut consulter Avion, Aeroport et Type -Le responsable planification a le droit de lire, modifier, ajouter et supprimer sur la table Affectation, et de lire les tables Avion, Vol, Pilote, et Type -Les deux assistantspeuvent crer des vues . Enseloggantsouslestroiscomptes,fairedesrequtesmanuelles,pourvrifierqueles permissions fonctionnent comme prvu. Rajouterlacrationdesnouveauxutilisateursetladfinitiondespermissionslafindu script de cration de la base, et la suppression des utilisateurs dans le script de suppression. Base de donnes : SQL page 49 Avec Enterprise ManagerPermission dinstruction :En vous loggant avec le compte propritaire de la base (dbo), vous pouvez visualiser et modifier les permissions dinstruction (CREATE TABLE, CREATE VIEW) des diffrents utilisateurs de votre base : slectionnez le nom de votre base, et choisissez Proprits au bouton droit de la souris. Vouspouvezaussivisualiseretmodifierlespermissionsdobjetsurlestables(SELECT, INSERT,UPDATE,DELETE):double-clickezsurunetablepourvisualiserlafentre Proprits de table , puis clickez sur le bouton Autorisations Base de donnes : SQL page 50 3.6 Les procdures stockes Utilit des procdures stockes Uneprocdurestockeestunensembled'instructionscompiles,quipeuts'excuterplus rapidement.Lesprocduresstockesaugmententlapuissanceetlaperformancedulangage SQL. Elles peuvent : recevoir et renvoyerdes paramtres une procdure appelante, - appeler d'autres procdures,- renvoyer une valeur de sortie la procdure appelante Lesprocduresstockessurd'autresserveursSQLauxquelsleprocessusclientn'estpas directement connect peuvent tre excutes si le serveur distant autorise les accs distants. Les procdures stockes diffrent des autres instructions et lots d'instructions SQL parce qu'elles sont pranalyses et prnormalises. Lorsque vous excutez une procdure pour la premire fois, le programme de traitement des requtes de SQL Server l'analyse et prpare une structure interne normalisepourlaprocdurequieststockedansunetablesystme.Lorsdelapremire excutiondelaprocdureaudmarrageduserveurSQL,elleestchargeenmmoireet compile compltement (elle n'est plus analyse ou mise en ordre puisque cela a t fait lors de sa cration). Le plan compil reste alors en mmoire (sauf si le besoin de mmoire l'oblige en sortir)pourquesaprochaineexcution(effectueparlemmeclientouparunautre)puisse tre traite sans que le plan de compilation consomme des ressources systme. Les procdures stockes peuvent servir de mcanismes de scurit, car un utilisateur peut avoir la permission d'excuter une procdure stocke mme s'il n'a aucune permission sur les tables ou les vues auxquelles elle fait rfrence Cration de procdures stockes : CREATE PROCEDURE. Doc. en ligne: Crer et maintenir des bases de donnes : Procdures Stockes Aide Transact-SQL : CREATE PROCEDURE et EXECUTESQL2: p.114 Les procdures stockes sont des objets de base de donnes : la permission d'excuter CREATE PROCEDURErevientpardfautaupropritairedebasededonnesquipeutlatransmettre d'autres utilisateurs.Vous ne pouvez crer une procdure stocke que dans la base de donnes courante.UneprocdurestockepeutcontenirtouteslesinstructionsSQL,saufCREATE.Ellepeut appeler une autre procdure stocke jusqu 16 niveaux dimbrications. Base de donnes : SQL page 51 Pour crer une procdure stocke Dans Enterprise Manager, dans votre base de donnes, choisissez l'option Procdures stockes, et ensuite Nouvelle Procdure Stocke avec le bouton droit de la souris. Ou Utilisez l'instruction SQL CREATE PROC : la procdure stocke info_auteur reoit en paramtres le nom et le prnom d'un auteur, et affiche le titre et l'diteur de chacun des livres de cet auteur : CREATE PROC info_auteur @nom varchar(40), @prnom varchar(20)AS SELECT nom_auteur, pn_auteur, titre, nom_diteur FROMauteurs, titres, diteurs, titreauteur WHERE pn_auteur = @prnom AND nom_auteur = @nom AND auteurs.id_auteur = titreauteur.id_auteur AND titres.id_titre = titreauteur.id_titre AND titres.id_diteur = diteurs.id_diteur go Pour excuter la procdure :Executeinfo_auteurChevalier, Bernard nom_auteur pn_auteurtitre nom_diteur ------------------------------------------------------------------------------- ----------------------------------------Chevalier BernardLa colre : notre ennemie ?New Moon Books Chevalier BernardVivre sans crainte New Moon Books laprocdureinfo_diteur2affichelenomdesauteursquiontcritunlivrepubliparl'diteur pass en paramtre : si aucun nom d'diteur n'est prcis, la procdure fournit les auteurs publis par Algodata Infosystems. CREATE PROC info_diteur2 @nom_diteur varchar(40) = 'Algodata Infosystems' AS SELECTnom_auteur, pn_auteur, nom_diteur FROMauteurs a, diteurs e, titres t, titreauteur ta WHERE@nom_diteur = e.nom_diteur ANDa.id_auteur = ta.id_auteur ANDt.id_titre = ta.id_titre ANDt.id_diteur = e.id_diteur Silavaleurpardfautestunechanedecaractrescontenantdesespacesoudesmarquesde ponctuation,ousielledbuteparunnombre(parexemple,6xxx),elledoitfigurerentre guillemets anglais simples. Laprocdure peut spcifier les actions accomplir si l'utilisateur ne fournit pas de paramtre :CREATE PROC montre_index3 @tablevarchar(30) = NULL AS IF @table is NULL PRINT 'Entrez un nom de table' ELSE -- traitement du paramtre @ avant le nom du paramtre Paramtre par dfaut Base de donnes : SQL page 52 LoptionOUTPUTderrireunparamtre,indiqueunparamtreensortie,quiestrenvoyla procdureappelante :somme_titresestcreavecunparamtred'entrefacultatif titre_slectionn et un paramtre de retoursomme CREATE PROC somme_titres @titre_slectionn varchar(40) = '%', @somme money OUTPUT AS SELECT 'Liste des Titres ' = titre FROM titresWHERE titre LIKE @titre_slectionn SELECT @somme = SUM(prix) FROM titres WHERE titre LIKE @titre_slectionn go Appel dune procdure stocke avec un paramtre en sortie : DECLARE @cot_total money EXECUTE somme_titres 'Les%', @cot_total OUTPUT IF @cot_total < 1000BEGIN PRINT ' ' PRINT 'L''ensemble de ces titres peut s''acheter pour moins de 1 000 FF.' END ELSE SELECT 'Le cot total de ces livres s''lve ' + convert (varchar(20), @cot_total) go Liste des Titres-----------------------------------------------Les festins de Parly 2 Les micro-ondes par gourmandiseLes secrets de la Silicon Valley L'ensemble de ces livres peut s'acheter pour moins de 1 000 FF. Dans une procdure stocke, vous pouvez aussi retourner une valeur par linstruction RETURN, et la rcuprer dans lappelant par la syntaxe suivante :DECLARE @cot_total money EXECUTE @cot_total= somme_titre 'Les%' Dclaration de variable Appel procdure Base de donnes : SQL page 53 Exercice 26 : cration et test de procdures stockes Crer une procdure stocke Planning_perso qui affiche, pour un nom et un prnom de pilote passs en paramtre, les numros de vol, avec les aroports de dpart et darrive, classs par date et heure de dpart. **** Planning personnel de LECU Rgis NumVOL DeVerspartant le-------------------------------------------IT105 LYS ORL 6 avril 6:0 IT102 CDG NIC 6 avril 12:0 IT108BRIORL 6 avril 19:0 IT103 GRE BLA 7 avril 9:0 IT107NIC BRI6 mai 7:0 IT107NIC BRI7 juin7:0 Si lun des paramtres est omis, la procdure affichera le message derreur : Erreur : manque le nom du pilote , ou Erreur : manque le prnom du pilote .Si le pilote nexiste pas, la procdure affichera Erreur :piloteinexistant .Testerlaprocdure, et rajouter la au script de cration de la base. Exercice 27 :procdures imbriques avec passage de paramtres, et valeur de retour 1) Faire un SELECT qui affiche la somme des heures de voldun pilote donn, pour un numro de semaine donn, avec la prsentation suivante : ---------------------------------------------------------------------------- Semaine 49,Heures de Vols de LECU Rgis =3 Onutiliserala fonction DATEDIFF pour calculer la diffrence entre lheure de dpart et darrive, et DATENAME avec loption week pour extraire le numro de semaine de la date du vol. 2) Ranger le nom et le prnom du pilote, et le numro de semaine dans des variables intermdiaires TransactSQL.Stockerla somme des heures de voldans une variable de type INT, et prparer le texte afficher dans une variable de type VARCHAR. Pourformaterletexteafficher,onaurabesoindelafonctionCONVERT(Ressources :exemple prcdent et aides sur Convert, et Print dans Transact SQL) 3)EnpartantduSELECTprcdent,faireuneprocdureHorairequirenvoielasommedes heuresdevoldunpilotequelconquepourunesemainedonne,ettesterlaenaffichantson rsultat.Uneprocdurestockedoittreunebotenoire :nepasafficherdemessagesderreursmais retourneruncodederreurlappelant :0sisuccs,-1sipiloteinexistant.Lenom,leprnomdu pilote et le numro de semaine seront dfinis comme paramtres obligatoires. 4) Raliser une procdure ObjectifHebdomadaire qui- affiche le numro de semaine demande, le nom et le prnom du pilote, et son nombre dheures hebdomadaire(renvoy par Horaire) -compare cette somme un objectif pass en paramtre : nombre dheures demandes - affiche Objectif atteint ou non atteint AjouterHoraire et ObjectifHebdomadaire,aux scripts de cration et de suppression Base de donnes : SQL page 54 3.7Les dclencheurs (trigger) Doc. enligne : Crer et maintenir des bases de donnes : Respect des rgles dentreprise laide de dclencheurs Aide Transact SQL : CREATE TRIGGERSQL2 : p.107 111 Dfinition Undclencheur(trigger)estuntypeparticulierdeprocdurestockequisexcute automatiquement lorsque vous modifiez ou supprimez des donnes dans une table.Les trigger garantissent la cohrence des donnes lies logiquement dans diffrentes tables : par exemple,untriggerpermettrademettrejourtoutesleslignesdelatableAFFECTATION, lies lavion que lon va supprimer dans la table AVION. Chaquetriggerestspcifiquecertainesoprationssurlesdonnes :UPDATE,INSERTou DELETE.Ils'excuteimmdiatementaprsloprationquilalanc :letriggeretl'opration formentuneseuletransactionquipeuttreannuleparletrigger.Siuneerreurgraveest dtecte, toute la transaction est automatiquement annule (en langage de bases de donnes, une transactiondsigneunesuiteindivisibledinstructionsSQL,quiseffectuenttoutesoupasdu tout ; cette notion sera dtaille dans les chapitres suivants) Exemples dutilisation : Poureffectuerdeschangementsencascadedansdestablesliesdelabasededonnes :un dclencheurDELETEsurtitres.id_titreprovoqueunesuppressiondeslignescorrespondant ce titre dans les tables titreauteur, ventes et droits_prvus. PourassurerdesrestrictionspluscomplexesqueparlacontrainteCHECK :contrairement CHECK, les dclencheurs peuvent faire rfrence des colonnes dans d'autres tables.Pour trouver la diffrence entre l'tat d'une table avant et aprs une modification des donnes, et accomplir une ou plusieurs actions en fonction de cette diffrence. Syntaxedu CREATE TRIGGER Un dclencheur est un objet de base de donnes. Pour crer un dclencheur, vous devez spcifier latablecouranteetlesinstructionsdemodificationdesdonnesquil'activent.Ensuite,vous devez spcifier la ou les actions que le dclencheur devra entreprendre. Une table peut avoir au maximum trois dclencheurs: un dclencheur UPDATE, un dclencheur INSERT et un dclencheur DELETE.Chaquedclencheurpeutavoirdenombreusesfonctionsetappelerjusqu'16procdures.Un dclencheurnepeuttreassociqu'uneseuletable,maisilpeuts'appliquerauxtrois oprations de modifications de donnes (UPDATE, INSERT et DELETE). Base de donnes : SQL page 55 Exemple 1: CREATE TRIGGER pense_bte ONtitres FOR INSERT, UPDATE ASRAISERROR ('Insertion Livres',15,9) go Ce trigger envoie un message au client lorsquon ajoute ou on modifie des donnes danstitres. Linstruction SQL : insert titres (id_titre, titre) values ('BX100', 'test') provoque le dclenchement du trigger, avec le message : insert titres (id_titre, titre) values ('BX100', 'test')Msg. 50000, niveau 15, tat 9 Insertion Livres Exemple 2 : ce dclencheur INSERT met jour la colonne cumulannuel_ventes de la table titres chaque fois qu'une nouvelle ligne est ajoute la table ventes.CREATE TRIGGER dclench_ins ON ventes FOR INSERT AS UPDATE titres SET cumulannuel_ventes = cumulannuel_ventes + qt FROM inserted WHERE titres.id_titre = inserted.id_titre Go -- Affichage du cumul de ventes par livres, avant la nouvelle vente SELECT id_titre, cumulannuel_ventes FROM titres WHEREcumulannuel_ventes is NOT NULL id_titrecumulannuel_ventes -------- ------------------BU1032 15MC3021 40PS2091 30Nom de la table Conditions de dclenchement Actions associes Table temporaire = lignes modifies de VENTES Base de donnes : SQL page 56 -- Insertion dune nouvelle vente : qt = 100 sur le livre 'BU1032' INSERT ventes VALUES ('6380', '6700','1994', 100, 'Net 60', 'BU1032' ) --ProvoquelamisejourautomatiquedelatableTITRESparletrigger,etdoncaussile dclenchement du trigger davertissement prcdent : Msg. 50000, niveau 15, tat 9 Insertion Livres --Raffichage du cumul de ventes par livres, aprs la vente id_titre cumulannuel_ventes-------- ------------------BU1032 115 MC3021 40PS2091 30 Avec Enterprise ManagerPour visualiser et mettre jour un Trigger : dans la fentre de modification de la Table concerne,cliquezsur le bouton Dclencheurs , dans la barre doutils Base de donnes : SQL page 57 Exercice 28:scurisation des suppressions, avec modification en cascade Dans la table PILOTE, crer un trigger en suppression, qui met NULL tous les champs IdPilotedelatableAFFECTATION,lisaupilotesupprimer :aveccettemthode,onconnatlesvols sansaffectation,quidevronttreaffectsunautrepilote.Testerletriggerensupprimantun pilote, et en raffichant la table AFFECTATION. Leslignessupprimersontstockesdanslatabletemporairedeleted.Pourcetexercice,ilfautsupprimer la contrainte de cl trangre sur la colonne IdPilote de la table AFFECTATION : comme lescontraintesdecltrangresontvaluesavantlelancementdestriggers,lelienentre AFFECTATIONetPILOTEinterditlasuppressiondespilotesrfrencsdanslatable AFFECTATION Exercice 29 :test de cohrence en insertion sur la table VOL Dans la table VOL, crer un trigger en insertion qui vrifie que la ville darrive est diffrente de la villededpart,etquelheuredarriveestpostrieurelheurededpart.Danslecas contraire, on annule linsertion en appelant linstruction ROLLBACK. Exercice 29 bis :test de cohrence en insertion sur la table AFFECTATION Interdireunpilotedevolerplusde35heuresparsemaine,parunTriggereninsertionsurla table AFFECTATION. Lors de laffectation dun pilote un vol, on vrifie que la somme des heures de vol hebdomadaire de ce pilote, pour la semaine considre, ne dpasse pas 35 heures La somme des heures de vol du pilote pour une semaine reprsente par son numro, est donne par la procdure Horaire. Cette procdure ne prend pas en compte la nouvelle affectation, qui nest pas encore dans la table AFFECTATION, mais dans la table provisoire Inserted Base de donnes : SQL page 58 3.8Les index Doc. en ligne : Crer et maintenir des bases de donnes : Index Doc. en ligne : Optimiser la performance des bases de donne Aide Transact SQL : CREATE INDEX Prsentation simplifie et conseils Lesindexpermettentdoptimiserlefonctionnementdunebasededonnes :ilsacclrentles oprationsSELECT,INSERT,UPDATEetDELETEenfournissantunaccsdirectsur certaines colonnes ou ensembles de colonnes. Unindexordonn(optionCLUSTERED)fournitunaccsdirectauxlignesphysiquesdela table, sur le disque. La cration dun index ordonn modifie l'ordre physique des lignes : il faut donclecrer avant les index non ordonns, et il ne peut y avoir quun index ordonn par table (souvent sur la cl primaire). Un index non ordonn (sans loption CLUSTERED) est un index qui sappuie sur l'ordre logique delatable,enmmoire.Unetablepeutcontenirplusieursindexnonordonns.Employezun index non ordonn pour : -des colonnes qui contiennent un nombre lev de valeurs uniques; -des requtes qui renvoient de petits ensembles de rsultats La recherche de donnes au moyen d'un index ordonn est presque toujours plus rapide quavec unindexnonordonn.L'indexordonnestparticulirementutilelorsquelonveutextraireen une seule instruction plusieurs lignes qui possdent des cls contigus : lindex garantit que ces lignes seront physiquement adjacentes. Pourcrireunindexefficace,ilfautvisualiserla slectivit descolonnes =lenombrede valeurs uniques par rapport au nombre de lignes de la table, donnes par linstruction SQL : SELECT COUNT (DISTINCT nom_de_colonne) FROM nom_de_table Conseils pour une table de 10 000 lignes: Nombre de valeurs uniquesChoix de lindex 5000Index non ordonn 20Index ordonn 3Pas d'index Index simple :sur la colonne id_d'auteur de la table auteurs. CREATE INDEX index_id_auteur ON auteurs (id_auteur) Indexordonnunique :surla colonne id_d'auteur de la table auteurs pour assurer l'unicit des donnes.L'optionCLUSTEREDtantspcifie,cetindexclasseraphysiquementlesdonnes sur le disque. Base de donnes : SQL page 59 CREATE UNIQUE CLUSTERED INDEX index_id_auteur ON auteurs (id_auteur) Indexcompossimple :creunindexsurlescolonnesid_d'auteuretid_titredelatable titreauteur. CREATE INDEX ind1 ON titreauteur (id_auteur, id_titre) Exercice 30: optimisation de la base Compagnie arienne Crer un Index non ordonn compos sur les champ NomPiloteet PrenomPilote de la table Pilote. VrifierlexistencedelindexsousMicrosoftSQLEnterprise :slectionnerlatable,puisavecle bouton droit Modifier une table , puis cliquer dans la barre doutil sur le bouton Proprits de table et dindex : Base de donnes : SQL page 60 3.9Rcapitulation Reprendre tous les exercices et complter le script de cration de la base,dans lordre : -dfinition des types utilisateurs -cration des tables, en commenant par les tables indpendantes -cration des vues -cration des procdures stockes -dfinition des permissions sur les tables, les vues, les procdures stockes-cration des triggers -cration des index Ecrire un script dinitialisation complte des tables (INSERT) Ecrire un script de destruction complte de la base, dans lordre inverse de la cration : -suppression des index, triggers, procdures stockes -suppression des vues -suppression des tables, en commenant par les tables avec des cls trangres -suppression des types utilisateurs Avec SQL Enterprise Manager Conservez votre base et crez en une autre vide, que vous allez grerentirement sous Enterprise Manager -Typesdedonnesutilisateur :boutondroit=> Nouveautypededonnesdfinipar lutilisateur -Tables : slectionnez lobjet Tables : bouton droit => Nouvelle Table Lutilisation est assez intuitive : pour dfinir les contraintes de cl primaire => cliquez sur la cl jaune dans la barre doutil (comme sous ACCESS) -Vues : slectionnez lobjet Vues : bouton droit => Nouvelle Vue .VouspouvezdfinirvotreVueenlangageSQL,ouavecunoutilgraphiquecomparable celui dACCESS et de VISUAL BASIC. Base de donnes : SQL page 61 -Procduresstockes :slectionnezlobjet ProcduresStockes :boutondroit=> Nouvelle Procdure Stocke .Pas daide graphique : il faut lcrire en SQLdans la fentre ! -Triggers :slectionnezuneunelestablesconcernes :boutondroit Modifierunetable , puis bouton Dclencheurs dans la barre doutil de la fentre Crer la table Demanderunecrationautomatiquedescriptsdecrationetdedestruction ,etcomparezles scripts gnrs aux scripts que vous venez dcrire Slectionnervotrebase :avecleboutondroit,choisir ToutesTches , Gnrerdesscripts SQL Base de donnes : SQL page 62 A titre dexemple : lire le script de cration de la base PUBLIutilis au dbut de ce cours (Extrait) Fairedesrecherchesdocumentairessurlessyntaxesquinontpastvuesdanslaconstruction guide. Ce script peut aussi vous servir dexemples pour la plupart des syntaxes. -- -InstPubli.SQL 2001 GO set nocounton set dateformat mdy USE master GO declare @dttm varchar(55) select@dttm=convert(varchar,getdate(),113) raiserror('Dbut de InstPubli.SQL %s ....',1,1,@dttm) with nowait if exists (select * from sysdatabases where name='publi') DROP database publi GO CHECKPOINT GO CREATE DATABASE publi on master = 3 GO CHECKPOINT GO USE publi GO if db_name() = 'publi' raiserror('Base de donnes ''publi'' cre et contexte actuellement utilis.',1,1) else raiserror('Erreur dans InstPubli.SQL, ''USE publi'' a chou!Arrt immdiat du SPID.' ,22,127) with log go execute sp_dboption 'publi' ,'trunc. log on chkpt.' ,'true' EXECUTE sp_addtype id, 'varchar(11)', 'NOT NULL' EXECUTE sp_addtype idt, 'varchar(6)', 'NOT NULL' EXECUTE sp_addtype empid, 'char(9)', 'NOT NULL' go raiserror('Etape de cration de la section de table ....',1,1) GO CREATE TABLE auteurs ( id_auteur id CHECK (id_auteur like '[0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9]') CONSTRAINT UPKCL_auidind PRIMARY KEY CLUSTERED, nom_auteurvarchar(40) NOT NULL, pn_auteurvarchar(20) NOT NULL, tlphone char(12)NOT NULL DEFAULT ('INCONNU'), adresse varchar(40) NULL, villevarchar(20) NULL, pays char(2) NULL, code_postal char(5) NULL CHECK (code_postal like '[0-9][0-9][0-9][0-9][0-9]'), contratbit NOT NULL ) go Base de donnes : SQL page 63 CREATE TABLE diteurs ( id_diteurchar(4) NOT NULL CONSTRAINT UPKCL_pubind PRIMARY KEY CLUSTERED CHECK (id_diteur in ('1389', '0736', '0877', '1622', '1756') OR id_diteur like '99[0-9][0-9]'), nom_diteurvarchar(40) NULL, villevarchar(20) NULL, rgion char(2) NULL, pays varchar(30) NULL DEFAULT('FR') ) go CREATE TABLE titres ( id_titreidt CONSTRAINT UPKCL_titleidind PRIMARY KEY CLUSTERED, titre varchar(80) NOT NULL, typechar(12)NOT NULL DEFAULT ('SANS TITRE'), id_diteurchar(4) NULL REFERENCES diteurs(id_diteur), prix money NULL, avance money NULL, droits int NULL, cumulannuel_ventes int NULL, notes varchar(200)NULL, datepub datetimeNOT NULL DEFAULT (getdate()) ) go CREATE TABLE titreauteur ( id_auteur id REFERENCES auteurs(id_auteur), id_titreidt REFERENCES titres(id_titre), cmd_auteurtinyint NULL, droits_pourcentint NULL, CONSTRAINT UPKCL_taind PRIMARY KEY CLUSTERED(id_auteur, id_titre) ) go CREATE TABLE magasins ( id_mag char(4) NOT NULL CONSTRAINT UPK_storeid PRIMARY KEY CLUSTERED, nom_mag varchar(40) NULL, adresse_magvarchar(40) NULL, villevarchar(20) NULL, pays char(2) NULL, code_postal char(5) NULL ) go CREATE TABLE ventes ( id_mag char(4) NOT NULL REFERENCES magasins(id_mag), num_cmd varchar(20) NOT NULL, date_cmddatetimeNOT NULL, qt smallintNOT NULL, modepaiementsvarchar(12) NOT NULL, id_titreidt REFERENCES titres(id_titre), CONSTRAINT UPKCL_sales PRIMARY KEY CLUSTERED (id_mag, num_cmd, id_titre) ) Base de donnes : SQL page 64 go CREATE TABLE droits_prvus ( id_titreidt REFERENCES titres(id_titre), minimum int NULL, maximum int NULL, droits int NULL ) go CREATE TABLE remises ( typeremisevarchar(40) NOT NULL, id_mag char(4) NULL REFERENCES magasins(id_mag), qtminsmallintNULL, qtmax smallintNULL, remise dec(4,2) NOT NULL ) go CREATE TABLE emplois ( id_emploismallint IDENTITY(1,1) PRIMARY KEY CLUSTERED, desc_emploivarchar(50) NOT NULL DEFAULT 'Nouveau poste - pas de dnomination officielle', niv_min tinyint NOT NULL CHECK (niv_min >= 10), niv_max tinyint NOT NULL CHECK (niv_max @limite_infrieure AND prix 1000 (2) Test du solde OK : 1200 > 500 (3) Dbit de 1000 F => nouveau solde = 200 F(4) Dbit de 500 F => solde final = -300 F Ceproblmefondamentaldel'accsconcurrentielauxdonnesestgraumoyendun mcanisme de verrouillage, des lignes ou des tables entires (lock).Cemcanismepermetdebloquerl'accsauxlignesouauxtablesconcernessoit automatiquement (ORACLE, SQL Server), soit sur commande explicite (DB2, RDB). L'accs uneligneouunetableverrouillespeuttretraitsoitparattentedudblocage(modeWAIT) soit par ROLLBACK de la transaction (mode NOWAIT) : le dblocage est effectif ds la fin de la transaction.Reprise de lexemple prcdent avec transaction et verrouillage de la table Comptes Application A : Demande un dbit de 1000 FApplication B: Demande un dbit de 500 F (1)Dbuttransactionavecverrouillageexclusif de la table Comptes ( passant) (2)Dbuttransactionavecverrouillageexclusif de la table Comptes ( bloqu) (3) Test du solde OK : 1200 > 1000En attente (4) Dbit de 1000 F => solde = 200 FEn attente (5)Fintransaction=>dverrouillagedela table Comptes (6) Test du solde: 200 < 500 => dbit refus (7)Fintransaction=>dverrouillagedela table Comptes Base de donnes : SQL page 74 Rollback T1T2 Update Select Update T1T2 Rollback Select Attentefin verrou Update T1T2 Select Update Select T1T2 Update Commit Update Commit Attente fin verrou partag Les niveaux disolation dans les transactions LanormeSQL2neprvoiepasdedemandeexplicitedesverrousendbutdetransaction :les programmeursrisquantdoublierderserverlesverrous,lanormeconsidrequelapriseautomatiquedeverrousparleSGBDestprfrable.LeSGBDchoisitautomatiquementles verrous poser sur les tables et les lignes en fonction des requtes reues : -SELECT :leSGBDposeun verroupartag ,cest--direunverrouquiautoriselesautres lecteursconsulterlatable,maisquibloquelesdemandesdcriture(INSERT,DELETE, UPDATE) -INSERT,DELETE,UPDATE :leSGBDposeun verrouexclusif quiinterdittoutautre opration sur lobjet, y compris les lectures PROBLEME TRANSACTIONSOLUTION Lecture inconsistante Lecture non rptitive Le SGBD pose des verrous diffrents selon le niveau disolation des transactions : 1.ReadUncommited :Aucunverrou.Onpeutlirelesmisesjourdansdautresapplications, mme si elles nont pas encore t valides par un COMMIT. Fortement dconseill ! 2.ReadCommited(dfaut) :verrouexclusifsurleslignesmodifies.LeSGBDcacheles modificationsencoursauxautresutilisateurs,tantquellesnontpastvalidesparCOMMIT. Mais il ne pose pas de verrous sur le SELECT : dans une mme transaction, les lectures ne sont pas Verrou Exclusif Libration verrou Verrou Partag Libration verrous Verrou Exclusif Base de donnes : SQL page 75 ncessairement rptitives ,lesdonnespouvanttremodifiesparuneautretransactionentre des lectures qui se suivent. 3.RepeatableRead (conseill) :corrigeleproblmeprcdentdeslecturesnonrptitives,en posant un verrou partag sur les lignes lues, en plus du verrou exclusif sur les lignes modifies. Les lignes ne pourront donc pas tre modifies entre le premier SELECT et la fin de la transaction. 4. Serializable : le SGBD prend un verrou de table sur toute ressource utilise Enrsum,leSGBDmanipulequatresortesdeverrous,selonlesoprationsetleniveau disolation demands : Verrou partagVerrou exclusif Verrou de pages(lignes)Lecture dans le cas 3modification dans les cas 2 et 3 Verrou de tables Lecture dans le cas 4modification dans le cas 4 Verrou de pages : en pratique, un SGBD ne pose jamais un verrou sur une seule ligne, mais sur la page qui contient cette ligne. Norme SQL 2 sur les niveaux disolation : p. 162 Mise en uvre pratique en Transact SQL Par dfaut SQL Server travaille dans un cas proche du Read Commited : il pose des verrous exclusifs sur les pages modifies; il pose des verrous partags sur les pages lues (comme dans le cas RepeatableRead )maisilleslibredslafinduSELECT.Lesverrouspartagssont donc bloquants si une modification est en cours dans une autre transaction, mais ils nempchent pas les autres de modifier les donnes qui viennent dtre lues. Troisoptionspourmodifierlecomportementdesverrous :HOLDLOCK,TABLOCKet TABLOCKX HOLDLOCKmaintientleverroujusquauCOMMIT(aulieudelerelacheraprsle SELECT).Ilinterditdonctoutemodificationexterne,etgarantitlacohrencedetoutesles lecturesTABLOCK pose un verrou partag de table, au lieu dun verrou de page TABLOCKX pose un verrou exclusif de table Exemple de transaction bancaire qui garantit la cohrence du solde (abandon si solde insuffisant) etla rptitivit desdiffrenteslectures(soldenonmodifiparuneautretransactionentre deux lectures) -- fixer le mode disolation set transaction isolation level SERIALIZABLE -- dbut de la transaction begin transaction Base de donnes : SQL page 76 --lecturedelatableCompteavecverrouillagedelatableenmodeexclusif :critureetlecture interdites jusquau COMMIT Selectsolde From Comptes(HOLDLOCK TABLOCKX)Where num = 1 -- modification de la table Comptes Update Comptes Set solde = solde 500Where num= 1 -- lecture de vrification, pour trouver le nouveau solde Selectsolde From Comptes Where num = 1 -- fin transaction commit transaction Attention aux deadlocks Lutilisationdesverrouspeutconduiredes"deadlock" :situationodeuxtransactionsouplus peuvent se bloquer mutuellement. Application AApplication B begin transactionbegin transaction SelectsoldeFromComptes(HOLDLOCK)Wherenum=1 verrou partag, PASSANT SelectsoldeFromComptes(HOLDLOCK)Wherenum=1 verrou partag, PASSANT Update Comptes Set solde = solde 500Where num= 1 Demandedeverrouexclusif,BLOQUANT(surverrou partag de B) Update Comptes Set solde = solde 500Where num= 1 Demandedeverrouexclusif,BlOQUANT(surverrou partag de A) => DEADLOCK e Exercice 32 : provoquer un DEADLOCK Lancer deux fois le script SQL fourni Deadlock.sql sous deux connexions diffrentes. ExcuteruniquementleSELECTsouschacunedesconnexions.PuisexcuterleUPDATEsous chacune des connexions. Que se passe-t-il ? Comment le SGBD sort-il du deadlock ? MmeexerciceenobservantlesverrousquisontpossparleSGBD.SousEnterpriseManager, connectez vous sous le compte Dveloppeur qui vous donne des droits suffisants pour observer Base de donnes : SQL page 77 ltatdusystme.Dans Gestion/Activitencours ,voustrouverezdesinformationssurles processus en cours, et les verrous poss sur les diffrents objets de la base. ModifierlescriptavecloptionTABLOCKXquiviteleDeadlockenbloquantledeuxime processus ds le SELECT (=> cest la solution retenir) Base de donnes : SQL page 78 5.LE MODELECLIENT/SERVEUR 5.1 Introduction Lemodleclient-serveurconsisteenundialogueentredeuxprogrammes,quichangentdes donnesoulesrsultatsduncalcul,parexemple.Lesdeuxprogrammesdialoguentdansun rapport dgalgal etnondansunrapport matre-esclave commeautrefoisavecles systmes centraliss. Alabasedudialogue,ilyaunbesoinduclient :leclient estlapplicationquidbutela "conversation", afin d'obtenir de la part du serveur (le programme "rpondant") des donnes ou un rsultat. Le serveur est un programme gnrique dont la seule fonction est de rpondre aux demandes des applicationsclientes,enfournissantenretourlesdonnesoulersultat.Lesdemandesdes applicationssontappelesgnralementdesrequtes.Leserveurest,parnature,indpendant des applications qui l'interrogent. Dialogue ClientServeur Initie et pilote le dialoguerpond au client, participe au dialogue Est conforme au modle client-serveur, une application qui fait appel des services distants par des requtes, plutt que par un change de fichiers. Ce modle exige que les ordinateurs soient relis en rseau, et repose sur un protocole qui assure le bon fonctionnement des changes: -au niveau du client : mission de requtes (les appels de service) -au niveau du serveur : mission des rponses ou rsultats 5.2 Les principes de base Comment peut-on dfinir un service? Lanotiondeservicedoittrecomprisetraverslanotiondetraitement.Lemodleclient-serveur permet de rpartir les services utiliss par une application et non l'application elle-mme. Les traitements auxquels font appel les applications, requirent souvent beaucoup de ressources machine :il est donc prfrable, dans un souci de performance et d'efficacit, de les faire rsider chacun sur un ordinateur ddi, appel serveur. Comment peut-on distinguer le cur d'une application et les services annexes de celle-ci que l'on doit dporter? Une application informatique se compose fondamentalement de 3 niveaux : *l'interface avec l'utilisateur, *les traitements, *les donnes. Ces niveaux sont eux-mmes composs de couches : Base de donnes : SQL page 79 Gestion de affichage Interface Logique de l'affichage Logique fonctionnelle Traitements Excution des procdures Intgrit des donnes DonnesGestion des donnes Quel est le rle des diffrentes couches? * La gestion de l'affichage : est assure par l'environnement d'exploitation (ex: Windows), * Lalogiquedel'affichage:transmetlagestiondel'affichagelesdirectivesdeprsentation (ex : les feuilles et les contrles graphiques dans une application Visual Basic sous Windows), * La logique fonctionnelle : reprsente l'arborescence algorithmique de l'application et aiguille le traitement vers les procdures qui sont droules et excutes dans la couche suivante (ex : les fonctions vnementielles en Visual Basic associes aux messages souris, clavier..) * L'excutiondesprocdures:effectuelestraitementsdel'application(ex:desordresSQL lancs par les fonctions vnementielles, ou mieux des appels de procdures stockes), * L'intgritdesdonnes:vrifiel'utilisationcohrentedesdonnesparlesdiffrents processus, * Lagestiondesdonnes:permetlamanipulationdesdonnes(slectionoumisejourdes donnes). 5.3 Le dialogue entre client et serveur : l'IPC Le dialogue s'effectue travers le rseau qui relie le client et le serveur :Uneconversationdetypec