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:56] – [A quoi servent les vues ?] dthevenot | d4:a03 [2025/09/18 23:52] (Version actuelle) – 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, | ||
+ | ===== 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, | ||
- | * 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, | ||
- | * 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 " |