Note de lecture : SQL Avancé, par Joe Celko

Note : 8 ; La grande référence du SQL

Joe Celko, c’est un peu le pape du SQL. Avec lui, on est certain que le sujet ne sera pas traité superficiellement. L’ouvrage accuse près de 20 ans d’âge, mais le sujet ne subit pas des mutations telles que l’ouvrage en devienne obsolète. Voyons ce qu’il en est. L’ouvrage comprends 450 pages incluant 2 courtes annexes. Il est découpé en pas moins de 29 chapitres, donc avec une moyenne d’environ 15 pages pour chacun d’entre eux.

La courte introduction du chapitre 1 nous amène directement au solide chapitre 2 qui pose les bases de la modélisation de bases de données. On y parle formes normales, normalisation … et dénormalisation.

Les chapitre 3, 4 et 5 sont consacrés aux types de données numériques, temps et chaines de caractères respectivement. Ce sont des exemples de précision et de qualité. Nombre de subtilités que l’on peine à maîtriser sont développées ici. Les subtilités des représentations en virgules flottantes ne sont pas esquivées, tout comme les aspects les plus pointus sur les calculs de dates.

Consacrer un chapitre à NULL pourrait paraître exagéré, mais le chapitre 6 couvre le sujet de manière particulièrement pointue voir ardue, puisque l’on aborde les logiques d’opération avec NULL. Par comparaison, le chapitre 7 consacré aux « autres objets du schéma » est un joyeux fourre-tout traité de manière plutôt succincte.

Le chapitre 8 couvrant les opérations sur les tables nous permet de souffler un peu. Pas grand chose de nouveau pour moi, mais le sujet des delete, insert et update est couvert de manière plus que convenable.

Du chapitre 9 au chapitre 15, on couvre les prédicats au sens large. D’abord avec les opérateurs de comparaison au chapitre 9, également appelés « thêta » par Codd (j’ignorais cela). Les aspects de conversion de données qui y sont corrélés sont aussi couverts. Les prédicats avec valeurs et les prédicats like sont éjectés en quelques pages. Between et overlap sont des prédicats que j’utilise très peu, ils sont particulièrement bien appréhendés dans le chapitre 12, exemples et schémas à l’appuis !

Au chapitre 13, on appends que « in » (et « not in ») sont sujets à des questions de performance et l’auteur nous offre quelques pistes de réflexion. Fort logiquement, le chapitre 14 aborde « exists » et couvre des questions telles que le comportement avec des valeurs nulles ou le choix d’utilisation d’exists par rapport à une jointure. On termine le tour du propriétaire avec des questions sur les sous-requêtes, l’usage de « unique », etc… au chapitre 15.

Le chapitre 16 est un incontournable : il traite du « select ». Cela conduit à un chapitre d’une trentaine de pages qui inclut fort naturellement des éléments tels que les jointures de tout poil et autres « group by ». Dans le même ordre d’idées, les vues traitées au chapitre 17 nécessitent un peu plus de 20 pages dans lesquelles sont évoquées les vues en lecture seule ou en écriture, les indexations, les vues matérialisées ou les vues imbriquées. Le chapitre 18 sur les partitions est un peu plus ésotérique pour moi, mais il est assez court.

Du chapitre 19 au chapitre 22 on évoque les opérations sur les agrégats. Ca commence doucement au chapitre 19 avec les opérations sur les groupes avec « group by » et « having », même si l’auteur va bien plus loin que ce dont j’ai l’habitude. Les fonctions d’agrégats (count, avg, etc…) sont des grands classiques. Ils sont traités sans surprises au chapitre 20. Les surprises, on en a plus au chapitre 21 avec les statistiques. Franchement, ça arrache bien la gueule avec les médianes de Murchison ou de Celko (eh oui !). Variance, écart-type, pourcentages cumulés : on peut faire tout ça avec SQL ! Les régions, suites et séquences traitées au chapitre 22 sont au-delà de ce que j’ai l’habitude de voir. Mais le chapitre est assez court.

Le chapitre 23 est une petite curiosité car il aborde un sujet hérétique en SQL : la représentation des tableaux dans les tables. Amusant.
Les chapitre 24 et 25 parlent des opérations sur les ensembles. D’abord avec les fameuses clauses union et intersect. Ensuite avec les sous-ensembles au chapitre 25.

La représentation des graphes en bases relationnelles est un sujet complexe, essentiellement parce que ce type de base n’est pas fait pour cela. Les chapitres 26 et 27 sont plutôt velus car ils abordent directement cette question. D’abord avec les arbres au chapitre 26. L’auteur n’est pas avare de schémas, de représentation et d’algorithmes de recherche. On y traite aussi des fonction d’insertion, de suppression et de rééquilibrage !

