• Aucun résultat trouvé

Transparents(PowerPoint

N/A
N/A
Protected

Academic year: 2022

Partager "Transparents(PowerPoint"

Copied!
79
0
0

Texte intégral

(1)

3 Introduction au modèle relationnel

3.1 Concepts de base

Domaine : ensemble de valeurs

Relation : ensemble de tuples

 SQL : multi-ensemble

noClient nomClient noTéléphone 10 Luc Sansom (999)999-9999 20 Dollard Tremblay (888)888-8888

30 Lin Bô (777)777-7777

40 Jean Leconte (666)666-6666 50 Hafedh Alaoui (555)555-5555 60 Marie Leconte (666)666-6666 70 Simon Lecoq (444)444-4419 80 Dollard Tremblay (333)333-3333

l i g n e / t u p l e

c o l o n n e / a t t r i b u t

t a b l e /

r e l a t i o n

(2)

suite

Deux facettes du concept de table

Schéma d'une table (table schema)

 définition de son type (intention)

ex: Client(noClient, nomClient, noTéléphone)

Instance ou extension d'une table

 état de la table

 ~ variable qui contient un ensemble de lignes

 modifications d ’état

Schéma relationnel

– ensemble de schémas de tables

(3)

Instance de BD VentesPleinDeFoin

Table Commande

noCommande dateCommande noClient

1 01/ 06/ 2000 10

2 02/ 06/ 2000 20

3 02/ 06/ 2000 10

4 05/ 07/ 2000 10

5 09/ 07/ 2000 30

6 09/ 07/ 2000 20

7 15/ 07/ 2000 40

8 15/ 07/ 2000 40

Table LigneCommande noCommande noArticle quantité

1 10 10

1 70 5

1 90 1

2 40 2

2 95 3

3 20 1

4 40 1

4 50 1

5 70 3

5 10 5

5 20 5

6 10 5

6 40 1

7 50 1

7 95 2

8 20 3

Table Article

noArticle description prixUnitaire quantitéEnStock 10 Cèdre en boule 10.99 10

20 Sapin 12.99 10

40 Epinette bleue 25.99 10

50 Chêne 22.99 10

60 Erable argenté 15.99 10

70 Herbe à puce 10.99 10

80 Poirier 26.99 10

Table DétailLivraison

noLivraison noCommande noArticle quantitéLivrée

100 1 10 7

100 1 70 5

101 1 10 3

102 2 40 2

102 2 95 1

100 3 20 1

103 1 90 1

104 4 40 1

105 5 70 2

Table Livraison noLivraison dateLivraison 100 3/ 06/ 2000 101 4/ 06/ 2000 102 4/ 06/ 2000 103 5/ 06/ 2000 104 7/ 07/ 2000 105 9/ 07/ 2000 Table Client

noClient nomClient noTéléphone 10 Luc Sansom (999)999-9999 20 Dollard Tremblay (888)888-8888

30 Lin Bô (777)777-7777

40 Jean Leconte (666)666-6666

50 Hafedh Alaoui (555)555-5555

60 Marie Leconte (666)666-6666

70 Simon Lecoq (444)444-4419

80 Dollard Tremblay (333)333-3333

(4)

3.2 Contraintes d'intégrité du modèle relationnel 3.2.1 Contrainte de domaine et de valeur non nulle

T(A 1 : D 1, A 2 : D 2 , …, A n : D n )

D i : domaine de A i

 Valeur nulle

– Comportement particulier

– Valeur inconnue

– Valeur non applicable

– ...

(5)

3.2.2 Clé primaire et contrainte d'entité

Clé unique (unique key)

ou superclé (superkey )

– identifiant

Clé candidate (candidate key)

– clé unique minimale

Clé primaire (primary key)

– sert de mécanisme de référence aux lignes de la table

Contrainte d'entité (entity constraint)

  clé primaire

– non nulle

(6)

3.2.3 Contrainte

d'intégrité référentielle

 Clé étrangère non nulle  clé primaire

noClient nomClient noTéléphone

10 Luc Sansom (999)999-9999

20 Dollard Tremblay (888)888-8888

30 Lin Bô (777)777-7777

40 Jean Leconte (666)666-6666 50 Hafedh Alaoui (555)555-5555 60 Marie Leconte (666)666-6666 70 Simon Lecoq (444)444-4419 80 Dollard Tremblay (333)333-3333 noCommande dateCommande noClient

1 01/ 06/ 2000 10

2 02/ 06/ 2000 20

3 02/ 06/ 2000 10

4 05/ 07/ 2000 10

5 09/ 07/ 2000 30

6 09/ 07/ 2000 20

7 15/ 07/ 2000 40

8 15/ 07/ 2000 40

T a b l e C o m m a n d e T a b l e C l ie n t

C lé é t r a n g è r e C lé p r im a ir e

(7)

Représentation UML

Commande

{Clé primaire : noCommande}

noCommande : INTEGER dateCommande : DATE noClient : INTEGER

<<Table>>

Client

{Clé primaire : noClient}

noClient : INTEGER nomClient : VARCHAR noTéléphone : VARCHAR

<<Table>>

LigneCommande

{Clé primaire : noCommande, noArticle}

noCommande : INTEGER noArticle : INTEGER quantité : INTEGER

<<Table>>

Article

{Clé primaire : noArticle}

noArticle : INTEGER description : VARCHAR prixUnitaire : DECIMAL quantitéEnStock : INTEGER

<<Table>>

Livraison

{Clé primaire : noLivraison}

noLivraison : INTEGER dateLivraison : DATE

<<Table>> DétailLivraison

{Clé primaire : noLivraison, noCommande, noArticle}

noLivraison : INTEGER noCommande : INTEGER noArticle : INTEGER quantitéLivrée : INTEGER

<<Table>>

(8)

Nom clé étrangère  nom clé primaire

 Étiquette de la relation de dépendance

numéroClient Client

{Clé primaire : noClient}

noClient : INTEGER nomClient : VARCHAR noTéléphone : VARCHAR

<<Table>>

Commande

{Clé primaire : noCommande}

noCommande : INTEGER dateCommande : DATE numéroClient : INTEGER

<<Table>>

(9)

3.3 Conception logique : traduction du modèle conceptuel de données en schéma conceptuel relationnel

 Output : schéma relationnel (niveau conceptuel)

– tables

– colonnes

 types, domaines, ...

– contraintes d ’intégrité

 clés primaires, étrangères, ...

 Input à la conception

– modèle conceptuel des données

(10)

3.3.1 Première ébauche du

schéma : une table par classe

Personne

<<table>>

Membre

<<table>> PrêtEnCours

<<table>>

PrêtArchivé

<<table>>

Employé

<<table>>

<<table>>

Auteur

<<table>>

Editeur

<<table>>

Livre

<<table>> Exemplaire

<<table>>

Prêt

<<table>>

Utilisateur

<<table>>

(11)

3.3.2 Traduction des attributs

 Attribut de la classe -> colonne de la table

Livre {Clé candidate: ISBN}

ISBN : CHAR(13) titre : VARCHAR(50)

annéeParution : DomaineAnnée

<<table>>

Livre {UNIQUE: ISBN}

ISBN : String titre : String

annéeParution : TypeDonnéesAnnée

(12)

3.3.2.1 TRADUCTION DES CONTRAINTES D'IDENTIFICATION (UNIQUE)

 Contrainte UNIQUE -> clé candidate relationnelle

– clé primaire ?

Livre {Clé candidate: ISBN}

ISBN : CHAR(13) titre : VARCHAR(50)

annéeParution : DomaineAnnée

<<table>>

Livre {UNIQUE: ISBN}

ISBN : String titre : String

annéeParution : TypeDonnéesAnnée

(13)

3.3.2.2 TRADUCTION DES TYPES DE DONNÉES

Type OCL Type SQL2 Oracle 8

Boolean BIT(1) Non supporté (utiliser CHAR(1) + CHECK)

Integer INTEGER ou SMALLINT NUMBER(n)

String CHARACTER (CHAR) (n), CHARACTER

VARYING (VARCHAR) (n) VARCHAR2(n), LONG ou LONG VARCHAR (chaîne jusqu'à 2G), CLOB (chaîne jusqu'à 4G), NCLOB (chaîne pour caractères encodés sur plusieurs octets)

Real NUMERIC(p,s) (précision exacte),

DECIMAL(p,s), REAL, DOUBLE PRECISION, FLOAT(p)

NUMBER(p,s)

Enum{v1,…vn} CHARACTER (CHAR) ou VARCHER + CHECK … IN (v1,…,vn) (possibilité de création de domaine)

Domaine non supporté

DATE DATE inclut TIME

TIME

TIMESTAMP

BIT(n), BIT VARYING(n) RAW(n : max = 255), LONG RAW (binaire jusqu'à 2G), BLOB (binaire jusqu'à 4G)

BFILE (pointeur à un fichier externe)

(14)

Types de données déclarés

 Domaine pas toujours supporté par le dialecte SQL

Livre {UNIQUE: ISBN}

ISBN : String titre : String

annéeParution : TypeDonnéesAnnée

TypeDonnéesAnnée {Integer > 0 }

<<datatype>>

Livre {Clé candidate: ISBN}

ISBN : CHAR(13) titre : VARCHAR(50)

annéeParution : DomaineAnnée

<<table>>

DomaineAnnée {INTEGER CHECK value > 0 }

<<domain>>

(15)

3.3.2.3 TYPES ÉNUMÉRÉS

 Petit domaine invariant

– création d ’un domaine VARCHAR + CHECK

Exemplaire

{Clé candidate : idExemplaire}

idExemplaire : VARCHAR(10) dateAchat : Date

statut : DomaineStatut

<<table>>

DomaineStatut

{VARCHAR(15) CHECK value IN ('prêté','disponible','retiré')}

<<domain>>

Exemplaire {UNIQUE: idExemplaire}

idExemplaire : String dateAchat : Date

statut : enum(prêté, disponible, retiré)

(16)

Création d ’une table

 Gros domaine ou extensible

– création d ’une table à part

– utilisé comme liste de valeurs (LOV Designer)

– introduction d ’une clé primaire artificielle ?

Exemplaire

{Clé candidate : idExemplaire}

idExemplaire : VARCHAR(10) dateAchat : Date

statut : VARCHAR(15)

<<table>>

DomaineStatut {Clé primaire : statut}

statut : VARCHAR(15)

<<table>>

(17)

3.3.2.4 TYPES COMPLEXES

 1. Représentation explicite des attributs du type complexe

Membre

adresse : typeDonnéesAdresse

typeDonnéesAdresse numéroCivique

numéroAppartement nomRue

nomVille nomProvince nomPays codePostal

<<datatype>>

Membre numéroCivique

numéroAppartement nomRue

nomVille nomProvince nomPays codePostal

<<table>>

(18)

2. Création d'une nouvelle table

 N.B. Pas de partage de la même adresse !

Membre

{Clé primaire : idMembre}

idMembre

<<table>>

Adresse

{Clé primaire : idMembre}

idMembre numéroCivique numéroAppartement nomRue

nomVille nomProvince nomPays codePostal

<<table>>

Membre

adresse : typeDonnéesAdresse

typeDonnéesAdresse numéroCivique

numéroAppartement nomRue

nomVille nomProvince nomPays codePostal

<<datatype>>

(19)

3.3.2.5 QUALIFICATEUR

 Colonne dans la table du rôle opposé

– voir 3.3.3.2

Groupe nbMaximumInscrits Cours

{UNIQUE:sigle}

sigle titre

nbCrédits 1 0..1

numéro session numéro

session

1 0..1

Groupe

{Clé primaire : sigle, numéro, session}

sigle numéro session

nbMaximumInscrits

<<table>>

Cours {Clé primaire :sigle}

sigle titre nbCrédits

<<table>>

(20)

3.3.2.6 DISCRIMINANT

 Redondant ? Utilisateur

{UNIQUE :idUtilisateur}

idUtilisateur : String motPasse : String catégorieUtilisateur

Membre

téléphoneRésidence : String

$ nbMaxPrêts : Integer = 5

$ duréeMaxPrêts : Integer = 7 Employé

{UNIQUE : codeMatricule}

codeMatricule : String

catégorieEmployé : enum(bibliothécaire, commis)

{disjointe, complète}

Utilisateur {Clé candidate : idUtilisateur}

idUtilisateur : VARCHAR(10) motPasse : VARCHAR(10)

catégorieUtilisateur : DomaineCatégorieUtilisateur

<<table>>

DomaineCatégorieUtilisateur

{VARCHAR(14) CHECK value IN ('employé, 'membre')}

<<domain>>

(21)

3.3.2.7 ATTRIBUT MULTIVALUÉ

 Table à part

– clé étrangère + colonne pour l ’attribut

 Petit tableau de taille fixe

n colonnes (valeurs nulles)

 Encodage

– invisible au SGBD

 Oracle8

– VARRAY, NESTED TABLE

(22)

3.3.2.8 COMPRESSION DES VALEURS DES ATTRIBUTS DE GRANDE TAILLE

 Supporté par le SGBD ?

 Multimédia

(23)

3.3.2.9 CRÉATION DE TABLES SUPPLÉMENTAIRES POUR LES ATTRIBUTS DE CLASSE

MembreGénéral nbMaxPrêts : INTEGER = 5 duréeMaxPrêts : INTEGER = 7

<<table>>

Membre

téléphoneRésidence : String

$ nbMaxPrêts : Integer = 5

$ duréeMaxPrêts : Integer = 7

Membre

téléphoneRésidence : VARCHAR(15)

<<table>>

(24)

3.3.3 Réalisation de l'identité par les clés primaires

MembreGénéral {Clé primaire : noSequence}

noSequence

<<table>>

Personne

{Clé primaire : noSequence}

noSequence : INTEGER nom : VARCHAR2(20) prénom : VARCHAR2(20)

<<table>>

Membre {Clé primaire : noSequence}

noSequence : INTEGER

téléphoneRésidence : VARCHAR(15)

<<table>>

PrêtEnCours {Clé primaire : noSequence}

noSequence : INTEGER

<<table>>

PrêtArchivé

{Clé primaire : noSequence}

noSequence : INTEGER dateRetour : DATE

<<table>>

Employé {Clé primaire : noSequence}

noSequence : INTEGER {Clé candidate : codeMatricule}

codeMatricule : CHAR(6)

catégorieEmployé : DomaineCatégorieEmployé

<<table>>

Catégorie

<<table>>

Auteur

{Clé primaire : noSequence}

noSequence

<<table>>

Editeur

<<table>>

Livre {Clé primaire : ISBN}

ISBN : CHAR(13) titre : VARCHAR(50)

annéeParution : DomaineAnnée

<<table>> Exemplaire

{Clé primaire : idExemplaire}

idExemplaire : VARCHAR(10) dateAchat : Date

statut : DomaineStatut

<<table>>

Prêt

{Clé primaire : noSequence}

noSequence : INTEGER datePrêt : DATE

<<table>>

Utilisateur {Clé primaire : noSequence}

noSequence

{Clé candidate : idUtilisateur}

idUtilisateur : VARCHAR(10) motPasse : VARCHAR(10)

catégorieUtilisateur : DomaineCatégorieUtilisateur

<<table>>

AuteurLivre

{Clé primaire : noSequence, ISBN}

noSequence ISBN

(25)

3.3.3.1 CRÉATION D'UNE CLÉ PRIMAIRE ARTIFICIELLE

 De manière systématique ?

 Mécanisme de SEQUENCE Oracle

PrêtArchivé

{Clé primaire : noSequence}

noSequence : INTEGER dateRetour : DATE

<<table>>

PrêtEnCours

{Clé primaire : noSequence}

noSequence : INTEGER

<<table>>

Prêt

{Clé primaire : noSequence}

noSequence : INTEGER datePrêt : DATE

<<table>>

Prêt

datePrêt : Date

PrêtArchivé dateRetour : Date

PrêtEnCours

(26)

3.3.3.2 UTILISATION D'UN IDENTIFIANT NATUREL COMME CLÉ PRIMAIRE

 1. Utilisation d'un identifiant naturel (UNIQUE)

 Si identifiant naturel trop lourd

– introduire clé primaire artificielle Livre

{Clé candidate: ISBN}

ISBN : CHAR(13) titre : VARCHAR(50)

annéeParution : DomaineAnnée

<<table>>

Livre {Clé primaire: ISBN}

ISBN : CHAR(13) titre : VARCHAR(50)

annéeParution : DomaineAnnée

<<table>>

(27)

2. Utilisation du qualificateur

Groupe nbMaximumInscrits Cours

{UNIQUE:sigle}

sigle titre

nbCrédits 1 0..1

numéro session numéro

session

1 0..1

Groupe

{Clé primaire : sigle, numéro, session}

sigle numéro session

nbMaximumInscrits

<<table>>

Cours

{Clé primaire :sigle}

sigle titre

nbCrédits

<<table>>

(28)

3.3.3.3 IDENTIFIANT NATUREL POUR UNE SPÉCIALISATION

 Éviter de changer de clé primaire dans le contexte d ’une hiérarchie de généralisation

 Si la table du parent est omise

– considérer identifiant naturel de la

spécialisation

(29)

3.3.4 Traduction des associations

Prêt

{Clé primaire : noSequence}

noSequence : INTEGER datePrêt : DATE

noSequenceUtilisateur : INTEGER idExemplaire : VARCHAR(10)

<<table>>

Personne

{Clé primaire : noSequence}

noSequence : INTEGER nom : VARCHAR2(20) prénom : VARCHAR2(20)

<<table>>

Membre {Clé primaire : noSequence}

noSequence : INTEGER

téléphoneRésidence : VARCHAR(15)

<<table>>

PrêtEnCours {Clé primaire : noSequence}

noSequence : INTEGER

<<table>>

PrêtArchivé {Clé primaire : noSequence}

noSequence : INTEGER dateRetour : DATE

<<table>>

Employé {Clé primaire : noSequence}

noSequence : INTEGER {Clé candidate : codeMatricule}

codeMatricule : CHAR(6)

catégorieEmployé : DomaineCatégorieEmployé

<<table>>

Catégorie {Clé primaire : code}

code : VARCHAR(10) descripteur : VARCHAR(20) codeParent : VARCHAR(10)

<<table>>

Auteur

{Clé primaire : noSequence}

noSequence : INTEGER

<<table>>

Editeur

{Clé primaire : nomEditeur}

<<table>>

Livre {Clé primaire : ISBN}

ISBN : CHAR(13) titre : VARCHAR(50)

annéeParution : DomaineAnnée nomEditeur : VARCHAR(20) code : VARCHAR(10)

<<table>> Exemplaire

{Clé primaire : idExemplaire}

idExemplaire : VARCHAR(10) dateAchat : Date

statut : DomaineStatut ISBN : CHAR(13)

<<table>>

Utilisateur {Clé primaire : noSequence}

noSequence

{Clé candidate : idUtilisateur}

idUtilisateur : VARCHAR(10) motPasse : VARCHAR(10)

catégorieUtilisateur : DomaineCatégorieUtilisateur

<<table>>

MembreGénéral

<<table>>

AuteurLivre

{Clé primaire : noSequence, ISBN}

noSequence : INTEGER

{Clé candidate : ISBN, ordreAuteur}

ISBN : CHAR(13) ordreAuteur : INTEGER

<<table>>

{Un Auteur ne peut exister sans AuteurLivre}

{Un Livre ne peut exister sans AuteurLivre}

noSequenceUtilisateur

{Un Livre ne peut exister sans Exemplaire}

(30)

3.3.4.1 CAS GÉNÉRAL : TRADUCTION D'UNE ASSOCIATION PAR UNE TABLE

Auteur

{Clé primaire : noSequence}

noSequence : INTEGER

<<table>> Livre

{Clé primaire : ISBN}

ISBN : CHAR(13) titre : VARCHAR(50)

annéeParution : DomaineAnnée

<<table>>

AuteurLivre

{Clé primaire : noSequence, ISBN}

noSequence : INTEGER ISBN : CHAR(13)

<<table>>

{Un Auteur ne peut exister

sans AuteurLivre} {Un Livre ne peut exister

sans AuteurLivre}

Auteur

1..* 1..*

1..* 1..*

Livre {UNIQUE: ISBN}

ISBN : String titre : String

annéeParution : TypeDonnéesAnnée

(31)

3.3.4.2 TRADUCTION D'UN RÔLE

ORDONNÉ POUR UNE ASSOCIATION

Auteur

1..* 1..*

1..* 1..*

Livre {UNIQUE: ISBN}

ISBN : String titre : String

annéeParution : TypeDonnéesAnnée {ordonné}

A u teu r

{C lé p rim a ire : n o S e q u e n c e } n o S eq u e n c e : IN T E G E R

< < ta ble > >

A u te u rL iv re

{C lé p rim a ire : n o S e q u en c e , IS B N } n o S e q u e n c e : IN T E G E R

{ C lé c a n d id a te : IS B N , o rd re A u te u r } IS B N : C H A R (1 3 )

o rd re A u te u r : IN T E G E R

< < ta b le > >

L ivre {C lé p rim a ire : IS B N } IS B N : C H A R (1 3 ) titre : V A R C H A R (5 0 )

a n n é e P a ru tio n : D o m a in e A n n é e

< < ta b le > >

(32)

3.3.4.3 CLASSE ASSOCIATIVE

Cours {UNIQUE : sigle}

sigle titre nbCrédits Etudiant

{UNIQUE : codePermanent}

codePermanent nom

prénom * * * *

NoteObtenue note

session

Cours

{Clé primaire : sigle}

sigle titre nbCrédits

<<table>>

Etudiant

{Clé primaire : codePermanent}

codePermanent nom

prénom

<<table>>

NoteObtenue

{Clé primaire : codePermament, sigle}

codePermament sigle

note session

<<table>>

(33)

3.3.4.4 CAS UN À PLUSIEURS

 1. Traduction par une table ?

Catégorie {UNIQUE: code}

code : String

descripteur : String 1 1 **

Livre {UNIQUE: ISBN}

ISBN : String titre : String

annéeParution : TypeDonnéesAnnée

Livre {C lé prim aire : IS B N } IS B N : C H A R(13) titre : V A R C H A R (50 )

annéeP arution : D om aineA nné e

< < table> >

C atégorie {C lé prim aire : code}

code : V A R C H A R(10) descripteu r : V A R C H A R (20)

< < table> >

C atég orieLivre {C lé prim aire : IS B N } IS B N : C H A R(13) code : V A R C H A R(10 )

< < table> >

(34)

2. Traduction par l'ajout d'une clé étrangère à privilégier

 Navigation plus performante

Catégorie {UNIQUE: code}

code : String

descripteur : String 1 1 **

Livre {UNIQUE: ISBN}

ISBN : String titre : String

annéeParution : TypeDonnéesAnnée

Livre {Clé primaire : ISBN}

ISBN : CHAR(13) titre : VARCHAR(50)

annéeParution : DomaineAnnée code : VARCHAR(10)

<<table>>

Catégorie {Clé primaire : code}

code : VARCHAR(10)

descripteur : VARCHAR(20)

<<table>>

(35)

Renommer la clé

étrangère au besoin

Utilisateur {Clé primaire : noSequence}

noSequence

{Clé candidate : idUtilisateur}

idUtilisateur : VARCHAR(10) motPasse : VARCHAR(10)

catégorieUtilisateur : DomaineCatégorieUtilisateur

<<table>>

noSequenceUtilisateur

Prêt {Clé primaire : noSequence}

noSequence : INTEGER datePrêt : DATE

noSequenceUtilisateur : INTEGER idExemplaire : VARCHAR(10)

<<table>>

(36)

3.3.4.5 CAS UN À UN

 1. Une clé étrangère (du côté obligatoire)

Passeport

{UNIQUE : noPasseport}

noPasseport dateExpiration Citoyen

{UNIQUE : noAssurranceSociale}

noAssurranceSociale nom

prénom

0..1

1 0..1

1

Passeport {Clé primaire : noPasseport}

noPasseport dateExpiration

{Clé candidate : noAssurranceSociale}

noAssurranceSociale

<<table>>

Citoyen

{Clé primaire : noAssurranceSociale}

noAssurranceSociale nom

prénom

<<table>>

(37)

2. Une nouvelle table

Homme

{UNIQUE : noAssurranceSociale}

noAssurranceSociale nom

prénom

Femme

{UNIQUE : noAssurranceSociale}

noAssurranceSociale nom

prénom 0..1

0..1

0..1 0..1

grasAVie vieAGras

Mariage

Homme

{Clé primaire : noAssurranceSociale}

noAssurranceSociale nom

prénom

<<table>>

Femme

{Clé primaire : noAssurranceSociale}

noAssurranceSociale nom

prénom

<<table>>

Mariage

{Clé candidate : noAssSocFemme}

noAssSocFemme

{Clé candidate : noAssSocHomme}

noAssSocHomme

<<table>>

(38)

3. Fusion

 Cas 1-1 obligatoire

(39)

3.3.4.6 CAS DE L'AGRÉGATION

 Comme une association normale

Catégorie {UNIQUE: code}

code : String

descripteur : String

enfant

0..1

* parent 0..1

*

Catégorie {Clé primaire : code}

code : VARCHAR(10)

descripteur : VARCHAR(20) codeParent : VARCHAR(10)

<<table>>

codeParent

(40)

Composition

 Cas 1-1

– ~ attribut complexe

 Mode SQL CASCADE

 Oracle8

– VARRAY, NESTED TABLE

(41)

3.3.5 Traduction des relations de généralisation/spécialisation

 Délégation

 Fusion

 Concaténation

(42)

3.3.5.1 DÉLÉGATION

Personne

{Clé primaire : noSequence}

noSequence : INTEGER nom : VARCHAR2(20) prénom : VARCHAR2(20)

<<table>>

Membre {Clé primaire : noSequence}

noSequence : INTEGER

téléphoneRésidence : VARCHAR(15)

<<table>>

Employé {Clé primaire : noSequence}

noSequence : INTEGER {Clé candidate : codeMatricule}

codeMatricule : CHAR(6)

catégorieEmployé : DomaineCatégorieEmployé

<<table>>

Auteur

{Clé primaire : noSequence}

noSequence : INTEGER

<<table>>

Utilisateur {Clé primaire : noSequence}

noSequence : INTEGER {Clé candidate : idUtilisateur}

idUtilisateur : VARCHAR(10) motPasse : VARCHAR(10)

/ catégorieUtilisateur : DomaineCatégorieUtilisateur

<<table>>

{catégorieUtilisateur doit être

cohérent avec la table

d'appartenance de l'objet}

(43)

Changement de clé primaire ?

 Extraire le téléphone résidence d'un Membre possédant l'idUtilisateur

12345

Personne

{Clé primaire : noSequence}

noSequence : INTEGER nom : VARCHAR2(20) prénom : VARCHAR2(20)

<<table>> Utilisateur

{Clé candidate : noSequence}

noSequence

{Clé primaire : idUtilisateur}

idUtilisateur : VARCHAR(10) motPasse : VARCHAR(10)

catégorieUtilisateur : DomaineCatégorieUtilisateur

<<table>>

Employé {Clé primaire : idUtilisateur}

idUtilisateur : VARCHAR(10) {Clé candidate : codeMatricule}

codeMatricule : CHAR(6)

catégorieEmployé : DomaineCatégorieEmployé

<<table>>

Membre {Clé primaire : idUtilisateur}

idUtilisateur : VARCHAR(10)

téléphoneRésidence : VARCHAR(15)

<<table>>

(44)

Traduction de la contrainte {disjointe, complète}

Prêt

{Clé primaire : noSequence}

noSequence : INTEGER datePrêt : DATE

noSequenceUtilisateur : INTEGER idExemplaire : VARCHAR(10)

<<table>>

{Exclusives et une des deux est nécessaire}

PrêtArchivé

{Clé primaire : noSequence}

noSequence : INTEGER dateRetour : DATE

<<table>>

PrêtEnCours

{Clé primaire : noSequence}

noSequence : INTEGER

<<table>>

Prêt datePrêt : Date {disjointe, complète}

PrêtArchivé dateRetour : Date

PrêtEnCours

(45)

3.3.5.1.1 Cas de la multi-classification et de l'héritage multiple

Auteur

{Clé prim aire : noS equence}

noS equence

<<table>>

Utilisateur {Clé prim aire : noS equenc e}

noS equenc e

{Clé c andidate : idUtilisateur}

idUtilis ateur : VARC HAR(10) m otP asse : VAR CHAR(10)

catégorieUtilisateur : D om aineC atégorieUtilis ateur

<<table>>

Em ployé {Clé prim aire : noS equenc e}

noS equenc e : INTEG ER {Clé c andidate : c odeM atricule}

codeM atric ule : CH AR(6)

catégorieE m ployé : D om aineC atégorieEm ployé

<<table>>

M em bre {Clé prim aire : noS equenc e}

noS equenc e : INT EG ER

téléphoneR ésidenc e : VARCH AR(15)

<<table>>

AuteurM em bre {Clé prim aire : noS equenc e}

noS equenc e

1. Créer une table de jointure

(46)

Alternatives

 2. Identité commune sans table de jointure

 3. Identité séparée et redondance

de données

(47)

3.3.5.2 ANALOGIE AVEC UNE ASSOCIATION UN À UN

 Clé étrangère

– dans l ’enfant

– dans le parent ???

 Approche Arc de Designer

 Fusion

– vers le parent (approche par fusion)

– vers l ’enfant (approche par concaténation)

 Nouvelle table ???

(48)

3.3.5.3 FUSION

Prêt {Clé primaire : noSequence}

noSequence : INTEGER datePrêt : DATE

noSequenceUtilisateur : INTEGER idExemplaire : VARCHAR(10)

{catégoriePrêt = 'prêtEnCours' ssi dateRetour nulle}

dateRetour[0..1] : DATE

catégoriePrêt : DomaineCatégoriePrêt

<<table>>

DomaineCatégoriePrêt

{VARCHAR(15) CHECK valeur IN ('prêtEnCours', 'prêtArchivé')}

<<domain>>

Prêt

{Clé primaire : noSequence}

noSequence : INTEGER datePrêt : DATE

noSequenceUtilisateur : INTEGER idExemplaire : VARCHAR(10)

<<table>>

{Exclusives et une des deux est nécessaire}

PrêtArchivé

{Clé primaire : noSequence}

noSequence : INTEGER dateRetour : DATE

<<table>>

PrêtEnCours

{Clé primaire : noSequence}

noSequence : INTEGER

<<table>>

(49)

3.3.5.4 CONCATÉNATION

{La contrainte de clé primaire est globale pour les deux tables}

PrêtEnCours {Clé primaire : noSequence}

noSequence : INTEGER datePrêt : DATE

noSequenceUtilisateur : INTEGER idExemplaire : VARCHAR(10)

<<table>>

PrêtArchivé {Clé primaire : noSequence}

noSequence : INTEGER dateRetour : DATE datePrêt : DATE

noSequenceUtilisateur : INTEGER idExemplaire : VARCHAR(10)

<<table>>

Exemplaire

{Clé primaire : idExemplaire}

idExemplaire : VARCHAR(10) dateAchat : Date

statut : DomaineStatut ISBN : CHAR(13)

<<table>>

Utilisateur {Clé candidate : noSequence}

noSequence

{Clé primaire : idUtilisateur}

idUtilisateur : VARCHAR(10) motPasse : VARCHAR(10)

catégorieUtilisateur : DomaineCatégorieUtilisateur

<<table>>

noSequenceUtilisateur noSequenceUtilisateur

Prêt

{Clé primaire : noSequence}

noSequence : INTEGER datePrêt : DATE

noSequenceUtilisateur : INTEGER idExemplaire : VARCHAR(10)

<<table>>

{Exclusives et une des deux est nécessaire}

PrêtArchivé

{Clé primaire : noSequence}

noSequence : INTEGER dateRetour : DATE

<<table>>

PrêtEnCours

{Clé primaire : noSequence}

noSequence : INTEGER

<<table>>

Conserver une table

pour le parent ?

(50)

Cas d ’une référence au parent

Membre {Clé primaire : noSequence}

noSequence : INTEGER nom : VARCHAR2(20) prénom : VARCHAR2(20) {Clé candidate : idUtilisateur}

idUtilisatuer : VARCHAR(10) motPasse : VARCHAR(10)

<<table>>

Employé {Clé primaire : noSequence}

noSequence : INTEGER nom : VARCHAR2(20) prénom : VARCHAR2(20) {Clé candidate : idUtilisateur}

idUtilisateur : VARCHAR(10) motPasse : VARCHAR(10)

catégorieEmployé : DomaineCatégorieEmployé {Clé candidate : codeMatricule}

codeMatricule : CHAR(6)

<<table>>

{exclusives}

noSequenceEmployé

noSequenceMembre

Prêt

{Clé primaire : noSequence}

noSequence : INTEGER datePrêt : DATE

noSequenceEmployé : INTEGER noSequenceMembre : INTEGER idExemplaire : VARCHAR(10)

<<table>>

(51)

3.3.5.5 TRADUCTION DES GÉNÉRALISATIONS POUR SYLERAT

Membre {Clé primaire : idUtilisateur}

idUtilisateur : VARCHAR(10)

téléphoneRésidence : VARCHAR(15)

<<table>>

PrêtEnCours {Clé primaire : noSequence}

noSequence : INTEGER datePrêt : DATE

idUtilisateur : VARCHAR(10) idExemplaire : VARCHAR(10)

<<table>>

PrêtArchivé {Clé primaire : noSequence}

noSequence : INTEGER dateRetour : DATE datePrêt : DATE

idUtilisateur : VARCHAR(10) idExemplaire : VARCHAR(10)

<<table>>

Employé {Clé primaire : idUtilisateur}

idUtilisateur : VARCHAR(10) {Clé candidate : codeMatricule}

codeMatricule : CHAR(6)

catégorieEmployé : DomaineCatégorieEmployé

<<table>>

Catégorie {Clé primaire : code}

code : VARCHAR(10) descripteur : VARCHAR(20) codeParent : VARCHAR(10)

<<table>>

Auteur

{Clé primaire : noSequence}

noSequence : INTEGER nom : VARCHAR2(20) prénom : VARCHAR2(20)

<<table>>

Editeur

{Clé primaire : nomEditeur}

<<table>>

Livre {Clé primaire : ISBN}

ISBN : CHAR(13) titre : VARCHAR(50)

annéeParution : DomaineAnnée nomEditeur : VARCHAR(20) code : VARCHAR(10)

<<table>> Exemplaire

{Clé primaire : idExemplaire}

idExemplaire : VARCHAR(10) dateAchat : Date

statut : DomaineStatut ISBN : CHAR(13)

<<table>>

Utilisateur {Clé primaire : idUtilisateur}

idUtilisateur : VARCHAR(10) motPasse : VARCHAR(10) nom : VARCHAR2(20) prénom : VARCHAR2(20)

/ catégorieUtilisateur : DomaineCatégorieUtilisateur

<<table>>

MembreGénéral {Clé primaire : noSequence}

<<table>>

AuteurLivre

{Clé primaire : noSequence, ISBN}

noSequence : INTEGER

{Clé candidate : ISBN, ordreAuteur}

ISBN : CHAR(13) ordreAuteur : INTEGER

<<table>>

{Un Auteur ne peut exister sans AuteurLivre}

{Un Livre ne peut exister sans AuteurLivre}

{Un Livre ne peut exister sans Exemplaire}

{Exclusives et une des deux est nécessaire}

{CatégorieUtilisateur doit être cohérente avec la table d'appartenance}

{Lors d'un retour le PrêtArchivé est généré à partir du PrêtEn Cours en réutilisant le même noSequence}

(52)

3.3.6 Traduction des autres contraintes

PrêtEnCours

{Clé primaire : idExemplaire}

idExemplaire : VARCHAR(10) datePrêt : DATE

idUtilisateur : VARCHAR(10)

<<table>>

PrêtArchivé

{Clé primaire : noSequence}

noSequence : INTEGER {dateRetour >= datePrêt}

dateRetour : DATE datePrêt : DATE

idUtilisateur : VARCHAR(10) idExemplaire : VARCHAR(10)

<<table>>

Exemplaire

{Clé primaire : idExemplaire}

idExemplaire : VARCHAR(10) dateAchat : Date

<<table>>

MembreGénéral {Clé primaire : noSequence}

noSequence

nbMaxPrêts : INTEGER = 5 duréeMaxPrêts : INTEGER = 7

<<table>>

{statut = 'prêté' si et seulement si un Prêt EnCours fait référence à l'Exemplaire}

{Le nombre de PrêtEnCours d'un Membre <= nbMaxPrêts}

Utilisateur {Clé primaire : idUtilisateur}

idUtilisateur : VARCHAR(10) motPasse : VARCHAR(10) nom : VARCHAR2(20) prénom : VARCHAR2(20)

/ catégorieUtilisateur : DomaineCatégorieUtilisateur

<<table>>

Membre {Clé primaire : idUtilisateur}

idUtilisateur : VARCHAR(10)

téléphoneRésidence : VARCHAR(15)

<<table>>

(53)

3.4 Algèbre relationnelle

 Opérations de manipulation de données

 Entrée

– une table : opération unaire

– deux tables : opération binaire

 Sortie

– une table

– permet la composition

 Origine de SQL (« SQUARE de IBM, San Jose »)

(54)

3.4.1 Sélection ()

Table Article

noArticle description prixUnitaire quantitéEnStock

10 Cèdre en boule 10.99 10

20 Sapin 12.99 10

40 Epinette bleue 25.99 10

50 Chêne 22.99 10

60 Erable argenté 15.99 10

70 Herbe à puce 10.99 10

80 Poirier 26.99 10

81 Catalpa 25.99 10

90 Pommier 25.99 10

95 Génévrier 15.99 10

noArticle description prixUnitaire quantitéEnStock

60 Erable argenté 15.99 10

70 Herbe à puce 10.99 10

95 Génévrier 15.99 10

prixUnitaire < 20.00 ET noArticle > 30 (Article)

(55)

3.4.2 Projection ()

noClient, dateCommande (Commande)

Table Commande

noCommande dateCommande noClient

1 01/ 06/ 2000 10

2 02/ 06/ 2000 20

3 02/ 06/ 2000 10

4 05/ 07/ 2000 10

5 09/ 07/ 2000 30

6 09/ 07/ 2000 20

7 15/ 07/ 2000 40

8 15/ 07/ 2000 40

noClient dateCommande

10 01/ 06/ 2000

20 02/ 06/ 2000

10 02/ 06/ 2000

10 05/ 07/ 2000

30 09/ 07/ 2000

20 09/ 07/ 2000

40 15/ 07/ 2000

(56)

3.4.3 Expressions complexes

noClient, dateCommande ( dateCommande > 05/07/2000 Commande)

Table Commande

noCommande dateCommande noClient

1 01/ 06/ 2000 10

2 02/ 06/ 2000 20

3 02/ 06/ 2000 10

4 05/ 07/ 2000 10

5 09/ 07/ 2000 30

6 09/ 07/ 2000 20

7 15/ 07/ 2000 40

8 15/ 07/ 2000 40

noCommande dateCommande noClient

5 09/ 07/ 2000 30

6 09/ 07/ 2000 20

7 15/ 07/ 2000 40

8 15/ 07/ 2000 40

dateCommande > 05/07/2000 Commande

noClient dateCommande

30 09/ 07/ 2000

20 09/ 07/ 2000

(57)

3.4.4 Produit cartésien ()

Table Commande

noCommande dateCommande noClient

1 01/ 06/ 2000 10

2 02/ 06/ 2000 20

3 02/ 06/ 2000 10

4 05/ 07/ 2000 10

5 09/ 07/ 2000 30

6 09/ 07/ 2000 20

7 15/ 07/ 2000 40

8 15/ 07/ 2000 40

Client  Commande

Client.noClient nomClient noTéléphone noCommande dateCommande Commande. noClient

10 Luc Sansom (999)999-9999 1 01/ 06/ 2000 10

10 Luc Sansom (999)999-9999 2 02/ 06/ 2000 20

10 Luc Sansom (999)999-9999 3 02/ 06/ 2000 10

10 Luc Sansom (999)999-9999 4 05/ 07/ 2000 10

10 Luc Sansom (999)999-9999 5 09/ 07/ 2000 30

10 Luc Sansom (999)999-9999 6 09/ 07/ 2000 20

10 Luc Sansom (999)999-9999 7 15/ 07/ 2000 40

10 Luc Sansom (999)999-9999 8 15/ 07/ 2000 40

20 Dollard Tremblay (888)888-8888 1 01/ 06/ 2000 10

20 Dollard Tremblay (888)888-8888 2 02/ 06/ 2000 20

...

Table Client

noClient nomClient noTéléphone 10 Luc Sansom (999)999-9999 20 Dollard Tremblay (888)888-8888

30 Lin Bô (777)777-7777

40 Jean Leconte (666)666-6666

50 Hafedh Alaoui (555)555-5555

60 Marie Leconte (666)666-6666

70 Simon Lecoq (444)444-4419

80 Dollard Tremblay (333)333-3333

(58)

Exemple. Produire les

informations au sujet des

Clients et de leurs Commandes Client  Commande

Client.noClient nomClient noTéléphone noCommande dateCommande Commande. noClient

10 Luc Sansom (999)999-9999 1 01/ 06/ 2000 10

10 Luc Sansom (999)999-9999 2 02/ 06/ 2000 20

10 Luc Sansom (999)999-9999 3 02/ 06/ 2000 10

10 Luc Sansom (999)999-9999 4 05/ 07/ 2000 10

10 Luc Sansom (999)999-9999 5 09/ 07/ 2000 30

10 Luc Sansom (999)999-9999 6 09/ 07/ 2000 20

10 Luc Sansom (999)999-9999 7 15/ 07/ 2000 40

10 Luc Sansom (999)999-9999 8 15/ 07/ 2000 40

20 Dollard Tremblay (888)888-8888 1 01/ 06/ 2000 10

20 Dollard Tremblay (888)888-8888 2 02/ 06/ 2000 20

20 Dollard Tremblay (888)888-8888 3 02/ 06/ 2000 10

… … … … … …

Client.noClient nomClient noTéléphone noCommande dateCommande Commande. noClient

10 Luc Sansom (999)999-9999 1 01/ 06/ 2000 10

10 Luc Sansom (999)999-9999 3 02/ 06/ 2000 10

10 Luc Sansom (999)999-9999 4 05/ 07/ 2000 10

20 Dollard Tremblay (888)888-8888 2 02/ 06/ 2000 20

20 Dollard Tremblay (888)888-8888 6 09/ 07/ 2000 20

30 Lin Bô (777)777-7777 5 09/ 07/ 2000 30

40 Jean Leconte (666)666-6666 7 15/ 07/ 2000 40

40 Jean Leconte (666)666-6666 8 15/ 07/ 2000 40

clé primaire = clé étrangère

Client.noClient = Commande.noClient (Client  Commande)

(59)

Exemple. Produire les

informations au sujet des

Clients et de leurs Commandes

Client.noClient = Commande . noClient ( ClientCommande )

Client.noClient nomClient noTéléphone noCommande dateCommande Commande. noClient

10 Luc Sansom (999)999-9999 1 01/ 06/ 2000 10

10 Luc Sansom (999)999-9999 3 02/ 06/ 2000 10

10 Luc Sansom (999)999-9999 4 05/ 07/ 2000 10

20 Dollard Tremblay (888)888-8888 2 02/ 06/ 2000 20

20 Dollard Tremblay (888)888-8888 6 09/ 07/ 2000 20

30 Ye San Le Sou (777)777-7777 5 09/ 07/ 2000 30

40 Jean Leconte (666)666-6666 7 15/ 07/ 2000 40

40 Jean Leconte (666)666-6666 8 15/ 07/ 2000 40

Client.noClient, nomClient, noTéléphone, noCommande, dateCommande (…))

Colonne redondante

Client.noClient nomClient noTéléphone noCommande dateCommande

10 Luc Sansom (999)999-9999 1 01/ 06/ 2000

10 Luc Sansom (999)999-9999 3 02/ 06/ 2000

10 Luc Sansom (999)999-9999 4 05/ 07/ 2000

20 Dollard Tremblay (888)888-8888 2 02/ 06/ 2000

20 Dollard Tremblay (888)888-8888 6 09/ 07/ 2000

30 Ye San Le Sou (777)777-7777 5 09/ 07/ 2000

40 Jean Leconte (666)666-6666 7 15/ 07/ 2000

(60)

3.4.5 Jointure naturelle (  )

noClient nomClient noTéléphone noCommande dateCommande

10 Luc Sansom (999)999-9999 1 01/ 06/ 2000

10 Luc Sansom (999)999-9999 3 02/ 06/ 2000

10 Luc Sansom (999)999-9999 4 05/ 07/ 2000

20 Dollard Tremblay (888)888-8888 2 02/ 06/ 2000

20 Dollard Tremblay (888)888-8888 6 09/ 07/ 2000

30 Lin Bô (777)777-7777 5 09/ 07/ 2000

40 Jean Leconte (666)666-6666 7 15/ 07/ 2000

Table Commande

noCommande dateCommande noClient

1 01/ 06/ 2000 10

2 02/ 06/ 2000 20

3 02/ 06/ 2000 10

4 05/ 07/ 2000 10

5 09/ 07/ 2000 30

6 09/ 07/ 2000 20

7 15/ 07/ 2000 40

8 15/ 07/ 2000 40

Client 

Commande

Colonnes communes : colonnes de jointure ou clé de jointure

Schéma : union des colonnes

Table Client

noClient nomClient noTéléphone 10 Luc Sansom (999)999-9999 20 Dollard Tremblay (888)888-8888

30 Lin Bô (777)777-7777

40 Jean Leconte (666)666-6666

50 Hafedh Alaoui (555)555-5555

60 Marie Leconte (666)666-6666

70 Simon Lecoq (444)444-4419

80 Dollard Tremblay (333)333-3333

(61)

Sélectionner les nomClient qui ont commandé au moins un plant d'herbe à puce

Commande

{Clé primaire : noCommande}

noCommande : INTEGER dateCommande : DATE noClient : INTEGER

<<Table>>

Client

{Clé primaire : noClient}

noClient : INTEGER nomClient : VARCHAR noTéléphone : VARCHAR

<<Table>>

LigneCommande

{Clé primaire : noCommande, noArticle}

noCommande : INTEGER noArticle : INTEGER quantité : INTEGER

<<Table>>

Article

{Clé primaire : noArticle}

noArticle : INTEGER description : VARCHAR prixUnitaire : DECIMAL quantitéEnStock : INTEGER

<<Table>>

Livraison

{Clé primaire : noLivraison}

noLivraison : INTEGER dateLivraison : DATE

<<Table>> DétailLivraison

{Clé primaire : noLivraison, noCommande, noArticle}

noLivraison : INTEGER noCommande : INTEGER noArticle : INTEGER quantitéLivrée : INTEGER

<<Table>>

(62)

Sélectionner les nomClient qui ont commandé au moins un plant

d'herbe à puce

Commande {Clé primaire : noCommande}

noCommande : INTEGER dateCommande : DATE noClient : INTEGER

<<Table>>

Client {Clé primaire : noClient}

noClient : INTEGER nomClient : VARCHAR noTéléphone : VARCHAR

<<Table>>

LigneCommande

{Clé primaire : noCommande, noArticle}

noCommande : INTEGER noArticle : INTEGER quantité : INTEGER

<<Table>>

Article {Clé primaire : noArticle}

noArticle : INTEGER description : VARCHAR prixUnitaire : DECIMAL quantitéEnStock : INTEGER

<<Table>>

Livraison {Clé primaire : noLivraison}

noLivraison : INTEGER dateLivraison : DATE

<<Table>> DétailLivraison

{Clé primaire : noLivraison, noCommande, noArticle}

noLivraison : INTEGER noCommande : INTEGER noArticle : INTEGER quantitéLivrée : INTEGER

<<Table>>

nomClient ( description = “Herbe à puce ”

(Client  Commande  LigneCommande 

(63)

Formulations équivalentes

  nomClient ( description = “Herbe à puce ” (Client 

Commande  LigneCommande  Article))

  nomClient (  description = “Herbe à puce ” (((Client  Commande)  LigneCommande)  Article))

  nomClient ( description = “Herbe à puce ” (((Client 

LigneCommande)  Commande)  Article))

 …

(64)

Quelques règles d ’équivalence

 Eclatement d'une sélection conjonctive (SE)

– 

e1 ET e2

(T) = 

e1

(

e2

(T))

 Commutativité de la sélection (SC)

 

e1

(

e2

(T)) = 

e2

(

e1

(T))

 Elimination des projections en cascades (PE)

 

liste1

(

liste2

(T)) = 

liste1

(T)

 Commutativité de la jointure (JC)

T

1

 T

2

= T

1

 T

2

 Associativité de la jointure (JA)

T

1

 (T

2

 T

3

) = (T

1

 T

2

)  T

3

 Voir évaluation des requêtes

(65)

Représentation sous forme d ’arbre de l ’expression algébrique

 

nomClient

(

description = “Herbe à puce ”

(((Client  Commande)  LigneCommande)  Article))

C li e n t C o m m a n d e

L ig n e C o m m a n d e A r t i c l e

 d e s c r i p t i o n = « H e r b e à p u c e »

  n o m C l ie n t

(66)

Cas d ’une clé de jointure composée

LigneCommande  DétailLivraison

Table LigneCommande noCommande noArticle quantité

1 10 10

1 70 5

1 90 1

2 40 2

2 95 3

3 20 1

4 40 1

4 50 1

5 70 3

5 10 5

5 20 5

6 10 5

6 40 1

7 50 1

7 95 2

8 20 3

Table DétailLivraison

noLivraison noCommande noArticle quantitéLivrée

100 1 10 7

100 1 70 5

101 1 10 3

102 2 40 2

102 2 95 1

100 3 20 1

103 1 90 1

104 4 40 1

105 5 70 2

noCommande noArticle quantité noLivraison quantitéLivrée

1 10 10 100 7

1 10 10 101 3

1 70 5 100 5

1 90 1 103 1

2 40 2 102 2

2 95 3 102 1

3 20 1 100 1

4 40 1 104 1

(67)

3.4.6 Opération renommer ()

 Quels sont les Clients qui ont le même numéro de téléphone?

Client2 (Client)

Client.noClient, Client2.noClient, ( Client.noTéléphone = Client2.noTéléphone (Client

  Client2 (Client)))

Table Client

noClient nomClient noTéléphone 10 Luc Sansom (999)999-9999 20 Dollard Tremblay (888)888-8888

30 Lin Bô (777)777-7777

40 Jean Leconte (666)666-6666 50 Hafedh Alaoui (555)555-5555 60 Marie Leconte (666)666-6666 70 Simon Lecoq (444)444-4419 80 Dollard Tremblay (333)333-3333

Table Client2

noClient nomClient noTéléphone 10 Luc Sansom (999)999-9999 20 Dollard Tremblay (888)888-8888

30 Lin Bô (777)777-7777

40 Jean Leconte (666)666-6666 50 Hafedh Alaoui (555)555-5555 60 Marie Leconte (666)666-6666 70 Simon Lecoq (444)444-4419 80 Dollard Tremblay (333)333-3333

Client. noClient Client2.noClient

40 60

60 40

10 10

20 20

30 30

40 40

50 50

(68)

Renommer les colonnes

 Quels sont les Clients qui ont le même numéro de téléphone?

Client2(noClient2, nomClient2, noTéléphone) (Client)

noClient, noClient2 (Client   Client2(noClient2, nomClient2, noTéléphone) (Client))

Table Client

noClient nomClient noTéléphone 10 Luc Sansom (999)999-9999 20 Dollard Tremblay (888)888-8888

30 Lin Bô (777)777-7777

40 Jean Leconte (666)666-6666 50 Hafedh Alaoui (555)555-5555 60 Marie Leconte (666)666-6666 70 Simon Lecoq (444)444-4419 80 Dollard Tremblay (333)333-3333

Table Client2

noClient2 nomClient2 noTéléphone 10 Luc Sansom (999)999-9999 20 Dollard Tremblay (888)888-8888

30 Lin Bô (777)777-7777

40 Jean Leconte (666)666-6666 50 Hafedh Alaoui (555)555-5555 60 Marie Leconte (666)666-6666 70 Simon Lecoq (444)444-4419 80 Dollard Tremblay (333)333-3333

noClient noClient2

40 60

60 40

10 10

(69)

3.4.7 Jointure-

Table Commande altérée

noCommande dateCommande numéroClient

1 01/ 06/ 2000 10

2 02/ 06/ 2000 20

3 02/ 06/ 2000 10

4 05/ 07/ 2000 10

5 09/ 07/ 2000 30

6 09/ 07/ 2000 20

7 15/ 07/ 2000 40

8 15/ 07/ 2000 40

noClient nomClient noTéléphone noCommande dateCommande numéroClient

10 Luc Sansom (999)999-9999 1 01/06/ 2000 10

10 Luc Sansom (999)999-9999 3 02/06/ 2000 10

10 Luc Sansom (999)999-9999 4 05/07/ 2000 10

20 Dollard Tremblay (888)888-8888 2 02/06/ 2000 20 20 Dollard Tremblay (888)888-8888 6 09/07/ 2000 20

30 Ye San Le Sou (777)777-7777 5 09/07/ 2000 30

40 Jean Leconte (666)666-6666 7 15/07/ 2000 40

Client  noClient = numéroClient Commande altérée =

noClient = numéroClient (Client  Commande altérée)

Table Client

noClient nomClient noTéléphone 10 Luc Sansom (999)999-9999 20 Dollard Tremblay (888)888-8888

30 Lin Bô (777)777-7777

40 Jean Leconte (666)666-6666

50 Hafedh Alaoui (555)555-5555

60 Marie Leconte (666)666-6666

70 Simon Lecoq (444)444-4419

80 Dollard Tremblay (333)333-3333

(70)

Cherchez les

LigneCommandes qui ont été livrées en une seule livraison

LigneCommande.noCommande,

LigneCommande.noArtilce, quantité, noLivraison, quantitéLivrée (LigneCommande 

LigneCommande.noCommande = DétailLivraison.noCommande ET

LigneCommande.noArticle = DétailLivraison.noArticle ET

DétailLivraison)

Table LigneCommande noCommande noArticle quantité

1 10 10

1 70 5

1 90 1

2 40 2

2 95 3

3 20 1

4 40 1

4 50 1

5 70 3

5 10 5

5 20 5

6 10 5

6 40 1

7 50 1

7 95 2

8 20 3

Table DétailLivraison

noLivraison noCommande noArticle quantitéLivrée

100 1 10 7

100 1 70 5

101 1 10 3

102 2 40 2

102 2 95 1

100 3 20 1

103 1 90 1

104 4 40 1

105 5 70 2

noCommande noArticle quantité noLivraison quantitéLivrée

1 70 5 100 5

1 90 1 103 1

2 40 2 102 2

3 20 1 100 1

(71)

3.4.8 Jointure externe

 Inclure les « célibataires »

 La jointure externe à gauche

 T 1 = T 2 (célibataires de T 1 )

 La jointure externe à droite

 T 1 = T 2

 La jointure externe pleine

 T 1 == T 2

(72)

Produire les informations au sujet des Clients et de leurs Commandes incluant les informations sur les

Clients qui n’ont pas placé de

Commande noCommande dateCommande noClient Table Commande

1 01/ 06/ 2000 10

2 02/ 06/ 2000 20

3 02/ 06/ 2000 10

4 05/ 07/ 2000 10

5 09/ 07/ 2000 30

6 09/ 07/ 2000 20

7 15/ 07/ 2000 40

8 15/ 07/ 2000 40

Client =

Commande

noClient nomClient noTéléphone noCommande dateCommande

10 Luc Sansom (999)999-9999 1 01/06/ 2000

10 Luc Sansom (999)999-9999 3 02/06/ 2000

10 Luc Sansom (999)999-9999 4 05/07/ 2000

20 Dollard Tremblay (888)888-8888 2 02/06/ 2000 20 Dollard Tremblay (888)888-8888 6 09/07/ 2000

30 Lin Bô (777)777-7777 5 09/07/ 2000

40 Jean Leconte (666)666-6666 7 15/07/ 2000

40 Jean Leconte (666)666-6666 8 15/07/ 2000

50 Hafedh Alaoui (555)555-5555 null null

60 Marie Leconte (666)666-6666 null null

70 Simon Lecoq (444)444-4419 null null

Table Client

noClient nomClient noTéléphone 10 Luc Sansom (999)999-9999 20 Dollard Tremblay (888)888-8888

30 Lin Bô (777)777-7777

40 Jean Leconte (666)666-6666

50 Hafedh Alaoui (555)555-5555

60 Marie Leconte (666)666-6666

70 Simon Lecoq (444)444-4419

80 Dollard Tremblay (333)333-3333

(73)

3.4.9 Semi-jointure (  )

Table Commande

noCommande dateCommande noClient

1 01/ 06/ 2000 10

2 02/ 06/ 2000 20

3 02/ 06/ 2000 10

4 05/ 07/ 2000 10

5 09/ 07/ 2000 30

6 09/ 07/ 2000 20

7 15/ 07/ 2000 40

8 15/ 07/ 2000 40

Client

Commande

noClient nomClient noTéléphone 10 Luc Sansom (999)999-9999 20 Dollard Tremblay (888)888-8888

30 Lin Bô (777)777-7777

40 Jean Leconte (666)666-6666

Table Client

noClient nomClient noTéléphone

10 Luc Sansom (999)999-9999

20 Dollard Tremblay (888)888-8888

30 Lin Bô (777)777-7777

40 Jean Leconte (666)666-6666

50 Hafedh Alaoui (555)555-5555

60 Marie Leconte (666)666-6666

70 Simon Lecoq (444)444-4419

80 Dollard Tremblay (333)333-3333

(74)

3.4.10Opérations

ensemblistes (  ,  , -)

 Schémas compatibles

Table T 1

A B

1 1

2 2

Table T 2

A B

2 2

3 3

T 1T 2

A B

1 1

2 2

3 3

T 1T 2

A B

2 2

T 1 - T 2

A B

1 1

T 2 T 1

A B

3 3

(75)

Produire les noms et numéros de

téléphone des Employés qui sont aussi des Clients de la pépinière

( nomPersonne, noTéléphone ( Client (noClient, nomPersonne, noTéléphone)

(Client))) 

( nomPersonne, noTéléphone ( Employé (codeEmployé, nomPersonne, noTéléphone) (Employé)))

Table Employé

codeEmployé nomEmployé noTéléphone CASD1 Dollard Tremblay (888)888-8888 PIOY1 Yan Piochuneshot 911

LAFH1 Yvan Lafleur (111)111-1111 HASC1 Jean Leconte (666)666-6666

nomPersonne noTéléphone Dollard Tremblay (888)888-8888 Jean Leconte (666)666-6666

équivalent à  si

compatibles

Table Client

noClient nomClient noTéléphone

10 Luc Sansom (999)999-9999

20 Dollard Tremblay (888)888-8888

30 Lin Bô (777)777-7777

40 Jean Leconte (666)666-6666

50 Hafedh Alaoui (555)555-5555

60 Marie Leconte (666)666-6666

70 Simon Lecoq (444)444-4419

80 Dollard Tremblay (333)333-3333

(76)

3.4.11Division ()

A  B

– plus grande table C qui est telle que B  C  A

– ~ inverse du produit cartésien

T 1 (X)  T 2 (Y) =

–  X-Y (T 1 ) - (( X-Y (T 1 )  T 2 ) - T 1 )

Références

Documents relatifs

public static void main (String args []) throws Exception { // Création d'une Connection globale pour l'application UsineConnection uneUsineConnection =

public class exempleInsertionsNouveauxObjetsOMLJava { public static void main (String args []){. /* Ouvrir

CONSTRAINT annéeSup0 CHECK(annéeParution.valeurAnnée &gt; 0), CONSTRAINT referenceTableEditeur éditeur SCOPE IS Editeur) CREATE INDEX indexEditeurLivre ON Livre(éditeur). CREATE

Ecrire prêt au journal (vider tampons

noSequence : INTEGER {Clé candidate : codeMatricule}. codeMatricule

 Méthodes d’accès spatiales (Spatial Acces Method - SAM ).. – objets

– Deux opérations de lecture ou d'écriture dans deux transactions différentes sont non permutables si elles portent sur la même donnée et au moins une des deux est

public static void main (String args []) throws Exception { // Création d'une Connection globale pour l'application UsineConnection uneUsineConnection =