1. Règles syntaxiques
1.1. Paires clé-valeur :
1.1.1. Les clés doivent être des chaînes de caractères entourées de guillemets.
1.1.2. La valeur peut être un type de données JSON valide (chaîne, nombre, tableau, objet, booléen, ou null).
1.2. Séparation des paires :
1.2.1. Les paires clé-valeur dans un objet sont séparées par des virgules.
1.3. Éléments vides :
1.3.1. Les objets et tableaux peuvent être vides, par exemple, et sont des JSON valides.
1.4. Élément racine :
1.4.1. Un document JSON doit avoir un seul élément racine qui contient tous les autres éléments.
2. Usages de JSON
2.1. Chargements Asynchrones
2.1.1. AJAX :
2.1.1.1. JSON est largement utilisé dans les chargements asynchrones, notamment avec AJAX (Asynchronous JavaScript and XML).
2.1.1.2. Permet d'échanger des données entre le client et le serveur sans recharger la page, améliorant ainsi l'expérience utilisateur.
2.1.2. Avantages par rapport à XML :
2.1.2.1. JSON est plus léger et plus facile à manipuler que XML, ce qui le rend plus adapté pour les applications web modernes.
2.2. APIs (Interfaces de Programmation d'Applications)
2.2.1. Échange de données :
2.2.1.1. De nombreuses entreprises, comme Twitter, Facebook et LinkedIn, utilisent JSON pour échanger des informations via leurs APIs.
2.2.1.2. JSON facilite l'intégration et l'interaction entre différents systèmes et services.
2.2.2. Dominance de JSON :
2.2.2.1. JSON a supplanté XML dans le domaine des APIs en raison de sa simplicité et de sa compatibilité avec divers langages de programmation.
2.3. Bases de données NoSQL
2.3.1. Utilisation dans NoSQL :
2.3.1.1. JSON est couramment utilisé dans les bases de données NoSQL, comme MongoDB, pour stocker des documents.
2.3.1.2. Permet une structure de données flexible et dynamique, adaptée aux besoins variés des applications modernes.
2.3.2. Modélisation des données :
2.3.2.1. Les documents JSON permettent de modéliser des données complexes et hiérarchiques, facilitant la gestion et l'accès aux informations.
3. Normalisation
3.1. Définition :
3.1.1. Processus de structuration des données dans une base de données relationnelle pour réduire la redondance et éviter les anomalies de mise à jour.
3.2. Objectifs :
3.2.1. Créer des tables distinctes pour chaque entité et établir des relations entre elles via des clés primaires et étrangères.
3.2.2. Assurer l'intégrité des données en minimisant la duplication.
3.3. Avantages :
3.3.1. Facilite la maintenance des données et les mises à jour.
3.3.2. Améliore la cohérence des données en évitant les incohérences dues à des duplications.
4. Dénormalisation
4.1. Définition :
4.1.1. Processus inverse de la normalisation, consistant à regrouper plusieurs tables liées en une seule table, ce qui entraîne une redondance des données.
4.2. Objectifs :
4.2.1. Améliorer les performances des requêtes en réduisant le nombre de jointures nécessaires lors de l'accès aux données.
4.2.2. Optimiser les temps de réponse pour les opérations de lecture, particulièrement dans les bases de données NoSQL.
4.3. Avantages :
4.3.1. Accélère les performances des requêtes en simplifiant l'accès aux données.
4.3.2. Réduit la complexité des requêtes, rendant le développement plus rapide et plus efficace.
5. Comparaison entre Normalisation et Denormalisation
5.1. Approche :
5.1.1. La normalisation vise à structurer les données de manière à éviter la redondance, tandis que la dénormalisation accepte la redondance pour améliorer les performances.
5.2. Utilisation :
5.2.1. La normalisation est courante dans les bases de données relationnelles, alors que la dénormalisation est souvent utilisée dans les bases de données NoSQL pour des applications nécessitant des performances élevées.
6. Enchâssement (Embedding)
6.1. Définition :
6.1.1. Imbrication partielle ou totale d'un document dans un autre.
6.2. Utilisation :
6.2.1. Préférée lorsque les documents sont petits et peu susceptibles de croître.
6.2.2. Idéale pour des données qui sont souvent accédées ensemble.
6.3. Avantages :
6.3.1. Permet un accès rapide aux données imbriquées en une seule opération de base de données.
6.3.2. Réduit le besoin de jointures complexes.
6.4. Limites :
6.4.1. La taille maximale d'un document ne doit pas dépasser 16 Mo.
6.4.2. Peut entraîner une duplication de données si les documents imbriqués sont utilisés dans plusieurs contextes
7. Liaison (Linking)
7.1. Définition :
7.1.1. Utilisation de références pour relier des documents entre différentes collections.
7.2. Utilisation :
7.2.1. Préférée lorsque la taille des documents ou des collections est susceptible d'augmenter.
7.2.2. Utile pour des données qui changent fréquemment ou qui sont volumineuses.
7.3. Avantages :
7.3.1. Permet de maintenir une structure de données plus normalisée.
7.3.2. Évite la duplication de données, facilitant les mises à jour.
7.4. Processus de récupération :
7.4.1. 1.Effectuer une première requête pour récupérer l'identifiant du document lié. 2.Effectuer une seconde requête pour récupérer les données du document référencé.
8. Définition :
8.1. Format standard de représentation logique de données.
8.2. Hérité de la syntaxe de création d’objets en JavaScript.
8.3. Utilisé pour structurer et transmettre des données sur des sites web.
9. Caractéristiques :
9.1. Format léger :
9.1.1. Utilise peu de caractères de structuration, ce qui le rend facile à lire et à écrire.
9.2. Lisibilité :
9.2.1. Conçu pour être lisible par les humains, facilitant la compréhension des données.
9.3. Indépendance de langage :
9.3.1. Bien que basé sur JavaScript, JSON peut être interprété par de nombreux langages de programmation.
10. Syntaxe de base d’un document JSON
10.1. "stagiaire" :{"prenom":"Amina", "filiere":"Dev Digital ", "niveau":"1A" }
10.2. "stagiaires" :[{"prenom":"Amina", "filiere":"Dev Digital ", "niveau":"1A" }, {"prenom":"Kamal", "filiere":"Infra Digitale ", "niveau":"1A" }, {"prenom":"Sanaa", "filiere":"Infra Digitale ", "niveau":"1A" }]
11. Espaces de nom, Collections et types de données
11.1. Espaces de nom
11.1.1. Définition :
11.1.1.1. Un espace de nom (namespace) est une structure qui permet d'organiser les collections dans une base de données.
11.1.2. Composition :
11.1.2.1. Il est formé par la concaténation du nom de la base de données et du nom de la collection, séparés par un point.
11.1.2.2. myDB.Stagiaires → le nom de la base de données(myDB) suivi du nom de la collection
11.2. Collections
11.2.1. Définition :
11.2.1.1. Une collection est un conteneur pour les documents dans MongoDB, similaire à une table dans une base de données relationnelle.
11.2.2. Caractéristiques :
11.2.2.1. Les collections peuvent contenir des documents ayant des schémas identiques ou différents, offrant une flexibilité dans la structure des données.
11.2.2.2. Les documents d'une collection sont stockés ensemble et peuvent être récupérés ou manipulés en bloc.
11.3. Types de données
11.3.1. BSON :
11.3.1.1. Les documents dans MongoDB sont stockés en BSON (Binary JSON), un format qui prend en charge divers types de données.
11.3.2. Types de données supportés :
11.3.2.1. String : Chaînes de caractères en UTF-8.
11.3.2.1.1. {"_id":"1234", "prenom":"Amina"}
11.3.2.2. Integer : Entiers, pouvant être signés en 32 ou 64 bits.
11.3.2.2.1. {"_id":"1234","prenom":"Amina","age": 19}
11.3.2.3. Double : Valeurs à virgule flottante.
11.3.2.3.1. {"_id":"1234","prenom":"Amina","moyBaccalaureat":14.25}
11.3.2.4. Boolean : Valeurs vrai ou faux.
11.3.2.4.1. {"_id":"1234","prenom":"Amina","moyBaccalaureat":14.25,"admis":true
11.3.2.5. ObjectId : Identifiant unique généré automatiquement pour chaque document.
11.3.2.5.1. { "_id" : ObjectId("62dd128a1a19f3d7ecc6624f"), "prenom" : "Ahmed", "niveau" : "1A", "filiere" : "Dev digital" } { "_id" : 1234.0, "prenom" : "Alaa", "niveau" : "2A", "filiere" : "Dev digital" }
11.3.2.6. Array : Ensemble de valeurs pouvant être de types identiques ou différents.
11.3.2.6.1. { "_id":"1234", "prenom":"Kamal", "niveau":"2A", "option":"Mobile", "skills": [ "python", "javascript", "php" ] }
11.3.2.7. Date : Représente des dates et heures, stockées en millisecondes.
11.3.2.7.1. { "prenom":"Ahmed", "niveau":"1A", "filiere":"Dev digital", "DateInscription_1":Date(), "DateInscription_2":new Date() }
11.3.2.8. Données binaires : Pour stocker des données binaires.
11.3.2.8.1. { "_id":"1234", "prenom":"Amina", "telephone":null, "BinaryValues":"10010001", }