
{"id":403,"date":"2009-01-13T16:09:13","date_gmt":"2009-01-13T15:09:13","guid":{"rendered":"http:\/\/dasini.net\/blog\/?p=403"},"modified":"2009-01-13T16:27:01","modified_gmt":"2009-01-13T15:27:01","slug":"mysql-5-les-vues-part-77","status":"publish","type":"post","link":"https:\/\/dasini.net\/blog\/2009\/01\/13\/mysql-5-les-vues-part-77\/","title":{"rendered":"MySQL 5 : Les vues &#8212; (part 7\/7)"},"content":{"rendered":"<p><!-- \t \t --><\/p>\n<address>(<a title=\"MySQL 5 : Les vues -- (part 6\/7)\" href=\"http:\/\/dasini.net\/blog\/2009\/01\/07\/mysql-5-les-vues-part-67\/\">&lt;- pr\u00e9c\u00e9dent<\/a>)<\/address>\n<p><!-- \t \t --><\/p>\n<h3>Conserver la structure d&rsquo;une table si elle doit \u00eatre modifi\u00e9e<\/h3>\n<p>La probl\u00e9matique est de mettre \u00e0 jour le sch\u00e9ma de l&rsquo;application en changeant la structure de certaines tables.<\/p>\n<p>Changer le sch\u00e9ma a comme principal impact d&rsquo;obliger de modifier les requ\u00eates de l&rsquo;application. Il sera donc n\u00e9cessaire de les identifier pour les mettre \u00e0 jour \u00e0 leur tour, ce qui peut rapidement devenir fastidieux. Au travers de l&rsquo;exemple qui suit, nous allons cr\u00e9er une vue qui va masquer le changement de table ce qui nous \u00e9vite de modifier les requ\u00eates applicatives. Une nouvelle version de l&rsquo;application pourra utiliser la nouvelle table sans \u00eatre oblig\u00e9 d&rsquo;utiliser la vue, on assure ainsi la compatibilit\u00e9 ascendante.<\/p>\n<p>Ma table de d\u00e9part est la table <strong>livre:<\/strong><\/p>\n<pre>CREATE TABLE 'livre' (\r\n  'id_livre' char(17) NOT NULL,\r\n  'auteur' char(50) default NULL,\r\n  PRIMARY KEY  ('id_livre')\r\n);<\/pre>\n<p>Les requ\u00eates, du cot\u00e9 de l&rsquo;application, sont les suivantes:<\/p>\n<pre>SELECT id_livre FROM livre;\r\nSELECT auteur FROM livre;\r\nSELECT * FROM livre;<\/pre>\n<p>De cette structure o\u00f9 je ne peux g\u00e9rer que des livres, j&rsquo;en cr\u00e9e une autre qui m&rsquo;offre plus de souplesse, la table <strong>produit<\/strong>:<\/p>\n<pre>CREATE TABLE 'produit' (\r\n  'id_produit' mediumint(9) NOT NULL auto_increment,\r\n  'isbn' char(17) default NULL,\r\n  'auteur' char(50) default NULL,\r\n  PRIMARY KEY  ('id_produit'),\r\n  UNIQUE KEY 'isbn' ('isbn')\r\n);<\/pre>\n<p>Les seuls produits disponible sont mes livres, je remplis donc ma table produit avec le contenu de la table livre :<\/p>\n<pre>INSERT INTO produit (isbn, auteur) SELECT id_livre, auteur FROM livre;<\/pre>\n<p>La derni\u00e8re phase consiste \u00e0 cr\u00e9er la vue \u00ab\u00a0livre\u00a0\u00bb, il me faut donc au pr\u00e9alable effacer la table du m\u00eame nom. Les vues et les tables partageant le m\u00eame espace de nom.<\/p>\n<pre>DROP TABLE livre;\r\n\r\nCREATE VIEW livre AS SELECT isbn AS id_livre, auteur FROM produit;<\/pre>\n<p>Les changements sont transparents pour les trois requ\u00eates de mon application.<\/p>\n<h2><em>Conclusion<\/em><\/h2>\n<p>Voici un petit tour d&rsquo;horizon sur les vues, qui nous l&rsquo;esp\u00e9rons aura contribu\u00e9 \u00e0 affiner votre vision sur ce sujet. Il est certain que ces tables virtuelles am\u00e8nent une certaine souplesse au sch\u00e9ma et il serait dommage de ne pas en profiter. Cependant, ce n&rsquo;est pas non plus une solution miracle, car ajouter des objets peut rapidement rendre le sch\u00e9ma complexe. Maintenant \u00e0 vous de voir dans quels cas les vues pourrons vous \u00eatre utiles. Pour nous, c&rsquo;est tout&#8230; vu.<br \/>\n<!-- \t \t --><\/p>\n<p><!-- \t \t --><br \/>\n<a title=\"MySQL 5 : Les vues -- (part 1\/7)\" href=\"http:\/\/dasini.net\/blog\/2008\/11\/23\/mysql-5-les-vues-part-17\/\">MySQL 5 : Les vues &#8212; (part 1\/7)<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Conserver la structure d&rsquo;une table si elle doit \u00eatre modifi\u00e9e<\/p>\n<p>La probl\u00e9matique est de mettre \u00e0 jour le sch\u00e9ma de l&rsquo;application en changeant la structure de certaines tables.<\/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":[82,241,12,58],"class_list":["post-403","post","type-post","status-publish","format-standard","hentry","category-mysql","tag-exemples-vues","tag-mysql","tag-mysql-5","tag-vue"],"aioseo_notices":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p9LfWW-6v","jetpack-related-posts":[{"id":192,"url":"https:\/\/dasini.net\/blog\/2008\/11\/23\/mysql-5-les-vues-part-17\/","url_meta":{"origin":403,"position":0},"title":"MySQL 5 : Les vues &#8212; (part 1\/7)","author":"Olivier DASINI","date":"23 novembre 2008","format":false,"excerpt":"Le langage SQL acronyme de Structured Query Language (Langage Structur\u00e9 de Requ\u00eates), a \u00e9t\u00e9 con\u00e7u pour g\u00e9rer les donn\u00e9es dans un SGBDR. A l'aide des DML (Data Manipulation Language ie les requ\u00eates SELECT, INSERT, UPDATE, DELETE) il est possible de manipuler ces donn\u00e9es qui sont stock\u00e9es dans des tables. SQL\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":350,"url":"https:\/\/dasini.net\/blog\/2008\/12\/19\/mysql-5-les-vues-part-57\/","url_meta":{"origin":403,"position":1},"title":"MySQL 5 : Les vues &#8212; (part 5\/7)","author":"Olivier DASINI","date":"19 d\u00e9cembre 2008","format":false,"excerpt":"Masquer la complexit\u00e9 du sch\u00e9ma L'\u00e9quipe de d\u00e9veloppement doit \u00e9crire un moteur de recherche pour une application de commerce \u00e9lectronique. Voici un extrait des tables de la base de donn\u00e9es impliqu\u00e9es dans la recherche des produits du site.","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":381,"url":"https:\/\/dasini.net\/blog\/2009\/01\/07\/mysql-5-les-vues-part-67\/","url_meta":{"origin":403,"position":2},"title":"MySQL 5 : Les vues &#8212; (part 6\/7)","author":"Olivier DASINI","date":"7 janvier 2009","format":false,"excerpt":"Modifier automatiquement des donn\u00e9es s\u00e9lectionn\u00e9es Pour ce troisi\u00e8me exemple, nous allons nous int\u00e9resser au sch\u00e9ma (l\u00e0 encore tr\u00e8s simplifi\u00e9) d'une application qui permet de vendre des produits en France et au Royaume-Uni, en euro, livre et dollar. Cette application poss\u00e8de une table produit, qui contient le produit (son identifiant) et\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":14,"url":"https:\/\/dasini.net\/blog\/2008\/10\/28\/mysql-50-un-sgbdr-mature-part-24\/","url_meta":{"origin":403,"position":3},"title":"MySQL 5.0 : Un SGBDR mature ? &#8212; (part 2\/4)","author":"Olivier DASINI","date":"28 octobre 2008","format":false,"excerpt":"Les vues sont la plupart du temps utiles pour donner aux utilisateurs l\u2019acc\u00e8s \u00e0 un ensemble de relations repr\u00e9sent\u00e9es sous la forme d'une table. Une vue est une table virtuelle ; les donn\u00e9es de la vue sont en fait des champs de diff\u00e9rentes tables regroup\u00e9es, ou des r\u00e9sultats d\u2019op\u00e9rations sur\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":248,"url":"https:\/\/dasini.net\/blog\/2008\/11\/30\/mysql-5-les-vues-part-37\/","url_meta":{"origin":403,"position":4},"title":"MySQL 5 : Les vues &#8212; (part 3\/7)","author":"Olivier DASINI","date":"30 novembre 2008","format":false,"excerpt":"Restrictions Lors de la cr\u00e9ation d'une vue, certaines contraintes doivent \u00eatre prises en compte : * Il n'est pas possible de cr\u00e9er un index sur une vue * La vue ne peut pas contenir de sous-requ\u00eates dans la clause FROM du SELECT. * Il n'est pas possible d'utiliser de variables\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":304,"url":"https:\/\/dasini.net\/blog\/2008\/12\/08\/mysql-5-les-vues-part-47\/","url_meta":{"origin":403,"position":5},"title":"MySQL 5 : Les vues &#8212; (part 4\/7)","author":"Olivier DASINI","date":"8 d\u00e9cembre 2008","format":false,"excerpt":"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'une application","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":[]}],"jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/posts\/403","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=403"}],"version-history":[{"count":12,"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/posts\/403\/revisions"}],"predecessor-version":[{"id":412,"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/posts\/403\/revisions\/412"}],"wp:attachment":[{"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/media?parent=403"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/categories?post=403"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/tags?post=403"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}