### 1. **Bases de données relationnelles vs NoSQL** #### **Bases de données relationnelles (ex: MySQL, PostgreSQL)** - **Structure** : Organisées en tables avec des lignes (enregistrements) et des colonnes (attributs). - **Modèle relationnel** : Les données sont liées entre elles par des clés (clé primaire, clé étrangère). - **Requêtes** : Utilisation du langage SQL (Structured Query Language). - **Cas d’usage** : Parfait pour les systèmes ayant des relations complexes entre les données (e.g. ERP, CRM). **Exemple (MySQL)** : ```sql CREATE TABLE Users ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50), email VARCHAR(100) ); INSERT INTO Users (name, email) VALUES ('John Doe', 'john@example.com'); ``` #### **Bases de données NoSQL (ex: MongoDB, Firebase Firestore)** - **Structure** : Non relationnelles, les données sont stockées dans des documents JSON-like. - **Modèle flexible** : Pas besoin de schéma strict, chaque document peut avoir une structure différente. - **Requêtes** : Utilisation de JSON pour les requêtes, pas de SQL. - **Cas d’usage** : Utilisées pour des applications nécessitant une grande scalabilité et flexibilité (e.g. réseaux sociaux, IoT). **Exemple (MongoDB)** : ```json { "_id": "1", "name": "John Doe", "email": "john@example.com" } ``` ### 2. **Fonctionnement de Firebase Firestore** Firebase Firestore est une base de données NoSQL qui stocke des données sous forme de **documents** et **collections**. - **Document** : Un document est une entrée dans une collection et contient des paires clé-valeur (comme un objet JSON). - **Collection** : Une collection est un ensemble de documents. Par exemple, la collection `Users` peut contenir plusieurs documents représentant chaque utilisateur. **Exemple dans Firebase :** - Collection: `Users` - Document: `User1` (clé: `name: "John Doe", email: "john@example.com"`) - Document: `User2` (clé: `name: "Jane Smith", email: "jane@example.com"`) #### Ajouter un document dans Firestore : ```javascript db.collection("Users").add({ name: "John Doe", email: "john@example.com" }); ``` ### 3. **CRUD : Create, Read, Update, Delete** Le CRUD représente les 4 opérations principales pour manipuler les données dans une base de données. #### **CRUD avec MySQL :** - **Create (Insérer un enregistrement)** : ```sql INSERT INTO Users (name, email) VALUES ('Alice', 'alice@example.com'); ``` - **Read (Lire des enregistrements)** : ```sql SELECT * FROM Users; ``` - **Update (Mettre à jour un enregistrement)** : ```sql UPDATE Users SET email = 'newalice@example.com' WHERE name = 'Alice'; ``` - **Delete (Supprimer un enregistrement)** : ```sql DELETE FROM Users WHERE name = 'Alice'; ``` #### **CRUD avec Firebase :** - **Create (Ajouter un document)** : ```javascript db.collection("Users").add({ name: "Alice", email: "alice@example.com" }); ``` - **Read (Lire un document)** : ```javascript db.collection("Users").doc("User1").get().then((doc) => { console.log(doc.data()); }); ``` - **Update (Mettre à jour un document)** : ```javascript db.collection("Users").doc("User1").update({ email: "newalice@example.com" }); ``` - **Delete (Supprimer un document)** : ```javascript db.collection("Users").doc("User1").delete(); ``` ### 4. **Différences principales entre bases relationnelles et NoSQL** : - **Schéma rigide vs flexible** : Les bases relationnelles nécessitent un schéma fixe (tables, colonnes définies à l'avance), alors que les bases NoSQL comme MongoDB ou Firebase sont plus flexibles et n'imposent pas de schéma rigide. - **Scalabilité** : Les bases NoSQL sont souvent mieux adaptées pour la scalabilité horizontale, car elles sont conçues pour distribuer les données sur plusieurs serveurs. - **Requêtes complexes** : Les bases relationnelles sont plus performantes pour les requêtes complexes impliquant des jointures entre plusieurs tables, ce qui peut être plus difficile à réaliser avec des bases NoSQL. J’espère que ce pense-bête te sera utile !