- Introduction * C'est quoi une base de donnée * Topologie * Base de données relationnel * Langage SQL * Base de données NoSQL (un clin d'œil) * Introduction - Référence
MySQL est un serveur de bases de données relationnelles SQL développé dans un souci de performances élevées en lecture, ce qui signifie qu'il est davantage orienté vers le service de données déjà en place que vers celui de mises à jour fréquentes et fortement sécurisées. Il est multi-thread et multi-utilisateur.
C'est un logiciel libre, open source, développé sous double licence selon qu'il est distribué avec un produit libre ou avec un produit propriétaire. Dans ce dernier cas, la licence est payante, sinon c'est la licence publique générale GNU (GPL) qui s'applique. Un logiciel qui intègre du code MySQL ou intègre MySQL lors de son installation devra donc être libre ou acquérir une licence payante. Cependant, si la base de données est séparée du logiciel propriétaire qui ne fait qu'utiliser des API tierces (par exemple en C# ou php), alors il n'y a pas besoin d'acquérir une licence payante MySQL. Ce type de licence double est utilisé par d'autres produits comme le framework de développement de logiciels Qt (pour les versions antérieures à la 4.5).
MySQL fonctionne sur un grand nombre de système d'exploitation :
- AIX
- IBM i-5
- BSDi
- FreeBSD
- HP-UX
- Linux
- Mac OS X
- NetWare
- NetBSD
- OpenBSD
- OS/2 Warp
- SGI IRIX
- Solaris
- SCO OpenServer
- SCO UnixWare
- Tru64 Unix
- Windows.
MySQL et MariaDB suite du rachat de MySQL par Sun Microsystems et des annonces du rachat de Sun Microsystems par Oracle Corporation, Michael Widenius, fondateur de MySQL, quitte cette société pour lancer le projet MariaDB, dans une démarche visant à remplacer MySQL tout en assurant l’interopérabilité. Le nom vient de la 2e fille de Monty Widenius, Maria (la première s'appelant My).
Mais avant de ce lancé dans mysql c'est quoi une Base de données , faisons connaissance avec ce nouveau venu ...
Une base de données est un « conteneur » stockant des données telles que des chiffres, des dates ou des mots, pouvant être retraités par des moyens informatiques pour produire une information ; par exemple, des chiffres et des noms assemblés et triés pour former un annuaire. Les retraitements sont typiquement une combinaison d'opérations de recherches, de choix, de tri, de regroupement, et de concaténation.
Donc l'objectif d'une base de donnée est d'avoir un lieu de stockage de nos données, structuré de manière à être en mesure de récupérer facilement les données. La majorité des systèmes de base de données de nos jours permette une communication client / serveur afin de permettre à plusieurs applications de communiquer avec cette dernière.
Les avantages de l'utilisation d'une base de données ou rôles d'une base de données :
- Indépendance : Premièrement en utilisant une base de données pour vos applications, vos données sont dissocié de votre application. Ceci vous offre une indépendance de vos données de votre application. Vous pouvez donc manipuler vos données avec d'autre application sans trop de difficulté car vous avez une interface normalisé pour extraire les données.
- Accès : Le système de base de donnée vous permet de gérer les accès au données , principalement l'accès concurrent.
- Cohérence : Selon le système de base de donnée choisie , le système réalisera des validations afin de conserver vos données cohérente.
- Sécurité : Il est possible de géré l'accès aux utilisateurs afin de leur permettre uniquement la modification de certain table , ou de permettre la lecture seule.
- Administration : Le système de sauvegarde, voir de réplication peut être mis en place peu importe les applications
Il existe plusieurs topologie de base de données :
-
Relationnel : De nos jours cette topologie est la plus répandu, quand vous dites base de donnée généralement les personnes ce représente une BD relationnel. Selon ce modèle, les données sont placées dans des tables avec lignes et colonnes et n'importe quelle donnée contenue dans la base de données peut être retrouvée à l'aide du nom de la table, du nom de la colonne et de la clé primaire. Le modèle relationnel est destiné à assurer l'indépendance des données et à offrir les moyens de contrôler la cohérence et d'éviter la redondance. Il permet de manipuler les données comme des ensembles en effectuant des opérations de la théorie des ensembles. Les règles de cohérence qui s'appliquent aux bases de données relationnelles sont l'absence de redondance ou de nul des clés primaires, et l'intégrité référentielle.
-
Hiérarchique : Une base de données hiérarchique est une base de données dont le système de gestion lie les enregistrements dans une structure arborescente où chaque enregistrement n'a qu'un seul possesseur. Elle a été utilisée dans les premiers systèmes de gestion de base de données de type mainframe et a été inventé par la NASA. Un Bonne exemple de base de données Hiérarchique nous pouvons penser à l'annuaire LDAP.
-
orienté objet et objet-relationnel : Les SGBD orientés objet sont un sujet de recherche depuis 1980, lorsque sont apparus les premiers langages de programmation orientée objet. Ils sont destinés à offrir les fonctionnalités des SGBD à des langages orientés objet et permettre le stockage persistant des objets. Les objets sont manipulés en utilisant les possibilités natives des langages orientés objet et une interface de programmation permet d'exploiter les fonctionnalités du SGBD. Celui-ci est équipé des mécanismes nécessaires pour permettre l'utilisation des possibilités d'encapsulation, d'héritage et de polymorphisme des langages de programmation orientée objet. Les SGBD objet-relationnel offrent à la fois les possibilités des SGBD orientés objet et ceux des SGBD relationnels. (Base de données le supportant : Informix , Oracle , ...)
-
XML ou RDF : Une base de données XML Native (NXD en anglais) est une base de données qui s'appuie sur le modèle de données fourni par XML. Elle utilise typiquement des langages de requête XML comme XPath ou XQuery. Une extension possible est une base RDF, avec le langage d'interrogation SPARQL.
Comme nous allons voir le système Mysql qui est une base de données relationnel concentrons nous sur cette topologie. Commençons par clarifier la structure des données qui sont contenu dans une base de données relationnel. Je comprend que beaucoup d'entre vous ont déjà une bonne représentation du système mais je désire mettre tous le monde à niveau.
L'ensemble des données sont stocké comme suit :
- Table : Une table représente un regroupement structuré de données, une base de données est composé de plusieurs tables formant l'ensemble des données.
- Colonne ou champ : Élément de base d'une table, identifié par son nom, son type (numérique, date, caractères...) et une longueur maximale. Un champ apparait souvent comme le titre d'une colonne.
- Ligne ou enregistrement : Informations contenues dans une ligne d'une table et décrivant un seul article, une seule personne...
- Clé primaire : Champs permettant d'identifier un enregistrement de façon unique. Une clé peut être formée d'un seul champ ou de plusieurs. C'est la clé qui permet de retrouver un client parmi les autres ou d'extraire un produit de la base de données.
Une petite représentation graphique pour aider :
Mais où est le relationnel dans cette structure ? Si chaque table est définie indépendamment, nous devrions plutôt parler de regroupement de données et non de relation!
Passons donc au côté relationnel :
- Clé primaire : La clé primaire permet de définir un enregistrement unique, telle que mentionné plus tôt ceci peut être un champ ou une combinaison de plusieurs champs.
- Clé étrangère : La clé étrangère permet de définir la relation avec une autre table et de spécifié la clé primaire pour spécifier un enregistrement unique dans l'autre table. Il ne peut y avoir qu'une clé primaire par table , mais il peut y avoir plusieurs clé étrangère faisant référence à plusieurs tables .
Voici une représentation graphique de cette relation :
Lorsque nous avons mentionné l'avantage d'utiliser une base de données pour conserver une cohérence de nos données ceci est un bon exemple. Prenons un exemple , avec la représentation de la table client avec la table des commandes .
Nous voyons la table client comprenant la clé primaire (numéro de client) , le prénom , le nom et l'adresse courriel. Nous avons aussi la table des commandes , qui a comme clé primaire le numéro de commande , comme clé étrangère le numéro du client , le produit et la quantité. Si nous désirons ajouter une commande dans le système si nous désirons ajouter une commande pour le client Jean Dupont donc le numéro 1, mais lors de la saisi nous réalisons une erreur et nous écrivons le chiffre 11. Le système de base de données refusera l'insertion car la clé étrangère ne correspond pas à un client valide. Il y a donc une validation par le système nous assurant une cohérence des données.
Nous verrons plus en détail ce mécanisme lors d'exemple de mise en place.
SQL (sigle de Structured Query Language, en français langage de requête structurée) est un langage informatique normalisé servant à exploiter des bases de données relationnelles. La partie langage de manipulation des données de SQL permet de rechercher, d'ajouter, de modifier ou de supprimer des données dans les bases de données relationnelles.
Outre le langage de manipulation des données, la partie langage de définition des données permet de créer et de modifier l'organisation des données dans la base de données, la partie langage de contrôle de transaction permet de commencer et de terminer des transactions, et la partie langage de contrôle des données permet d'autoriser ou d'interdire l'accès à certaines données à certaines personnes.
Créé en 1974, normalisé depuis 1986, le langage est reconnu par la grande majorité des systèmes de gestion de bases de données relationnelles (abrégé SGBDR) du marché.
C'est un langage déclaratif, c'est-à-dire qu'il permet de décrire le résultat escompté, sans décrire la manière de l'obtenir. Les SGBD sont équipés d'optimiseurs de requêtes - des mécanismes qui déterminent automatiquement la manière optimale d'effectuer les opérations, notamment par une estimation de la complexité algorithmique. Celle-ci est fondée sur des statistiques récoltées à partir des données contenues dans la base de données (nombre d'enregistrements, nombre de valeurs distinctes dans une colonne, etc.).
Les instructions de manipulation du contenu de la base de données commencent par les mots clés SELECT, UPDATE, INSERT ou DELETE qui correspondent respectivement aux opérations de recherche de contenu, modification, ajout et suppression. Divers mots clés tels que FROM, JOIN et GROUP permettent d'indiquer les opérations d'algèbre relationnelle à effectuer en vue d'obtenir le contenu à manipuler.
Exemple de requête :
-
Recherche
SELECT nom, service FROM employe WHERE statut = 'stagiaire' ORDER BY nom; -
Insertion
INSERT INTO employe (nom, service , status) VALUES ('Denis-Jean Noid', 'Developpement', 'Jardinier'); -
Suppression
DELETE FROM employe WHERE status = 'president';
Nous aurons l'occasion de voir plus en détail ce langage pendant la formation bien évidement .
Nous ne couvrirons pas ce type de base de données ici, cependant vu la popularité de ce type de base de données, je voulais faire au moins faire un clin d'œil.
La définition exacte de la famille des SGBD NoSQL reste sujette à débat. Le terme se rattache autant à des caractéristiques techniques qu'à une génération historique de SGBD qui a émergé à la fin des années 2000/début des années 20102. D'après Pramod J. Sadalage et Martin Fowler, la raison principale de l'émergence et de l'adoption des SGBD NoSQL serait le développement des clusters de serveurs et la nécessité de posséder un paradigme de bases de données adapté à ce modèle d'infrastructure matérielle
Il existe plusieurs type de base de données NoSQL :
- Clé/valeur : Ceci représente les premières base de données NoSQL . Permettent de stocker des informations sous forme d'un couple clef/valeur où la valeur peut être une chaine de caractère, un entier ou un objet sérialisé. Une base de données Redis. Ce type de base de données offre de très bonne performances par sa simplicité et peut même être utilisé pour stocker les sessions utilisateur ou le cache de votre site par exemple.
- Colonnes : Ressemble aux bases de données relationnelles, car les données sont sauvegardées sous forme de ligne avec des colonnes, mais se distingue par le fait que le nombre de colonnes peut varier d'une ligne à l'autre. Les solutions les plus connues sont HBase ou Cassandra. Nous avions vu les systèmes de base de données relationnel stocké les informations dans un table avec un nombre de colonne déterminé, pour ajouter une entré il faut renseigner l'ensemble des colonne, contrairement au système NoSQL.
- Document : Représente les informations sous forme d'objet XML ou JSON. L'avantage est de pouvoir récupérer simplement des informations structurées de manière hiérarchique. Les solutions les plus connues sont CouchDB, RavenDB et MongoDB.
L'objectif du système NoSQL est de répondre au problématique des suivant :
- La majorité des solutions NoSQL sont sans schéma (shemaLess) ceci permet de modifier la structure des données rapidement sans une réorganisation de l'ensemble de la structure.
- Contrairement au base de données relationnel classique, l'évolution des performances est réalisé de manière horizontal via le partage des informations sur plusieurs serveurs. Les solutions de base de données relationnels offre une évolution de performance vertical (augmentation de mémoire , cpu , ... ) il est possible aussi de mettre des solutions de clusters, mais ceci est plus coûteux.
- Les solutions NoSQL sont en mesure de traiter un haut volume de donnée (centaines, milliers de Teraoctets)
Bien entendu les solutions NoSQL n'est pas magique, il y a aussi des problèmes :
- Il n’existe pas de langage d’interrogation standardisé : chaque éditeur a mis en place le sien
- La mise en œuvre d’un environnement fortement transactionnel (fort besoin d’écriture) où le séquencement des écritures est primordial, reste complexe puisque l'architecture est distribuée compliquant l'atomicité et la cohérence des transactions
- L'écriture de requêtes complexes est difficile à mettre en œuvre
Un petit résumé :
Afin d'obtenir de meilleures performances, les bases de données NoSQL ont abandonné certaines fonctionnalités proposées par défaut par les bases relationnelles comme les transactions ou encore les vérifications d'intégrités.
- Transactions : La raison de la suppression des transactions est explicable, en effet combien de fois réalisez vous des modifications sur la base de données sans les commiter ? Afin d'optimiser les performances il fut choisie de supprimé cette fonctionnalité peu utilisé.
- Vérifications d'inrégrités : Une fois encore il y a une explication à tous, la responsabilité des validations des données est délégué au développeur. Ceci peut être vu comme un inconvénient, mais soyons réaliste dans les formulaires que vous réalisez vous faites déjà cette validation ! Si les données sont modifiées directement, il faudra faire plus attention, mais combien de fois ceci arrive ?!?! Est-ce que les performances doivent être impacté lors de l'usage de 99% du temps ... C'est un choix !
- https://openclassrooms.com/courses/administrez-vos-bases-de-donnees-avec-mysql/introduction-14
- https://openclassrooms.com/courses/administrez-vos-bases-de-donnees-avec-mysql/les-types-de-donnees
- https://fr.wikipedia.org/wiki/Base_de_donn%C3%A9es
- https://fr.wikipedia.org/wiki/Syst%C3%A8me_de_gestion_de_base_de_donn%C3%A9es
- https://fr.wikipedia.org/wiki/Mod%C3%A8le_relationnel
- http://www.lino.com/~vmartino/Logiciel/Access/vocabul.htm
- https://fr.wikipedia.org/wiki/Structured_Query_Language
- https://en.wikipedia.org/wiki/NoSQL
- https://fr.wikipedia.org/wiki/NoSQL
- https://www.grafikart.fr/blog/sql-nosql
- https://blog.talanlabs.com/etude-comparative-bdd-relationnelle-versus-nosql/