Introduction aux systèmes de bases de données
Introduction aux systèmes de bases de données
Bases de données
Chapitre 1 : Environnement de base de données
1 Système de bases de données dans l’environnement informatique
Les systèmes de bases de données constituent une discipline fondamentale dans plusieurs
domaines scientifiques et en particulier dans le domaine informatique. Nous pouvons localiser
les SBD comme suit :
2 L’historique du développement des BDs
L’historique des bases de données remonte au début des années 60. Le système était alors basé
sur des fichiers. Il s’agit de l’organisation classique en fichiers.
Un fichier est un ensemble d’information, désigné par un nom précis, que le système
d’exploitation d’un ordinateur manipule comme une simple entité, dans sa mémoire ou sur un
support de stockage.
La fin des années 60 a vu l’apparition des premiers SGBD (Système de Gestion de Bases de
Données), les systèmes réseaux et hiérarchiques. La deuxième génération de SGBD, appelée les
systèmes relationnels, a été introduite à partir de 1970. En fin au début des années 80, la 2e
génération SGBD cède la place à la 3e appelée systèmes orientés objets.
fichier
saisie Etats de
traitement sortie
∗ Séparation et isolement des données
∗ Dédoublement des données
o Les doublons constituent une perte de temps
o Les doublons consomment de l’espace de stockage avec des coûts associés
o Les doublons entraînent une perte d’intégrité des données qui perdent ainsi leur
cohérence
∗ Incompatibilité des formats de fichiers. L’incompatibilité des fichiers limite leur
utilisation conjointe. Ceci est dû à la structure des fichiers dans les programmes
d’application.
∗ La prolifération des programmes d’application. Les exigences des nouvelles requêtes par
l’utilisateur final entraînent la modification du code gérant le fichier concerné.
Saisie + Etats de
Conrôle DB traitement sortie
Utilisateurs
Organisation de base de données
L’organisation de base de données garantit l’indépendance entre les données et les programme-
données c’est-à-dire les applications de traitement des données. Elle garantit également
l’exploitation et la gestion simultanée des données par plusieurs utilisateurs. A cet effet, il
convient de redéfinir la base de données comme une collection auto-descriptive
d’enregistrements intégrés.
La description des données est désignée de catalogue système ou dictionnaire des données ou
encore métadonnées c’est-à-dire les « données à propos des données ».
L’approche adoptée par les systèmes de base de données est comparable à l’approche suivie dans
le développement des logiciels modernes, où une définition interne d’un objet et une définition
externe distincte sont fournies. Les utilisateurs d’un objet ne voient que la définition externe et
ignorent comment l’objet est défini et comment il fonctionne.
L’organisation de BD présente les propriétés suivantes :
• Usage multiple des données
• Accès facile, rapide, protégé, puissant.
• Coût réduit de stockage, de mise à jour et de saisie
• Disponibilité, exactitude, cohérence, non redondance
• Indépendance des données et des programmes
Chapitre 2 : Système de gestion de base de données
(SGBD)
1 Historique des systèmes de base de données
L’origine du SGBD remonte au début des années 1960, lorsque le projet Apollo d’alunissage
fut lancé. Alors un logiciel de structure hiérarchique fut développé sour le nom de GUAM
(Generalized Update Access Method). Au milieu des années 1960 IBM se joignit à NAA (North
American Aviation, qui initie du projet de faire alunir un homme) pour développer ensemble
l’IMS (Information Management System).
Le milieu des années 1960 a vu émerger un autre logiciel appelé l’IDS (Integrated Data
Store), c’est-à-dire stockage des données intégrées. Ces travaux de développement de logiciel
vont donner naissance à un nouveau type de système de base de données connu sous le terme de
SGBD en réseau.
En 1965, suite à la conférence portant sur les langages de systèmes de données, le groupe
List Processing Task Force, qui fut renommé Data Base Task Group (DBTG) dut crée.
DBTG édite en 1971 le premier rapport définissant les normes de spécification qui
permettent la création de base de données et la manipulation des données.
Dans le cadre de la normalisation, le DBTG a spécifié trois langages.
- Un langage de définition de données (LDD)
En anglais DDL, Data Definition Language, il permet à l’administrateur de Base de Données de
définir le schéma. On entend par schéma, l’organisation logique de la base de données (nom de
BD type d’enregistrement).
Un LDD de sous-schéma qui permet aux programmes d’application de définir les parties de
base de données dont ils ont besoin.
Un langage de manipulation de données (LMD) en anglais DML, Data Manipulation
Language. Il permet de la recherche des données, la mise à jour ; la transformation des données.
Un langage de protections d'accès (LCD). Il est possible de définir des permissions au niveau
des utilisateurs d'une base de données. On parle de DCL (Data Control Language).
Le développement d’un langage de requête structuré appelé SQL vers la fin des années 1970 a
permis à mettre sur pied un langage standard des SGBD relationnels.
2 Les SGBD
SGBD est le système logiciel qui permet aux utilisateurs de définir, créer, mettre à jour une base
de données et d’en contrôler l’accès. Le SGBD est le logiciel qui interagit avec les profanes
d’application de l’utilisateur et la base de données.
En général, un SBGD assure les fonctions suivantes :
- Description des données à l’aide d’un LDD
- Insertion, mise à jour, suppression, recherche des données à l’aide d’un LMD. LMD est
appelé langage de requête (en anglais query language). Il permet la recherche générale
sur les données.
- Contrôle des accès à la base de données à l’aide d’un LCD
La disponibilité d’un langage de requête soulage le problème des systèmes basés sur les fichiers
où l’utilisateur doit se contenter d’une série de requêtes bien préfinies et fixes.
Le langage de requête de plus connu est le SQL : Le langage de requête structuré (en anglais
Structured Query Language).
Les programmes d’application de base de données constituent des programmes informatiques qui
interagissent avec la base de données en lui adressant une requête appropriée (généralement sous
la forme d’une instruction SQL) au SGBD. Les utilisateurs naifs interagissent avec la base de
données par l’entremise de programmes d’application qui servent à manipuler les données et
générer les informations (lot de commandes, les applications dites en ligne exp : [Link]).
Données
Monde réel
spécification
indépendant
d’un SGBD
Schéma conceptuel
spécifique à
un SGBD
Schéma logique
transformation
modèle logique Schéma interne
Conception
physique
Nous pouvons distinguer 2 niveaux ou phases de conceptions : la conception logique de BD et la
conception de BD physique.
La conception logique de BD consiste à identifier les données c’est-à-dire les entités et les
attributs, les associations entre les données et les contraintes sur les données qu’il faut stocker
dans la base de données. Pour être efficace, le concepteur logique de BD doit impliquer tous les
utilisateurs potentiels de la BD dans le développement du modèle de données et cette implication
doit commencer aussitôt que possible.
La conception de base de données physique consiste à décider de la manière dont le design
logique de données est physiquement réalisé. Le concepteur de BD physique transpose le design
logique en un ensemble de tables et contraintes d’intégrité. Il décide de la structure de stockage
spécifique et de méthodes d’accès afin d’atteindre la meilleure performance. Il conçoit les
mesures de sécurité requises au niveau des données.
3.2 Inconvénients
- Complexité : La fourniture des fonctionnalités que nous espérons d’un SGBD fait de
celui-ci un logiciel extrêmement complexe.
Les concepteurs et les développeurs de base de données, les administrateurs de BD et les
utilisateurs doivent comprendre ces fonctionnalités pour en tirer le parti maximal.
- Taille : La complexité ainsi que la manne de fonctionnalités font du SGBD un logiciel
extrêmement lourd, occupant de nombreux mégaoctets d’espace disque et requérant de
substantielles quantités de mémoire pour fonctionner efficacement.
- Coût des SGBD : Le coût des SGBD varie vraisemblablement, selon l’environnement et
les fonctionnalités offertes.
- Coût de conversion : On parle ici aussi de legacy system c’est-à-dire système hérité dont
le coût de mise à jour est très élevée.
- Performances : Le SGBD est écrit où développé pour satisfaire plusieurs applications.
Ceci engendre un fonctionnement lent des systèmes d’application.
- Impact plus marqué d’une panne : La centralisation des ressources augmente la
vulnérabilité du système. Etant donné que les SGBD, toute panne de certains composants
peut entrainer l’arrêt de tous les opérations.
Chapitre 3 : Architecture des bases de données
1. Architecture à trois niveaux ANSI-SPARC
L’objectif de l’architecture à trois niveaux ANSI-SPARC est de séparer les vues que chaque
utilisateur peut avoir de la base de données et de la manière dont la base de données se présente
physiquement. Dans un système de base de données, les structures de données sont représentées
par trois schémas introduits dans l’architecture ANSI-SPARC sous forme de niveaux et désignés
de niveau interne, conceptuel et externe.
niveau
Schéma conceptuel
conceptuel
niveau
interne Schéma interne
Base de
données
La façon dont les utilisateurs perçoivent les donnés s’appelle le niveau externe. La vue externe
ne reprend que les entités, les attributs et les associations du monde réel qui intéressent
l’utilisateur. Le niveau externe offre différentes représentations des mêmes données.
La façon dont le SGBD et le système d’exploitation perçoivent les données constitue le niveau
interne, où les données sont réellement stockées dans les structures de données et les
organisations de fichiers. Le niveau interne désigne la représentation physique de la base de
données dans l’ordinateur.
Le niveau conceptuel fournit à la fois la correspondance et l’indépendance souhaitées entre les
niveaux externes et internes. Ce niveau décrit la structure logique de toute la base de données. Il
représente les entités, leurs attributs et leurs associations, les contraintes qui s’y appliquent aux
données, les informations sémantiques ainsi que la sécurité et l’intégrité des données.
Vue externe 1
Niveau
conceptuel numPersonnel prénom nom dateDeNaissance salaire numDépartement
L’architecture propose trois couches qui s’exécutent potentiellement sur des plates-formes
différentes.
3) La dernière couche, dont le rôle principale est de stocke les données nécessaires récues de
la couche intermédiaire, s’exécute sur un serveur, désigné comme serveur de base de
données.
4)
Deuxième conceptuel :
Serveur d’application Tâches:
Logique métier
Logique de traitement
Troisième niveau:
Serveur
Tâches:
Validation des données
Accès à la base de données
Base de
données
3. Modélisation de base de données
La modélisation des données vise la structuration systématique afin d’obtenir une vue élégante
sur toutes les données de l’entreprise. A cette fin, les types de données constituent les
composantes centrales de chaque système d’information. Chaque type comporte des attributs.
Les valeurs que les attributs peuvent prendre dans un contexte sont désignées d’informations.
Les objets sont reliés les uns aux autres. A travers différents niveaux d’abstraction la vue sur
les données couvre tous les rapports d’information sur le plan des tâches dans le système
d’information. La base de donnée est un modèle c’est-à-dire une partie relevante du système
d’objet de l’entreprise. Le schéma conceptuel des données définit la structure statique de la base
des données. Le modèle des données ou modèle meta est un outil pour la construction des
schémas de données conceptuels. La modélisation des données appartient au processus de
conception d’une base de donnée et est extrêmement importante surtout dans le principe d’une
vue globale de l’entreprise sur les données. Elle a pour but de garantir l’intégrité sémantique des
données (libre des inconsistances et des contradictions). Le fondement théorique du calcul
relationnel est la logique des prédicats selon Codd 1970. Les propriétés sont les suivantes :
La modélisation conceptuelle est une phase importante dans la conception réussie d’une base
de donnée. L’application d’une base de donnée se rapporte en général à une base de données
particulières - par exemple une base de données bancaires s’occupe des comptes des clients - et
les programmes y associés implémentent les requêtes et les actualisations (updates).
Le modèle de données est un système de concepts pour la description des données. Il définit
la syntaxe des schémas de la base de données et l’interprétation Schéma de la base de données Æ
Etats de la base de données. Les modèles classiques des données sont : le modèle hiérarchique,
le modèle en réseau, le modèle relationnel et le modèle orienté objet.
4. Le modèle Entité/Association (E/R)
Développé par Peter Chen en 1976, le modèle E/R a aujourd’hui une grande signification dans
l’informatique et ce en rapport avec la modélisation des relations du monde réel. Le modèle E/R
s’est imposé pour plusieurs raisons :
• Il est indépendant d’un système de base de données quelconque
• Ses concepts de base « entité » « relationship/association » sont des moyens d’expression
naturelle.
Ce modèle méta est très répandu et sert à la modélisation des choses et de leurs relations.
Les concepts de base sont les entités, les relations et les attributs.
Entity : Objet réel ou imaginaire qui appartient à un type d’entité. Par exemple. « Monsieur X
(entité) est employé (type d’entité). Le symbole de représentation est un rectangle. La description
se fait au singulier. Client
Voiture
Relationship : Relation entre plusieurs entities : Par exemple, Monsieur X est chef (relationship)
de monsieur Y. Pour la notation l’on utilise le singulier et le symbole de représentation est le
losange. La cardinalité appartient au typ de la relation ou association.
Client
loue
Voiture
Complexité ou cardinalité d’une relation. Elle donne le rapport que les entités entretiennent entre
elles, soit unique (1 :1), un à plusieurs (1 :m) ou complexe (n :m). Elle donne combien d’entités
A sont en relation avec une entité B. Elle est toujours collée à l’entité en question. Il est
important que la cardinalité reflète les faits réels entre les entités. Par exemple, une voiture de
location peut être louée par personne ou par un seul client. Mais un client peut louer une ou
plusieurs voitures.
Client
(0,1)
loue
(1 n)
Voiture
Un attribut décrit les propriétés d’un type d’entité ou de relations, par exemple, matricule d’un
étudiant ou la date à laquelle un employé a été embauché. Les attributs obéissent au principe des
types abstraits et appartiennent généralement à des domaines bien précis. Le symbole est ovale et
les inscriptions sont des substantifs au singulier. Il existe aussi des attributs identificateurs
désignés de key (clé), primaire ou étrangère. Une clé est une combinaison minimale d’attributs
identificateurs. Le symbole des clés est un ovale avec les attributs soulignés.
1:n
Nr-Client., Nom,
Lieu, Telephone Client
Client
achète
1
Nr-Client., , Nr-
Immatriculation.,
Voiture
n
loue Durée
Voiture
1 n 1
est_chef suit achète
1 m n
Département UV Voiture
Entité
Définition : Une déclaration d’entité a la forme E = (X, K). Elle se compose d’un nom E,
d’un format X et d’une clé primaire K qui se compose des éléments de X.
Les éléments du format X sont notés comme suit
(i) Attributs unaires : A
(ii) Attributs à valeur multiple : {A}
(iii) Attributs composés : A(B1,…, Bk)
L’on dit aussi entité.
Exemple Livre = ({InvNr, {Auteur}, Titre, Maison(Nom, Lieu), Année}, {InvNr})
Lecteur = ({LNr, Nom(PreN, NomF), Adresse(Rue, Lieu)}, {LNr})
Associations/Relationships
Pour représenter les rapports entre les entity sets, le modèle E/R propose les relations.
Définition : Une déclaration d’association (relation) a la forme R = (Ent, Y). R est le nom de
la déclaration (ou nom de l’association), Ent est la séquence des noms des déclarations d’entités
entre lesquelles une relation est définie et Y est une séquence d’attributs (pouvant être vide).
Lecteur
Fournisseur Accessoires
emprunte DateR
livre
Nombre Firme
Livre
n
Livre
Si la relation 1:n existe entre les entités E1 et E2, alors entre E2 et E1, il existe une relation
m :1.
emprunte = ((Livre, Lecteur), (DateR)) est de type m :1. Chaque livre ne peut être emprunté
(simultanément) qu’à un seul lecteur, mais un lecteur peut emprunter plusieurs livres.
m :n many to many.
m emprunte
1 Pays
Lecteur
Livre exporte
n
m 1 Produit
emprunte
is
Pilote Technicien
Personne
is
is
attributs
degré
Une relation est une table avec des colonnes et des lignes. Un attribut est une colonne nommée
de la relation. Un domaine set un ensemble de valeurs admissibles pour un ou plusieurs attributs.
Les éléments d’une relation sont des les lignes, n-uplets ou tuples. Une relation peut-être unaire
donc un tuple de un : i elle comporte deux ou trois attributs alors elle est respectivement binaire
ou tertiaire. Le terme n-aire (n-uplet) pour designer une relation de degré n ou ayant n attributs.
Un tuple est une ligne dans une relation. Le degré d’une relation est le nombre d’attributs qu’elle
contient. La cardinalité ou le cardinal d’une relation est le nombre de tuples qu’elle contient.
Une base de données relationnelle est donc une collection de relations normalisées, portant des
noms de relation distincts.
Relations mathématiques
Supposons nous disposons de deux ensembles, E1 et E2, où E1 = {2, 4} et E2 = {1, 3, 6}. Le
produit cartésien de ces deux ensembles s’écrit E1 x E2 et constitue l’ensemble de toutes les
paires ordonnées dont le premier élément est un membre de E1 et le second élément est un
membre de E2.
Dans ce cas nous avons E1 x E2 = {(2, 1), (2, 3), (2, 6), (4, 1), (3, 3), (4, 6)}. Tout sous-semble
de ce produit est une relation, par exemple nous pouvons produire une relation R = {(2, 1), (1,
4)}. Nous pouvons imposer une condition à sélection de nos sous-ensembles. Par exemple :
R = {(x, y) | x є E1, y є E2 et y=1} ou S = {(x, y) | x є E1, y є E2 et x=2y}
L’on obtient après avoir enlevé les Auteurs du livre la transformation suivante
Livre InvNr Titre Maison Lieu Année
Les relations m :n. L’on ne possède pour ce type d’associations que la notion de relation. Il est
nécessaire de la transformer sous une forme plus simple. Il est nécessaire de la transformer sous
une syntaxe plus simple de type 1 :1 ou 1 :n.
Par exemple pour la relation Exporte, l’on a, en supposant que chaque pays possède une désignation, et chaque produit à un numéro
(ProduitNr), la table suivante.
Pays
Relations 1 :1 et 1 :n. Leur transformation est simple. Par exemple pour la relation Emprunt,
l’on peut créer facilement une nouvelle table.
Mais en introduisant les clés LecteurNr et l’attribut DateR parmi les attributs du schéma
relationnel Livre, l’on obtient :
Livre InvNr Titre MaisonNom MaisonLieu Année LecteurNr DateR
L’on obtient ainsi une optimisation par réduction du nombre de tables à gérer.
La relation is-a : Pour le cas Pilot ⊆ Employé, l’on obtient une table
Pilote EmployéNr Heures Licence
L’on peut alors définir RENAME qui peut renommer le nom de la relation, les attributs ou les
deux. L’opération RENAME appliquée à une relation R de degré n est dénotée par
ρS(B1,B2,…,Bn)(R) ou
ρS(R)
ρ(B1,B2,…,Bn)(R)
où ρ (rho) est utilisé pour dénoter l’opérateur RENAME
S est le nouveau nom de la relation et
B1, B2,…, Bn sont les noms attributs
La première variante renomme aussi bien le nom de la relation que les attributs
La deuxième renomme seulement la relation
La troisième seulement les attributs
Si les attributs de R sont (A1, A2, …, An) alors chaque Ai est renommé en Bi.
UNION : Le résultat de cette opération dénotée par R ∪ S inclut tous les n-uplets de R et tous
ceux de S. Les duplicata sont éliminés.
INTERSECTION : Le résultat dénoté par R ∩ S inclut tous les n-uplets qui sont éléments de R
et de S.
SET DIFFERENCE : le résultat dénoté par R-S inclut tous les n-uplets qui sont dans R et non
dans S.
Le produit cartésien (CARTESIAN PRODUCT ou CROSS PRODUCT ou encore CROSS
JOIN) est dénoté par ×. En général, le résultat de R(A1,A2, …, An) × S(B1,B2, …, Bm) est une
relation Q(A1,A2, …, An,B1,B2, …, Bm) avec n+m attributs. Si R a nR uplets et S nS uplets alors R
× S a nR * nS.
Par exemple si l’on veut ressortir tous les employés dépendants d’un employé de sexe féminin.
FEMALE_EMPS Å σ SEX =’ F’ ( EMPLOYEE )
EMPNAMES Å πFNAME, LNAME, SSN(FEMALE_EMPS)
EMP_DEPENDENTS Å EMPNAMES × DEPENDENT
ACTUAL_DEPENDENT Å σ SSN =ESSN (EMP_DEPENDENTS)
RESULT Å πFNAME, LNAME, DEPENDENT_NAME (ACTUAL_DEPENDENT )
Le produit cartésien des n-uplets avec les attributs combinés de deux relations.
JOIN : L’opération JOIN ⋈ est utilisée pour combiner les n-uplets de deux relations dans des n-
uplets simples. Cette opération est très importante pour les bases de données relationnelles avec
plus d’une relation car elle permet de traiter les relations entre les tables.
Pour ressortir le nom des managers, l’on a besoin de combiner chaque n-uplet de département
avec celui d’employé dont la valeur SSN correspond au MGRSSN dans le n-uplet de
département.
Il faut noter que MGRSSN est une clé étrangère (secondaire) et que la contrainte d’intégrité
référentielle joue un important rôle dans le fait de trouver des n-uplets dans la table
EMPLOYEE. L’on peut exprimer le produit cartésien précédent par un JOIN
EMP_DEPENDENTS Å EMPNAMES × DEPENDENT
ACTUAL_DEPENDENT Å σ SSN =ESSN (EMP_DEPENDENTS)
Les deux lignes deviennent simplement
La forme générale pour deux relations R(A1,A2, …, An) et S(B1,B2, …, Bm) est
R ⋈<join condition> S
Le résultat d’un JOIN est une relation Q(A1,A2, …, An,B1,B2, …, Bm) avec n+m attributs. Q a un
n-uplet pour chaque combinaison de n-uplets chaque fois que la combinaison satisfait à la
condition de jonction. Ceci constitue la différence principale du CARTESIAN PRODUCT avec
le JOIN. Dans le JOIN, seuls les n-uplets satisfaisant à la condition sont admis dans la table
résultat alors que dans CARTESIAN PRODUCT toutes les combinaisons sont acceptables. La
condition générale du JOIN est la suivante
<condition> AND <condition> AND … AND <condition>
ou chaque condition est de la forme Ai θ Bj
avec Ai est l’Attribut de R et Bj est l’attribut de S.
Ai et Bj ont le même domaine et θ est l’un de opérateurs de comparaisons {=,<,≤, >, ≥, ≠}. Une
opération JOIN avec une telle condition de JOIN est appelée THETA JOIN. Quand l’opération
est l’égalité, l’on parle d’EQUIJOIN.
DIVISION : En général l’opération DIVISION est appliquée à deux relations R(Z) ÷S(X) avec X
⊆ Z. Le résultat de la division est une relation T(Y) qui comporte un n-uplet t si des n-uplets tR
apparaissant dans R avec tR[Y] = t et avec tR[X] =tS pour chaque n-uplet tS de S. Cela signifie
que, pour qu’un n-uplet t apparaisse dans le résultat T de la division, les valeurs de t doivent
apparaître dans R en combinaison avec chaque n-uplet dans S.
ou <grouping attribute> est une liste d’attribut de la table spécifiée dans R., <function list > est
uneliste de paires (<function><attribute>). Function est l’une des fonctions suivantes SUM,
AVERAGE, MAXIMUM, MINIMUM, COUNT. attribute est un attribut de la table spécifiée
dans R.
Types de données et domaines de valeurs dans SQL2. Les types de données présents
couvrent les valeurs numériques, les chaînes de caractères, les chaînes de bits, la date et le temps.
Les valeurs numériques incluent les nombres entiers de diverses dimensions (integer ou int,
smallint), les nombres réels de précision différentes (float, real, double precision). SQL permet
de formater les par la fonction DECIMAL(i,j), ou DEC(i,j) ou NUMERIC (i,j) où i est la
précision, le nombre total de chiffres avant la virgule et j l’échelle (scale), le nombre de chiffres
après la virgule.
Les caractères et chaînes de caractères sont soit de longueur fixe CHAR(n) ou
CHARACTER(n) où n est le nombre de caractères soit de longueur variable, VARCHAR(n),
VARYING CHAR(n), CHAR VARYING(n), avec n le nombre maximum de caractères.
Les chaînes de bits sont soit fixe, de longueur n, BIT(n) ou de longueur variable BIT
VARYING( n). La valeur par défaut de n est 1.
Il existe de nouveaux types de données dans SQL2 : date et time. L’on peut spécifier
directement les tables dans les types des attributs mais l’on peut aussi introduire des domaines
comme suit
CREATE DOMAIN SSN_TYPE AS CHAR (9).
L’on peut alors utiliser SSN_TYPE en lieu et place de CHAR(9) partout où il apparaîtra.
Spécification des contraintes et des valeurs par défaut : Puisque SQL permet la valeur NULL
comme valeurs d’attribut, il est donc nécessaires de spécifier NOT NULL là où les valeurs
nulles ne sont pas permisses. Cela doit être toujours le cas pour les valeurs des clés primaires de
toutes les relations. Il est aussi possible d’introduire pour un attribut quelconque une valeur par
défaut avec le mot clé DEFAULT <value>. Suivant la spécification des contraintes
additionnelles peuvent être ajoutées.
La clause PRIMARY KEY introduit un ou plusieurs attributs comme la clé primaire de la
relation. Le mot clé UNIQUE spécifie des clés alternatives. L’intégrité référentielle est spécifiée
par la clause FOREIGN KEY.
L’on doit ensuite remplir ce nouvel attribut sinon il contiendra partout des valeurs NULL. On
peut supprimer un attribut par la commande
où <attribute list> est une liste de noms d’attributs dont les valeurs sont à ressortir par la requête.
<table list> est la liste des noms de relations requises pour traiter la requête
<condition> est une expression booléenne qui identifie les n-uplets (les lignes) à ressortir par
requête.
Définition de la syntaxe de SELECT en BNF
Query 0 : Retrieve the birthdate and the address of the employee(s) whose name is ‘John K.
Smith’
SELECT BDATE, ADDRESS
FROM EMPLOYEE
WHERE FNAME = ‘John’ AND MINIT=’K’ AND LNAME =’Smith’;
Une requête SQL avec une seule relation dans la clause FROM est similaire à une paire
SELECT-PROJECT dans les opérations de l’algèbre relationnelle. La clause du SELECT
spécifie les attributs de la projection et la clause WHERE la condition de sélection.
Query 1 : Retrieve the name and address of all employees who work for the “Research”
department
SELECT FNAME, LNAME ; ADDRESS
FROM EMPLOYEE, DEPARTMENT
WHERE DNAME = ‘Research’ AND ‘DNUMBER = DNO;
Q1 est un select-project-join.
DNAME = ‘Research’ est la condition de sélection du SELECT et la condition DNUMBER =
DNO est la condition du join.
Query 2 : For every project located in “Stafford”, list the project number, the controlling
department number, and the department manager’s last name, address, and birthdate
SELECT PNUMBER, DNUM, LNAME, ADDRESS, BDATE
FROM PROJECT, DEPARTEMENT, EMPLOYEE
WHERE DNUM = DNUMBER AND MGRSSN = SSN AND PLOCATION = ‘Stafford’
Ici l’on a deux conditions de jonction (join). DNUM = DNUMBER relie un projet au
département qui le contrôle et MGRSSN = SSN relie le département contrôleur à l’employée qui
le dirige.
4.2.1 Traitement des noms d’attributs ambigus
Dans SQL le même nom peut être utilisé pour plus de deux attributs tant que ceux-ci sont
dans des relations différentes. Dans ce cas si une requête se rapporte À deux ou plus d’Attributs
avec le même nom, alors l’on doit le qualifier le nom de l’attribut avec le nom de sa relation pour
prévenir l’ambiguïté. On préfixe alors le nom de l’attribut par le nom de sa relation.
Si dans la requête Q1 les DNO et LNAME de EMPLOYEE étaient nommés DNUMBER et
NAME comme dans DEPARTMENT l’on serait obligé de désambiguïser en reformulant la
requête comme suit :
L’ambiguïté peut aussi apparaître quand on se réfère à la même table plus d’une fois.
Query 3. For each employee, retrieve the employee’s first and last name and the first and last
name of his or her immediate supervisor.
SELECT [Link], [Link], [Link], [Link],
FROM EMPLOYEE AS E, EMPLOYEE AS S
WHERE [Link]. = [Link]
Ici l’on est obligé d’introduire des alias pour la relation EMPLOYEE.
Queries 4 and 5: Select all employee SSNs (Q4) and all combinations [Link] and
[Link] in the database.
SELECT SSN
FROM EMPLOYEE
SELECT SSN, DNAME
FROM EMPLOYEE, DEPARTMENT
Q1c: SELECT *
FROM EMPLOYEE
WHERE DNO = 5
Q1d: SELECT *
FROM EMPLOYEE, DEPARTMENT
WHERE DNAME = ‘Research’ AND DNO = DNUMBER
Pour chaque employé du département ‘Research’, Q1d ressort tous les attributs et les attributs
du département pour lequel il ou elle travaille.
nom prénom
Chose Jules
Machin Pierre
Truc Patrick
union
nom prénom
Pouf Jean
nom prénom
Chose Jules
Chose Jules
Machin Pierre
Pouf Jean
= Truc Patrick
nom prénom
nom prénom
Chose Jules nom prénom
inter Pouf Jean =
Machin Pierre Chose Jules
Chose Jules
Truc Patrick
Pour ressortir les employés nés dans les années 1950s l’on peu procéder comme suit
L’on peut aussi utiliser les opérateurs arithmétiques tels +, -, /, * dans les requêtes.
Q9: Show the resulting salaries if every employee working on the ‘ProductX’ project is given a
10 percent raise.
SELECT FNAME, LNAME, 1.1* SALARY
FROM EMPLOYEE, WORKS_ON, PROJECT
WHERE SSN= ESSN AND PNO = PNUMBER AND PNAME = ‘ProductX’;
Q10 : Retrieve all employees in department 5 whose salary is between $30,000 and 40,000
SELECT *
FROM EMPLOYEE
WHERE (SALARY BETWEEN 30000 AND 40000) AND DNO = 5;
SQL permet aussi de trier les résultats par la clause ORDER BY.
Q11 : Retrieve a list of employees and the projects they are working on, ordered by department,
ordered alphabetically by last name, first name.
SELECT DNAME, LNAME, FNAME, PNAME
FROM DPEARTMENT, EMPLOYEE, WORKS_ON, PROJECT
WHERE DNUMBER = DNO AND SSN = ESSN AND PNO = PNUMBER
ORDER BY DNAME, LNAME, FNAME
La valeur par défaut est la valeur ascendante (ASC), mais l’on peut aussi spécifier l’ordre
descendante (DESC). Le tri prendrait un autre ordre si l’on spécifiait
ORDER BY DNAME DESC, LNAME ASC, FNAME ASC
En plus de l’opération IN qui compare une valeur v à un multi-set et livre TRUE si v est l’une
des valeurs de ce bag, il existe d’autres comparaisons tels ANY (SOME) en rapport avec les
opérateurs tels {=, <, ≤, >, ≥, ≠}. Le mot clé ALL peut être combiné avec tous ces opérateurs.
Pour renvoyer les noms des employés dont le salaire est supérieur à celui de tous les employés
du département 5, l’on a
SELECT LNAME, LNAME
FROM EMPLOYEE AS E
WHERE SALARY > ALL (SELECT SALARY
FROM EMPLOYEE
WHERE DNO = 5);
Q14 Retrieve the name of each employee who has a dependent with the same first name and
same sex as the employee.
SELECT [Link], [Link]
FROM EMPLOYEE AS E
WHERE [Link] IN (SELECT ESSN
FROM DEPENDENT
WHERE [Link] = [Link] AND [Link] = SEX);
4.3.1 Les fonctions EXISTS dans SQL
Dans SQL, la fonction EXISTS est utilisée pour tester si le résultat d’une requête imbriquée est
vide ou non.
Q14 SELECT [Link], [Link]
FROM EMPLOYEE AS E
WHERE [Link] IN (SELECT *
FROM DEPENDENT
WHERE [Link] = ESSN AND [Link] = SEX AND [Link] =
DEPENDENT_NAME);
Q17/18: Retrieve the total number of employees in the company and the number of employees
in the ‘Research’ department
Q17. SELECT COUNT (*)
FROM EMPLOYEE
Q18 SELECT COUNT (*)
FROM EMPOYEE, DEPARTMENT
WEHRE DNO=DNUMBER AND DNAME = ‘Research’;
Dans certaines situations, l’on voudrait appliquer les fonctions d’agrégat á des sous-groupes de
relations. Dans ce cas l’on a besoin de regrouper les n-uplets qui ont les mêmes valeurs ou des
attributs appelés attributs de regroupement (grouping attributes). SQL prévoit la clause GROUP
BY à cette fin.
Q19 For each department, retrieve the department number, the number of employees in the
department and their average salary.
SELECT DNO, COUNT (*), AVG (SALARY)
FROM EMPLOYEE
GROUP BY DNO;
Ces n-uplets de EMPLOYEE sont regroupés selon l’attributs de regroupement DNO et les
fonctions COUNT et AVG sont appliquées à chaque groupe de n-uplets.
DNO Count(*) AVG(SALARY)
5 4 33250
4 3 31000
1 1 55000
Q20: For each project retrieve the project number, the project name, and the number of
employees who work on that project
SELECT PNUMBER, PNAME, COUNT (*)
FROM PROJECT, WORKS_ON
WHERE PNUMBER = PNO
GROUP BY PNUMBER, PNAME
Il arrive parfois qu’après le regroupement, l’on veuille juste sélectionner les n-uplets satisfont à
une certaine condition. SQL prévoit la clause HAVING à cette fin.
Q21 For each project on which more that two employees work, retrieve the project number, the
project name, and the number of employees who work on the project
SELECT PNUMBER, PNAME, COUNT (*)
FROM PROJECT, WORKS_ON
WHERE PNUMBER = PNO
GROUP BY PNUMBER, PNAME
HAVING COUNT (*) >2
Une autre variante d’INSERT permet à l’utilisateur de spécifier les attributs pour lesquels l’on
veut insérer de nouvelles valeurs. Ces attributs doivent inclure tous ceux avec une spécification
NOT NULL :
U1A: INSERT INTO EMPLOYEE (FNAME,LNAME, DNO, SSN)
VALUES (‘Richard’, ‘653298653’, 4, ‘653298653’);
L’on peut cependant aussi utiliser une variante de la commande d’insertion en rapport avec la
création d’une nouvelle table que l’on veut remplir avec le résultat d’une requête.
CREATE TABLE DEPTS_INFO
(DEPT_NAME VARCHAR(15),
NO_OF_EMPS INTEGER,
TOTAL_SAL INTEGER);
Commande DELETE: La commande DELETE supprime des n-uplets d’une relation. Elle inclut
une clause WHERE semblable à celle des requêtes SQL. Quand la clause WHERE est omise
tous les n-uplets de la relation sont supprimés.
DELETE FROM EMPLOYEE
WHERE LNAME = ‘Brown’ ;
La commande UPDATE: Elle est utilisée pour modifier les valeurs des attributs d’un ou de
plusieurs lignes sélectionnées. Elle est analogue à DELETE avec une clause de sélection
WHERE.
UPDATE PROJECT
SET PLOCATION = ‘Bellaire’, DNUM = 5
WHERE PNUMBER = 10 ;
DEPARTMENT f.k.
DNAME DNUMBER DMGRSSN
p.k.
DEPT_LOCATIONS
DNUMBER DLOCATION
p. k.
PROJECT f.k.
PNAME PNUMBER PLOCATION DNUM
p.k.
WORKS_ON
f.k. f.k.
SSN PNUMBER HOURS
p. k.
EMPLOYEE
ENAME SSN BDATE ADDRESS DBUMBER
Smith, John B. 123456789 1965-01-09 731 Fondren, Houston, TX 5
Wong, Franklin T. 333445555 1955-12-08 638 Voss, Houston, TX 5
Zelaya, Alicia J. 999887777 1968-07-19 3321 Castle, Spring, TX 4
Wallace, Jennifer S. 987654321 1941-06-20 291 Berry, Bellaire, TX 4
Narayan, Remesh K. 66688444 1962-09-15 975 Fire Oak, Humble, TX 5
English, Joyce A. 453453453 1972-07-31 5631 Rice, Houston, TX 5
Jabbar, Ahmad V. 987987987 1969-07-29 980 Dallas, Houston, TX 4
Borg, James E. 888665555 1937-11-10 450 Stone, Houston, TX 1
DEPARTMENT
DNAME DNUMBER DMGRSSN
Research 5 33344555
Administration 4 987654321
Headquarters 1 888665555
DEPT_LOCATIONS
DNUMBER DLOCATION
1 Houston
4 Stafford
5 Bellaire
5 Sugarland
5 Houston
PROJECT
PNAME PNUMBER PLOCATION DNUM
ProductX 1 Bellaire 5
ProductY 2 Sugarland 5
ProductZ 3 Houston 5
Computerization 10 Stafford 4
Reorganization 20 Houston 1
Newbenefits 30 Stafford 4
WORKS_ON
SSN PNUMBER HOURS
123456789 1 32,5
123456789 2 7,5
666884444 3 40,0
453453453 1 20,0
453453453 2 10.0
333445555 2 10,0
333445555 3 10,0
333445555 10 10,0
333445555 20 10,0
999887777 30 30,0
999887777 10 10,0
987987987 10 35,0
987987987 30 5,0
987654321 30 20,0
987654321 20 15,0
888665555 20 null
Si l'on veut étendre la table Department dont la clé primaire est DNUMBER en introduisant
DLOCATIONS comme suit,
Instance de la relation
DEPARTMENT
DNAME DNUMBER DMGRSSN DLOCATIONS
Research 5 33344555 {Bellaire, Sugarland, Houston}
Administration 4 987654321 {Stafford}
Headquarters 1 888665555 {Houston}
1. Ôter l'attribut DLOCATIONS qui viole la 1NF et le placer dans une relation à part,
DEPT_LOCATIONS, avec la clé primaire DNUMBER de DEPARTMENT. La clé primaire de cette
relation est alors la combinaison {DNUMBER, DLOCATION}. Un n-uplet distinct existe pour
chaque localisation d'un département. Ceci décompose la relation non-1NF en deux relations
1NF.
2. Etendre la clé primaire de manière qu'il existe des n-uplets séparés dans la relation
DEPARTMENT pour chaque localisation de département. Dans ce cas, la clé primaire devient la
combinaison {DNUMBER, DLOCATION}. Mais cette solution a l'inconvénient d'introduire une
redondance dans la table.
3. Si le nombre maximum de valeurs est connu pour cet attribut alors remplacer
DLOCATIONS par ces valeurs. Par exemple, si l'on sait que le maximum d'une location de
Department est 3 alors introduire DLOCATION1, DLOCATION2, DLOCATION3. Mais
l'inconvénient majeur réside dans le fait que des valeurs nulles sont introduites si les
départements possèdent moins de localisation.
De ces 3 solutions, la première est de loin la meilleure car elle ne souffre pas de redondances
et de limitation de valeurs. La 1NF exclut les attributs multivalués qui sont eux-mêmes
composés. De telles relations sont appelées nested relations (relations imbriquées).
EMP_PROJ
SSN ENAME PROJS
PNUMBER HOURS
Une instance possible avec l'imbrication
EMP_PROJ
SSN ENAME PNUMBER HOURS
123456789 Smith, John B. 1 32,5
2 7,5
666884444 Narayan, Ramesh K. 3 40,0
453453453 English, Joyce A. 1 20,0
2 20,0
333445555 Wong, Franklin T. 2 10,0
3 10,0
10 10,0
20 10,0
999887777 Zelya, Alicia J. 30 30,0
10 10,0
987987987 Jabbar, Ahmad V. 10 35,0
30 5,0
987654321 Wallace, Jennifer S. 30 20,0
20 15,0
888665555 Borg, James E. 20 null
décomposition en 1NF
EMP_PROJ1
SSN ENAME
EMP_PROJ2
SSN PNUMBER HOURS
La clé primaire est SSN pour EMP_PROJ pendant que PNUMBER est la clé primaire
partielle de la relation imbriguée. Pour normaliser cette relation en 1NF, l'on ressort les attributs
de la relation imbriguée dans une nouvelle relation et l'on y propage la clé primaire.
Cette procédure peut être utilisée plusieurs fois pour "aplatir" une relation ayant plusieurs
niveaux d'imbrications.
∃ A ∈ X, (X-{A}) -> Y.
Par exemple {SSN, PNUMBER} -> HOURS est dépendance fonctionnelle complète, car ni SSN
-> HOURS ni PNUMBER -> HOURS n'est valide.
Par contre {SSN, PNUMBER} -> ENAME est partielle à cause de SSN-> ENAME qui est
valide.
Pour tester la 2NF, il faut tester les dépendances fonctionnelles dont les attributs de la partie
gauche font partie de la clé primaire. Un schéma relationnel R est en 2NF si chaque attribut non
clé (non prime) A dans R est en dépendance fonctionnelle complète avec la clé primaire de R.
Les deux schémas relationnels, EMP_DEPT et EMP_PROJ suivants sont présentées avec leurs dépendances fonctionnelles. Les deux
souffrent d'anomalies d'actualisation.
EMP_DEPT
EMP_PROJ
FD1
FD2
FD3
La relation EMP_PROJ est en 1NF mais pas en 2NF puisque ENAME viole la régle 2NF à
cause de FD2. Il en est de même pour FD3 avec les attributs non clé PNAME et PLOCATION.
Si un schéma relationnel n'est pas en 2NF, on peut la normaliser 2NF en un nombre de
relations 2NF dans lesquelles les attributs non clés sont associés seulement sur la partie de la clé
primaire sur laquelle ils sont complètement et fonctionnellement dépendants.
FD1
FD2
FD3
2NF NORMALIZATION
EMP_DEPT
ENAME SSN BDATE ADDRESS DNUMBER DNAME DMGRSSN
3NF NORMALIZATION
ED1 ED2
ENAME SSN BDATE ADDRESS DNUMBER DNAME DMGRSSN
La cohérence et l'intégrité des données sont cruciales pour garantir que toutes les informations stockées tiennent compte correctement de la réalité et sont utilisables de manière fiable. Un SGBD contribue à cela en appliquant des règles d'intégrité, également appelées contraintes, qui empêchent la base de données de transgresser des conditions définies. Il assure que toute mise à jour de données est immédiatement répercutée et disponible partout où les données sont utilisées, ce qui réduit les risques d'incohérences. De cette façon, les opérations exécutées ne compromettent pas la qualité et la précision des informations, permettant ainsi un système plus fiable .
Le langage SQL est essentiel pour le traitement des données dans une base de données relationnelle car il fournit un moyen puissant et flexible d'effectuer des opérations de manipulation et de requête des données. Les principales fonctionnalités incluent la possibilité de sélectionner, insérer, mettre à jour et supprimer des enregistrements, de créer des associations via les requêtes join, et d'exécuter des agrégations avec des fonctions d'agrégat comme SUM, AVG, etc. SQL permet aussi de contrôler l'accès aux données avec WHERE, de trier et filtrer les résultats avec ORDER BY et GROUP BY, et de gérer des transactions de manière atomique, ce qui est fondamental pour garantir l'intégrité des données .
La conception logique d'une base de données implique plusieurs étapes clés : identifier les données nécessaires sous forme d'entités, déterminer leurs attributs et leurs associations, et définir les contraintes qui s'appliqueront. Chaque étape est importante car elle permet de créer un modèle qui représente fidèlement les besoins des utilisateurs tout en étant suffisamment flexible pour intégrer les modifications futures. La participation des utilisateurs dès le début est cruciale pour s'assurer que la base de données répondra à leurs exigences et permettra une intégration harmonieuse dans les processus métiers .
L'indépendance des données et des programmes dans un système de base de données moderne est assurée par la séparation des niveaux de données à travers une architecture, souvent illustrée par l'ANSI-SPARC à trois niveaux. Le niveau externe offre des vues personnalisées pour les utilisateurs qui peuvent changer sans impacter les données réelles stockées au niveau interne. Le niveau conceptuel centralise les règles d'application et de logique sans se préoccuper de la façon dont les données sont stockées physiquement, ce qui permet de changer la structure physique ou logique sans modifier les applications .
L'utilisation d'un SGBD offre plusieurs avantages par rapport aux systèmes basés sur des fichiers, notamment le contrôle de la redondance des données, une cohérence des données améliorée, la possibilité d'un partage des données, l'intégrité des données renforcée, une sécurité améliorée et une meilleure accessibilité et réactivité des données. De plus, un SGBD permet une maintenance améliorée grâce à l'indépendance des données et des programmes, ainsi qu'une concurrence accrue, permettant à plusieurs utilisateurs d'accéder simultanément aux mêmes données .
Le niveau conceptuel dans l'architecture ANSI/SPARC est crucial car il représente une vue abstraite centrale de la base de données, où toutes les contraintes de données et règles d'intégrité sont définies. Ce niveau n'est pas concerné par la façon dont les données sont stockées physiquement (ce qui est abordé au niveau interne) et permet de créer une séparation stricte entre la logique d'application et la structure physique des données. Cela facilite la gestion des modifications de schéma ou des besoins d'applications de diverses unités métier sans répercussions sur les niveaux utilisateurs ou physiques .
Un concepteur de base de données physique doit surmonter plusieurs défis, tels que la décision sur la manière dont le design logique sera physiquement implémenté, impliquant le choix des types de stockage et méthodes d'accès pour garantir la performance. Il doit optimiser la structure des tables et des index, s'assurer de la convivialité et de la sécurité des données, éviter la fragmentation et gérer efficacement la mémoire et l'espace disque. Ces optimisations doivent être effectuées tout en prenant en compte la charge du système, les exigences de concurrence et les futures évolutions possibles des applications .
Le contrôle de la redondance dans un SGBD influence fortement la cohérence des données en minimisant les duplications inutiles qui peuvent conduire à des incohérences. Lorsqu'une donnée est stockée une seule fois dans une base de données centralisée, toute mise à jour n'est nécessaire qu'à un seul endroit, garantissant ainsi que tous les utilisateurs et applications qui accèdent à ces données obtiendront des informations à jour et exactes. Cela élimine également les erreurs possibles qui pourraient survenir si des données similaires devaient être mises à jour séparément dans plusieurs endroits .
L'architecture à trois niveaux ANSI-SPARC sépare les interactions des utilisateurs par la création de trois niveaux distincts : externe, conceptuel et interne. Le niveau externe offre aux utilisateurs différentes vues personnalisées des données sans affecter leur stockage physique. Le niveau conceptuel centralise les structures et associations des données sans se préoccuper des implémentations physiques. Enfin, le niveau interne gère le stockage physique. Cette séparation garantit l'indépendance des données et des programmes, réduisant ainsi l'impact potentiel des modifications des niveaux inférieurs sur les applications des utilisateurs .
Les systèmes de gestion de bases de données (SGBD) présentent plusieurs inconvénients, notamment leur complexité due aux nombreuses fonctionnalités qu'ils offrent, leur taille imposante nécessitant une importante capacité de stockage et de mémoire. Ils peuvent également être coûteux, tant à l'achat qu'en termes de conversion à partir de systèmes hérités (systèmes legacy). De plus, bien qu'ils soient conçus pour diverses applications, cela peut ralentir le fonctionnement des systèmes d'application spécifiques. Le risque d'une panne est également accru en raison de la centralisation des ressources critiques .