Base de données relationnelle et requêtes SQL 2e partie Anne-Marie Cubat
1. Les relations entre plusieurs tables Nous avons vu que l’emploi d’une table intermédiaire est la seule manière de gérer la relation « plusieurs – plusieurs ». Toutefois, on a aussi recours à ces tables intermédiaires dans le cas de relations multiples entre plusieurs tables, même s’il s’agit de relations « un - plusieurs » si on les envisage deux par deux. Exemple concret : les liens entre la « notice-mère » des périodiques (dans la table « notices ») les bulletins (dans la table « bulletins ») les dépouillements d’articles (dans la table « notices ») La table « analysis » établit un lien entre les bulletins et les dépouillements d’articles. http://amcubat.be/docpmb/
Exemple : nous partons à la recherche du « Petit Prince »… 1. Les relations entre plusieurs tables Exemple : nous partons à la recherche du « Petit Prince »… D’un clic de souris, nous envoyons ces résultats dans un panier d’exemplaires. 5 exemplaires : 1 bulletin, 4 livres Titre du bulletin Dépouillements http://amcubat.be/docpmb/
1. Les relations entre plusieurs tables Dans la table « notices » N’oubliez pas que dans PhpMyAdmin le symbole % est le « joker » qui permet de remplacer n’importe quel(s) caractère(s), et non pas l’astérisque comme on en a l’habitude ! monographie article Niveau dans la hiérarchie série = périodique Les 3 notices du livre niveau_biblio = « m » niveau_hierar = « 0 » La notice de l’article niveau_biblio = « a » niveau_hierar = « 2 » La notice du périodique niveau_biblio = « s » niveau_hierar = « 1 » http://amcubat.be/docpmb/
Tout ceci accélère les recherches. 1. Les relations entre plusieurs tables Relations entre périodiques, bulletins et dépouillements Bulletins Notices Analysis bulletin_notice est la clé qui renvoie à notice_id : dans ce cas, cette notice est la « notice-mère » du périodique. analysis_bulletin est la clé qui renvoie à bulletin_id analysis_notice est la clé qui renvoie à notice_id : dans ce cas, ces notices sont des articles de périodique. On obtiendra plus vite la liste des articles classés par périodique et ensuite par bulletin. En effet, dans « analysis », les enregistrements sont triés par n° de bulletin, et ensuite par n° de notice (= article dépouillé). En outre, cette table ne contient que les n° des notices qui correspondent à des articles, les n° des notices de monographies ou de périodiques n’y figurent pas. Tout ceci accélère les recherches. http://amcubat.be/docpmb/
1. Les relations entre plusieurs tables Relations entre exemplaires, notices et bulletins Exemplaires Notices Bulletins expl_notice est la clé qui renvoie à notice_id : exemplaire d’un livre, d’un CD, d’un DVD … expl_bulletin est la clé qui renvoie à bulletin_id exemplaire d’un bulletin de périodique Suivant le cas, l’un ou l’autre de ces champs sera complété. N.B. Le champ expl_cb contient les numéros de codes-barres. bulletin_notice est la clé qui renvoie à notice_id la « notice-mère » du périodique mention_date est le libellé de période (formulation libre de la date de parution) date_date est une date au sens strict du terme (elle permet un tri chronologique exact) http://amcubat.be/docpmb/
Comment relier ces tables dans une requête ? 1. Les relations entre plusieurs tables Comment relier ces tables dans une requête ? Par exemple pour afficher la liste des bulletins d’un périodique. SELECT expl_cb as 'Code-barres', CONCAT(tit1,' - N° ', bulletin_numero) AS 'Titre - N° ', mention_date AS ‘Date’, bulletin_titre AS 'Titre du bulletin‘ FROM exemplaires, bulletins, notices WHERE tit1 LIKE '%!!titre_periodique!!%' AND niveau_biblio='s' AND bulletin_notice=notice_id AND expl_bulletin=bulletin_id ORDER BY tit1, date_date, expl_cb SELECTIONNER liste de champs A PARTIR DE liste de tables A CONDITION QUE condition 1 ET condition 2 ET condition 3 ET condition 4 TRIER PAR http://amcubat.be/docpmb/
Comment afficher une liste de bulletins ? 1. Les relations entre plusieurs tables Comment afficher une liste de bulletins ? SELECT expl_cb as 'Code-barres', CONCAT(tit1,' - N° ', bulletin_numero) AS 'Titre - N° ', mention_date AS ‘Date’, bulletin_titre AS 'Titre du bulletin‘ FROM exemplaires, bulletins, notices WHERE tit1 LIKE '%!!titre_periodique!!%' AND niveau_biblio='s' AND bulletin_notice=notice_id AND expl_bulletin=bulletin_id ORDER BY tit1, date_date, expl_cb Résultat de la requête http://amcubat.be/docpmb/
Comment afficher une liste de bulletins ? 1. Les relations entre plusieurs tables Comment afficher une liste de bulletins ? CONCAT( , , ) permet de concaténer plusieurs éléments, c’est-à-dire former une chaîne de caractères à partir des valeurs de certains champs et/ou de texte introduit entre apostrophes. Les divers éléments sont séparés par une virgule. SELECT expl_cb as 'Code-barres', CONCAT(tit1,' - N° ', bulletin_numero) AS 'Titre - N° ', mention_date AS ‘Date’, bulletin_titre AS 'Titre du bulletin‘ FROM exemplaires, bulletins, notices WHERE tit1 LIKE '%!!titre_periodique!!%' AND niveau_biblio='s' AND bulletin_notice=notice_id AND expl_bulletin=bulletin_id ORDER BY tit1, date_date, expl_cb niveau_biblio= ’s’ On ajoute ce critère afin de limiter la recherche aux périodiques dans le champ tit1. Il faut en effet exclure les titres des monographies, CD, DVD … contenant des mots tels que « vif » ou « express ». SELECT mention_date AS ‘Date’ On affiche le libellé de période (par exemple « du 5 au 11 mai 2006 »). ORDER BY date_date Le tri chronologique ne peut se baser que sur la date au sens strict (date_date). http://amcubat.be/docpmb/
2. Les requêtes de sélection interactive Comment rendre une requête interactive ? Jusqu’à présent, nous n’avons vu qu’un seul mode d’interactivité pour l’utilisateur : le mode « texte » : introduire une réponse directement au clavier. Toutefois, ce mode « texte » a des limites : il est par exemple plus fastidieux d’introduire le titre d’un périodique « manuellement » ou de devoir mémoriser le n° d’un bulletin qu’on veut absolument retrouver. Alors qu’il est si simple de sélectionner un périodique ou un bulletin dans une liste !! C’est pourquoi nous allons nous intéresser à d’autres possibilités d’interactivité : la liste de choix à partir d’une requête la sélection d’une date http://amcubat.be/docpmb/
2.1 La liste de choix à partir d’une requête Comment sélectionner des données à partir d’une requête ? Repartons de la procédure qui affichait la liste des bulletins. Nouvelle version : le mode de choix du paramètre change. Cette requête doit afficher la liste des périodiques disponibles. http://amcubat.be/docpmb/
2. 1 La liste de choix à partir d’un requête Comment obtenir la liste de tous les périodiques dépouillés ? monographie article Niveau dans la hiérarchie série = périodique Rappel : la notice-mère d’un périodique se repère par le champ « niveau_biblio ». S’il contient la valeur « s », il s’agit du titre d’un périodique. Voici la requête et le résultat obtenu. Nous allons la modifier légèrement et l’intégrer dans l’autre procédure. http://amcubat.be/docpmb/
2.1 La liste de choix à partir d’une requête Comment sélectionner des données à partir d’une requête ? Notez la syntaxe WHERE notice_id IN (!!periodiques!!) IN (!! !!) pour choisir dans une liste créée par requête Si vous cochez la case « liste multiple », vous pouvez sélectionner plusieurs éléments dans la liste. Cette requête ressemble fort à la procédure de base qui affiche la liste des périodiques. http://amcubat.be/docpmb/
2.1 La liste de choix à partir d’une requête Ajoutons un critère : la localisation Pour obtenir une liste de choix à partir d’une requête, il faut sélectionner l’id !! (notice_id ou idlocation) N.B. ORDER BY 2 = ORDER BY location_libelle car « location_libelle » est le 2e champ mentionné. http://amcubat.be/docpmb/
2.1 La liste de choix à partir d’une requête C’est la table « docs_location » qui contient les infos sur les localisations. Vous pouvez tester la requête, mais n’oubliez pas de l’enregistrer ! http://amcubat.be/docpmb/
2.2 La sélection d’une date Ajoutons encore un critère : restriction entre 2 dates Lorsque vous cliquez sur les options des dates, voici le message obtenu. http://amcubat.be/docpmb/
2.2 La sélection d’une date Voici l’écran de sélection. Choix d’un ou plusieurs périodiques. Choix d’une ou plusieurs localisations. Choix d’une date de début et d’une date de fin. http://amcubat.be/docpmb/
2.2 La sélection d’une date Voici le résultat final. http://amcubat.be/docpmb/
Pour les bibliothécaires : un conseil final Rappel important Ne pas modifier ou supprimer des données dans PhpMyAdmin. Vous risquez de provoquer des catastrophes ! Vous avez vu à quel point la structure des tables et de leurs relations était complexe. J’espère que ce diaporama aura contribué à démystifier le concept de base de données relationnelle. A vos claviers ! Commencez à rédiger des requêtes ! Merci de votre attention Anne-Marie Cubat http://amcubat.be/docpmb/