
{"id":304,"date":"2008-12-08T01:35:37","date_gmt":"2008-12-08T00:35:37","guid":{"rendered":"http:\/\/dasini.net\/blog\/?p=304"},"modified":"2008-12-19T11:54:35","modified_gmt":"2008-12-19T10:54:35","slug":"mysql-5-les-vues-part-47","status":"publish","type":"post","link":"https:\/\/dasini.net\/blog\/2008\/12\/08\/mysql-5-les-vues-part-47\/","title":{"rendered":"MySQL 5 : Les vues &#8212; (part 4\/7)"},"content":{"rendered":"<p><!-- \t \t --><\/p>\n<address>(<a title=\"MySQL 5 : Les vues -- (part 3\/7)\" href=\"http:\/\/dasini.net\/blog\/2008\/11\/30\/mysql-5-les-vues-part-37\/\">&lt;- pr\u00e9c\u00e9dent<\/a>)<\/address>\n<p><!-- \t \t --><\/p>\n<h2>Utiliser les vues<\/h2>\n<p>Voici quelques exemples pratiques tr\u00e8s simples pour illustrer les diff\u00e9rents besoins auxquels peuvent r\u00e9pondre les vues. On aura ici, une vue administrateur de base de donn\u00e9es. Les objets cr\u00e9\u00e9s ne seront pas utilis\u00e9s directement par les utilisateurs mais aux travers d&rsquo;une application.<\/p>\n<h3>Contr\u00f4ler l&rsquo;int\u00e9grit\u00e9 en restreignant l&rsquo;acc\u00e8s aux donn\u00e9es pour am\u00e9liorer la confidentialit\u00e9<\/h3>\n<p>La table <strong>employe<\/strong> de mon application, contient <span style=\"text-decoration: underline;\">toutes les informations<\/span> sur les employ\u00e9es.<\/p>\n<pre>CREATE TABLE `employe` (\r\n  `id_employe` int(10) unsigned NOT NULL auto_increment,\r\n  `nom` char(45) NOT NULL,\r\n  `prenom` char(45) NOT NULL,\r\n  `tel_perso` char(10) NOT NULL,\r\n  `tel_bureau` char(10) NOT NULL,\r\n  `statut` char(45) NOT NULL,\r\n  `ville` char(45) NOT NULL,\r\n  `salaire` decimal(7,2) NOT NULL,\r\n  PRIMARY KEY  (`id_employe`)\r\n) ;<\/pre>\n<p>Toutes les informations pr\u00e9sentes dans cette table ne sont pas pertinentes pour les trois types d&rsquo;utilisateurs suivant: le comptable, la secr\u00e9taire pour Paris et la secr\u00e9taire pour le reste de la France.<\/p>\n<p>Une solution est donc de cr\u00e9er une vue par type.<\/p>\n<p>Pour le comptable, il faut avoir acc\u00e8s aux champs nom, pr\u00e9nom, t\u00e9l\u00e9phone du bureau, statut et salaire de chaque employ\u00e9e. On fait donc un partitionnement vertical de la table <strong>employe<\/strong>. La vue correspondante est la suivante :<\/p>\n<pre>CREATE ALGORITHM=MERGE  SQL SECURITY DEFINER VIEW `v_comptable` AS\r\nSELECT nom, prenom, tel_bureau, statut, salaire FROM employe;<\/pre>\n<p>Le profil \u00ab\u00a0secr\u00e9taire pour Paris\u00a0\u00bb, n&rsquo;a pas besoin de l&rsquo;identifiant et il ne doit surtout pas avoir acc\u00e8s aux salaires, cette information \u00e9tant confidentielle. Autre restriction, ce profil ne g\u00e8re que les employ\u00e9es de la filiale de Paris. Le partitionnement est vertical et horizontal.<\/p>\n<pre>CREATE ALGORITHM= MERGE SQL SECURITY DEFINER VIEW `v_secretaire_paris` AS\r\nSELECT nom, prenom, tel_perso, tel_bureau, statut FROM employe\r\nWHERE ville = 'Paris';<\/pre>\n<p>Notre troisi\u00e8me vue est tr\u00e8s proche de la deuxi\u00e8me. La seule diff\u00e9rence vient du fait que l\u00e0, on veut les employ\u00e9s qui ne travaillent pas \u00e0 Paris.<\/p>\n<pre>CREATE ALGORITHM= MERGE SQL SECURITY DEFINER VIEW `v_secretaire_autre` AS\r\nSELECT nom, prenom, tel_perso, tel_bureau, statut FROM employe\r\nWHERE ville &lt;&gt; 'Paris';\r\n<!-- \t \t -->\r\n<em>(<a title=\"MySQL 5 : Les vues -- (part 5\/7)\" href=\"http:\/\/dasini.net\/blog\/2008\/12\/19\/mysql-5-les-vues-part-57\/\">\u00e0 suivre\u2026 Masquer la complexit\u00e9 du sch\u00e9ma<\/a>)<\/em><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Voici quelques exemples pratiques tr\u00e8s simples pour illustrer les diff\u00e9rents besoins auxquels peuvent r\u00e9pondre les vues. On aura ici, une vue administrateur de base de donn\u00e9es. Les objets cr\u00e9\u00e9s ne seront pas utilis\u00e9s directement par les utilisateurs mais aux travers d&rsquo;une application<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"footnotes":""},"categories":[8],"tags":[241,12,58],"class_list":["post-304","post","type-post","status-publish","format-standard","hentry","category-mysql","tag-mysql","tag-mysql-5","tag-vue"],"aioseo_notices":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p9LfWW-4U","jetpack-related-posts":[{"id":237,"url":"https:\/\/dasini.net\/blog\/2008\/11\/28\/les-nouveautes-de-mysql-51-part-15\/","url_meta":{"origin":304,"position":0},"title":"Les nouveaut\u00e9s de MySQL 5.1 &#8212; (part 1\/5)","author":"Olivier DASINI","date":"28 novembre 2008","format":false,"excerpt":"Que de chemin parcouru depuis ce 5 juillet 1999, date de lancement de MySQL 3.23.0. En plus des objectifs de simplicit\u00e9 d'administration, de hautes performances et de fiabilit\u00e9, se sont greff\u00e9es, au fur et \u00e0 mesure, les fonctionnalit\u00e9s les plus demand\u00e9es par les utilisateurs. La nouvelle version du SGBDR open-source\u2026","rel":"","context":"Dans &quot;MySQL&quot;","block_context":{"text":"MySQL","link":"https:\/\/dasini.net\/blog\/category\/mysql\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":403,"url":"https:\/\/dasini.net\/blog\/2009\/01\/13\/mysql-5-les-vues-part-77\/","url_meta":{"origin":304,"position":1},"title":"MySQL 5 : Les vues &#8212; (part 7\/7)","author":"Olivier DASINI","date":"13 janvier 2009","format":false,"excerpt":"Conserver la structure d'une table si elle doit \u00eatre modifi\u00e9e La probl\u00e9matique est de mettre \u00e0 jour le sch\u00e9ma de l'application en changeant la structure de certaines tables.","rel":"","context":"Dans &quot;MySQL&quot;","block_context":{"text":"MySQL","link":"https:\/\/dasini.net\/blog\/category\/mysql\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":453,"url":"https:\/\/dasini.net\/blog\/2009\/02\/18\/optimisation-de-requetes-comprendre-loptimiseur-de-mysql\/","url_meta":{"origin":304,"position":2},"title":"Optimisation de requ\u00eates: comprendre l&rsquo;optimiseur de MySQL","author":"Olivier DASINI","date":"18 f\u00e9vrier 2009","format":false,"excerpt":"Le but de cet article est d'optimiser une simple requ\u00eate (SELECT avg(Population) FROM city GROUP BY CountryCode) et surtout de comprendre comment l'optimiseur proc\u00e8de, en \u00e9tudiant les r\u00e9sultats donn\u00e9s par les variables qui permettent de surveiller le serveur MySQL.","rel":"","context":"Dans &quot;MySQL&quot;","block_context":{"text":"MySQL","link":"https:\/\/dasini.net\/blog\/category\/mysql\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":691,"url":"https:\/\/dasini.net\/blog\/2009\/07\/29\/utiliser-xml-avec-mysql-5-1-part-25\/","url_meta":{"origin":304,"position":3},"title":"Utiliser XML avec MySQL 5.1 (part 2\/5)","author":"Olivier DASINI","date":"29 juillet 2009","format":false,"excerpt":"Ins\u00e9rer du XML dans MySQL Un fichier XML, n'est finalement qu'un fichier contenant du texte et ins\u00e9rer du texte dans un SGBDR, est loin d'\u00eatre la chose la plus difficile. Une simple requ\u00eate INSERT fait l'affaire. Cela nous donne quelque chose comme ceci : INSERT INTO ma_table (champ_texte) VALUES ('...')","rel":"","context":"Dans &quot;MySQL&quot;","block_context":{"text":"MySQL","link":"https:\/\/dasini.net\/blog\/category\/mysql\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":334,"url":"https:\/\/dasini.net\/blog\/2008\/12\/13\/les-nouveautes-de-mysql-51-part-45\/","url_meta":{"origin":304,"position":4},"title":"Les nouveaut\u00e9s de MySQL 5.1 &#8212; (part 4\/5)","author":"Olivier DASINI","date":"13 d\u00e9cembre 2008","format":false,"excerpt":"Le moteur de stockage CSV n'est pas une vraie nouveaut\u00e9. Il est disponible depuis MySQL 4.1.4 (MySQL 5.1 pour M.S. Windows). Sa particularit\u00e9 est de stocker les donn\u00e9es dans un fichier texte au format CSV (Comma Separated Values) o\u00f9 les donn\u00e9es sont s\u00e9par\u00e9es par une virgule. Les avantages sont multiples,\u2026","rel":"","context":"Dans &quot;MySQL&quot;","block_context":{"text":"MySQL","link":"https:\/\/dasini.net\/blog\/category\/mysql\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":2492,"url":"https:\/\/dasini.net\/blog\/2018\/07\/23\/30-mins-avec-les-fonctions-json-de-mysql\/","url_meta":{"origin":304,"position":5},"title":"30 mins avec les fonctions JSON de MySQL","author":"Olivier DASINI","date":"23 juillet 2018","format":false,"excerpt":"Comme tu le sais,\u00a0JSON (JavaScript Object Notation) est un populaire format d'\u00e9change de donn\u00e9es. Depuis la version 5.7, MySQL supporte un type de donn\u00e9es JSON\u00a0natif (au format interne binaire pour des raisons d'efficacit\u00e9s), ainsi qu'un riche ensemble de fonctions qui te permettront de manipuler dans tout les sens tes documents\u2026","rel":"","context":"Dans &quot;json&quot;","block_context":{"text":"json","link":"https:\/\/dasini.net\/blog\/category\/json-fr\/"},"img":{"alt_text":"MySQL native JSON data type","src":"https:\/\/i0.wp.com\/dasini.net\/blog\/wp-content\/uploads\/json_icon.png?resize=350%2C200","width":350,"height":200},"classes":[]}],"jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/posts\/304","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/comments?post=304"}],"version-history":[{"count":8,"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/posts\/304\/revisions"}],"predecessor-version":[{"id":357,"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/posts\/304\/revisions\/357"}],"wp:attachment":[{"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/media?parent=304"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/categories?post=304"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/tags?post=304"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}