Le chapitre 27 dédié aux graphes paraît presque simple par comparaison. Aussi solidement traité cela soit-il, Joe Celko n’a pas tout dit sur le sujet : il a consacré un autre ouvrage spécifiquement sur cette question.

Les deux derniers chapitres du livre peuvent être considérés comme des conseils d’expert. Le chapitre 28 est dédié aux performances : à quelles éléments de la requête doit-on prêter attention, que faut-il éviter, etc… Le dernier chapitre est consacré à des considération de conception assez pointues : échelles de valeur, codification, clés de vérification, etc… C’est pas pour les enfants !

Quand on plonge dans ce livre, on comprend rapidement que la réputation de Joe Celko en tant qu’autorité du SQL n’est pas usurpée. C’est du très, très solide ! La prose est assez accessible, mais l’auteur ne fait aucune concession au niveau d’information fourni. Et quand les explications sont pointues (donc assez souvent), il convient de bien s’accrocher. Heureusement, la matière s’appuie de très nombreux exemples en code SQL, avec des données et des représentations graphiques. Cette édition est bien sûr assez ancienne. Il est d’ailleurs amusant de voir l’auteur se référer très souvent au Cobol (parfois même au PL/1) et à de rares occasions au C. Des éditions ultérieures ont vu le jour, la dernière date de 2010 et compte près de 900 pages !

Je ne saurais trop conseiller Joe Celko pour quiconque veut rentrer sérieusement dans le SQL. Mais cette lecture est aussi un sérieux investissement de temps et d’auto-formation !

SQL Avancé, 2nd édition

Référence complète : SQL Avancé – Joe Celko – Vuibert 1999 (V.O. : Joe Celko’s SQL for Smarties : Advanced SQL programming ; Morgan Kauffman pub. 1995 ; ISBN : 94104-3205) – ISBN : 9782711786367

