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 table 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'unicité, 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érences 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 saisie ou modifiée. MONTHS_BETWEEN est l'une des nombreuses fonctions qu'offre Oracle 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û re nommer 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 jo intures 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, l i v r e , 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 livre 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 données utiles sur un exemplaire de livre.