19
Anne-Marie Cubat 2e partie Base de données relationnelle et requêtes SQL

Base de données relationnelle et requêtes SQL

  • Upload
    jules

  • View
    43

  • Download
    6

Embed Size (px)

DESCRIPTION

Base de données relationnelle et requêtes SQL. Anne-Marie Cubat. 2e partie. 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 ». - PowerPoint PPT Presentation

Citation preview

Page 1: Base de données relationnelle et requêtes SQL

Anne-Marie Cubat

2e partie

Base de données relationnelle

et requêtes SQL

Page 2: Base de données relationnelle et requêtes SQL

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/

Page 3: Base de données relationnelle et requêtes SQL

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 bulletinDépouillements

http://amcubat.be/docpmb/

Page 4: Base de données relationnelle et requêtes SQL

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 !

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 »

monographie

monographie

monographie

article

Niveau

dans la

hiérarchie

série =périodique

http://amcubat.be/docpmb/

Page 5: Base de données relationnelle et requêtes SQL

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/

Page 6: Base de données relationnelle et requêtes SQL

1. Les relations entre plusieurs tables

Relations entre exemplaires, notices et bulletins

Notices

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_idexemplaire d’un bulletin de périodique

Bulletins

Exemplaires

bulletin_notice est la clé qui renvoie à notice_idla « notice-mère » du 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.

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/

Page 7: Base de données relationnelle et requêtes SQL

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.

SELECTIONNER liste de champsA PARTIR DE liste de tablesA CONDITION QUE condition 1 ET condition 2 ET condition 3 ET condition 4TRIER PAR liste de champs

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

http://amcubat.be/docpmb/

Page 8: Base de données relationnelle et requêtes SQL

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/

Page 9: Base de données relationnelle et requêtes SQL

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

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).

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.

http://amcubat.be/docpmb/

Page 10: Base de données relationnelle et requêtes SQL

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/

Page 11: Base de données relationnelle et requêtes SQL

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/

Page 12: Base de données relationnelle et requêtes SQL

2. 1 La liste de choix à partir d’un requête

Comment obtenir la liste de tous les périodiques dépouillés ?

monographie

monographie

monographie

article

Niveau

dans la

hiérarchie

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.

série =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/

Page 13: Base de données relationnelle et requêtes SQL

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êteSi 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/

Page 14: Base de données relationnelle et requêtes SQL

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/

Page 15: Base de données relationnelle et requêtes SQL

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/

Page 16: Base de données relationnelle et requêtes SQL

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/

Page 17: Base de données relationnelle et requêtes SQL

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/

Page 18: Base de données relationnelle et requêtes SQL

2.2 La sélection d’une date

Voici le résultat final.

http://amcubat.be/docpmb/

Page 19: Base de données relationnelle et requêtes SQL

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 attentionAnne-Marie Cubat

http://amcubat.be/docpmb/