• Aucun résultat trouvé

Approche relationnelle

N/A
N/A
Protected

Academic year: 2022

Partager "Approche relationnelle"

Copied!
64
0
0

Texte intégral

(1)

© Richard CHBEIR

Objets d'une BDD Objets d'une BDD

Oracle

Oracle

(2)

Plan Plan

Définition des objets

Manipulation des objets Interrogation des objets Encapsulation des objets

Fonctions et procédures

(3)

Pourquoi ? Pourquoi ?

ADR

… salaire

… dept

… NumEmp

Employe

Approche relationnelle

(4)

Pourquoi ? Pourquoi ?

Employe

ADR

… salaire

… dept

… NumEmp

Employe

Approche avancée

(5)

Pourquoi ? Pourquoi ?

..

N°Véhicule ADR

salaire

dept

NumEmp

Employe

Distance

Ville

Intervention Poss.

Date

Montant

N°Int

NumEmp

Contrat

Date

Marque

Type

Num

Véhicule

(6)

Pourquoi ? Pourquoi ?

Contrat Véhicule

@veh

@contrat Distance

Ville

Lieux Interventions CODE_POSTAL

VILLE RUE

NOR UE

ADR sal

dept

… NumEmp

Employe

(7)

Type Abstrait de Donn

Type Abstrait de Donn é é es es (TAD)

(TAD)

Nouveau type de données défini par l’utilisateur Une structure de données partagée

Inclut des méthodes qui sont des procédures ou des fonctions permettant de manipuler les objets ou instances du type abstrait

Ne peut pas contenir de contraintes (NOT NULL, CHECK, …)

Est un type final sans si précisé

(8)

Type Abstrait de Donn

Type Abstrait de Donn é é es es (TAD)

(TAD)

Autres types Large Object Bloc (LOB)

Binary LOB (BLOB) : stockage des données binaires non structurées (4Go)

Character LOB (CLOB) : stockage de données caractères (4Go)

Binary FILE (BFILE) : fichiers binaires

localisés à l’extérieur de la BDD

(9)

Type Abstrait de Donn

Type Abstrait de Donn é é es es (TAD)

(TAD)

Type utilisé par une table

Type utilisé par un autre type

Type utilisé par un attribut d’une table relationnelle

Type utilisé par un attribut d’une table

objet-relationnelle

(10)

Type Abstrait de Donn

Type Abstrait de Donn é é es es (TAD)

(TAD)

Type utilisé par une table

Le résultat est une structure de données

disponible pour être déclarée dans d’autres types ou tables

Syntaxe

