Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
| d4:a03 [2025/09/18 22:55] – [A quoi servent les vues ?] dthevenot | d4:a03 [2025/09/24 22:56] (Version actuelle) – [Les vues en SQL] dthevenot | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| ====== Les vues en SQL ====== | ====== Les vues en SQL ====== | ||
| + | Sur la base de données des Docks utilisée en 1ère année, nous allons illustrer les différents rôles des vues en SQL (vue à écrire/ | ||
| + |   - Contrôler l' | ||
| + |     - Ecrire la vue // | ||
| + | - afficher les clients publics français | ||
| + |   - Partitionner verticalement et/ou horizontalement  | ||
| + | - on montre uniquement les commandes livrées en France (partition horizontale) | ||
| + | - nombre de clients livrés par ville française | ||
| + |   - Masquer la complexité du schéma.  | ||
| + | - regrouper commande et client pour éviter à l’utilisateur de faire un JOIN. | ||
| + | - les commandes avec leur client livrées en Allemagne | ||
| + | - Gérer un indépendance logique des données | ||
| + | - les clients avec leur nombre total de commandes et le port payé au total | ||
| + | - lister les clients qui ont payé plus de 1000 € de frais de port cumulés : | ||
| + | - Modifier automatiquement des données sélectionnées (sum(), avg(), max(),…). | ||
| + | - vue qui donne le nombre de commandes par pays de livraison. | ||
| + | - affichage trié du nombre de commandes par pays de livraison | ||
| + |     - les pays qui ont plus de x commandes  | ||
| + |   - Manipuler des valeurs calculées à partir d' | ||
| + | - calcul du délai réel entre la commande et la livraison. | ||
| + | - afficher les commandes livrées en plus de 10 jours | ||
| + |   - Conserver la structure d'une table si elle doit être modifiée.  | ||
| + |     - imaginons que la direction décide de changer la structure de la table client en supprimant clFax et en renommant clTel en clTelephone, | ||
| + | [[https:// | ||
| + | ===== Vues plus complexes ===== | ||
| + | - Vue avec une sous-requête corrélée : | ||
| + |     - Lister les clients avec leur dernière commande passée  | ||
| + | - afficher les clients triés selon leur dernière commande passée | ||
| + | - Vue matérialisant une valeur calculée : | ||
| + | - Calculer le délai moyen de livraison par pays (coALivrerAvant – coDate). | ||
| + | - afficher les pays dont le délai moyen de livraison est supérieur à 10 jours | ||
| + | - Vue de sécurité / confidentialité avancée | ||
| + | - On ne montre aux commerciaux que leurs propres commandes (exemple : employé n°4). | ||
| + | - montrer au commerciaux 4 ses commandes | ||
| - | |||
| - | Les vues sont des tables virtuelles issues de l' | ||
| - | |||
| - | Techniquement les vues sont créées à l'aide d'une requête SELECT. Elles ne stockent pas les données  | ||
| - | qu' | ||
| - | |||
| - | La requête SELECT qui génère la vue référence une ou plusieurs tables. La vue peut donc être, par | ||
| - | exemple, une jointure entre différentes tables, l' | ||
| - | table. Elle peut également être créée à partir d'une autre vue. | ||
| - | ===== A quoi servent les vues ? ===== | ||
| - | |||
| - | Les vues peuvent être utilisées pour différentes raisons. Elles permettent de : | ||
| - |   * Contrôler l' | ||
| - |   * Partitionner verticalement et/ou horizontalement pour cacher des champs aux utilisateurs, | ||
| - |   * permet de personnaliser l' | ||
| - | * Masquer la complexité du schéma. | ||
| - | * Gérer un indépendance logique des données, utile pour donner aux utilisateurs l’accès à un | ||
| - | * ensemble de relations représentées sous la forme d'une table. Les données de la vue sont | ||
| - |   * alors des champs de différentes tables regroupées, | ||
| - | * champs. | ||
| - | * Modifier automatiquement des données sélectionnées (sum(), avg(), max(),...). | ||
| - |   * Manipuler des valeurs calculées à partir d' | ||
| - | * Conserver la structure d'une table si elle doit être modifiée. | ||
| - | * Le schéma peut ainsi être modifié sans qu'il ne soit nécessaire de changer les requêtes du | ||
| - | * côté applicatif. | ||
| - | |||
| - | ===== Les avantages ===== | ||
| - | |||
| - |   * **Simplicité** : Les vues encapsulent des requêtes complexes sous forme de " | ||
| - |   * **Réutilisabilité** : Une fois créées, les vues peuvent être appelées à plusieurs reprises sans avoir à réécrire la requête d' | ||
| - |   * **Sécurité** : Les vues peuvent restreindre l' | ||
| - |   * **Optimisation des performances** : En transformant une vue en une vue matérialisée, | ||
| - | ===== Les droits nécessaires ===== | ||
| - | |||
| - |  Pour créer une vue l' | ||
| - | de sélectionner toutes les colonnes qui apparaissent dans la commande SELECT spécifiant ce qu'est la | ||
| - | vue. | ||
| - | |||
| - | De plus si la clause REPLACE est utilisée, le droit DROP est également nécessaire. | ||
| - | |||
| - | Le droit SHOW VIEW donne la possibilité d' | ||
| - | commande permet d' | ||
| - | informations est d' | ||
| - | exhaustive seulement pour les vues que vous avez créé. | ||
| - | |||
| - |   | ||
| - |  < | ||
| - | GRANT | ||
| - | SELECT, | ||
| - | DROP, | ||
| - | CREATE VIEW, | ||
| - | SHOW VIEW | ||
| - |  ON `projet`.* TO ' | ||
| - | </ | ||
| - | |||
| - | ===== Syntaxe d'une vue ===== | ||
| - | ==== CREATE VIEW ==== | ||
| - | |||
| - | La commande MySQL pour créer une vue est assez proche de la syntaxe du standard SQL. | ||
| - |   | ||
| - |  < | ||
| - | ====  Exemple  | ||
| - |    | ||
| - | Création d'une vue pour la relation " | ||
| - | < | ||
| - |   | ||
| - | ( | ||
| - | id_etudiant INT UNSIGNED PRIMARY KEY, | ||
| - | nom CHAR(30), | ||
| - | prenom CHAR(30), | ||
| - | age TINYINT UNSIGNED, | ||
| - |   cursus ENUM(' | ||
| - | ); | ||
| - |   | ||
| - | </ | ||
| - | |||
| - |   | ||
| - | étudiants. | ||
| - | |||
| - |  Il est possible d' | ||
| - | documentation officielle MySQL pour les découvrir. | ||
| - | ==== ALTER VIEW ==== | ||
| - | |||
| - | Une fois la vue créée, il est bien évidement possible de la modifier avec la commande ALTER VIEW. | ||
| - | |||
| - | Editer une vue à l' | ||
| - | < | ||
| - |  ALTER definer=' | ||
| - |  VIEW v_etudiant_liste AS SELECT nom, prenom, cursus FROM etudiant;</ | ||
| - | |||
| - |  Cette commande modifie la clause DEFINER en lui assignant le compte secretaire@localhost et modifie  | ||
| - | la définition de la vue en rajoutant le champ cursus. | ||
| - | ==== DROP VIEW ==== | ||
| - | |||
| - |   | ||
| - | |||
| - | Supprimer des vues à partir de l' | ||
| - |  < | ||
| - | |||
| - |   | ||
| - | retourne un avertissement au lieu d'une erreur si la vue à effacer n' | ||
| - | ==== Restrictions ==== | ||
| - | |||
| - | Lors de la création d'une vue, certaines contraintes doivent être prises en compte : | ||
| - | * Il n'est pas possible de créer un index sur une vue. | ||
| - | * La vue ne peut pas contenir de sous-requêtes dans la clause FROM du SELECT. | ||
| - |   * Il n'est pas possible d' | ||
| - | * Les objets (tables et vues) nécessaires à la création de la vue doivent exister avant de la créer. | ||
| - | * Si un objet référencé par la vue est effacé, la vue n'est alors plus accessible. | ||
| - | * Une vue ne peut référencer une table temporaire (TEMPORARY TABLE). | ||
| - | * Il n'est pas possible de créer des vues temporaires. | ||
| - |   * Il n'est pas possible d' | ||
| - |   * La définition d'une vue est " | ||