Vous êtes sur la page 1sur 18

26/02/2017

1 ING
Institut Suprieur dInformatique ISI - Tunis
Anne Universitaire 2016-2017
Dorra BEN AYED MEZGHANI

 SQL3 : 1re Partie : Cration de Type

1
26/02/2017

Type simple
Pointeurs
Tables imbriques
Dans une table relationnelle
Dans une table objet
Tables pr-dimensionnes
Manipulation des collections

 Amlioration du modle de donnes


Toujours bas sur une structure tabulaire
Trois types de tables:
 tables 1FN (traditionnelles)
 tables NF2(non-1NF: NFNF): contenant des lments
structurs
 Tables d'objets
Domaines de valeurs dfinis par l'utilisateur: Type
 Pour dcrire des structures complexes et multivalues
 Pour crer des objets: paires <OID, valeur>
 Pour dfinir des mthodes
Types peuvent tre organiss en hirarchies d'hritage
Liens dfinis en utilisant l'oprateur REF

2
26/02/2017

 Le constructeur TYPE permet de dfinir des types


utilisateur :
CREATE TYPE <dfinition du type>
 TYPE est le mcanisme de base pour introduire des
aspects non traditionnels :
types collections (supportant la multivaluation)
 VARRAY: Tableau
 Table imbrique
Structures complexes:
 Valeurs complexes (supportant des attributs
complexes)
 Objets: (OID, valeur complexe)

 La dfinition d'un type inclut la dfinition de ses mthodes

 Les types objet permettent de crer des structures complexes


monovalues pouvant tre utilises pour:
Crer des valeurs complexes
Crer un objet ayant une valeur complexe: <OID, valeur
complexe>
CREATE [OR REPLACE] TYPE nomType AS OBJECT
(nomAttribut typeAttribut [,nomAttribut typeAttribut ]);
typeAttribut peut tre
Un type prdfini (VARCHAR2, NUMBER, DATE, )
Un type objet
Aucune contrainte d'intgrit ne peut tre associe la
description d'un attribut dans un type.

3
26/02/2017

CREATE TYPE <nom_type> AS OBJECT (


<attribut1> <type1>,
<attribut2> <type2>,

<attributn> <typen>, );

4
26/02/2017

10

5
26/02/2017

 Cration d'une table relationnelle


CREATE TYPE TAdresse AS OBJECT
(rue VARCHAR2(50),
ville VARCHAR2(30),
codePostal CHAR(4));

CREATE TABLE TabSalaris


(num CHAR(4) NOT NULL PRIMARY KEY,
nom VARCHAR(30),
prnom VARCHAR(30),
adresse TAdresse,
sal NUMBER(8, 2),
comm NUMBER(8,2),
dateEmbauche DATE NOT NULL);

11

 Insertion de lignes
INSERT INTO TabSalaris
VALUES ('1234', 'BenSalah', 'Mohamed',
TAdresse('20 rue de la rpublique', 'Sfax', '3021'),
1200, 400, TO_DATE('14/01/00', 'DD/MM/YY'));
 Slection de lignes :
Pour afficher la valeur d'un attribut d'une colonne
de type objet, il faut faire prcder le nom de
l'attribut, du nom de la colonne :
nomColonne.nomAttribut
Exemples :
SELECT s.adresse.ville FROM TabSalaris s;

12

6
26/02/2017

 Modification de ligne
L'accs la valeur modifier se fait de la mme
manire que pour la slection.
Exemple :
Update tabSalaris s
SET s.adresse.codePostal ='3000'
WHERE num='1234';
 Suppression d'un type d'objet
Un type ne peut tre supprim que s'il n'est pas
rfrenc dans la description d'un autre type objet ou
d'une table.
DROP TYPE nomTypeObjet;

13

14

7
26/02/2017

15

16

8
26/02/2017

Affichage

17

Mise jour et Suppression

18

9
26/02/2017

19

 Cration
CREATE TYPE <nom_type> AS OBJECT (
<attribut1> <type1>,
<attribut2> <type2>,

<attributn> <typen>, );

CREATE TYPE t_adresse AS OBJECT


( num NUMBER,
rue VARCHAR2(30),
ville VARCHAR2(20),
codepostal CHAR2(5)) ;

20

10
26/02/2017

On peut ensuite utiliser ce type objet (ou type


utilisateur)

soit pour dfinir dautres types objet qui