SQL> CREATE OR REPLACE TYPE Nom_Type AS OBJECT (

Nom_attribut1 Type_Attribut,

(11)

Type Abstrait de Donn

Type Abstrait de Donn é é es es (TAD)

(TAD)

Type utilisé par une table

Exemple

SQL> CREATE OR REPLACE TYPE adresse_type AS OBJECT (

norue NUMBER,

rue VARCHAR(20), ville VARCHAR2(30),

code_postal VARCHAR2(10)) /

CODE_POSTAL VILLE

RUE NORUE

ADRESSE_TYPE

(12)

Type Abstrait de Donn

Type Abstrait de Donn é é es es (TAD)

(TAD)

Type utilisé par une table

Exemple

SQL> CREATE OR REPLACE TYPE contrat_typ AS OBJECT (no_int VARCHAR2 (8),

date_int DATE,

Montant NUMBER)

/

(13)

Type Abstrait de Donn

Type Abstrait de Donn é é es es (TAD)

(TAD)

Type utilisé par une table

Exemple

SQL> CREATE OR REPLACE TYPE veh_typ AS OBJECT (no_immat VARCHAR2 (8), date_immat DATE,

type_v VARCHAR2(7), marque VARCHAR2(15)) /

marque Type_v

Date_immat No_immat

veh_typ

(14)

Type Abstrait de Donn

Type Abstrait de Donn é é es es (TAD)

(TAD)

Type utilisé par une table

Exemple

SQL> CREATE OR REPLACE TYPE Lieu_intervention AS OBJECT (

ref_contrat REF contrat_typ, Ville VARCHAR2(15), Distance NUMBER)

/

(15)

Type Abstrait de Donn

Type Abstrait de Donn é é es es (TAD)

(TAD)

Type utilisé par un autre type

Exemple

SQL> CREATE OR REPLACE TYPE employe_type AS OBJECT ( numero NUMBER,

dept VARCHAR(5), sal NUMBER,

adr adresse_type)

/

(16)

Type Abstrait de Donn

Type Abstrait de Donn é é es es (TAD)

(TAD)

Type utilisé par un autre type

Exemple

SQL> CREATE OR REPLACE TYPE Lieux_intervention AS TABLE OF lieu_intervention

/

(17)

Type Abstrait de Donn

Type Abstrait de Donn é é es es (TAD)

(TAD)

Type utilisé par un autre type

Exemple

SQL> CREATE OR REPLACE TYPE employe_type As OBJECT ( numero VARCHAR2(5),

nom VARCHAR2(15), prenom VARCHAR2(15), dept VARCHAR2(20), veh REF veh_typ,

ADR adresse_type,

lieux_interventions lieux_intervention)

/

(18)

Type Abstrait de Donn

Type Abstrait de Donn é é es es (TAD)

(TAD)

Type utilisé par un attribut d’une table relationnelle

Exemple

SQL> CREATE TABLE employe (

norue NUMBER PRIMARY KEY, dept VARCHAR2(10),

sal NUMBER,

adr adresse_type);

(19)

Type Abstrait de Donn

Type Abstrait de Donn é é es es (TAD)

(TAD)

Type utilisé par un attribut d’une table relationnelle

Exemple

Une table qui ne dépend pas d’un type n’est pas une table objet-relationnelle

CODE_POSTAL VILLE

RUE NOR UE

ADR sal

dept

NumEmp

Employe

(20)

Type Abstrait de Donn

Type Abstrait de Donn é é es es (TAD)

(TAD)

Type utilisé par un attribut d’une table objet-relationnelle

Une table est dite objet-relationnelle quand elle dépend d’un TAD

Les enregistrements d

Les enregistrements d’ ’une table OR peuvent être consid une table OR peuvent être considé ér és s comme des objets car ils poss

comme des objets car ils possè èdent tous un dent tous un Object Object ID (OID) ID (OID)

(21)

Type Abstrait de Donn

Type Abstrait de Donn é é es es (TAD)

(TAD)

Type utilisé par un attribut d’une table objet-relationnelle

Pour créer une table Objet-relationnelle ayant une structure d’un type préalablement défini

SQL> CREATE TABLE Nom_table OF Nom_Type [(Contraintes_d_integrite)]

;

(22)

Type Abstrait de Donn

Type Abstrait de Donn é é es es (TAD)

(TAD)

Type utilisé par un attribut d’une table objet-relationnelle

Exemple

SQL> CREATE TABLE Vehicules OF veh_typ

(CONSTRAINT PK_veh PRIMARY KEY(no_immat))

;

(23)

Type Abstrait de Donn

Type Abstrait de Donn é é es es (TAD)

(TAD)

Type utilisé par un attribut d’une table objet-relationnelle

Exemple

SQL> CREATE TABLE Employes OF employe_type

(CONSTRAINT PK_employe PRIMARY KEY(numero))

NESTED TABLE lieux_interventions STORE AS tab_int

;

(24)

Le script SQL OR Le script SQL OR

Contrat Véhicule

@veh

@contrat Distance

Ville

Lieux Interventions CODE_POSTAL

VILLE RUE

NOR UE

ADR sal

dept

… NumEmp

Employe

(25)

Le script SQL OR Le script SQL OR

Date Montant

N°Int

Contrat

Date

Marque

Type

Num

Véhicule

SQL> CREATE OR REPLACE TYPE veh_typ AS OBJECT (no_immat VARCHAR2 (8),

date_immat DATE,

type_v VARCHAR2(7), marque VARCHAR2(15)) /

SQL> CREATE TABLE Vehicules OF veh_typ

(CONSTRAINT PK_veh PRIMARY KEY(no_immat))

;

SQL> CREATE OR REPLACE TYPE contrat_typ AS OBJECT (no_int VARCHAR2 (8),

date_int DATE, Montant NUMBER) /

SQL> CREATE TABLE Contrats OF contrat_typ (CONSTRAINT PK_con PRIMARY KEY(no_int))

;

(26)

Le script SQL OR Le script SQL OR

@veh

@contrat Distance

Ville

Lieux Interventions CODE_POSTAL

VILLE RUE

NOR UE

ADR sal

dept

… NumEmp

Employe

CREATE or replace TYPE adresse_type AS OBJECT (

norue NUMBER, rue VARCHAR(20), ville VARCHAR2(30),

code_postal VARCHAR2(10))

CREATE or REPLACE TYPE Lieux_intervention as Table of lieu_intervention

/

CREATE OR REPLACE TYPE employe_type As OBJECT (

numero VARCHAR2(5),

nom VARCHAR2(15),

prenom VARCHAR2(15),

(27)

A vous A vous

nemp age nom

D2 253000 N1 28 Zidane

N2 26 Thuram

N3 30 Barthez

N5 26 Dessailly

N6 24 Lizarazu

N7 32 Deschamps

{employes}

325000

125000 D3

D3

numdep budget

(28)

DANS UNE TABLE DANS UNE TABLE

RELATIONNELLE RELATIONNELLE

nemp age nom

D2 253000 N1 28 Zidane

N2 26 Thuram

N3 30 Barthez

N5 26 Dessailly

N6 24 Lizarazu

N7 32 Deschamps

{employes}

325000

125000 D3

D3

numdep budget

CREATE OR REPLACE TYPE emp_type AS OBJECT

(nemp VARCHAR2(13), age NUMBER, nom VARCHAR2(30)) /

CREATE OR REPLACE TYPE emps_type AS TABLE OF emp_type

(29)

DANS UNE TABLE OR DANS UNE TABLE OR

nemp age nom

D2 253000 N1 28 Zidane

N2 26 Thuram

N3 30 Barthez

N5 26 Dessailly

N6 24 Lizarazu

N7 32 Deschamps

{employes}

325000

125000 D3

D3

numdep budget

CREATE OR REPLACE TYPE emp_type AS OBJECT

(nemp VARCHAR2(13), age NUMBER, nom VARCHAR2(30)) /

CREATE OR REPLACE TYPE emps_type AS TABLE OF emp_type /

CREATE OR REPLACE TYPE departement_type AS OBJECT

(numdep VARCHAR2(11), budget NUMBER, employes emps_type) /

CREATE TABLE Departement OF departement_type (PRIMARY KEY (numdep))

(30)

Insertion des

Insertion des tuples tuples

Dans une table avec un attribut défini avec un TAD

SQL> INSERT INTO Nom_Table

VALUES ( V1, V2, ….., Nom_Type(

val1, val2, ….)

);

(31)

Insertion des

Insertion des tuples tuples

Dans une table avec un attribut défini avec un TAD

Exemple

SQL> insert into contrats values('1','12/12/2006',500);

SQL> insert into contrats values(

contrat_typ(‘1','12/12/2006',500) );

Date Montant

N°Int

Contrat

(32)

Insertion des

Insertion des tuples tuples

Dans une table avec un attribut défini avec un TAD

Exemple

SQL> insert into vehicules values(

veh_typ(‘2',‘BMW‘,’X5’,'12/12/2006')

);

(33)

Insertion des

Insertion des tuples tuples

Dans une table contenant une table imbriquée

Syntaxe

-- Initialisation de la table imbriquée à vide SQL> INSERT INTO Nom_Table

VALUES ( V1, V2, ….., Ens_Nom_Type() );

-- Avec insertion de n-uplets dans la table imbriquée SQL> INSERT INTO Nom_Table

VALUES ( V1, V2, ….., Ens_Nom_Type(

Nom_type1 ( …….),

Nom_type1 ( …….),

Nom_type1 ( …….)

(34)

Insertion des

Insertion des tuples tuples

Dans une table contenant une table imbriquée

Exemple

SQL> INSERT INTO Employes

select 1, 'Chbeir', 'Richard','Informatique', ref(a), adresse_type(98,'Faubourg Raines','Dijon','21000'), Lieux_Intervention()

from vehicules a where a.no_immat='2'

(35)

Insertion des

Insertion des tuples tuples (ici) (ici)

Dans une table contenant une table imbriquée

Exemple

SQL> INSERT INTO Employes

select 1, 'Chbeir', 'Richard','Informatique', ref(a), adresse_type(98,'Faubourg Raines','Dijon','21000'), Lieux_Intervention()

from vehicules a where a.no_immat='2'

;

SQL> INSERT INTO Employes

select 2, 'Chbeir', 'Richard','Informatique', ref(a), adresse_type(98,'Faubourg Raines','Dijon','21000'),

Lieux_Intervention(Lieu_intervention(null,'Dijon',500)) from vehicules a where a.no_immat='2'

;

(36)

Insertion des

Insertion des tuples tuples

Dans une table imbriquée contenant un pointeur

Syntaxe

SQL> INSERT INTO

THE (SELECT t.Tab_Imb

FROM Nom_table t

WHERE t.Attr_i = Valeur) SELECT V1, V2, ,REF(n)FROM Table_R n

WHERE n.Attr_j = Valeur ;

(37)

Insertion des

Insertion des tuples tuples

Dans une table imbriquée contenant un pointeur

Exemple

SQL> INSERT INTO Employes

select 3, 'Chbeir', 'Richard','Informatique', ref(a), adresse_type(98,'Faubourg Raines','Dijon','21000'),

Lieux_Intervention(Lieu_intervention(null,'Dijon',500), Lieu_intervention(ref(v),'Lyon',600) )

from vehicules a, contrats v where v.no_int='2' and a.no_immat='2'

;

(38)

Insertion des

Insertion des tuples tuples

Dans une table imbriquée contenant un pointeur

Exemple

SQL> INSERT INTO

the (select e.Lieux_interventions from Employes e where e.numero='3')

select ref(v),‘Paris',800 from contrats v where v.no_int='1'

(39)

Mise

Mise à à jour des jour des tuples tuples

Dans une table principale

Syntaxe

SQL> UPDATE Nom_de_table Alias SET

Alias.Nom_Attribut1 = expression1 Alias.Nom_Attribut2 = expression2

…….

[WHERE Condition ] ;

(40)

Mise

Mise à à jour des jour des tuples tuples

Dans une table principale

Exemple

SQL> UPDATE Employes e

SET e.Nom='Nicolle', e.Prenom='Christophe'

WHERE e.adr.ville LIKE '%Dijon%' and e.numero='1';

(41)

Mise

Mise à à jour des jour des tuples tuples

Dans une table imbriquée

Syntaxe

SQL> UPDATE THE

(SELECT Nom_Alias1.Table_imbriquée FROM Table Nom_Alias1

WHERE Condition ) Nom_alias2

SET Nom_alias2.Attribut = expression

WHERE Condition ;

(42)

Mise

Mise à à jour des jour des tuples tuples

Dans une table imbriquée

Exemple

Modifier la distance d’intervention à 8888 de l’employé 1 dans la ville de Dijon

SQL> UPDATE THE

(SELECT e.lieux_interventions FROM Employes e WHERE e.numero='1') a SET a.distance = 8888

WHERE a.ville LIKE '%Dijon%';

(43)

Mise

Mise à à jour des jour des tuples tuples

Dans une table imbriquée

Exemple

Pour l’employé 2, changer son intervention

associée à la ville de Dijon, la nouvelle référence ayant pour numéro T1234

SQL> UPDATE THE (

SELECT e.lieux_interventions FROM Employes e WHERE e.numero='2') a SET a.ref_contrat =

(select ref(v) from contrats v where v.No_int ='T1234') WHERE a.ville LIKE '%Dijon%‘

;

(44)

Suppression des

Suppression des tuples tuples

Syntaxe générale

SQL> DELETE FROM Nom_table Alias

WHERE Alias.Nom_attribut = Expression ;

(45)

Suppression des

Suppression des tuples tuples

Condition de suppression portant sur une table imbriquée

Exemple

Supprimer les employés qui ont eu des interventions à Lyon

SQL> DELETE FROM Employes e

WHERE exists(select * from the

(select a.lieux_interventions from employes a where a.numero=e.numero) li

where li.ville = ‘Lyon')

;

(46)

Suppression des

Suppression des tuples tuples

Condition de suppression portant sur les n-uplets d’une table imbriquée

Exemple

Supprimer les interventions de l’employé 1 qui se sont déroulées à Lyon

SQL> DELETE FROM the

(select e.lieux_interventions from employes e where

(47)

Interrogation des

Interrogation des tuples tuples

Syntaxe générale

SQL> SELECT t.Nom_attr1, t.Nom_ attr2, , ….

FROM Table t;

Utilisation d'un alias obligatoire pour les attributs structurés

(48)

Interrogation des

Interrogation des tuples tuples

Exemple

Donnez le numéro, le nom et le prénom des employés qui ont un véhicule mis en

circulation après le 01/06/2006

SQL> select e.numero, e.nom, e.prenom from employes e

where e.VEH.date_immat>='01/12/2006';

(49)

Interrogation des

Interrogation des tuples tuples

Exemple

Donnez le nom des villes où intervient l’employé numéro 2

SQL> select la.ville

from the (select e.lieux_interventions from employes e

where e.numero='2') la;

(50)

Interrogation des

Interrogation des tuples tuples

Exemple

Donnez les numéros et les montants des contrats de l’employé numéro 1

SQL> select le.ref_contrat.no_int, le.ref_contrat.montant from

the (select e.lieux_interventions from employes e where

e.numero='1') le;

(51)

Interrogation des

Interrogation des tuples tuples

Exemple

Afficher les informations relatives aux contrats de l’employé numéro « 1 »

SQL> SELECT DEREF (Li.ref_contrat)

FROM THE (SELECT Emp.lieux_interventions FROM Employes Emp

WHERE Emp.numero = '1') Li;

(52)

Interrogation des

Interrogation des tuples tuples

Utilisation des fonctions d’agrégats (COUNT, SUM, AVG, MAX, MIN)

Syntaxe

SQL> SELECT Nom_de_fonction ( paramètres ) FROM Nom_de_relation

[WHERE condition1]

[GROUP BY condition2 [HAVING condition3]]

(53)

Interrogation des

Interrogation des tuples tuples

Utilisation des fonctions d’agrégats (COUNT, SUM, AVG, MAX, MIN)

Exemple

Afficher le nombre des employés qui habitent Dijon

SQL> SELECT count(*)

FROM Employes Emp

WHERE emp.adr.ville = 'Dijon';

(54)

Interrogation des

Interrogation des tuples tuples

Utilisation des fonctions d’agrégats

(COUNT, SUM, AVG, MAX, MIN) sur une table imbriquée

Syntaxe

SQL> SELECT Nom_de_fonction ( paramètres ) FROM THE (SELECT alias.tab_imb

FROM Table alias

(55)

Interrogation des

Interrogation des tuples tuples

Utilisation des fonctions d’agrégats

(COUNT, SUM, AVG, MAX, MIN) sur une table imbriquée

Exemple

Donnez le nombre de contrats de l’employé numéro 1.

SQL> SELECT count (*)

FROM THE (SELECT e.lieux_interventions FROM Employes e

WHERE e.numero = 1);

(56)

Interrogation des

Interrogation des tuples tuples

Utilisation des fonctions d’agrégats

(COUNT, SUM, AVG, MAX, MIN) sur une table imbriquée

Exemple

Donnez le nombre de contrats dans la ville de

Dijon pour l’employé numéro « 1 »

(57)

Interrogation des

Interrogation des tuples tuples

Utilisation des curseurs

Syntaxe

SQL> SELECT alias. att, CURSOR ( SELECT ti.att2, ti.att2 FROM TABLE (Tab_Imb) ti) FROM table alias

WHERE condition;

(58)

Interrogation des

Interrogation des tuples tuples

Utilisation des curseurs

Exemple

Donnez les employés (nom et prénom) et les villes respectives

SQL> SELECT Emp.numero, Emp.nom, Emp.prenom,

(59)

Interrogation des

Interrogation des tuples tuples

Utilisation des curseurs

Exemple

Donnez les employés (nom et prénom) et les villes respectives

SQL> SELECT e.numero, e.nom, e.prenom,

CURSOR (SELECT CURSOR (SELECT * FROM contrats p)

FROM TABLE(e.lieux_interventions) d)

FROM Employes e;

(60)

Heritage Heritage

Pour utiliser des sous-types dans SQL3, il faut définir des types non finaux

Exemple

SQL> CREATE or replace TYPE etudiant_type AS OBJECT (no_insee VARCHAR2(13), age NUMBER, nom VARCHAR2(30)) not final;

/

(61)

Heritage Heritage

Pour utiliser des sous-types dans SQL3, il faut définir des types non finaux

Exemple

SQL> CREATE TABLE etudiants_IUT of etudiant_IUT

;

(62)

Heritage Heritage

Insertion

Exemple

SQL> INSERT INTO etudiants_IUT VALUES

('12345555',22,'Almamy','12/12/2005','1','IQ2');

(63)

M M é é thodes thodes

Vous pouvez associer à chaque type un ensemble de méthodes ou fonctions

Deux étapes sont à suivre

1. Lors de déclaration de la fonction (Create ou ALTER)

SQL> CREATE OR REPLACE TYPE Nom_Type AS OBJECT (

Nom_attribut1 Type_Attribut, Nom_attribut2 Type_Attribut,

……..

Nom_attributn Type_Attribut [final|not final]

MEMBER FUNCTION nom_fonction1 RETURN type_données

MEMBER FUNCTION nom_fonction2 RETURN type_données

)

;

(64)

M M é é thodes thodes

Vous pouvez associer à chaque type un ensemble de méthodes ou fonctions

Deux étapes sont à suivre

2. Spécification du corps de la fonction

SQL> CREATE OR REPLACE TYPE Nom_Type AS OBJECT (

Nom_attribut1 Type_Attribut, Nom_attribut2 Type_Attribut,

……..

Références

Documents relatifs

Nous proposons de fournir un clus- tering dur, mais partiel, dans lequel certaines relations entre paires d’objets sont inconnues et peuvent être remplacées de différentes ma-

Le serveur de données intègre un Système de Gestion de Base de Données SGBD (logiciel) ainsi qu’un espace de stockage des données (support physique).. E XEMPLE :

• Dans la relation PROJECTION, les deux premiers tuples montrent que les attributs idCiné et idFilm ne suffisent pas à définir une clé candidate. • Il existe deux tuples ayant

L’archive ouverte pluridisciplinaire HAL, est destinée au dépôt et à la diffusion de documents scientifiques de niveau recherche, publiés ou non, émanant des

sition growth, they carried out Surface Differential Reectivity Spectroscopy (SDRS) measurements to study the LSPR response as a function of the equivalent thickness of

Three groups of parties have historically received the highest shares of popular votes: the Pakistan Muslim League (PML), the Pakistan Peoples Party (PPP), and, in 2018,

toute expression logique de prédicat de 1-er ordre – note: seulement 5 sont primitives (lesquels ?). • La puissance expressive de l'algèbre

Le corps humain, la personne et l’engendrement ne sont donc pas des entités ou des actes purement biologiques mais sont toujours déjà investis de sens, inscrits dans un système de