Harry Potter and the Goblet of Fire (Harry Potter, #4)

https://www.goodreads.com/book/add_to_books_widget_frame/0439139600?atmb_widget%5Bbutton%5D=atmb_widget_1.png&atmb_widget%5Bhide_friends%5D=on

Publicités

Note de lecture : The Definitive Guide to SQLite, par Michael Owens

Note : 4 ; Une ouvrage assez insipide sur le sujet.

SQLite est de très loin la base de données la plus répandue au monde. Open-Source et dédiée à être embarquée, elle se retrouve entre autre chose au sein de tous les smartphones ! Cet ouvrage qui lui est destiné à pour but de couvrir le sujet. Voyons cela.

Le texte est long de 360 pages auxquelles il faut ajouter 60 pages d’annexes. Les chapitres sont plutôt des gros morceaux car l’ouvrage n’en compte que 9 !

On commence en douceur par un premier chapitre de seulement 15 pages adressant la liste des fonctionnalités et de l’architecture de SQLite.

Le second chapitre est le réel commencement de l’ouvrage. Ses 30 pages traitent des distributions de l’outil et même de la reconstruction des binaires, ainsi que des commandes de bases de la ligne de commande. Ce n’est pas un chapitre inoubliable, d’autant qu’il est émaillé de copies d’écrans aussi nombreuses que gigantissimes.

A propos de meubler, le chapitre 3 n’est pas mal non plus : c’est un chapitre introductif au modèle relationnel, déconnecté du sujet SQLite sensu-stricto. Je dirais qu’il n’est ni bon ni mauvais, mais simplement inutile pour ceux qui connaissent déjà le modèle relationnel.

On reste toujours sur de la logique relationnelle au chapitre 4, mais au moins avec de la mise en pratique sur SQLite : création de bases, de contraintes, types de données, etc… C’est un chouia laborieux, surtout du fait que ce chapitre est exagérément long (il compte 100 pages).

Faire du SQL c’est bien, mais SQLite est surtout fait pour être attaqué par des APIs. C’est l’objet des chapitres suivant : le 6 qui ne compte que 30 pages et présente le fonctionnement général des API en C et en Python. Les chapitres 7 et 8 qui comptent chacun 50 pages se focalisent spécifiquement sur les APIs C : les « core API » sont couvertes au chapitre 7 (dont j’oserais dire que c’est le plus important du livre), tandis que le 8 couvre des APIs étendues dont on n’a pas forcément besoin tous les jours… Dans ces deux chapitres, les extraits de code font bien plus que les explications textuelles.

Je n’ai personnellement pas tellement besoin des « langage extension » couvertes au chapitre 8. Les 40 pages de cette partie sont surtout dédiées à des usages en Perl, Python et PHP.

On termine l’ouvrage par une vingtaine de pages consacrées au SQLite internal, sujet qui pourrait être intéressant s’il était bien traité, ce qui n’est pas le cas. On pourra toujours se consoler avec les 60 pages d’annexes qui paraissent bien faite mais dont je ne saurais dire aujourd’hui si elles sont utilisables efficacement.

definitive-guide-sqlite

Voilà un livre qui, sans être mauvais ne va pas me laisser un souvenir inoubliable.

Référence complète : The Definitive Guide to SQLite – Michael Owens – Apress 2006 – ISBN : 978 1 59059 673 9

The Definitive Guide to SQLite

http://www.goodreads.com/book/add_to_books_widget_frame/1590596730?atmb_widget%5Bbutton%5D=atmb_widget_1.png

Note de lecture : SQL Antipatterns, par Bill Karwin

Note : 7 ; Au croisement des préoccupations du développeur et du concepteur de base de données

Le pluriculturalisme est un véritable problème en informatique. Prenons le cas qui nous intéresse aujourd’hui : comment concilier le point de vue (valide) du concepteur de base de données, avec les questions d’efficacité d’accès aux données, de normalisation du modèle et de requêtage SQL, avec le point de vue tout autant valide du développeur s’adossant à cette même base de données, pour qui celle-ci n’est qu’un support de persistance ? La réponse est : ces points de vue sont rarement conciliés. En cela ce livre est réellement intéressant car il considère ensemble ces deux points de vue tout au long de nombreux cas de figure de conception de modèles de données constituant autant d’antipatterns. On notera aussi au passage que les exemples sont toujours donnés avec MySQL, toutefois lorsque des spécificités de certains SQBD s’appliquent, l’auteur en fait part.

Le texte est articulé autour de 24 antipatterns constituant autant de chapitres. Leur structure est invariable : objectif, antipatterns, comment le reconnaître, usages légitimes et solution. Cette structure qui montre une bonne appréhension du principe des patterns s’avère très efficace, aussi bien dans le diagnostique du problème que dans l’émergence de la solution. Ces patterns se répartissent par ailleurs en 4 parties dans l’ouvrage.

La première partie est constituée de 8 antipatterns occupant 100 pages ! Elle traite de la structure logique de la base. On y parle de l’usage irraisonné de champs blob, du bon usage des contraintes et des cardinalités (entre autre lorsqu’il faut user de tables intermédiaires). Ces règles paraissent de bon sens aux vieux routiers de la modélisation, mais elles sont souvent enfreintes par les développeurs d’applications peu enclins à passer beaucoup de temps et d’attention sur le modèle et donc prêts à « couper les virages » !

La seconde partie traite de la structure physique de la base. Elle compte 135 pages et 4 antipatterns. On y évoque l’usage intelligent des différents types de champs, mais aussi de clés primaires et d’index secondaires pertinents. Là encore, il s’agit des éléments de base du DBA … qui devraient l’être aussi pour le développeur. Mais l’expérience montre…

Dans la troisième partie (6 patterns, 60 pages) on évoque les requêtes, le bon usage de la valeur « null », des regroupements, mais aussi de l’écriture des « requêtes à tout faire ».

La dernière partie est longue de 6 patterns couvrant 70 pages. On trouve ici diverses bonnes pratiques applicatives pour couvrir par exemple des problèmes de sécurité. Hélas les exemples sont développés en PHP, bien loin de ce que je ne saurais utiliser (aussi bien sur le langage que sur l’architecture). C’est donc le chapitre qui m’a le moins intéressé.

En lisant ce livre j’ai eu l’impression (non la certitude) de lire des choses que je connaissais déjà. Mais j’ai eu aussi l’impression de croiser des cas de figure que j’ai vu appliqués plus ou moins souvent, mais que j’ai tous vu ! J’en conclu que cette lecture devrait faire partie du bagage de tout développeur applicatif, aussi basique que semblent parfois ces concepts ! Le ciblage de l’ouvrage est clair : il s’adresse aux développeurs qui va souvent considérer la base de données comme un artefact de second ordre, un simple moyen de persistance des données qu’il va traiter dans son application.

La vérité est qu’appréhender l’association d’un développement objet (au hasard) et d’une base de données, c’est devoir faire face à la question des paradigmes multiples. Ce livre est original à ce titre car il fait face à cette réalité et va aider le développeur souvent peu sensibilisé à ce problème à monter en compétence.

De plus le texte est clair et bien écrit. Pourquoi se priver de cette lecture ?

sql-antipatterns-pragprog

Référence complète : SQL Antipatterns, Avoiding the pitfalls of database programming – Bill Karwin – Pragmatic Bookshelf 2010 – ISBN : 978 1 93435 655 5

SQL Antipatterns: Avoiding the Pitfalls of Database Programming

http://www.goodreads.com/book/add_to_books_widget_frame/1934356557?atmb_widget%5Bbutton%5D=atmb_widget_1.png&atmb_widget%5Bhide_friends%5D=on