El disseny d'esquemes és una part fonamental del treball amb MongoDB. A diferència de les bases de dades SQL, MongoDB és una base de dades NoSQL que utilitza documents JSON per emmagatzemar dades. Això proporciona una gran flexibilitat, però també requereix una comprensió clara de com estructurar les dades de manera eficient.
Conceptes Clau
- Documents i Col·leccions
- Documents: Són els registres individuals emmagatzemats en una col·lecció. Cada document és un objecte JSON.
- Col·leccions: Són conjunts de documents. Les col·leccions són l'equivalent a les taules en bases de dades SQL.
- Esquemes Flexibles
- MongoDB permet esquemes flexibles, el que significa que els documents en una col·lecció no necessiten tenir la mateixa estructura.
- Això permet una evolució més fàcil de l'esquema, però també pot portar a inconsistències si no es gestiona correctament.
- Normalització vs. Desnormalització
- Normalització: Emmagatzemar dades en múltiples col·leccions per evitar la duplicació.
- Desnormalització: Emmagatzemar dades en una sola col·lecció per millorar el rendiment de lectura.
Estratègies de Disseny d'Esquemes
- Documents Encaixats
- Quan utilitzar-los: Quan les dades estan fortament relacionades i es consulten juntes freqüentment.
- Exemple:
{ "nom": "John Doe", "adreça": { "carrer": "123 Main St", "ciutat": "Barcelona", "codi_postal": "08001" } }
- Referències
- Quan utilitzar-les: Quan les dades estan relacionades però es consulten per separat o quan la mida del document pot ser massa gran.
- Exemple:
{ "nom": "John Doe", "adreça_id": "5f8d0d55b54764421b7156c3" }
- Tipus de Dades
- MongoDB suporta diversos tipus de dades, incloent cadenes, números, dates, arrays, i objectes.
- Exemple:
{ "nom": "John Doe", "edat": 30, "data_naixement": ISODate("1990-01-01T00:00:00Z"), "aficions": ["lectura", "esports"] }
Exemples Pràctics
Exemple 1: Disseny d'un Esquema per a una Aplicació de Blog
-
Document Encaixat:
{ "títol": "Introducció a MongoDB", "autor": "Jane Smith", "contingut": "Aquest és un article sobre MongoDB...", "comentaris": [ { "usuari": "John Doe", "comentari": "Gran article!", "data": ISODate("2023-10-01T12:00:00Z") } ] }
-
Referències:
// Col·lecció d'articles { "títol": "Introducció a MongoDB", "autor": "Jane Smith", "contingut": "Aquest és un article sobre MongoDB..." } // Col·lecció de comentaris { "article_id": "5f8d0d55b54764421b7156c3", "usuari": "John Doe", "comentari": "Gran article!", "data": ISODate("2023-10-01T12:00:00Z") }
Exemple 2: Disseny d'un Esquema per a una Aplicació de Comerç Electrònic
-
Document Encaixat:
{ "nom": "Producte A", "preu": 29.99, "categories": ["electrònica", "gadgets"], "valoracions": [ { "usuari": "John Doe", "puntuació": 5, "comentari": "Excel·lent producte!", "data": ISODate("2023-10-01T12:00:00Z") } ] }
-
Referències:
// Col·lecció de productes { "nom": "Producte A", "preu": 29.99, "categories": ["electrònica", "gadgets"] } // Col·lecció de valoracions { "producte_id": "5f8d0d55b54764421b7156c3", "usuari": "John Doe", "puntuació": 5, "comentari": "Excel·lent producte!", "data": ISODate("2023-10-01T12:00:00Z") }
Exercicis Pràctics
Exercici 1: Dissenyar un Esquema per a una Aplicació de Gestió de Projectes
- Crea un document per a un projecte que inclogui el nom del projecte, la data d'inici, la data de finalització i una llista de tasques.
- Cada tasca ha de tenir un títol, una descripció, un estat (pendent, en progrés, completat) i una data de venciment.
Solució:
{ "nom": "Projecte A", "data_inici": ISODate("2023-10-01T00:00:00Z"), "data_finalització": ISODate("2023-12-31T00:00:00Z"), "tasques": [ { "títol": "Tasca 1", "descripció": "Descripció de la tasca 1", "estat": "pendent", "data_venciment": ISODate("2023-10-15T00:00:00Z") }, { "títol": "Tasca 2", "descripció": "Descripció de la tasca 2", "estat": "en progrés", "data_venciment": ISODate("2023-11-01T00:00:00Z") } ] }
Exercici 2: Dissenyar un Esquema per a una Aplicació de Biblioteca
- Crea un document per a un llibre que inclogui el títol, l'autor, la data de publicació i una llista de categories.
- Crea un document per a un usuari que inclogui el nom, el correu electrònic i una llista de llibres prestats. Cada llibre prestat ha de tenir una referència al llibre i la data de préstec.
Solució:
// Col·lecció de llibres { "títol": "El Quixot", "autor": "Miguel de Cervantes", "data_publicació": ISODate("1605-01-16T00:00:00Z"), "categories": ["clàssic", "novel·la"] } // Col·lecció d'usuaris { "nom": "John Doe", "correu_electrònic": "[email protected]", "llibres_prestats": [ { "llibre_id": "5f8d0d55b54764421b7156c3", "data_préstec": ISODate("2023-10-01T00:00:00Z") } ] }
Conclusió
El disseny d'esquemes en MongoDB és una habilitat essencial que requereix una comprensió clara de les necessitats de l'aplicació i de com es consultaran les dades. Utilitzar documents encaixats i referències de manera adequada pot millorar significativament el rendiment i la flexibilitat de la teva base de dades. Practica amb diferents escenaris per trobar l'equilibri adequat entre normalització i desnormalització segons les teves necessitats específiques.
Curs de MongoDB
Mòdul 1: Introducció a MongoDB
Mòdul 2: Operacions CRUD a MongoDB
Mòdul 3: Modelatge de Dades a MongoDB
Mòdul 4: Indexació i Agregació
Mòdul 5: Funcions Avançades de MongoDB
Mòdul 6: Rendiment i Seguretat
- Optimització del Rendiment
- Còpia de Seguretat i Restauració
- Millors Pràctiques de Seguretat
- Monitorització i Alertes