contiennent cette structure.(voir
(voir cas1)

soit pour dfinir une table relationnelle standard


.(voir cas2)

soit pour dfinir une table relationnelle objet (ou


table objet relationnelle) (voir cas3)

21

CREATE TYPE t_adresse AS OBJECT


( num NUMBER,
rue VARCHAR2(30),
ville VARCHAR2(20),
codepostal CHAR2(5)) ;

CREATE TYPE t_personne AS OBJECT


( nom VARCHAR2(30),
prenom VARCHAR2(30),
Cas1
adresse t_adresse ) ;

22

11
26/02/2017

 Dans une table relationnelle, on lutilise comme un type


prdfini standard.

CREATE TABLE employes


( num NUMBER,
Cas2
dept NUMBER,
salaire NUMBER,
adresse t_adresse, --type objet
nom VARCHAR(30),
PRIMARY KEY num --dfinir des contraintes habituelles sur la table
) ;

23

 Une table objet relationnelle est une table qui contient des
lments de type objet.
 Chaque lment est identifi par un numro appel OID (Object
Identifier).
Exemple avec le type t_adresse
CREATE TABLE adresses OF t_adressse ;

Remarque
 On peut crire des contraintes comme en relationnel standard
lors de la cration de la table,
 on peut dfinir des cls, etc.
Cas3
CREATE TABLE adresses OF t_adresse (ville DEFAULT Tunis) ;

24

12
26/02/2017

 On a une relation dont chaque lment est un objet de type t_adresse.


t_adresse
 On peut voir la relation de deux manires diffrentes :
- vision objet

- vision relationnelle

Exemple dobjet de type t_adresse

t_adresse (2, rue les orangers, Tunis, 1082)


Syntaxe
<constructeur de type> ( <valeurs des diffrents champs du type t_adresse>)

25

 Insertion dans une table relationnelle


On utilise le constructeur dobjet
INSERT INTO employes t_adresse pour crire ladresse
VALUES ( 1000, 15, 2000,
t_adresse (2, Rue les orangers,Tunis,1002),
BenFoulen) ;

INSERT INTO employes


VALUES (2000, 12, 1000,
t_adresse (10, Rue les fruits,Menzah,1004),
BenSalah) ;

INSERT INTO employes


VALUES (3000, 12, 1100,
t_adresse (10, Rue les pommes,Menhah,1004),
BenMrad) ;

26

13
26/02/2017

Manipulation : slection cas2

 Interrogation dans une table relationnelle

SELECT * FROM employes ; -- Rsultat


num dept salaire adresse (num,rue,ville,cp
(num,rue,ville,cp)
num,rue,ville,cp) nom

1000 15 2000 t_adresse (2, Rue les orangers,Tunis,1082) BenFoulen

2000 12 1000 t_adresse (10, Rue les fruits,Menzah,1004) BenSalah

. . . . .

SELECT e.adresse FROM employes e; -- Rsultat


Alias
adresse (num,rue,ville,cp
(num,rue,ville,cp)
num,rue,ville,cp)
obligatoire
t_adresse (2, Rue les orangers,Tunis,1082)

SELECT e.adresse.num FROM employes e; -- Rsultat


adresse.num
2 27

Manipulation : insertion cas3

Les deux requtes sont quivalentes :


 Insertion dans une table objet relationnelle on insre un n-uplet
un OID lui est attribu lors de
linsertion

On a deux manires dinsrer des n-uplets :

soit avec le constructeur de type (vision objet)

INSERT INTO adresses


VALUES (t_adresse(30, rue jasmins, Ariana, 1004)) ;
-- on insre un objet avec constructeur de type et valeurs des champs du type objet

soit en prcisant chacun des champs (vision relationnelle)

INSERT INTO adresses


VALUES (30, rue jasmins, Ariana, 1004) ;
-- on prcise les valeurs des diffrents attributs de la table relationnelle

28

14
26/02/2017

Manipulation : interrogation cas3

Interrogation dans une table objet relationnelle

1/ On peut accder aux valeurs comme dans le cas du relationnel standard.

SELECT * FROM adresses ;


SELECT a.num, a.rue, a.ville, a.cp FROM adresses a ;

- - a est un alias de table

Quobtient on comme relations avec cette requte ?


En accdant aux valeurs des attributs
num rue ville cp
30 rue jasmins Ariana 1004

. . .

29

Manipulation : interrogation cas3

Interrogation dans une table objet relationnelle

2/ On peut accder aux objets.

SELECT VALUE(a) FROM adresse a ;


- - a est un alias de table et VALUE est un mot cl pour rcuprer les objets

Quobtient on comme relations avec cette requte ?


En accdant aux objets

VALUE (a) (num, rue, ville, cp)


t_adresse(30, rue jasmins, Ariana, 1004)
..

30

15
26/02/2017

Manipulation : interrogation cas3


Interrogation dans une table objet relationnelle

3/ On peut accder aux OID

SELECT REF(a) FROM adresse a ;

-- a est un alias de table et REF est un mot cl pour rcuprer les OID

Quobtient on comme relations avec cette requte ?

En accdant aux OID; On obtient une relation de rfrence o chaque


rfrence correspond un code assez long fait de chiffres et de lettres.

Remarque :
Dans le cas dune table relationnelle standard utilisant des types objets, on
naura pas dOID pour les n-uplets donc pas de SELECT REF() ou de
SELECT VALUE()

31

Reprsentation UML

CREATE TYPE t_adresse AS OBJECT


( num NUMBER,
rue VARCHAR2(30),
ville VARCHAR2(20),
codepostal CHAR2(5)) ;

CREATE TABLE adresse OF t_adresse;

32

16
26/02/2017

Reprsentation UML

adresse

CREATE TYPE t_adresse AS OBJECT


(num NUMBER,
rue VARCHAR2(30),
ville VARCHAR2(20),
codepostal CHAR2(5)) ;

CREATE TYPE t_personne AS OBJECT


( nom VARCHAR2(30),
prenom VARCHAR2(30),
adresse t_adresse ) ;

CREATE TABLE personne OF t_personne;

33

Exemple de manipulation

SELECT * FROM personne;

SELECT e.adresse.rue FROM personne e;

UPDATE personne e
SET e.adresse.ville = Tunis',
e.nom = BenFOULEN
WHERE e.nom = BenFOULEN;

DELETE FROM personne e


WHERE e.adresse. codepostal = 1004;

34

17
26/02/2017

Recommandation sous Oracle

 Faux:
SELECT employeur.activity
FROM Cadre;
 Faux:
SELECT Cadre.Employeur.activity
FROM Cadre;
 Correct:
SELECT cc.Employeur.activity
FROM Cadre cc;

35

18