i Création et manipulation de bases de données relationnelles — Conception de requêtes SQL simples
date_demande DATE,
UNIQUE(code_catalogue,rnatricule,date_demande));
CREATE TABLE emprunt (code_rayon INTEGER REFERENCES exemplaire
(code_rayon), date_emprunt DATE,
matricule INTEGER REFERENCES abonnéCmatricule), date_retour
DATE, UNIQUE(code_rayon,date_emprunt), CHECK
MONTHS_BETWEEN(date_emprunt,date_retour) <= 1);
Cet exemple permet d'illustrer quelques types de données parmi les plus
courants: entier (INTEGER, SMALLINT), décimal (DECIMAL(m,n),NUMBER(m,n)), réel
flottant (FLOAT, REAL), chaîne de caractères (CHAR(n) .VARCHAR(n)), date (DATE). La
contrainte PRIMARY KEY permet de définir une clé primaire pour chaque table. La
contrainte NOT NULL assure l'obligation de saisir des valeurs dans les colonnes des
tables DECRIT, ECRIT, LIVRE. Autrement dit, on ne peut insérer une ligne dans la ta-
ble ECRIT sans y faire figurer nécessairement un code_auteur. La contrainte NOT
NULL est implicite pour les colonnes clés primaires.
Pour les colonnes identifiantes non clé primaire, on définit une contrainte d'uni-
cité, par exemple on ne peut avoir deux emprunts du même exemplaire à la même
date: UNIQUE(code_rayon, date_emprunt). La contrainte matricule integer référ-
ences abonné(matricule) impose que matricule soit la clé primaire de la table
ABONNE. C'est un des exemples de contraintes référentielles. On peut nommer les
contraintes à l'aide du mot-clé CONSTRAINT. L'intérêt principal de ce nom est
d'autoriser dans l'avenir la suppression de ladite contrainte au moyen de la com-
mande DROP CONSTRAINT. La contrainte sémantique CHECK
MONTHS_BETWEEN(date_emprunt,date_retour) <- 1;
sera vérifiée chaque fois qu'une date d'emprunt et/ou une date de retour sera sai-
sie ou modifiée. MONTHS_BETWEEN est l'une des nombreuses fonctions qu'offre Ora-
cle pour manipuler les dates. Comme son nom l'indique, la fonction calcule le
nombre de mois s'écoulant entre deux dates. Elle renvoie un nombre entier. À
noter que les systèmes possèdent certains mots réservés, qui ne peuvent donc être
utilisés pour désigner les constituants du schéma. Ainsi, nous avons dû renommer
les dates d'emprunt et de demande car le mot DATE est réservé par SQL pour
spécifier le type de données DATE.
De la même façon, on peut créer l'ensemble des index de la base Bibliothèque, à
l'aide d'instructions du type: CREATE UNIQUE INDEX il ON Abonné
(matricule);
Cet index accélérera les recherches d'abonné à partir du matricule ou les jointures
entre la table ABONNE et les autres tables contenant le matricule.
La création de la vue permettant de rechercher toutes les caractéristiques d'un
exemplaire s'obtient de la façon suivante:
CREATE VIEW vueexemplaire
AS SELECT code_rayon, code_catalogue, titre, intitulé
FROM exemplaire, livre, thème
WHERE exemplai re.code_catalogue=livre.code_catalogue
AND 1ivre.code_thème=thème.code_thème;
La clause SELECT contient la liste des colonnes que l'on veut faire figurer dans la
vue. La clause FROM contient les trois tables nécessaires pour extraire ces colonnes,
à savoir EXEMPLAIRE, LIVRE et THEME. La clause WHERE contient les deux conditions
de jointure entre ces trois tables, à savoir l'égalité des codes catalogues entre le li-
vre et l'exemplaire et l'égalité des codes thèmes entre le livre et le thème. Cette vue
pourra être utilisée par un programme pour afficher sur un écran toutes les don-
nées utiles sur un exemplaire de livre.