CoursBDRelationnelles_L3

download CoursBDRelationnelles_L3

of 118

Transcript of CoursBDRelationnelles_L3

  • 8/2/2019 CoursBDRelationnelles_L3

    1/118

    Licence MI2E- 3me anne

    Mention Informatique

    et Mention Mathmatiques Mineure Informatique

    Bases de donnes relationnelles

    Maude ManouvrierModlisation Entit/Association et UML (Vocabulaire)

    Modle relationnel et passage au modle relationnel

    Algbre relationnelle

    Calcul relationnel SQL /EmbeddedSQL / ODBC / JDBC

    Dpendances fonctionnelles

    Dcomposition de schma

    Formes Normales

  • 8/2/2019 CoursBDRelationnelles_L3

    2/118

    Maude Manouvrier - Univ. Paris Dauphine

    Ouvrages de rfrence utiliss pour le cours :

    T. Connoly, C. Begg et A. Strachan,Database Systems A PraticalApproach to Desigh, Implementation and Management, 1998, ISBN: 0-

    201-34287-1,

    G. Gardarin, Bases de Donnes - objet/relationnel, Eyrolles, 1999, ISBN:

    2-212-09060-9, disponible la BU 005.74 GAR

    R. Ramakrishnan et J. Gehrke, Database Management Systems, Second

    Edition; McGraw-Hill, 2000, ISBN: 0-07-232206-3, disponible la BU

    055.7 RAM

    A. Silberschatz, H.F. Korth et S. Sudarshan, Database System Concepts,

    McGraw-Hill, 1996, ISBN: 0-07-114810-8, disponible la BU 005.7 DAT

    J.D. Ullman et J. Widom, A first Course in Database Systems, Prentice

    Hall, 1997, ISBN: 0-13-887647-9, disponible la BU 005.7 ULL

    BIBLIOGRAPHIE

    2

  • 8/2/2019 CoursBDRelationnelles_L3

    3/118

    Maude Manouvrier - Univ. Paris Dauphine

    Autres ouvrages de rfrence, disponibles la BU :

    C.J. Date,An Introduction to Database Systems, Addison Wesley

    C.J. Date,A Guide to SQL Standard, Addison Wesley

    R.A. El Masri et S.B. Navathe,Fundamentals of Database Systems, Prentice Hall

    Ouvrages pdagogiques contenant des exercices corrigs :

    Philip J. Pratt,Initiation SQL - Cours et Exercices corrigs, Eyrolles, 2001

    BU : 005.72 SQL

    Christian Soutou,De UML SQL - Conception de bases de donnes, Eyrolles,

    2002BU : 005.72 SOU

    F. Brouard, C. Soutou , SQL (Synthse de cours et exercices corrigs). Pearson

    Education 2005BU : 005.72 SQL

    Christian Soutou, SQL Pour Oracle (avec exercices corrigs), Eyrolles, 2005BU 005.72 SOU

    Nicolas Larousse, Cration de bases de donnes, Coll. Synthex, Pearson

    Education, 2006

    BIBLIOGRAPHIE

    3

  • 8/2/2019 CoursBDRelationnelles_L3

    4/118

    Chap. I - Introduction

    Base de donnes :

    collection d'informations ou de donnes qui existent sur une longuepriode de temps [UW97] et qui dcrivent les activits d'une ou

    plusieurs organisations [RG00]

    ensemble de donnes modlisant les objets d'une partie du

    monde rel et servant de support une application informatique

    [Gar99]

    SGBD : Systmes de Gestion de Bases de Donnes

    (DataBase Management Systems - DBMS)

    ensemble de logiciels systmes permettant aux utilisateurs

    d'insrer, de modifier, et de rechercher efficacement des donnesspcifiques dans une grande masse d'informations (pouvant

    atteindre plusieurs milliards d'octets) partage par de multiples

    utilisateurs [Gar99]4

    Maude Manouvrier - Univ. Paris Dau hine

  • 8/2/2019 CoursBDRelationnelles_L3

    5/118

    Maude Manouvrier - Univ. Paris Dauphine

    SGBD

    Principaux composants :

    Systme de gestion de fichiersGestionnaire de requtes

    Gestionnaire de transactions

    Principales fonctionnalits :Contrle de la redondance dinformation

    Partage des donnes

    Gestion des autorisations daccsVrifications des contraintes dintgrit

    Scurit et reprise sur panne

    5

    Chap. I - Introduction

  • 8/2/2019 CoursBDRelationnelles_L3

    6/118Maude Manouvrier - Univ. Paris Dauphine

    Abstraction des donnes

    Niveau interne ou physique :

    plus bas niveau indique comment (avec quelles structures de donnes) sont

    stockes physiquement les donnes

    Niveau logique ou conceptuel :

    dcrit par un schma conceptuel

    indique quelles sont les donnes stockes et quelles sont leurs

    relations indpendamment de limplantation physique

    Niveau externe ou vue :

    propre chaque utilisateur

    dcrit par un ou plusieurs schmas externes

    6

    Chap. I - Introduction

  • 8/2/2019 CoursBDRelationnelles_L3

    7/118Maude Manouvrier - Univ. Paris Dauphine

    Instances et schma

    Instances de base de donnes :

    donnes de la base un instant donn

    manipules par un langage de manipulation dedonnes (DML -Data Manipulation Language)

    Schma de base de donnes :

    description de la structure des donnes

    ensemble de dfinitions exprimes en langagede description de donnes (DDL - DataDefinition Language)

    7

    Chap. I - Introduction

    C i

  • 8/2/2019 CoursBDRelationnelles_L3

    8/118Maude Manouvrier - Univ. Paris Dauphine

    Petit historique 1960 : systmes de gestion de fichiers

    1970 : dbut des SGBD rseaux et hirarchiques proches des systmes de

    gestion de fichiers pas dinterrogation sans savoir o est l'information

    recherche ("navigation") et sans crire de programmes

    1970 : papier fondateur de CODD sur la thorie des relations

    fondement de la thorie des bases de donnes relationnelles

    INGRES Berkeley - langage QUEL

    System R IBM San Jose - langages SEQUEL et QBE

    1980 : Apparition des SGBD relationnels sur le march (Oracle, Ingres,

    Informix, Sybase, DB2 )

    1990 : dbut des SBGD orients objet (Gemstone, O2, Orion, Objectstore,Versant, Matisse...).

    Aujourdhui : relationnel-objet, semi-structur, multimdia ...

    8

    Chap. I - Introduction

  • 8/2/2019 CoursBDRelationnelles_L3

    9/118Maude Manouvrier - Univ. Paris Dau hine

    Chap II - ModlisationMthodologie suivre pour modliser un problme

    Dterminer les entits/classes et attributs :

    entit/instance de classe = objet dcrit par de linformation

    objet caractris uniquement par un identifiant = attribut

    attribut multi-valu ou avec une association 1:N = entit ou instance

    attacher les attributs aux ensemble dentits/classes qu'ils dcrivent le

    plus directement

    viter au maximum les identificateurs composites

    Identifier les gnralisations-spcialisations/hritage

    Dfinir les associations liminer les associations redondantes

    viter les associations n-aires

    calculer les cardinalits de chaque association9

    Chap II - Modlisation

  • 8/2/2019 CoursBDRelationnelles_L3

    10/118Maude Manouvrier - Univ. Paris Dauphine

    Modlisation Entit/Association(Format Merise)

    10

    Chap. II - Modlisation

    Un automobiliste possde

    entre zro et N voitures

    Une voiture a un et un

    seul propritaire

    Chap. II - Modlisation

  • 8/2/2019 CoursBDRelationnelles_L3

    11/118Maude Manouvrier - Univ. Paris Dauphine

    Modlisation UML

    11

    Chap. II Modlisation

    Un automobiliste possdeentre zro et N voitures

    Une voiture a un et unseul propritaire

    Attention : petite libert prise avec UML, les attributs souligns ici ne correspondent

    pas des attributs drivs mais aux identificateurs (pour ne pas les oublier lors du

    passage au relationnel!!)

    Chap. II - Modlisation

  • 8/2/2019 CoursBDRelationnelles_L3

    12/118Maude Manouvrier - Univ. Paris Dauphine

    12

    Chap. II Modlisation

    Gnralisation/Spcialisation

    (E/A - Merise)

    Ensemble dentits

    gnralisantes

    Ensemble dentits

    spcialises

    Chap. II - Modlisation

  • 8/2/2019 CoursBDRelationnelles_L3

    13/118Maude Manouvrier - Univ. Paris Dauphine

    13

    Chap. II Modlisation

    Hritage (UML)

    Classe mre / Sur-classe

    Classes drives ou filles / sous-classe

    Chap. II - Modlisation

    A t (E/A M i )

  • 8/2/2019 CoursBDRelationnelles_L3

    14/118Maude Manouvrier - Univ. Paris Dauphine

    14

    p

    Agrgat (E/A - Merise)

    On peut nommer ou

    non lagrgat

    Chap. II - Modlisation

  • 8/2/2019 CoursBDRelationnelles_L3

    15/118

    Maude Manouvrier - Univ. Paris Dauphine15

    p

    Classe-Association (UML)

    On peut nommer ou non

    la classe-association

    Chap. II - Modlisation

  • 8/2/2019 CoursBDRelationnelles_L3

    16/118

    Maude Manouvrier - Univ. Paris Dauphine16

    p

    Entit Faible (E/A - Merise)

    Chaque salle a un

    numro unique dans un

    btiment donn

    Ex. Salle 1 du btiment A

    et Salle 1 du btiment C

    Pour distinguer une salle

    dune autre, il faut

    connatre le btiment

    auquel elle est rattache

    Appartient

    Chap. II - Modlisation

  • 8/2/2019 CoursBDRelationnelles_L3

    17/118

    Maude Manouvrier - Univ. Paris Dauphine17

    Association qualifie (UML)

    Chaque salle a un

    numro unique dans un

    btiment donn

    Ex. Salle 1 du btiment A

    et Salle 1 du btiment C

    Pour distinguer une salle

    dune autre, il faut

    connatre le btiment

    auquel elle est rattache

    Appartient

    1

    1

    Chap. II - Modlisation

    C i i ( )

  • 8/2/2019 CoursBDRelationnelles_L3

    18/118

    Maude Manouvrier - Univ. Paris Dauphine18

    Composition (UML)

    C t i tChap. II - Modlisation

  • 8/2/2019 CoursBDRelationnelles_L3

    19/118

    Maude Manouvrier - Univ. Paris Dauphine

    ContraintesContraintes dintgrit :

    toutes rgles implicites ou explicites que doivent

    suivre les donnes [Gar99]

    Contraintes d'entit: toute entit doit possder un

    identificateur

    Contraintes de domaine : les valeurs de certains

    attributs doivent tre prises dans un ensemble donn

    Contraintes d'unicit : une valeur d'attribut ne peut pas

    tre affecte deux fois deux entits diffrentesContraintes gnrales : rgle permettant de conserver

    la cohrence de la base de manire gnrale

    19

    Chap. II - Modlisation

  • 8/2/2019 CoursBDRelationnelles_L3

    20/118

    Maude Manouvrier - Univ. Paris Dauphine

    Exemples de contraintes

    Contraintes de domaine :

    "La fonction dun enseignant lUniversit prend sa valeur

    dans lensemble {vacataire, moniteur, ATER, MCF, Prof.,

    PRAG, PAST}."

    Contraintes d'unicit :"Un dpartement, identifi par son numro, a un nom unique

    (il ny a pas deux dpartements de mme nom)."

    Contraintes gnrales :

    "Un mme examen ne peut pas avoir lieu dans deux salles

    diffrentes la mme date et la mme heure. "

    20

    Dpendances fonctionnellesChap. II - Modlisation

  • 8/2/2019 CoursBDRelationnelles_L3

    21/118

    Dpendances fonctionnelles

    Un attribut (ou un groupe d'attributs) Y dpend

    fonctionnellement d'un attribut (ou grouped'attributs)Xsi :

    tant donn une valeur deX, il lui correspond une

    valeur unique de Y ( l'instant considr)

    XY : Ydpend fonctionnellement deX

    ouXdtermine YDclaration des dpendances au niveau du schma

    conceptuel21

    E l d d d f ti llChap. II - Modlisation

  • 8/2/2019 CoursBDRelationnelles_L3

    22/118

    Exemple de dpendances fonctionnelles

    22

    Marque, Type, Puissance, Anne Immatriculation

    TypeMarque

    EnseignantIDNom, Prnom, Position

    Nom, Prnom, Position, Enseignant_ID

    Ex. Le type "Twingo" sera toujours

    associ, dans la base de donnes, la

    marque "Renault".

    ImmatriculationMarque, Type, Puissance, Anne

    identificateur Tous les autres attributs

    Si un numro de tlphone est associ un seul enseignant :

    Telephone Enseignant_ID

    Chap III - Modle relationnel

  • 8/2/2019 CoursBDRelationnelles_L3

    23/118

    Maude Manouvrier - Univ. Paris Dau hine

    Chap III - Modle relationnel

    Domaine : ensemble de valeurs caractris par un nom

    Relation : sous-ensemble du produit cartsien d'une liste de domaines

    caractris par un nom unique

    reprsente sous forme de table deux dimensions

    colonne = un domaine du produit cartsien

    un mme domaine peut apparatre plusieurs fois

    ensemble de nuplets sans doublon

    Attribut : une colonne dans une relation

    caractris par un nom et dont les valeurs appartiennent un domaine

    les valeurs sont atomiques

    Nuplet : une ligne d'une relation

    correspondant un enregistrement, c--d une entit/instance de classe

    les nuplets d'une relation sont tous diffrents23

    Chap. III - Modle relationnel

  • 8/2/2019 CoursBDRelationnelles_L3

    24/118

    Maude Manouvrier - Univ. Paris Dau hine

    Exemple de relation

    24

    Nom dattribut

    Nuplets outuples

    La relationEnseignant

    NSS Nom Prnom Fonction

    273 Manouvrier Maude MCF

    Instances et schmaChap. III - Modle relationnel

  • 8/2/2019 CoursBDRelationnelles_L3

    25/118

    Maude Manouvrier - Univ. Paris Dau hine

    Instances et schma

    Instances de base de donnes :

    les nuplets (les valeurs) contenus dans la base uninstant donn

    Schma de base de donnes :

    ensemble de schmas de relation modlisation logique de la base de donnes laide

    du modle relationnel

    Schma de relation :liste dattributs et leurs domaines

    25

    Passage au relationnelChap. III - Modle relationnel

  • 8/2/2019 CoursBDRelationnelles_L3

    26/118

    Maude Manouvrier - Univ. Paris Dauphine

    Passage au relationnelTransformation des ensembles dentits :

    chaque ensemble d'entits/classesE

    une relation R dont le schma est celui de l'ensembled'entits/classe

    l'identificateur de E devient la cl de R

    chaque ensemble d'entits faibles/association qualifieE

    une relation R qui comprend tous les attributs de E +

    l'identificateur de l'ensemble d'entits fortes/classe associ(e)

    gnralisation-spcialisation/hritage

    l'ensemble d'entits gnralisante/classe mreE

    une relationR chaque ensemble d'entitsEi spcialis/classe fille une relation Ri dans laquelle l'identifiant est de mme domaineque l'identifiant de E

    26

    Chap. III - Modle relationnel

  • 8/2/2019 CoursBDRelationnelles_L3

    27/118

    Maude Manouvrier - Univ. Paris Dau hine

    Transformation des ensemblesdassociations E/A

    Accident ( Auto_ID, Nom, Prnom, Adresse,

    Immatriculation, Marque, Type, Puissance, Anne )

    27

    Accidente lors

    de la location

    On peut choisir lun ou lautre comme cl primaire

    Automobiliste ( Auto_ID, Nom, Prnom, Adresse)

    Voiture (Immatriculation, Marque, Type, Puissance, Anne )

    Comment faire le lien ?

    Chap. III - Modle relationnel

    T f i d bl

  • 8/2/2019 CoursBDRelationnelles_L3

    28/118

    Maude Manouvrier - Univ. Paris Dau hine28

    Accidente ( Auto_ID, Nom, Prnom, Adresse,

    Immatriculation, Marque, Type, Puissance, Anne )

    Transformation des ensemblesdassociations UML

    On peut choisir lun ou lautre comme cl primaire

    Accidente lors de la location

    Chap. III - Modle relationnel

    T f i d bl

  • 8/2/2019 CoursBDRelationnelles_L3

    29/118

    Maude Manouvrier - Univ. Paris Dau hine29

    Transformation des ensemblesdassociations E/A

    ,

    Automobiliste ( Auto_ID, Nom, Prnom, Adresse )

    Voiture ( Immatriculation, Marque, Puissance, Type, Anne )Voiture ( Immatriculation, Marque, Puissance, Type, Anne,#Auto_ID )

    NB : #Auto_ID fait rfrence Auto_ID de Automobiliste

    ou 1:N

    ou 0:1

    Chap. III - Modle relationnel

    T f ti d bl

  • 8/2/2019 CoursBDRelationnelles_L3

    30/118

    Maude Manouvrier - Univ. Paris Dau hine30

    Automobiliste ( Auto_ID, Nom, Prnom, Adresse )

    Voiture ( Immatriculation, Marque, Puissance, Type, Anne,#Auto_ID )

    NB : #Auto_ID fait rfrence Auto_ID de Automobiliste

    Transformation des ensemblesdassociations UML

    ou 1..*ou 0..1

    Chap. III - Modle relationnel

    T f ti d bl

  • 8/2/2019 CoursBDRelationnelles_L3

    31/118

    Maude Manouvrier - Univ. Paris Dau hine31

    Automobiliste ( Auto_ID, Nom, Prnom, Adresse )

    Voiture ( Immatriculation, Marque, Puissance, Type, Anne )

    Transformation des ensemblesdassociations E/A

    Location ( #Auto_ID, #Immatriculation, Date ) ou

    Location ( Loc_ID, #Auto_ID, #Immatriculation, Date )

    ou 1:N

    ou 0:1

    ou 1:M

    ou 0:1

    Chap. III - Modle relationnel

    T f ti d bl

  • 8/2/2019 CoursBDRelationnelles_L3

    32/118

    Maude Manouvrier - Univ. Paris Dau hine32

    Automobiliste ( Auto_ID, Nom, Prnom, Adresse )

    Voiture ( Immatriculation, Marque, Puissance, Type, Anne )Location ( #Auto_ID, #Immatriculation, Date ) ou

    Location ( Loc_ID, #Auto_ID, #Immatriculation, Date )

    Transformation des ensemblesdassociations UML

    ou 1..*

    ou 0..1

    ou 1..*

    ou 0..1

    Chap. III - Modle relationnel

    Transformation des concepts

  • 8/2/2019 CoursBDRelationnelles_L3

    33/118

    Maude Manouvrier - Univ. Paris Dau hine33

    NB : #Personne_ID dansEnseignant et Etudiant font

    rfrence Personne_ID dans

    Personne

    Transformation des conceptsGnralisation-Spcialisation / Hritage

    Enseignant ( #Personne_ID, Position )Etudiant ( #Personne_ID, Adresse,

    Ville ...)

    Personne ( Personne_ID,

    Nom,Prnom, Tlphone ... )

    Solution possible (une autre seradonne en cours) :

    Chap. III - Modle relationnel

    T f ti d tit f ibl E/A

  • 8/2/2019 CoursBDRelationnelles_L3

    34/118

    Maude Manouvrier - Univ. Paris Dau hine34

    Transformation des entits faibles E/A

    Btiment ( Btiment_ID, ... )

    NB : Une salle est identifie par le

    couple (Numro,#Btiment_ID)

    #Btiment_ID fait rfrence

    Btiment_ID de Btiment

    Salle ( Numro, #Btiment_ID, Capacit)

    Chap. III - Modle relationnel

    T f ti d i ti

  • 8/2/2019 CoursBDRelationnelles_L3

    35/118

    Maude Manouvrier - Univ. Paris Dau hine35

    Transformation des associationsqualifies UML

    Btiment ( Btiment_ID, ... )

    Salle ( Numro, #Btiment_ID, Capacit)

    NB : Une salle est identifie par le

    couple (Numro,#Btiment_ID) ;

    #Btiment_ID fait rfrence

    Btiment_ID de Btiment

    1

    Chap. III - Modle relationnel

    Transformation de la composition

  • 8/2/2019 CoursBDRelationnelles_L3

    36/118

    Maude Manouvrier - Univ. Paris Dau hine36

    Voi

    Voiture ( Immatriculation, Marque,

    Puissance, Type, Anne )

    Moteur (Numro, #Immatriculation,

    Chevaux)

    PotEchappement (Num_Srie,

    #Immatriculation, DateInstallation)

    Transformation de la compositionUML

    Dpendances fonctionnellesChap. III - Modle

    relationnel

  • 8/2/2019 CoursBDRelationnelles_L3

    37/118

    Maude Manouvrier - Univ. Paris Dauphine

    p

    Ne pas oublier de dfinir les DF :

    37

    Accidente ( Auto_ID, Nom, Prnom, Adresse,Immatriculation, Marque, Type, Puissance, Anne )

    Immatriculation Marque, Type, Puissance, Anne

    Type Marque

    Voiture ( Immatriculation, Marque, Puissance, Type, Anne,

    Auto_ID )ImmatriculationAuto_ID

    + les Dpendances fonctionnelles de Voiture

    Location ( Auto_ID, Immatriculation, Date )

    Pas de dpendance non triviale

    Auto_ID Immatriculation et ImmatriculationAuto_ID

    Auto_ID Nom, Prnom, Adresse

    Auto_ID Immatriculation

    Intgrit structurelleChap. III - Modle

    relationnel

  • 8/2/2019 CoursBDRelationnelles_L3

    38/118

    Maude Manouvrier - Univ. Paris Dauphine

    g Unicit des cls

    ensemble minimal d'attributs dont la connaissance des

    valeurs permet d'identifier un nuplet unique de la relationconsidre

    R a pour clKsi : t1, t2 nuplets dune instance deRt1.K t2.K

    Contraintes de rfrence

    contrainte rfrentielle : contrainte d'intgrit portant surune relation R qui consiste imposer que la valeur d'ungroupe d'attributs apparaissent comme valeur de cl dans

    une autre relation

    cl trangre : un groupe d'attributs qui doit apparatrecomme cl dans une autre relation

    38

    Cl /Cl minimale /SurclChap. III - Modle

    relationnel

  • 8/2/2019 CoursBDRelationnelles_L3

    39/118

    Maude Manouvrier - Univ. Paris Dauphine 39

    Accident ( Auto_ID, Nom, Prnom, Adresse,

    Immatriculation, Marque, Type, Puissance, Anne )Cls primaires possibles : Auto_ID ou Immatriculation

    Surcl: (Auto_ID, Immatriculation) + dautres attributs

    Voiture ( Immatriculation, Marque, Puissance, Type, Anne,Auto_ID )

    Cl primaire : Immatriculation

    Surcl: (Immatriculation, Marque, Puissance, Type, Anne,Auto_ID)

    Location ( Auto_ID, Immatriculation, Date )

    Cl primaire : (Auto_ID, Immatriculation, Date)

    Intgrit structurelleChap. III - Modle

    relationnel

  • 8/2/2019 CoursBDRelationnelles_L3

    40/118

    Maude Manouvrier - Univ. Paris Dauphine

    g

    Valeur nulle

    valeur conventionnelle introduite dans une relation pourreprsenter une information inconnue ou inapplicable

    tout attribut peut prendre une valeur nulle except les

    attributs de la cl primaire (contrainte dentit)

    Contraintes de domaine

    contrainte d'intgrit qui impose qu'une colonne d'une

    relation doit comporter des valeurs vrifiant une assertion

    logique

    40

    Langages dinterrogationChap. III - Modlerelationnel

  • 8/2/2019 CoursBDRelationnelles_L3

    41/118

    Maude Manouvrier - Univ. Paris Dauphine

    g g g

    Algbre relationnelle

    Pour comprendre comment le SGBD excute les requtes

    Calcul relationnel variable nuplet

    La base logique du langage SQL

    Calcul relationnel variable domaine

    La base logique pour les langages de requtes graphiques

    SQL (Structured Query Langage)

    Ces langages sont quivalents : ils permettent de

    dsigner les mmes ensembles de donnes41

    Chap IV - Algbre relationnelle

  • 8/2/2019 CoursBDRelationnelles_L3

    42/118

    Maude Manouvrier - Univ. Paris Dau hine

    p gOprations unaires :

    slection des nuplets satisfaisant un certain prdicat

    Etudiant(Etudiant_ID, Nom, Prnom, Rue, Ville, Code-Postal,Tlphone, Fax, Email, NumAnnes)

    (Ville= Paris ) (Etudiant)

    (Ville= Paris ) (NumAnnes 2) (Etudiant)

    projection : limination de certains attributs dune relation

    Nom,Prnom(Etudiant)

    Nom,Prnom( (Ville= Paris ) (Etudiant) )

    42

    Exemples de rsultats doprations unaires

  • 8/2/2019 CoursBDRelationnelles_L3

    43/118

    Maude Manouvrier - Univ. Paris Dau hine43

    RelationEnseignant

    :

    Rsultat de la slection (grade=MCF) (Enseignant) :

    Rsultat de la projection

    Nom,Prnom(Enseignant) :Rsultat de la requte

    Nom,Prnom ((grade=MCF) (Enseignant)) :

    Oprations binairesChap. IV - Algbrerelationnelle

  • 8/2/2019 CoursBDRelationnelles_L3

    44/118

    Maude Manouvrier - Univ. Paris Dau hine

    Union : rassemblement des nuplets de 2 relations compatibles

    Enseignant( Enseignant_ID, Dpartement_ID, Nom, Prnom, Grade,

    Tlphone, Fax, Email )

    Nom,Prnom(Etudiant) Nom,Prnom(Enseignant)

    Diffrence : des nuplets de 2 relations compatibles

    Nom,Prnom(Enseignant) - Nom,Prnom(Etudiant)

    Produit cartsien : combinaison des nuplets de 2 relations

    Dpartement(Dpartement_ID, Nom_Dpartement)

    Produit cartsien de Enseignant Departement a pour schma :(Enseignant_ID, Enseignant.Dpartement_ID, Nom, Prnom, Grade,

    Tlphone, Fax, Email, Dpartement.Dpartement_ID,

    Nom_Dpartement) 44

    Exemple dunion et de diffrence

    Chap. IV - Algbrerelationnelle

  • 8/2/2019 CoursBDRelationnelles_L3

    45/118

    Maude Manouvrier - Univ. Paris Dau hine

    Exemple dunion et de diffrence

    45

    Nom,Prnom(Etudiant) Nom,Prnom(Enseignant) :

    Nom,Prnom(Enseignant) - Nom,Prnom(Etudiant) :

    Produit cartsienChap. IV - Algbrerelationnelle

  • 8/2/2019 CoursBDRelationnelles_L3

    46/118

    Maude Manouvrier - Univ. Paris Dauphine46

    NSS Nom Prnom Grade Dept

    12345 Manouvrier Maude MCF 1

    45678 Toto Titi Prof 2

    La relationEnseignant

    Dept_ID Nom_Dept_

    1 Info

    2 Math

    La relationDpartement

    NSS Nom Prnom Grade Dept Dept_ID Nom_Dept

    12345 Manouvrier Maude MCF 1 1 Info

    45678 Toto Titi Prof 2 1 Info

    12345 Manouvrier Maude MCF 1 2 Math45678 Toto Titi Prof 2 2 Math

    La relationEnseignantDpartement

    Autres oprationsChap. IV - Algbrerelationnelle

  • 8/2/2019 CoursBDRelationnelles_L3

    47/118

    Maude Manouvrier - Univ. Paris Dauphine47

    Renommage :

    A,B, (r AA, B B, ) Intersection :

    r s = r - ( r - s ) Thta-jointure :

    r s = (r s) Jointure naturelle : r(R) et s(S) avec R S = {A1,A2, , An}

    r s = R S ((r.A1=s.A1) (r.A2=s.A2) (r.An=s.An) (r s))

    Exemple de renommage et dintersection

    Chap. IV - Algbrerelationnelle

  • 8/2/2019 CoursBDRelationnelles_L3

    48/118

    Maude Manouvrier - Univ. Paris Dauphine

    Exemple de renommage et d intersection

    48

    Last_Name,First_Name(Enseignant Nom Last_Name, Prnom First_Name ) :

    Nom,Prnom(Enseignant) Nom,Prnom(Etudiant) :

    Exemple de produit cartsienChap. IV - Algbrerelationnelle

  • 8/2/2019 CoursBDRelationnelles_L3

    49/118

    Maude Manouvrier - Univ. Paris Dauphine

    La relationEnseignant:

    La relationDepartement:

    EnseignementDepartement:

    49

    Exemple de jointureChap. IV - Algbrerelationnelle

  • 8/2/2019 CoursBDRelationnelles_L3

    50/118

    Maude Manouvrier - Univ. Paris Dauphine

    La relationEnseignant:

    La relationDepartement:

    EnseignementDepartement_IDDepartement:

    50

    DivisionChap. IV - Algbrerelationnelle

  • 8/2/2019 CoursBDRelationnelles_L3

    51/118

    Maude Manouvrier - Univ. Paris Dauphine51

    Requte qui contient le terme pour tous

    Soient r(R) et s(S) avec S R

    la relation r s a pour schma R - Sun nuplet tappartient r s si :

    t

    R - S (r) ts nuplet de s, trdans r qui satisfait :

    tr(S) = ts(S)

    tr(R-S) = t

    r s = R - S (r) - R - S [ ( R - S (r) s ) - R - S, S (r) ]

    DivisionChap. IV - Algbrerelationnelle

  • 8/2/2019 CoursBDRelationnelles_L3

    52/118

    Maude Manouvrier - Univ. Paris Dauphine52

    La relationEnseignement:

    La relationInscription :

    Etudiant_ID, Enseignement_ID, Departement_ID (Inscription) Enseignement_ID, Departement_ID (Enseignement) :

    Contraintes et DFChap. IV - Algbrerelationnelle

  • 8/2/2019 CoursBDRelationnelles_L3

    53/118

    Maude Manouvrier - Univ. Paris Dauphine53

    Expressions des contraintes dintgrit rfrentielle :

    Dpartement_ID(Enseignant) Dpartement_ID(Dpartement)

    Dpartement_ID(Dpartement) - Dpartement_ID(Enseignant) =

    Expressions des dpendances fonctionnelles :

    XYr et t1, t2 r on a :

    x(t1) =x(t2)Y(t1) =Y(t2)

    Chap V - Calcul relationnel

  • 8/2/2019 CoursBDRelationnelles_L3

    54/118

    Maude Manouvrier - Univ. Paris Dauphine

    Langage dclaratif (ou non-procdural): le quoi

    Algbre relationnelle (procdural) : le comment Calcul variable nuplet :

    { t | P(t) } avec P(t) tel que :

    r(t) : t est un nuplet de rt.att1 = valeur1

    t.att1 > s.att2 ...

    {t | Etudiant(t) (t.Ville=Paris ) (t.NumAnnes 2)}{t.Nom, t.Prnom | Etudiant(t) (t.Ville=Paris) }

    54

    QuantificateursChap. V - Calcul variable nuplet

  • 8/2/2019 CoursBDRelationnelles_L3

    55/118

    Maude Manouvrier - Univ. Paris Dauphine 55

    t (Q(t)) : il existe un nuplet dans la base qui vrifie Q(t)

    t (Q(t)) : pour tous les nuplets, Q(t) est vrai

    Variable lie

    Variable libre

    Expression saine

    Expression non saine

    Expression des oprateurs algbriques

    Chap. V - Calcul variable nuplet

  • 8/2/2019 CoursBDRelationnelles_L3

    56/118

    Maude Manouvrier - Univ. Paris Dauphine

    Expression des oprateurs algbriques

    56

    (r) :

    A1,A2, , An (r) :

    r s :

    r - s :

    r s :

    r s :

    r s :

    DivisionChap. V - Calcul variable nupletDivision :

  • 8/2/2019 CoursBDRelationnelles_L3

    57/118

    Maude Manouvrier - Univ. Paris Dau hine57

    Livre(ISBN, Titre, Editeur)

    Emprunt(EmpruntID, ISBN, DateEmprunt,EtudiantID)

    Etudiant(EtudiantID, Nom, Prenom)

    Quels sont les noms et prnoms des tudiants ayant emprunt tous les livres ?

    { t.Nom, t.Prenom / Etudiant(t) [ u Livre ( v Emprunt(v)

    (v.Etudiant_ID=t.Etudiant_ID) (v.ISBN=u.ISBN ))

    ]

    }

    La requte retourne les valeurs des att. Nomet Prenomdes nuplets tde la relation Etudianttq :

    { t.Nom, t.Prenom / Etudiant(t) [ u ( Livre(u) ) v( v Emprunt(v)

    (v.Etudiant_ID=t.Etudiant_ID) (v.ISBN=u.ISBN )) ]

    ]

    }

    Quel que soit un nuplet udans Livre (i.e. quel que soi

    un livre)

    Quel que soit u, u nest pas

    dans Livre ou (u est dans

    Livre et ) il existe v

    Il existe un nuplet vdans Emprunt

    associant le livre u ltudiantt

    Calcul variable domaineChap. V - Calcul relationnel

  • 8/2/2019 CoursBDRelationnelles_L3

    58/118

    Maude Manouvrier - Univ. Paris Dauphine 58

    { | P( x1 ,x2 , , xn )}

    avecx1,x2, xn variable domaine etP formule

    Exemples :

    Marin(MiD, Nom, Grade, Date-Nais)Bateau(Bid, Bnom,Couleur)Reservation(Mid,Bid,Date)

    Nom et grade des marins : { \ id,dn Marin(id,n,g,dn) }Marins ayant rserv tous les bateaux :

    { < i, n, g, dn > \ Marin(i,n,g,dn) [ b, bn, c Bateau(b,bn,c)v ( m, br, dReservation(m,br,d) (m = i) (br =b) ) ] }

    QBEChap. V - Calcul relationnel

  • 8/2/2019 CoursBDRelationnelles_L3

    59/118

    Maude Manouvrier - Univ. Paris Dauphine 59

    Query By Exemple :

    langage de requte graphique

    mise en uvre du calcul variable domaine

    Oracle Query Builder

    Etape 1 : slection des

    relations de la requte

    QBEChap. V - Calcul relationnel

  • 8/2/2019 CoursBDRelationnelles_L3

    60/118

    Maude Manouvrier - Univ. Paris Dauphine 60

    Etape 2 :

    slection desattributs de

    la requte

    QBEChap. V - Calcul relationnel

  • 8/2/2019 CoursBDRelationnelles_L3

    61/118

    Maude Manouvrier - Univ. Paris Dauphine 61

    Etape 3 :

    possibilitdappliquer

    des fonction

    dagrgation

    sur les nupletsrsultats

    Expression des contraintes en logiqueChap. V - Calcul relationnel

  • 8/2/2019 CoursBDRelationnelles_L3

    62/118

    des prdicats

    62

    Agence(nom_banque,ville ...)Emprunt(num_emprunt,nom_banque,num_client, montant ...)

    Compte(nom_banque,num_client,num_compte,solde ...)

    Chaque emprunteur possde un compte en banque dans l'agence

    dont le solde est au minimum gal la moiti de son emprunt

    { (e Emprunt(e) (c Compte(c) (c.num_client=e.num_client) (c.nom_banque = e.nom_banque) ( c.solde (e.montant / 2)

    )

    )

    }

    Chap VI - Algbre relationnelle tendue

  • 8/2/2019 CoursBDRelationnelles_L3

    63/118

    Maude Manouvrier - Univ. Paris Dauphine

    Projection gnralise :

    ajout dexpressions arithmtiques dans une projectionNom_Client, (Crdit - Dbit) (Compte_en_Banque )

    Jointure externe (outer-join) :

    jointure externe gauche : ]jointure externe droite : [

    jointure externe : ][

    R ]

    S

    R

    S et conservation des attributs des nuplets deR qui ne joignent avec aucun nuplet de S (les valeurs des

    attributs de S sont mises NULL)63

    Chap. VI - Algbre relationnelle tendue

    N E l Vill N E l Fili l S l i

    Personnel Employ

  • 8/2/2019 CoursBDRelationnelles_L3

    64/118

    Maude Manouvrier - Univ. Paris Dauphine 64

    Nom_Employ Ville

    Tom Marseille

    Jerry Paris

    Alex LimogesMarthe Perpignan

    Nom_Employ Filiale Salaire

    Tom SUD_EST 10000

    Jerry IDF 25000

    Sophie IDF 15000Marthe SUD_OUEST 12000

    Nom_Employ Ville Filiale Salaire

    Tom Marseille SUD_EST 10000

    Jerry Paris IDF 25000

    Alex Limoges NULL NULL

    Marthe Perpignan SUD_OUEST 12000

    Nom_Employ Ville Filiale Salaire

    Tom Marseille SUD_EST 10000

    Jerry Paris IDF 25000Sophie NULL IDF 15000

    Marthe Perpignan SUD_OUEST 12000

    Personnel

    ]

    Employ

    Personnel

    [

    Employ

    Fonction dagrgationChap. VI - Algbre relationnelle tendue

  • 8/2/2019 CoursBDRelationnelles_L3

    65/118

    Maude Manouvrier - Univ. Paris Dau hine65

    Somme des places disponibles dans lUniversit

    SumCapacit(Salle ) Nombre moyen de places disponibles dans les salles de lUniversit

    AvgCapacit (Salle)

    Nombre dtudiants lUniversit

    CountEtudiant_ID (Etudiant) Capacit de la plus petite salle

    MinCapacit(Salle)

    Nombre denseignants par dpartements :

    Nom_Dpartement CountEnseignant_ID(Enseignant Dpartement)

    Mise jour de la baseChap. VI - Algbre relationnelle tendue

  • 8/2/2019 CoursBDRelationnelles_L3

    66/118

    Maude Manouvrier - Univ. Paris Dau hine66

    Insertion

    Salle Salle {( B , 038 , 15)} Suppression

    Salle Salle - Salle 10 (Salle) Mise jour : utilisation de la projection gnralise

    rEtudiant_ID [(Nom= Dupont ) (Prnom= Jacques ) (Etudiant)]Etudiant (Etudiant.Etudiant_ID r.Etudiant_ID) (Etudiant)

    Etudiant_ID, Nom, Prnom, Rue, Ville, Code-Postal,

    Tlphone 45 12 45 86 , Fax, Email, NumAnnes[(Etudiant.Etudiant_ID =r.Etudiant_ID) (Etudiant) ]

    Mise jour dutlphone

    VueChap. VI - Algbre relationnelle tendue

  • 8/2/2019 CoursBDRelationnelles_L3

    67/118

    Maude Manouvrier - Univ. Paris Dau hine67

    Table virtuelle dont le schma et les instances sont drivs dela base relle par une requte et qui est utilise pour :

    Cacher certaines informations un groupe dutilisateurs

    Faciliter laccs certaines donnes

    create view nom_vue as < requte >

    Exemple :

    create view Info_Non_Confidentielle_Etudiant

    as Etudiant_ID, Nom, Prnom, Email (Etudiant)

    Chap VII - SQL

    St t d Q L

  • 8/2/2019 CoursBDRelationnelles_L3

    68/118

    Maude Manouvrier - Univ. Paris Dauphine

    Structured Query Language

    SQL2 : standard adopt en 1992

    SQL3 : extension de SQL2 avec "gestion" dobjets

    SQL :

    Langage de Manipulation de Donnes (DML) :interroger et modifier les donnes de la base

    Langage de Dfinition de Donnes (DDL) : dfinir le

    schma de la base de donnes

    Langage de contrle daccs aux donnes

    68

    Bibliographie SQL2 Application Oracle Access et RDB

    Chap. VII - SQL

  • 8/2/2019 CoursBDRelationnelles_L3

    69/118

    Maude Manouvrier - Univ. Paris Dauphine

    SQL2 - Application Oracle, Access et RDB

    Pierre DELMAL, 2me Edition, De Boeck Universit, 1998

    BU: 005.74 SQL

    SQL Pour Oracle (avec exercices corrigs)

    Christian Soutou, Eyrolles, 2005BU: 005.72 SOU

    Initiation SQL (cours et exercices corrigs)

    Philip J. Pratt, Eyrolles,2001BU : 005.72 SQL

    SQL (cours et exercices corrigs)

    Frdric Brouad et Christian Soutou, Coll. Synthex, Pearson

    Education, 2005BU : 005.72 SQL

    Oracle PL/SQL - Prcis & concis

    Steven Feuerstein, Bill Pribyl et Chip Dawes, O Reilly, 2000

    69

    DMLChap. VII - SQL

  • 8/2/2019 CoursBDRelationnelles_L3

    70/118

    Maude Manouvrier - Univ. Paris Dau hine70

    SELECT [DISTINCT] *

    FROM table_1 [synonyme_1], table_2 [synonyme_1], [WHERE prdicat_1

    AND [ou OR] prdicat_2 ]

    SELECT [DISTINCT] exp_1 [AS nom_1], exp_2 ...

    FROM table_1 [synonyme_1], table_2 [synonyme_1],

    [WHERE prdicat_1

    AND [ou OR] prdicat_2 ]

    DMLChap. VII - SQL

  • 8/2/2019 CoursBDRelationnelles_L3

    71/118

    Maude Manouvrier - Univ. Paris Dau hine71

    SELECT Nom, Prnom

    FROM EtudiantWHERE Ville = Paris ;

    SELECT Nom, Prnom

    FROM Etudiant

    WHERE Ville = Paris

    AND Nom

    LIKE _AR% ;

    SELECT Nom, PrnomFROM Etudiant

    WHERE Fax IS NULL;

    SELECT Intitul,

    (NbSeances*3) AS NbHeuresFROM Cours

    WHERE (NbSeances*3)

    BETWEEN 24 AND 27 ;

    SELECT Nom, Prnom

    FROM Enseignant

    WHERE Dpartement_ID IN

    ( INFO , MATH , ECO )

    DMLPrdicats du WHERE de la forme :

    Chap. VII - SQL

  • 8/2/2019 CoursBDRelationnelles_L3

    72/118

    Maude Manouvrier - Univ. Paris Dau hine72

    Prdicats du WHERE de la forme :

    exp1 = exp2 exp op ANY (SELECT )

    exp1 != exp2 exp op ALL (SELECT )exp1 > exp2 avec op tel que =, !=, ...

    exp1 < exp2

    exp1 = exp2 exp NOT IN (SELECT )exp1 BETWEEN exp2 AND exp3

    exp1 LIKE exp2

    exp1 IN (exp2, exp3, )

    exp1 NOT IN (exp2, exp3, )exp1 IS NULL

    exp1 IS NOT NULL

    SELECT Intitul,

    FROM Cours

    WHERE NbSeances

  • 8/2/2019 CoursBDRelationnelles_L3

    73/118

    Maude Manouvrier - Univ. Paris Dau hine73

    Clause EXISTS :

    Retourne VRAI si au moins un nuplet est renvoy par la requte FAUX si aucun nuplet nest retourn.

    La valeur NULL na aucun effet sur le boolen rsultat

    SELECT Nom, PrnomFROM Enseignant E

    WHERE NOT EXISTS

    ( SELECT *

    FROM Reservation_Salle SWHERE S.Enseignant_ID = E.Enseignant_ID

    );

    DMLChap. VII - SQL

    Fonctions de groupe :

    COUNT MIN MAX AVG SUM ORDER BY GROUP BY

  • 8/2/2019 CoursBDRelationnelles_L3

    74/118

    Maude Manouvrier - Univ. Paris Dau hine74

    COUNT, MIN, MAX, AVG, SUM, ORDER BY, GROUP BY

    SELECT COUNT(*)FROM Etudiant ;

    SELECT AVG(Capacit), SUM(Capacit)

    FROM Salle ;

    SELECT Dpartement_ID, Nom, Prnom

    FROM Enseignant

    ORDER BY Dpartement_ID DESC, Nom, Prnom ;

    SELECT Dpartement_ID, COUNT(*)FROM Rservation_Salle

    GROUP BY Dpartement_ID HAVING COUNT(*) >=4 ;

    DMLChap. VII - SQL

    J i t

  • 8/2/2019 CoursBDRelationnelles_L3

    75/118

    Maude Manouvrier - Univ. Paris Dau hine75

    Jointure :

    SELECT Nom, Prnom, Nom_DpartementFROM Enseignant E, Dpartement D

    WHERE E.Dpartement_ID = D.Dpartement_ID ;

    Jointure externe : sous OracleSELECT Nom, Prnom, Nom_Dpartement

    FROM Enseignant E, Dpartement D

    WHERE E.Dpartement_ID = D.Dpartement_ID (+);

    Sil existe des enseignants attach aucun dpartement, la valeur deDpartement_ID sera NULL.

    En SQL2 : [RIGHT | LEFT | FULL] OUTER JOIN

    DMLChap. VII - SQL

    Oprateurs ensemblistes :

  • 8/2/2019 CoursBDRelationnelles_L3

    76/118

    Maude Manouvrier - Univ. Paris Dau hine76

    SELECT Nom,Prnom FROM Enseignant WHERE Dpartement_ID = INFO

    INTERSECTSELECT Nom,Prnom FROM Enseignant WHERE Dpartement_ID = MATH

    SELECT Nom,Prnom FROM Enseignant WHERE Dpartement_ID = INFO

    UNION

    SELECT Nom,Prnom FROM Enseignant WHERE Dpartement_ID = MATH ORDER BY Nom,Prnom

    SELECT Nom,Prnom FROM Enseignant WHERE Dpartement_ID = INFO

    MINUS

    SELECT Nom,Prnom FROM Enseignant WHERE Dpartement_ID = MATH

    MINUS = EXCEPT en standard SQL2

    DMLChap. VII - SQL

    Division :Livre(ISBN, Titre, Editeur)

  • 8/2/2019 CoursBDRelationnelles_L3

    77/118

    Maude Manouvrier - Univ. Paris Dau hine77

    Emprunt(EmpruntID,ISBN, DateEmprunt,EtudiantID)

    Etudiant(EtudiantID,Nom, Prenom)

    Quels livres ont t emprunts par tous les tudiants?

    {t.Titre / Livre(t) [ u ( Etudiant (u) ) v( v Emprunt(v)

    (v.Etudiant_ID=u.Etudiant_ID) (v.ISBN=t.ISBN ))

    ]

    }

    SELECT t.Titre FROM Livre t WHERE NOT EXISTS

    ( SELECT * FROM Etudiant u WHERE NOT EXISTS

    ( SELECT * FROM Emprunt v

    WHERE u.EtudiantID=v.EtudiantID AND

    v.ISBN=t.ISBN

    )

    ) ;

    {t.Titre / Livre(t) [ u Etudiant (u) ( v Emprunt(v)

    (v.Etudiant_ID=u.Etudiant_ID) (v.ISBN=t.ISBN ))

    ]}

    Il ny a pas de mot-cl"quel que soit " en SQL2

    DMLChap. VII - SQL

    Insertion

  • 8/2/2019 CoursBDRelationnelles_L3

    78/118

    Maude Manouvrier - Univ. Paris Dau hine78

    INSERT INTO table(col1, col2, coln)

    VALUES (val1, val2, valn)

    INSERT INTO table(col1, col2, coln)

    SELECT

    Suppression

    DELETE FROM tableWHERE prdicat

    Mise jour

    UPDATE table

    SET col1 = exp1, col2 = exp2 WHERE prdicat

    Transactions : COMMIT, ROLLBACK [TO], SAVE POINT

    Sous Oracle

    DDLChap. VII - SQL

    CREATE TABLE table (col1 type 1 [NOT NULL] ,

    l2 t 2 [NOT NULL]

  • 8/2/2019 CoursBDRelationnelles_L3

    79/118

    Maude Manouvrier - Univ. Paris Dau hine79

    col2 type2 [NOT NULL]

    )

    Contraintes :

    CONSTRAINTnom_contrainte

    PRIMARY KEY (liste attributs cl primaire)

    | NOT NULL immdiatement aprs la dclaration de lattribut

    | CHECK (condition) aprs la dclaration de lattribut

    | UNIQUE aprs la dclaration de lattribut

    | FOREIGN KEY (cl trangre)

    REFERENCES nom_table (liste-colonne)

    CREATE TABLE table

    AS SELECT ...

    DDLChap. VII - SQL

    CREATE TABLE Enseignant

    (

  • 8/2/2019 CoursBDRelationnelles_L3

    80/118

    Maude Manouvrier - Univ. Paris Dau hine80

    (

    Enseignant_ID integer,

    Departement_ID integer NOT NULL,

    Nom varchar(25) NOT NULL,

    Prenom varchar(25) NOT NULL,

    Grade varchar(25)

    CONSTRAINT CK_Enseignant_Grade

    CHECK (Grade IN ('Vacataire', 'Moniteur','ATER', 'MCF', 'PROF')),

    Telephone varchar(10) DEFAULT NULL,

    Fax varchar(10) DEFAULT NULL,

    Email varchar(100) DEFAULT NULL,

    CONSTRAINT PK_Enseignant PRIMARY KEY (Enseignant_ID),

    CONSTRAINT "FK_Enseignant_Departement_ID"

    FOREIGN KEY (Departement_ID)REFERENCES Departement (Departement_ID)

    ON UPDATE RESTRICT ON DELETE RESTRICT

    );

    Contrainte

    de domaine

    Dfinition de la

    cl primaire

    Dfinition dune cltrangre

    CREATE TABLE Reservation

    (

    Reservation_ID integer,

    Batiment varchar(1) NOT NULL,

    Numero Salle varchar(10) NOT NULL

  • 8/2/2019 CoursBDRelationnelles_L3

    81/118

    81

    Numero_Salle varchar(10) NOT NULL,

    Enseignement_ID integer NOT NULL,

    Departement_ID integer NOT NULL,

    Enseignant_ID integer NOT NULL,

    Date_Resa date NOT NULL DEFAULT CURRENT_DATE,

    Heure_Debut time NOT NULL DEFAULT CURRENT_TIME,

    Heure_Fin time NOT NULL DEFAULT '23:00:00',

    Nombre_Heures integer NOT NULL,

    CONSTRAINT PK_Reservation PRIMARY KEY (Reservation_ID),

    CONSTRAINT "FK_Reservation_Salle" FOREIGN KEY (Batiment,Numero_Salle) REFERENCES

    Salle (Batiment,Numero_Salle) ON UPDATE RESTRICT ON DELETE RESTRICT,

    CONSTRAINT "FK_Reservation_Enseignement" FOREIGN KEY (Enseignement_ID,Departement_ID)

    REFERENCES Enseignement (Enseignement_ID,Departement_ID) ON UPDATE RESTRICT ON

    DELETE RESTRICT,

    CONSTRAINT "FK_Reservation_Enseignant" FOREIGN KEY (Enseignant_ID) REFERENCES

    Enseignant (Enseignant_ID) ON UPDATE RESTRICT ON DELETE RESTRICT,CONSTRAINT CK_Reservation_Nombre_Heures CHECK (Nombre_Heures >=1),

    CONSTRAINT CK_Reservation_HeureDebFin

    CHECK (Heure_Debut < Heure_Fin)

    );

    DDLChap. VII - SQL

    CREATE ASSERTION

    [ {BEFORE COMMIT |

  • 8/2/2019 CoursBDRelationnelles_L3

    82/118

    Maude Manouvrier - Univ. Paris Dau hine82

    [ {BEFORE COMMIT |

    AFTER {INSERT | DELETE | UPDATE[OF (Attributs)]} ON

    } ]

    CHECK

    [FOR [EACH ROW OF] ]

    CREATE ASSERTION CA_Place_Universit

    BEFORE COMMIT

    CHECK( (SELECT SUM(Capacit) FROM Salle)

    >= (SELECT COUNT(*) FROM Etudiant))

    DDLChap. VII - SQL

    CREATE [OR REPLACE] TRIGGER nom {BEFORE | AFTER}

    t d l h ON t bl

  • 8/2/2019 CoursBDRelationnelles_L3

    83/118

    83

    vnement_dclencheur ON nom_table

    [FOR EACH ROW]

    [WHEN (condition) ]

    bloc PL/SQLsous Oracle

    | inst_de_suppr | inst_de_modif | instr_d_ajout | ERROR en SQL2

    vnement_dclencheur = INSERT, UPDATE, DELETE

    Dclencheur deniveau instruction : pas de clause FOR EACH ROW

    Dclencheur deniveau ligne : variables liens :new et :old

    INSERT : valeurs insrer dans :new.nom_colonne

    UPDATE : valeur originale dans :old.nom_colonne, nouvelle valeur dans

    :new.nom_colonne

    DELETE : valeur en cours de suppression :old.nom_colonne

    DDLChap. VII - SQL

    CREATE OR REPLACE TRIGGER Enseignant_Actif

    BEFORE DELETE ON E i t

  • 8/2/2019 CoursBDRelationnelles_L3

    84/118

    Maude Manouvrier - Univ. Paris Dau hine84

    BEFORE DELETE ON Enseignant

    FOR EACH ROW

    declare

    counter number;

    begin

    SELECT count(*) INTO counter

    FROM EnseignementsWHERE Enseignant_ID = :old.Enseignant_ID;

    if counter > 0 then

    raise_application_error (-20800, Enseignant actif ne

    pouvant tre supprim');end if;

    end;

    DDLChap. VII - SQL

    CREATE OR REPLACE TRIGGER UPD salaire personnel

  • 8/2/2019 CoursBDRelationnelles_L3

    85/118

    Maude Manouvrier - Univ. Paris Dau hine85

    _ _p

    BEFORE UPDATE salaire ON Personnel

    FOR EACH ROWWHEN (:old.salaire > :new.salaire)

    declare

    salaire_diminution EXCEPTION;

    beginraise salaire_diminution ;

    when salaire_diminution then

    raise_application_error(-20001, Le salaire ne peut pas

    diminuer)

    end;

    DDLSous PostgreSQL :

    Chap. VII - SQL

  • 8/2/2019 CoursBDRelationnelles_L3

    86/118

    Maude Manouvrier - Univ. Paris Dau hine86

    CREATE OR REPLACE FUNCTIONGetSalleCapaciteSuperieurA(int)

    RETURNS SETOF Salle

    AS '

    SELECT * FROM Salle WHERE Capacite > $1;

    '

    LANGUAGE SQL;

    SELECT*FROMGetSalleCapaciteSuperieurA(300) ;

    CREATE OR REPLACE FUNCTIONFunctionTriggerReservation()

    RETURNS trigger AS

    ' DECLARE

    DDLChap. VII - SQL

  • 8/2/2019 CoursBDRelationnelles_L3

    87/118

    87

    'DECLARE

    resa Reservation.Reservation_ID%TYPE;BEGIN

    SELECT INTO resa Reservation_ID

    FROMReservation

    WHERE IF FOUND THEN RAISE EXCEPTION''Rservation impossible, salle

    occupe la date et aux horaires demands'';

    ELSE RETURN NEW;

    END IF;

    END;'

    LANGUAGE 'plpgsql';

    Maude Manouvrier - Univ. Paris Dau hine

    DDLSous PostgreSQL :

    Chap. VII - SQL

  • 8/2/2019 CoursBDRelationnelles_L3

    88/118

    Maude Manouvrier - Univ. Paris Dau hine88

    CREATE TRIGGER InsertionReservation

    BEFORE INSERT ON Reservation

    FOR EACH ROW

    EXECUTE PROCEDURE

    FunctionTriggerReservation();

    DDLChap. VII - SQL

    ALTER TABLE table

    ADD (col1 type1 col2 type2 )

  • 8/2/2019 CoursBDRelationnelles_L3

    89/118

    Maude Manouvrier - Univ. Paris Dau hine89

    ADD (col1 type1, col2 type2 )

    | MODIFY (col1 type1, col2 type2 )

    | DROP PRIMARY KEY

    | DROP CONSTRAINT nom_contrainte

    DROP TABLE table

    CREATE VIEW vue (col1, col2)

    AS SELECT

    DROP VIEW vue

    CREATE [UNIQUE] INDEX nom_index ON table (col1,col )

    Embedded SQLChap. VII - SQL

    Utilisation de commandes SQL lintrieur dun langage hte :

  • 8/2/2019 CoursBDRelationnelles_L3

    90/118

    Maude Manouvrier - Univ. Paris Dau hine90

    Commandes SQL remplace par des appel de fonctions du

    langage hte par le prcompilateur.

    Commandes SQL reconnues par EXEC SQL

    /* dclaration de variables htes */EXEC SQL BEGIN DECLARE SECTIONchar d_name[20];char d_id;EXEC SQL END DECLARE SECTION...

    EXEC SQL INSERT INTO DepartmentVALUES (:d_id, :d_name);

    Embedded SQLChap. VII - SQL

    Gestion des erreurs :

  • 8/2/2019 CoursBDRelationnelles_L3

    91/118

    Maude Manouvrier - Univ. Paris Dau hine91

    EXEC INCLUDE SQLCA;

    ...EXEC SQL WHENEVER SQLERROR GOTO erreur

    ...

    erreur :

    printf(``erreur : les transactions encours vont tre annules'\n'');

    EXEC SQL ROLLBACK WORK RELEASE;

    exit(1);

    Embedded SQLChap. VII - SQL

    Gestion de curseur :

    /* D l ti d' i l l

  • 8/2/2019 CoursBDRelationnelles_L3

    92/118

    Maude Manouvrier - Univ. Paris Dau hine92

    /* Dclaration d'un curseur pour manipuler la

    table Department */EXEC SQL DECLARE c1 CURSOR FOR

    SELECT * FROM Department ;

    /* Ouverture du curseur */

    EXEC SQL OPEN c1;/* Lecture de la premire ligne de la table */

    EXEC SQL FETCH c1 INTO :d_id, :d_name ;

    printf(``Nom du dpartement %s, identifiant :%s\n'',d_name, d_id);

    /* fermeture du curseur */

    EXEC SQL CLOSE c1;

    Middleware daccsaux bases de donnes

    Chap. IV - SQL

    A hit t l i i ll dfi i t i t f t d d d

  • 8/2/2019 CoursBDRelationnelles_L3

    93/118

    Maude Manouvrier - Univ. Paris Dauphine 93

    Architecture logicielle dfinissant une interface standard daccs

    aux SGBD

    A chaque SGBD correspond un pilote (driver)

    Indpendance vis vis du SGBD par simple configuration du

    pilote

    Possibilit pour un mme programme dinterroger diffrentes

    bases de donnes dans diffrents SGBD

    1. Java DataBase Connectivity (JDBC)

    2. Open DataBase Connectivity (ODBC) -Middleware propritaire

    (Windows)

    JDBC/ODBCChap. IV - SQL

    Appel des fonctions de l API :

  • 8/2/2019 CoursBDRelationnelles_L3

    94/118

    Maude Manouvrier - Univ. Paris Dauphine 94

    Appel des fonctions de l API :

    lien entre lapplication et le gestionnaire de pilotes Pilote = librairie qui contient les appels

    JDBC/ODBC et traduit les requtes en requtes

    propres au SGBD Gestionnaire de pilotes (ODBC) = librairie qui

    charge les pilotes associs chaque source de

    donnes (BD + SGBD)

    JDBC

    Chap. IV - SQL

  • 8/2/2019 CoursBDRelationnelles_L3

    95/118

    Maude Manouvrier - Univ. Paris Dauphine 95

    Exemple de programme Java sur la base exemple :import java.sql.*; // Tout ce qui est ncessaire pour JDBCimport java.text.*; // Pour formater les datesimport java.util.*;

    public class TestJDBCPostgresql

    {Connection db=null; // Variable de connexionStatement sql=null; // Variable pour un ordre SQLDatabaseMetaData dbmd; // Mta-donnes ncessaires

    // au pilote.

    JDBCChap. IV - SQL

    public TestJDBCPostgresql(String argv[])throws ClassNotFoundException, SQLException,

  • 8/2/2019 CoursBDRelationnelles_L3

    96/118

    Maude Manouvrier - Univ. Paris Dauphine 96

    java.io.IOException

    { String database = argv[0];String username = argv[1];String password = argv[2];

    // Rcupration du pilote du SGBD (ici PostgreSQL)Class.forName("org.postgresql.Driver");

    // Connexion la base de donnesdb = DriverManager.getConnection("jdbc:postgresql:"+database, username,password);

    // Si AUTOCOMMIT=true => le SGBD excute COMMIT// aprs chaque requte

    // Si AUTOCOMMIT= false => le SGBD attend un COMMIT// explicitedb.setAutoCommit(false);

    JDBCChap. IV - SQL

    dbmd = db.getMetaData(); // Rcuparation des mta-donnes

    // Pour tester que la connexion est OK

  • 8/2/2019 CoursBDRelationnelles_L3

    97/118

    Maude Manouvrier - Univ. Paris Dauphine 97

    // qSystem.out.println("Connection to SGBD

    + dbmd.getDatabaseProductName()+ " version + dbmd.getDatabaseProductVersion()+ " database "+ dbmd.getURL()+ " \nusing " + dbmd.getDriverName()+ " version "+ dbmd.getDriverVersion()+ " " +"successful.\n");

    // Cration dun ordre SQL pour crer une relationsql = db.createStatement();

    String sqlText = "CREATE TABLE ";

    System.out.println("Executing this command: "+sqlText+"\n");

    sql.executeUpdate(sqlText);

    // Ne pas oublier le COMMIT si AUTOCOMMIT = falsedb.commit();

    // Code quivalent pour un INSERT, UPDATE, DELETE

    JDBCChap. IV - SQL

    // Exemple de requte de slectionResultSet rset = sql.executeQuery("SELECT Capacit FROM

    i " " i ' ' " "

  • 8/2/2019 CoursBDRelationnelles_L3

    98/118

    Maude Manouvrier - Univ. Paris Dauphine 98

    Reservation " + "WHERE Batiment='B' " + "AND

    Numero_Salle='022'");// Parcours des nuplets rsultat

    while (rset.next()) {System.out.println("Nom de la table : (gnralement videbug du driver)"+ rset.getMetaData().getTableName(1));

    System.out.println("Type de la colonne : "+ rset.getMetaData().getColumnTypeName(1));System.out.println("Nom de la colonne : "+ rset.getMetaData().getColumnName(1) + "\n";

    //Numrotation des colonnes partir de 1 (et non de 0!!)System.out.println("Capacit de la salle B020 : "+ rset.getInt(1) + "\n");

    JDBCChap. IV - SQL

    // Cration dun ordre SQL paramtr

    // Code SQL de la requte

  • 8/2/2019 CoursBDRelationnelles_L3

    99/118

    Maude Manouvrier - Univ. Paris Dauphine 99

    sqlText = "INSERT INTO Salle VALUES (?,?,?)";

    // Prparation de lordre SQL non encore excut//car il manque des paramtresPreparedStatement ps = db.prepareStatement(sqlText);String [] NumBatiment = {"A", "B", "C", "P", "D"};String [] NumSalle = {"208", "026", "405", "340", "120"};

    int lenNB = NumBatiment.length;for (int i=0, c=30 ; (i

  • 8/2/2019 CoursBDRelationnelles_L3

    100/118

    Maude Manouvrier - Univ. Paris Dauphine 100

    Appel des fonctions de l API ODBC :

    lien entre lapplication et le gestionnaire de

    pilotes

    Gestionnaire de pilotes = DLL qui charge les pilotes

    associs chaque source de donnes (BD + SGBD)

    Pilote = DLL qui contient les appels ODBC et traduit

    les requtes en requtes propres au SGBD

  • 8/2/2019 CoursBDRelationnelles_L3

    101/118

    ODBC

    Chap. VII - SQL

    Exemple de programme en C sous Visual C++ :

  • 8/2/2019 CoursBDRelationnelles_L3

    102/118

    Maude Manouvrier - Univ. Paris Dauphine 102

    p p g

    #include #include #include // MFC ODBC database classes

    char *cBASE ; /* Nom de la source de donnes */char *cLOGIN ; /* Login utilisateur */

    char *cPASSWD ; /* Mot de passe utilisateur */

    void main(){HENVd_env; /* Descripteur d'environnement */HDBC d_connex; /* Descripteur de connexion */HSTMT curseur; /* Curseur */RETCODE retcode; /* Code de retour de fonction */

    ODBCChap. VII - SQL

    UCHAR ucLastName[20],ucCity[20];SDWORD ceLastName,ceCity;char *cREQUETESQL; /* Variable recevant une requte SQL */

  • 8/2/2019 CoursBDRelationnelles_L3

    103/118

    103

    /* Saisie du nom de la source de donnes */cBASE=(char*)malloc(20);printf("Nom de la base de donnees :"); scanf("%s",cBASE);/* Saisie du login */

    cLOGIN=(char*)malloc(20); printf("Login :");scanf("%s",cLOGIN);/* Saisie du password */

    cPASSWD=(char*)malloc(20); printf("Mot de passe : ");

    /* Pour ne pas afficher le mot de passe l'cran */

    int iPosCaractere=0; fflush(stdin);do { if((cPASSWD[iPosCaractere]=_getch())!='\r')

    printf("*");

    } while(cPASSWD[iPosCaractere++]!='\r' && iPosCaractere

  • 8/2/2019 CoursBDRelationnelles_L3

    104/118

    104

    if (retcode == SQL_SUCCESS)

    {/* Cration d'une connexion ODBC */

    retcode = SQLAllocConnect(d_env, &d_connex);

    /* Si la connexion ODBC s'est bien passe */

    if (retcode == SQL_SUCCESS)

    {

    /* Initialisation du temps de connexion 5 secondes. */

    SQLSetConnectOption(d_connex, SQL_LOGIN_TIMEOUT, 5);

    /* Connexion une source de donnes */

    retcode = SQLConnect(d_connex,(unsigned char*)cBASE,SQL_NTS,(unsignedchar*)cLOGIN,SQL_NTS,(unsigned char*)cPASSWD,SQL_NTS);

    Longueur de la chane ou on indique que la chane se termine par le code NULL

    Maude Manouvrier - Univ. Paris Dauphine

    ODBCChap. VII - SQL

    /* Si la connexion la source de donnes s'est bien passe */

    if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO){printf("Connection a la base (source de donnes).\n");

  • 8/2/2019 CoursBDRelationnelles_L3

    105/118

    105

    p ( ( ) \ );

    /* Pause dans l'affichage */printf("Taper une touche pour continuer \n"); getchar();/* Allocation mmoire du curseur et association du curseur la

    source de donnes identifie par d_connex. */retcode = SQLAllocStmt(d_connex, &curseur);

    /* Si l'allocation mmoire du curseur est correcte */if (retcode == SQL_SUCCESS){ /* Cration de la requte SQL */cREQUETESQL = "SELECT Nom, Ville FROM Etudiant";

    /* Execution directe de la requte sur la base */

    retcode = SQLExecDirect(curseur, (unsigned char*)cREQUETESQL,SQL_NTS);printf("EXECUTION DE LA REQUETE, CODE ERREUR %d, CODE DE SUCCES%d \n",retcode,SQL_SUCCESS);

    Maude Manouvrier - Univ. Paris Dauphine

    ODBCChap. VII - SQL

    /* Tant le parcours du curseur est valide */

    while (retcode == SQL_SUCCESS){/* Parcourt de l'enregistrement rsultat de la requte */

  • 8/2/2019 CoursBDRelationnelles_L3

    106/118

    106

    g q

    retcode = SQLFetch(curseur);

    /* Si le parcourt est incorrect */

    if (retcode == SQL_ERROR || retcode == SQL_SUCCESS_WITH_INFO){printf("Erreur %d\n",SQL_ERROR);}

    /* Si le parcourt des enregistrements est correct */

    if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO){/* rcupration des donnes des colonnes 1 et 2 de la table

    rsultat */

    SQLGetData(curseur, 1, SQL_C_CHAR, ucLastName, 30, &ceLastName);SQLGetData(curseur, 2, SQL_C_CHAR, ucCity, 30, &ceCity);/* Affichage du rsultat */

    printf("Etudiant : %s %s\n",ucLastName,ucCity);

    Maude Manouvrier - Univ. Paris Dauphine

    Chap VIII - Dpendances fonctionnelles Dpendance fonctionnelle sur R

    A1 A2 A B

  • 8/2/2019 CoursBDRelationnelles_L3

    107/118

    Maude Manouvrier - Univ. Paris Dauphine

    A1, A2, , An B

    "Si deux nuplets de R ont mmes valeurs pour les attributs de A1, A2, ,An alors ils ont mme valeur pour les attributs de B.

    Une dpendance A1, A2, , An B1, B2, , Bm est :

    triviale : si lensemble B1, B2, , Bm est sous-ensemble deA1, A2, , An

    non triviale : si au moins un Bi nappartient pas

    lensemble de A1, A2, , An

    compltement non triviale : si aucun des Bi nappartient

    lensemble de A1, A2, , An107

  • 8/2/2019 CoursBDRelationnelles_L3

    108/118

    FermetureChap. VIII - DF

    Fermeture dune famille de dpendances fonctionnelles

    F+ {X Y \ F | X Y }

  • 8/2/2019 CoursBDRelationnelles_L3

    109/118

    Maude Manouvrier - Univ. Paris Dauphine 109

    F+ = {X Y \ F |= X Y }

    Fermeture dun ensemble dattributs X par rapport

    une famille de dpendances fonctionnelles F

    [X]+ = {A \ F |= X A}

    Lemme

    La dpendance fonctionnelle X Y peut tre dduite

    des axiomes dAmstrong si Y [X] +

    Equivalence et CouvertureChap. VIII - DF

    Deux familles de dpendances fonctionnelles F et G sont

    quivalentes si F+ = G+

    Si F+ G+ l G t d F

  • 8/2/2019 CoursBDRelationnelles_L3

    110/118

    Maude Manouvrier - Univ. Paris Dauphine 110

    Si F+ G+ alors G est une couverture de F

    Une famille de dpendances fonctionnelles F est

    minimale si :

    1. En partie droite de toute dpendance de F, il ny a quun seul

    attribut2. Il ny a pas de dpendance fonctionnelle X A dans F telle que

    (F \ {X A }) soit quivalente F

    3. Il ny a pas de dpendance fonctionnelle X A et Z X tels que

    (F \ {X A }) {Z A } soit quivalente F

    Attention: pas dunicit des couvertures minimales

  • 8/2/2019 CoursBDRelationnelles_L3

    111/118

    Chap IX - Dcomposition de schma Dcomposition sans perte dinformation (Lossless jointure)

    La dcomposition de R en R1, R2, .., Rn est sans perte

  • 8/2/2019 CoursBDRelationnelles_L3

    112/118

    p 1, 2, , n p

    dinformation si et seulement si r, instance de R :

    r = R1(r) R2

    (r) ... Rn(r)

    Dcomposition sans perte de dpendances

    La dcomposition de R, munie dune famille de

    dpendances F, en R1, R2, .., Rn est sans perte de

    dpendance si et seulement si :

    F+

    = F+

    R1 F+

    R2 ... F+

    Rn avec F+

    Ri = {XY, XY Ri}

    112

    Dcomposition SPI

    Chap. IX - Dcomposition

    ?)(1iR

    n

    i rrr

  • 8/2/2019 CoursBDRelationnelles_L3

    113/118

    Maude Manouvrier - Univ. Paris Dauphine 113

    i

    ?)(1 iRni rr

    )(deissugnriquenupletun,,...,Soit 121 iR

    n

    in r)a,a(at

    nRn

    R

    R

    rt

    rt

    rtt

    )(...

    )(

    )(avect...ttdepartirconstruitest

    2

    1

    2

    1

    n21

    ?que-ce-Est rt

    r

    Dcomposition SPD

    Chap. IX - Dcomposition

    Association dune famille Fi chaque sous-

    relation R

  • 8/2/2019 CoursBDRelationnelles_L3

    114/118

    Maude Manouvrier - Univ. Paris Dauphine 114

    relationRi

    Calcul des Fi partir de F+ :

    XY F+ et XY Ri

    XY Fi

    Perte de dpendances

    XY FtqXY

    iF

    X][

    ])[(parentitrativemcalcul][ ji RRXXXiF

    Chap X - Formes normalesForme normale de Boyce-Codd (BCNF)

    Un schma de relation est BCNF si et seulement si :

  • 8/2/2019 CoursBDRelationnelles_L3

    115/118

    Maude Manouvrier - Univ. Paris Dauphine

    Un schma de relation est BCNF si et seulement si :

    DF lmentaires telles que une cl dtermine un attribut

    Un schma de relation est BCNF si :

    X A DF non triviale, A X :X est une (sur)cl et A nest pas un attribut de cl

    La forme normale BCNF vite la redondance dinformation

    La dcomposition de schma BCNF sans perte dinformation neprserve pas les dpendances fonctionnelles

    115

    3me forme normale

    Chap. X - Formes normales

    Un schma de relation est 3NF si :

    A, attribut une cl,

  • 8/2/2019 CoursBDRelationnelles_L3

    116/118

    Maude Manouvrier - Univ. Paris Dauphine 116

    A ne dpend pas dun ensemble dattributs qui nest pas une cl

    (i.e. pas de dpendance transitive ni de dpendance partielle)

    XA est partielle si X est une partie de cl et A ne lest pas

    XA est transitive si ni X ni A ne sont des parties de cl Si K est cl alors K X A est une chane non triviale

    Un schma R, munie dune famille F de DF, est 3NF si :

    X A, DF non triviale de F :X est une surcl ou A appartient une cl

    3me forme normale

    Chap. X - Formes normales

    La 3NF nlimine pas le redondance dinformation

  • 8/2/2019 CoursBDRelationnelles_L3

    117/118

    Maude Manouvrier - Univ. Paris Dauphine 117

    Objectif principaux de la dcomposition de schma :

    BCNF

    Non perte dinformation

    Non perte de dpendance

    On prfrera sacrifier la forme normale BCNF

    et avoir une 3NF SPI-SPD

    1re, 2me et 3me formes normales

    Chap. X - Formes normales

    Un schma de relation R est 1NF si :

    tt ib t d R il ti t ale r atomiq e

  • 8/2/2019 CoursBDRelationnelles_L3

    118/118

    Maude Manouvrier - Univ. Paris Dauphine 118

    attribut de R, il contient une valeur atomique

    Un schma de relation R est 2NF si et seulement si :

    le schma est en 1NF

    A, attribut une cl, A ne dpend pas dune partie de cl

    c--d ( une dpendance fonctionnelle partielle ) Un schma de relation R est 3NF si :

    le schma est 2NF

    ( une dpendance fonctionnelle transitive )