Vous avez installé un serveur web local (par exemple MAMP) qui propose l'utilisation de PhPMyAdmin.
Nous allons dans ce cours créer une base de données avec PhPMyAdmin.
Vous le verrez dans la partie concepts, PhPMyAdmin est une application web qui permet d'utiliser le Système de Gestion de Base de Données MySQL.
MySQL permet de concrêtement créer, supprimer, modifier des données. MySQL "comprend" le langage SQL.
SQL permet de demander une serie d'actions sur des base de données, qui seront comprise par MySQL qui executera ces actions.
Nous l'utiliserons, plus tard, dans un site web.
Imaginons que nous ayons modélisé le modèle conceptuel des données ci contre.
(une UE est une unité d'enseignement regroupant potentiellement plusieurs cours.)
Cela est transformé en modèle relationnel (sans que les domaines ne soient indiquées) ci-contre.
Personne(idPersonne, NomPersonne, PrenomPersonne, DateDeNaissance)
Cours(idCours, NomCours, idUE)
UE(idUE, Nom, CreditsECTS)
Evaluation(idEvaluation, Modalité, Debut, Fin, Sujet, idCours)
Enseignant(idEnseignant, HeuresCM, HeuresTD, HeuresTP, idPersonne,idCours)
Etude(idSEtude, Netudiant, idPersonne, idCours)
Nous souhaitons maintenant transformer ce modèle en une vraie base de donnée. Après la présentation de quelques concepts, nous utiliserons PhPMyAdmin pour construire notre première base de données.
Nous avons un modèle relationnel qui est permet facilement de passer à une base de donnée relationnelle.
Une base de données relationnelle est simplement:
une base de données : c'est à dire un système de stockage informatisé de données qui ont vocation à être utilisées
relationnelle: c'est à dire qui représente les données sous forme de tables (appelées relations). Ces tables sont modélisées de manière à faire le lien entre différentes entités, notamment en utilisant un système de clef primaire et de clefs étrangères.
On peut gérer une base de données avec certains languages permettrant de faire des "requêtes". C'est requêtes reviennent à demander quelque chose en rapport avec une base de données relationnelle:
créer une table (c'est à dire une relation dans le modèle relationnel),
ajouter une colonne (i.e. un attribut dans le dans le modèle relationnel),
faire des recherches dans les lignes de la table (c'est à dire sur les occurrences dans le modèle relationnel), comme voir toutes les valeurs, trier une colonne etc.
modifier le contenu d'une case (la valeur d'un attribut d'une occurrence dans le modèle relationnel)
supprimer une table, une colone, le contenu d'une case
...
SQL est un langage qui permet de formuler ces requêtes:
CREATE
SELECT
ALTER
DROP
... sont des exemples d'instructions en SQL qui permettent de créer, selectionner, modifier et supprimer des éléments dans une base de données relationnelle.
Nous utiliserons SQL pour écrire des instructions (appelées requêtes) afin de créer des base de données et de les utiliser
Nous avons évoqué les SGBD plus tôt dans le cours: il s'agit des Systèmes de Gestion de Bases de Données.
Un langage comme SQL ne sert à rien si il n'y a pas d'infrastructure (logiciel) pour stocker les données, créer en pratique des tables/relations, des colonnes/attributs, des lignes/occurrences, pourvoir interroger les données, etc.
MySQL est un SGBD relationnel (ou SGBDR).
Nos requêtes SQL seront comprise par le système de gestion de base de données MySQL. Au final, ce sera MySQL qui, en pratique, créera les tables, les modifiera, rajoutera ou supprimer des données, en fonction de nos requêtes SQL.
Un SGBD, comme MySQL, n'a pas d'interface utilisateur. Il existe différentes interfaces utilisateurs pour les SGBD.
Ces interfaces permettent de créer des bases de données en utilisant des formulaires, en cliquant sur des boutons etc. Ces actions vont automatiquement créer des requêtes SQL (même si cela n'est pas affiché à l'utilsateur) pour que le SGBD le fasse concrètement.
PhPMyAdmin est une interface utilisateur. Il s'agit d'une application web, qui permet, sur une page web, de créer et manipuler une base de données.
Nous allons commencer tout de suite par créer une base de données avec PhPMyAdmin
Trouver et ouvrir votre serveur web.
Lancer votre serveur web, dans l'exemple en appuyant sur start en haut à droite.
Cela ouvre une page web où les outils sont affichés.
Trouver le lien vers PhPMyAdmin. Dans MAMP, il est dans le menu section MySQL.
Vous arrivez sur la page de PhPMyAdmin:
Vous pouvez notamment changer la langue dans le menu déroulant, de English à Français.
Sur le menu à gauche, cliquer sur Nouvelle base de données
Un formulaire apparait pour vous permettre d'entrer le nom de votre nouvelle base de données (ici je l'ai appelée Filiere).
Pour que les exercices soient plus facile à corriger dans les cours suivant, vous pouvez l'appeler de la même manière. Cependant, ce n'est absolument pas une obligation.
Cliquer sur Créer à droite
La table Filiere est ajoutée sur le menu de gauche
Dans le menu de gauche, cliquer sur le nom de la table (ici Filiere) et cliquer sur nouvelle table
Nous allons commencer par créer la table Personne, qui est la première relation de notre modèle relationnel (mise en gras ci-contre)
Cette table contiendra 4 colonnes, correspondant aux noms entre parenthèses.
Personne(idPersonne, NomPersonne, PrenomPersonne, DateDeNaissance)
Cours(idCours, NomCours, idUE)
UE(idUE, Nom, CreditsECTS)
Evaluation(idEvaluation, Modalité, Debut, Fin, Sujet, idCours)
Enseignant(idEnseignant, HeuresCM, HeuresTD, HeuresTP, idPersonne,idCours)
Etude(idSEtude, Netudiant, idPersonne, idCours)
Nous écrivons dans Nom le nom Personne, avec 4 colonnes.
Puis nous pouvons appuyer sur Executer.
Il y a de quoi renseigner les informations pour la création de 4 colonnes qui apparait, ce que nous allons faire juste après.
Si on s'est trompé:
pas assez de colonnes: on peut, à droite du champ Nom de table Ajouter un nombre de colonne, puis appuyer sur Exécuter à droite
trop de colonnes: on ne remplit QUE les colonnes nécessaires, les colonnes vides ne seront pas créées.
Nous allons commencer par créer le premier attribut de Personne(idPersonne, NomPersonne, PrenomPersonne, DateDeNaissance), c'est à dire idPersonne.
J'indique donc idPersonne dans Nom.
Par ailleurs, ce sera un nombre entier attribué automatiquement, j'indique donc INT dans le Type.
Comme idPersonne est la clef primaire (souligné dans la représentation), il faut l'indiquer.
Dans Index, on indiquera Primary.
Dans le fenêtre qui s'affiche, on appuie sur Exécuter pour transformer le champ en clef primaire.
Une indication Primary apparait sous le type d'index.
L'attribut idPersonne est un nombre qui sera généré automatiquement.
Pour faire cela, nous cochons A_I, qui signifie Auto Increment
Le deuxième champs à créer de la table Personne est l'attribut NomPersonne (mis en gras ci-contre)
Personne(idPersonne, NomPersonne, PrenomPersonne, DateDeNaissance)
Cours(idCours, NomCours, idUE)
UE(idUE, Nom, CreditsECTS)
Evaluation(idEvaluation, Modalité, Debut, Fin, Sujet, idCours)
Enseignant(idEnseignant, HeuresCM, HeuresTD, HeuresTP, idPersonne,idCours)
Etude(idSEtude, Netudiant, idPersonne, idCours)
Nous entrons NomPersonne comme Nom.
Le type est une chaine de caractère, nous choisissons alors VARCHAR.
Nous choisissons un domaine (cf modèle relationnel ) de manière arbitraire en fonction de notre usage. En mettant 30 dans la taille, nous indiquons une limite de 30 caractères pour un nom de personne dans notre base de données.
Je continue de renseigner la table Personne avec les deux autres attributs PrenomPersonne et DateDeNaissance (en gras ci-contre).
Personne(idPersonne, NomPersonne, PrenomPersonne, DateDeNaissance)
Cours(idCours, NomCours, idUE)
UE(idUE, Nom, CreditsECTS)
Evaluation(idEvaluation, Modalité, Debut, Fin, Sujet, idCours)
Enseignant(idEnseignant, HeuresCM, HeuresTD, HeuresTP, idPersonne,idCours)
Etude(idSEtude, Netudiant, idPersonne, idCours)
Nous entrons respectivement PrenomPersonne et DateDeNaissance comme Nom.
Pour PrenomPersonne, nous choisissons par exemple le même domaine que pour NomPersonne.
DateDeNaissance est une date, nous choississons donc un type DATE.
Il faut maintenant appuyer sur Enregister en bas à droite pour créer la table Personne dans la base de données Filiere.
La table est créée:
On peut voir la table Personne dans l'aborescence à gauche.
Nous allons maintenant rajouter la deuxième table Cours, qui a la spécificité d'avoir une clef étrangère (idUE). Nous allons, par simplicité car la table UE n'est pas encore créée, simplement créer les clefs étrangères comme des champs "classiques".
Personne(idPersonne, NomPersonne, PrenomPersonne, DateDeNaissance)
Cours(idCours, NomCours, idUE)
UE(idUE, Nom, CreditsECTS)
Evaluation(idEvaluation, Modalité, Debut, Fin, Sujet, idCours)
Enseignant(idEnseignant, HeuresCM, HeuresTD, HeuresTP, idPersonne,idCours)
Etude(idSEtude, Netudiant, idPersonne, idCours)
Nous créons la table Cours, avec:
idCours en clef primaire et A_I (Auto_Increment)
NomCours, en VARCHAR de 30 caractères
idUE en INT
Nous allons maintenant rajouter la troisième table UE (en gras ci-contre).
Personne(idPersonne, NomPersonne, PrenomPersonne, DateDeNaissance)
Cours(idCours, NomCours, idUE)
UE(idUE, Nom, CreditsECTS)
Evaluation(idEvaluation, Modalité, Debut, Fin, Sujet, idCours)
Enseignant(idEnseignant, HeuresCM, HeuresTD, HeuresTP, idPersonne,idCours)
Etude(idSEtude, Netudiant, idPersonne, idCours)
Nous créons la table UE, avec:
idUE en clef primaire et A_I (Auto_Increment)
Nom, en VARCHAR de 30 caractères
CreditsECTS en INT
La table UE est créée:
Nous allons maintenant rajouter la quatrième table Evaluation (en gras ci-contre).
Personne(idPersonne, NomPersonne, PrenomPersonne, DateDeNaissance)
Cours(idCours, NomCours, idUE)
UE(idUE, Nom, CreditsECTS)
Evaluation(idEvaluation, Modalité, Debut, Fin, Sujet, idCours)
Enseignant(idEnseignant, HeuresCM, HeuresTD, HeuresTP, idPersonne,idCours)
Etude(idSEtude, Netudiant, idPersonne, idCours)
Nous ajoutons deux colonnes pour Evaluation.
En appuyant sur Exécuter à droite, il est alors possible de renseigner 6 attributs
Nous renseigno,s les attributs (Nom, type, taille, Index et A_I lorsque nécéssaire), , puis je crée la table en cliquant sur Enregistrer
Nous allons maintenant rajouter la cinquième table Enseignant (en gras ci-contre).
Personne(idPersonne, NomPersonne, PrenomPersonne, DateDeNaissance)
Cours(idCours, NomCours, idUE)
UE(idUE, Nom, CreditsECTS)
Evaluation(idEvaluation, Modalité, Debut, Fin, Sujet, idCours)
Enseignant(idEnseignant, HeuresCM, HeuresTD, HeuresTP, idPersonne,idCours)
Etude(idSEtude, Netudiant, idPersonne, idCours)
Nous renseignons les attributs (Nom, type, taille, Index et A_I lorsque nécéssaire):
Nous créons la table:
Et finalement, la dernière table:
Personne(idPersonne, NomPersonne, PrenomPersonne, DateDeNaissance)
Cours(idCours, NomCours, idUE)
UE(idUE, Nom, CreditsECTS)
Evaluation(idEvaluation, Modalité, Debut, Fin, Sujet, idCours)
Enseignant(idEnseignant, HeuresCM, HeuresTD, HeuresTP, idPersonne,idCours)
Etude(idSEtude, Netudiant, idPersonne, idCours)
Nous renseignons les attributs (Nom, type, taille, Index et A_I lorsque nécéssaire):
Je crée la table:
Si vous cliquez sur votre base de données à gauche (Filiere), et que vous allez dans l'onglet Concepteur, vous voyez vos tables, mais aucune n'est liée aux autres.
Il y a 6 clefs étrangères à paramétrer dans 4 tables. Elles sont indiquées en gras ci-contre.
Nous allons commencer par idUE dans la table Cours.
Personne(idPersonne, NomPersonne, PrenomPersonne, DateDeNaissance)
Cours(idCours, NomCours, idUE)
UE(idUE, Nom, CreditsECTS)
Evaluation(idEvaluation, Modalité, Debut, Fin, Sujet, idCours)
Enseignant(idEnseignant, HeuresCM, HeuresTD, HeuresTP, idPersonne,idCours)
Etude(idSEtude, Netudiant, idPersonne, idCours)
Cliquer sur la table Cours dans l'arborescence de gauche, et vous devriez voir les attributs de votre table.
Si ce n'est pas le cas: aller dans l'onglet Structure puis sélectionner Structure de table.
Cliquer sur Plus pour choisir Index
Confirmer le fait d'exécuter la requête SQL ALTER TABLE 'Cours' ADD INDEX ('idUE'); en sélectionnant OK
Une petite clef à côté de idUE est apparue, indiquant que cela est une clef étrangère.
Il suffit maintenant de lier cet attribut à l'attribut correspondant de la table UE (dans notre cas, le nom est le même mais ce n'est pas obligatoire).
En ayant bien selectionner la table Cours dans l'arborescence de gauche, aller dans l'onglet Structure puis sélectionner Vue relationnelle.
Dans Colonne, choisissez la colonne de la table séléctionnée (ici de la table Cours) qui est une clef étrangère (ici idUE).
Vous allez choisir "où" est la clef primiaire associée:
dans quelle base de données? (Filiere)
dans quelle table ? (UE)
dans quelle colonne de cette table? (idUE)
Puis cliquer sur Enregister
Votre clef étrangère est créée.
Nous allons indiquer faire les 5 autres clefs étrangères:
Enseignant (sélectionner index)
Enseignant (défini comme une clef étrangère)
Evaluation
Etude
Finalement, nous associons les clefs étrangères avec la clef primaire correspondante:
Enseignant
Etude
Evaluation
Maintenant, dans votre vue Concepteur pour votre base de données Filieres, les liens (clef étrangères) sont représentées.
Pour ajouter des occurences, selectionner la table où vous souhaitez ajouter ces occurences.
Ici, nous sélectionnons UE dans l'aborescence.
On remplit ensuite les valeurs
Programmation pour le cours 1, avec 8 crédits
Langage du web pour le cours 2, avec 8 crédits aussi
Cliquer sur Exécuter en bas à droite de la page.
Deux lignes ont été insérées.
Vous pouvez voir dans l'encadré la requête SQL qui permet de faire cette action, détaillée après:
INSERT INTO `UE` (`idUE`, `Nom`, `CreditECTS`) VALUES (NULL, 'Programmation', '8'), (NULL, 'Langage du web', '8') ;
Si on détaille cette requête SQL rapidement:
INSERT INTO ➔ Insérer dans
`UE` ➔ la table appelée UE
(`idUE`, `Nom`, `CreditECTS`) ➔ pour, respectivement et dans l'ordre, les attributs idUE, Nom, CreditsECTS
VALUES ➔ les valeurs suivantes
(NULL, 'Programmation', '8') ➔ (vide*), Programmation et 8 pour la première ligne
(NULL, 'Langage du web', '8') ➔ (vide*), Langage du web et 8 pour la deuxième ligne
*On laisse l'idUE vide, car, rappelez-vous, c'est un auto-increment
Si vous passez de l'onget SQL à l'onglet Parcourir, vos deux occurences apparaissent.
De manière assez logique, on ne peut pas rajouter de clef étrangère si la clef primaire n'existe pas.
Nous allons ajouter des occurences à Cours.
Sélectionner cours dans l'aborescence et ajouter des lignes (pour renseigner plus de 2 occurences)
Automatiquement, comme idUE est une clef étrangère correctement paramétrée aux étapes précédentes, vous pouvez sélectionner une des deux UEs qui existent dans la table UE
Renseigner les 4 lignes, comme indiqués dans l'illustration:
Algorithmique , Programmation
Base de données, Programmation
Web côté client, Langage du Web
Web côté serveur, Langage du Web
Exécuter, et votre nouvelle table a les quatres nouvelles occurrences
Il peut être plus efficace d'utiliser une requête SQL pour ajouter une ou des occurences.
Nous allons essayer avec UE.
Pour cela, sélectionner dans l'aborescence la table UE.
A ce stade, il y a 2 occurrences (Programmation et Langage du web)
Aller dans l'onglet SQL
Effacer le texte dans l'encadré:
Puis écriver les requêtes (cf exercice 1 juste après).
Une fois écrite, appuyer sur Exécuter en bas à droite.
Usages et Statégies I avec 6 crédits ECTS
Design et graphisme avec 4 crédits ECTS
INSERT INTO `UE` (`idUE`, `Nom`, `CreditECTS`) VALUES (NULL, 'Programmation', '8'), (NULL, 'Langage du web', '8') ;
INSERT INTO `UE` (`idUE`, `Nom`, `CreditECTS`) VALUES (NULL, 'Usages et Stratégies', '6'), (NULL, 'Design et graphisme', '4');
Lorsque vous avez tapé dans l'encadré la requête de la correction, et appuyé sur Exécuter...
... les deux lignes ont été ajoutées:
Elles apparaissent dans l'onglet Parcourir
Methodologie de la recherche avec 4 crédits ECTS
INSERT INTO `UE` (`idUE`, `Nom`, `CreditECTS`) VALUES (NULL, 'Programmation', '8'), (NULL, 'Langage du web', '8') ;
INSERT INTO `UE` (`idUE`, `Nom`, `CreditECTS`) VALUES (NULL, 'Methodologie de la recherche', '4');
La nouvelle UE est visible dans l'onglet Parcourir
Enseignements complémentaires avec 4 crédits ECTS
Anglais avec 3 crédits ECTS
Stage avec 30 crédits
INSERT INTO `UE` (`idUE`, `Nom`, `CreditECTS`) VALUES (NULL, 'Programmation', '8'), (NULL, 'Langage du web', '8') ;
INSERT INTO `UE` (`idUE`, `Nom`, `CreditECTS`) VALUES (NULL, 'Enseignements complémentaires', '4'), (NULL, 'Anglais', '3'), (NULL, 'Stage', '30') ;
Les nouvelles UEs sont visibles dans l'onglet Parcourir
Sélectionner la base de données (Filiere) dans l'aborescence et aller l'onglet Exporter
Pour exporter toute la base de données, cliquer sur Exécuter
Pour plus d'options, cliquer sur Personnalisées, afficher toutes les options possibles
On peut notamment cocher ou décocher des tables, qui seront ou ne seront pas exportées.
Ici, j'ai déselectionné les tables cours et UE par exemple:
Enfin, en bas de la page, cliquer sur Exécuter pour exporter la base de données
Cela affiche les requêtes SQL nécessaires à exporter votre base de données, selon votre séléction (afficher ou télécharger un ficher).
Vous pourrez utiliser ces requêtes SQL pour importer une base de données (c'est à dire la cloner en quelque sorte).
Ce point est la suite de ce cours.
A l'étape précédente, j'ai exporté, dans un fichier .sql, les requêtes SQL correspondant à la création de table et à l'ajout de valeur à l'interieur.
Vous pouvez d'ailleurs observer la requête pour la création de la table enseignant dans l'illustration ci-contre: CREATE TABLE `Enseignant`
Pour l'ajout de valeur, il s'agira d'instructions vues précédemment: INSERT INTO
Le fichier téléchargé suite à l'exportation ne peut PAS être importé directement si vous avez suivi l'activité, car il demande, avec CREATE TABLE, la création de tables alors qu'elles existent déjà (ou du moins de table avec le même nom).
Je vais donc vous demander d'importer un fichier avec des occurences pour les tables encore non-remplies:
Enseignant
Etude
Evaluation
Personne
Pour cela, téléchargé le fichié modifié:
Cliquer sur votre base de données (Filiere) dans l'aborescence.
Puis aller sur l'onglet Importer
Dans Parcourir les fichiers, cliquer sur Choisir un fichier et selectionner le fichier téléchargé (FilirerNettoyee.sql)
En bas à gauche, cliquer sur Exécuter.
Maintenant, si vous allez observer vos table Enseignant, Etude, Evalutation et Personne, il y a des occurrences.