AU : 2015 - 2016
Atouts du modèle relationnel
• Un modèle simple pour l’utilisateur
▫ BD = ensemble de tables
• Un modèle formellement bien fondé
▫ algèbre → implantation et optimisation
▫ calcul → BD logique
• Une méthode de conception de schéma
▫ normalisation
• Un langage de manipulation de données universel
▫ SQL
• Un modèle de transactions sûr
▫ sérialisabilité et verrouillage à 2 phases
• Des SGBD commerciaux ou libres performants
▫ Access, DB2, Oracle, MySQL, PostgreSQL, SQL Server,
Sybase…
Limites du modèle relationnel
• Principaux concepts :
▫ objet
▫ classe
▫ héritage
▫ polymorphisme
▫ persistance
Sémantique de l’héritage
• Substitution
▫ Un étudiant est une personne car tout programme qui
s’applique à une personne peut être appliqué à un
étudiant.
• Spécialisation
▫ Un étudiant est une personne car il a toutes les propriétés
(attributs et opérations) d’une personne plus des
propriétés spécifiques.
• Restriction
▫ Un adolescent est une personne dont l’âge est compris
entre 12 et 18 ans.
• Inclusion
▫ Un étudiant est une personne car l’ensemble des
étudiants de la BD est un sous-ensemble de celui des
personnes.
SGBD objets purs
• Principe :
▫ on ajoute au relationnel un certain nombre des
concepts de l’approche objet,
▫ on conserve la notion de table et on étend SQL.
• Une nouvelle version de SQL :
▫ SQL:1999 qui étend et intègre SQL 92.
• Disponible partiellement sur DB2, Oracle,
PostgreSQL, SQL Server, Sybase…
SQL:1999
• Types distincts
• Types utilisateurs (UDT)
• Tables typées
• Héritage :
▫ hiérarchie de types
▫ hiérarchie de tables
• Méthodes associées aux UDT
Nouveaux types prédéfinis
Le relationnel objet ajoute des types prédéfinis à
la norme SQL :
• référence
• collection
• LOB (lié aux objets de grande taille)
Les types utilisateur
Supportent l’héritage
Création d’un type de données
Sous Oracle :
select e.nom, e.age()
from employe e
where e..age() < 40
Références
En SQL99 :
select nom, e.dept->lieu
from employe e
Pointeur NULL
insert into employe values (
1230, 'Durand', …, NULL);
update employe
set dept =
(select REF(d)
from dept d
where numDept = 10)
where matricule = 7500;
UPDATE emp_soc_australienne
SET salaire = 2 * salaire;