Types complexes

De plus en plus on est amené à stocker des types plus compliqués dans nos bases. Dans ce chapitre, on explore l'utilisation de quelques-uns de ses types.

Dates

Une date est à la fois une donnée composée (année, mois, jour, heure, minute, secondes) à la fois une donnée simple (le nombre de secondes depuis 01/01/1970).

Pour les raisons de lisibilitĂ©, on prĂ©fĂšre le format complexe. Mais, pour les raisons d’utilisation (trier, par exemple, ou bien les opĂ©rations du genre supĂ©rieur Ă  ou infĂ©rieur Ă ) le format simple est prĂ©fĂ©rable.

Par exemple, en France, on présente une date avec le format jj/mm/aaa.

Ce formant n'est pas trÚs pratique pour trier ! Si on a un ensemble de dates de plusieurs années, comment on peut trier les dates en ordre croissant ?

Un format plus pratique serait pour trier sera : aaaa/mm/jj (l’unitĂ© le plus grande vers l’unitĂ© le moins grande).

Mais, le format est plutÎt précisé par la culture, pas par son cÎté pratique. Aux Etats Unis, c'est encore pire : mm/jj/aaaa !

En SQL, il y a des types Date, Time, DateTime, TimeStamp et Year qui stocke la date et/ou l’heure dans un format normalisĂ© et indĂ©pendant de la culture. Lorsqu’on rĂ©cupĂšre cette donnĂ©e cotĂ© client, c'est Ă  nous de le traduire dans le format local pour l'affichage.

Blob

Un blob permet de stocker des grandes quantitĂ©s de donnĂ©es (des fichiers/images/
) comme sĂ©quence d’octets : https://mariadb.com/kb/en/blob/

Mais, est-ce que c'est une bonne pratique ?

Avantages :

  • Facile Ă  accĂ©der, via son ID ou dans un join avec d’autres tables

  • On peut sauvegarder la base et tous les fichiers en une seule action

  • Les rĂšgles d’accĂšs de la SGBDR sont applicables aussi aux fichiers

Désavantages :

  • Il faut ĂȘtre fastidieux dans les clauses where : on risque de transfĂ©rer les fichiers entiers dans nos - requĂȘtes !

  • Sauvegarde de la base de donnĂ©es trĂšs lourde et longue

  • Pas trĂšs optimisĂ© : notre SGBDR doit passer beaucoup de temps Ă  accĂ©der au disque et transfĂ©rer des donnĂ©es, alors d’autres systĂšmes existe (CDN par exemple) qui optimise le stockage et transfert des fichiers

N’oubliez pas qu’un fichier ou image est souvent statique et ne change pas souvent, donc son stockage et diffusion peut-ĂȘtre optimisĂ©e en dehors de notre SGBDR.

JSON

On peut stocker des colonnes qui contiennent du JSON, et valider que le JSON est bien formaté :

create table livre (
  id int not null auto_increment,
  page JSON CHECK (JSON_VALID(page)),
  primary key (id)
);


insert into livre (page) values 
('{"number": 1, "text": "Lorem ipsum", "chapter": "And then there was one"}');

Il existe de nombreuses fonctions qui permettent de travailler avec le format JSON dans MariaDB : https://mariadb.com/kb/en/json-functions/.

DerniĂšre mise Ă  jour