Changes between Version 3 and Version 4 of Peri19_T08


Ignore:
Timestamp:
Apr 17, 2019, 5:05:23 PM (6 years ago)
Author:
franck
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Peri19_T08

    v3 v4  
    11= Serveur WEB (Appache-PHP-MySQL)
    22
     3[[Image(htdocs:png/zoo-miami.jpg,800px,nolink)]]
     4**François Pécheux**
     5
     6= Vocabulaire SQL
     7
     8* SQL = Structured Query Language
     9* DDL Data Definition Language :
     10        - create table
     11        - drop schema
     12* DML Data Manipulation Language :
     13        - faire des recherches                              select
     14        - insérer des données, enregistrement   insert 10%
     15        - supprimer des enregistrements                 delete 2%
     16        - modifier un enregistrement                    update 5%
     17
     18== Commandes d'insertion
     19
     20{{{
     21#!sql
     22INSERT INTO `animal` (`petitnom`, `date_naissance`, `enclos_idenclos`,
     23`type_animal_idtype_animal`) VALUES ('mufasa', '2016-04-12 00:00:00',
     24(SELECT idenclos FROM `enclos` WHERE nom like "félins"),
     25(SELECT idtype_animal FROM `type_animal` WHERE nom like "panthera leo"));
     26
     27INSERT INTO `capteur` (`nom`, `description`, `enclos_idenclos`,
     28`type_capteur_idtype_capteur`) VALUES ('Temp1', '2016-04-12 00:00:00',
     29(SELECT idenclos FROM `enclos` WHERE nom like "félins"),
     30(SELECT idtype_capteur FROM `type_capteur` WHERE nom like "temp%"));
     31
     32INSERT INTO `mesure` (`valeur`, `date`, `capteur_idcapteur`)
     33VALUES (23, '2016-04-12 00:00:00', (SELECT idcapteur FROM `capteur` c,
     34`type_capteur` tc,`enclos` e WHERE e.nom like
     35"félins" and e.idenclos=c.enclos_idenclos and tc.nom like "temp%" and c.type_capteur_idtype_capteur=tc.idtype_capteur));
     36}}}
     37
     38= Construction de la base de données
     39
     401. le fichier zoo7.mwb contient le modèle relationnel de notre base pour mysql-workbench
     41
     422. le fichier ddlzoo.sql contient les ordres de création de la base pour MariaDB. Ce fichier est obtenu lorsque dans le menu Database de mysql-workbench on choisit l'option "Forward engineer..." et que l'on sauve avant de se connecter à MariaDB.
     43
     443. La commande DML suivante peuple la table type_animal
     45{{{
     46#!sql
     47INSERT INTO `type_animal` (`idtype_animal`, `nom`) VALUES
     48(1, 'panthera leo'),
     49(2, 'panthera tigris'),
     50(3, 'pinguinus'),
     51(4, 'primates'),
     52(5, 'proboscidea'),
     53(6, 'hyeanidae');
     54}}}
     55
     564. La commande suivante peuple la table enclos
     57
     58{{{
     59#!sql
     60INSERT INTO `enclos` (`idenclos`, `nom`, `superficie`, `date_de_construction`,
     61`description`) VALUES
     62(1, 'félins', 5000, '2019-04-12 00:00:00', 'pour les lions et les tigres'),
     63(2, 'orang outan', 300, '2019-04-03 00:00:00', 'pour les hommes des forêts'),
     64(3, 'pingouins', 3000, '2019-04-05 00:00:00', 'pour les pingouins'),
     65(4, 'hyènes', 4000, '2019-04-06 00:00:00', 'pour les hyènes'),
     66(5, 'éléphants', 5000, '2019-04-01 00:00:00', 'pour les éléphants');
     67}}}
     68
     695. Maintenant que ces deux tables importantes sont créées, on peut peupler la table animal. La création des deux tables précédentes doit nécécessairement ête faite avant, car la table animal contient deux colonnes de type clé étrangère qui doivent être remplies pour que l'enregistrement d'un nouvel animal soit valable. Les commandes suivantes sont des exemples de commandes SQL "enchassées". Ici un INSERT repose sur deux SELECT
     70
     71{{{
     72#!sql
     73INSERT INTO `animal` (`petitnom`, `date_naissance`, `enclos_idenclos`,
     74`type_animal_idtype_animal`) VALUES ('mufasa', '2016-04-12 00:00:00',
     75(SELECT idenclos FROM `enclos` WHERE nom like "félins"),
     76(SELECT idtype_animal FROM `type_animal` WHERE nom like "panthera leo"));
     77
     78INSERT INTO `animal` (`petitnom`, `date_naissance`, `enclos_idenclos`,
     79`type_animal_idtype_animal`) VALUES ('nala', '2018-04-12 00:00:00',
     80(SELECT idenclos FROM `enclos` WHERE nom like "félins"),
     81(SELECT idtype_animal FROM `type_animal` WHERE nom like "panthera leo"));
     82
     83INSERT INTO `animal` (`petitnom`, `date_naissance`, `enclos_idenclos`,
     84`type_animal_idtype_animal`) VALUES ('simba', '2018-04-12 00:00:00',
     85(SELECT idenclos FROM `enclos` WHERE nom like "félins"),
     86(SELECT idtype_animal FROM `type_animal` WHERE nom like "panthera leo"));
     87
     88INSERT INTO `animal` (`petitnom`, `date_naissance`, `enclos_idenclos`,
     89`type_animal_idtype_animal`) VALUES ('shere khan', '2018-04-12 00:00:00',
     90(SELECT idenclos FROM `enclos` WHERE nom like "félins"),
     91(SELECT idtype_animal FROM `type_animal` WHERE nom like "panthera tigris"));
     92
     93INSERT INTO `animal` (`petitnom`, `date_naissance`, `enclos_idenclos`,
     94`type_animal_idtype_animal`) VALUES ('adolf', '2010-04-12 00:00:00',
     95(SELECT idenclos FROM `enclos` WHERE nom like "hyènes"),
     96(SELECT idtype_animal FROM `type_animal` WHERE nom like "hyeanidae"));
     97}}}
     98
     996. On peuple maintenant la table type_capteur avec des enregistrements
     100
     101{{{
     102#!sql
     103INSERT INTO `type_capteur` (`idtype_capteur`, `nom`) VALUES
     104(1, 'température'),
     105(2, 'ph'),
     106(3, 'qualité de l\'air'),
     107(4, 'qualité de l\'eau'),
     108(6, 'humidité'),
     109(7, 'lumière'),
     110(8, 'son');
     111}}}
     112
     1137. et on ajoute des capteurs aux enclos
     114
     115{{{
     116#!sql
     117INSERT INTO `capteur` (`nom`, `description`, `enclos_idenclos`,
     118`type_capteur_idtype_capteur`) VALUES ('Temp1', '2016-04-12 00:00:00',
     119(SELECT idenclos FROM `enclos` WHERE nom like "félins"),
     120(SELECT idtype_capteur FROM `type_capteur` WHERE nom like "temp%"));
     121
     122INSERT INTO `capteur` (`nom`, `description`, `enclos_idenclos`,
     123`type_capteur_idtype_capteur`) VALUES ('Hum1', '2016-04-12 00:00:00',
     124(SELECT idenclos FROM `enclos` WHERE nom like "félins"),
     125(SELECT idtype_capteur FROM `type_capteur` WHERE nom like "hum%"));
     126
     127INSERT INTO `capteur` (`nom`, `description`, `enclos_idenclos`,
     128`type_capteur_idtype_capteur`) VALUES ('Temp orang outan',
     129'2016-04-12 00:00:00', (SELECT idenclos FROM `enclos` WHERE nom like "orang%"),
     130(SELECT idtype_capteur FROM `type_capteur` WHERE nom like "temp%"));
     131
     132INSERT INTO `capteur` (`nom`, `description`, `enclos_idenclos`,
     133`type_capteur_idtype_capteur`) VALUES ('Hum orang', '2016-04-12 00:00:00',
     134(SELECT idenclos FROM `enclos` WHERE nom like "orang%"),
     135(SELECT idtype_capteur FROM `type_capteur` WHERE nom like "hum%"));
     136
     137INSERT INTO `capteur` (`nom`, `description`, `enclos_idenclos`,
     138`type_capteur_idtype_capteur`) VALUES ('Temp hyènes', '2016-04-12 00:00:00',
     139(SELECT idenclos FROM `enclos` WHERE nom like "hy%"),
     140(SELECT idtype_capteur FROM `type_capteur` WHERE nom like "temp%"));
     141
     142INSERT INTO `capteur` (`nom`, `description`, `enclos_idenclos`,
     143`type_capteur_idtype_capteur`) VALUES ('Hum hyènes',
     144'2016-04-12 00:00:00', (SELECT idenclos FROM `enclos` WHERE nom like "hy%"),
     145(SELECT idtype_capteur FROM `type_capteur` WHERE nom like "hum%"));
     146
     147INSERT INTO `capteur` (`nom`, `description`, `enclos_idenclos`,
     148`type_capteur_idtype_capteur`) VALUES ('Tem pingouins', '2016-04-12 00:00:00',
     149(SELECT idenclos FROM `enclos` WHERE nom like "ping%"),
     150(SELECT idtype_capteur FROM `type_capteur` WHERE nom like "temp%"));
     151
     152INSERT INTO `capteur` (`nom`, `description`, `enclos_idenclos`,
     153`type_capteur_idtype_capteur`) VALUES ('eau pingouins', '2016-04-12 00:00:00',
     154(SELECT idenclos FROM `enclos` WHERE nom like "ping%"),
     155(SELECT idtype_capteur FROM `type_capteur` WHERE nom like "%eau"));
     156}}}
     157
     1588. on peut maintenant ajouter des mesures sur un capteur. L'important est de comprendre qu'on identifie ce capteur à partir de son type et de son enclos. La clause where fait intervenir la notion de jointure, qui permet de filtrer le produit cartésien des table de manière très efficace.
     159
     160{{{
     161#!sql
     162INSERT INTO `mesure` (`valeur`, `date`, `capteur_idcapteur`)
     163VALUES (23, '2016-04-12 00:00:00', (SELECT idcapteur FROM `capteur` c,`
     164type_capteur` tc,`enclos` e WHERE e.nom like "félins" and
     165e.idenclos=c.enclos_idenclos and tc.nom like "temp%" and
     166c.type_capteur_idtype_capteur=tc.idtype_capteur));
     167}}}
     168
     169= Les fichiers du serveur
     170
     171* Les fichiers accueil.html, enclos.html et mesure.html, et monstyle.css forment la base du site web
     172
     173* Les fichiers login.php, listerenclos.php, listermesure.php sont des exemples de programmes PHP exécutés par le serveur web pour envoyer à l'utilisateur final des données extraites de la base
     174
     175* Les fichiers zoo-miami.jpg zoo.js zoo.php et getData.php montrent un exemple AJAX/JSON permettant à une application tournant côté user (navigateur web) d'accéder à la base de données en récupérant les dernières températures.