En este módulo, aprenderemos sobre las bases de datos y cómo integrarlas con aplicaciones Node.js. Las bases de datos son fundamentales para almacenar y gestionar datos de manera eficiente. Existen diferentes tipos de bases de datos, cada una con sus propias características y casos de uso.

Conceptos Clave

  1. Base de Datos: Un sistema organizado para almacenar, gestionar y recuperar datos.
  2. SQL (Structured Query Language): Un lenguaje estándar para gestionar bases de datos relacionales.
  3. NoSQL: Un término que se refiere a bases de datos no relacionales, diseñadas para manejar grandes volúmenes de datos no estructurados.
  4. ORM (Object-Relational Mapping): Una técnica que permite interactuar con bases de datos relacionales utilizando lenguajes de programación orientados a objetos.

Tipos de Bases de Datos

Bases de Datos Relacionales (SQL)

  • Ejemplos: MySQL, PostgreSQL, SQLite
  • Características:
    • Estructura basada en tablas.
    • Relaciones entre tablas mediante claves primarias y foráneas.
    • Uso de SQL para consultas y manipulación de datos.

Bases de Datos No Relacionales (NoSQL)

  • Ejemplos: MongoDB, Cassandra, Redis
  • Características:
    • Estructura flexible (documentos, grafos, pares clave-valor).
    • Escalabilidad horizontal.
    • No requieren un esquema fijo.

Comparación entre SQL y NoSQL

Característica SQL NoSQL
Estructura Tablas Documentos, grafos, etc.
Esquema Fijo Flexible
Escalabilidad Vertical Horizontal
Consultas SQL Varía según la base de datos
Transacciones ACID BASE

Integración con Node.js

Node.js puede interactuar con diferentes tipos de bases de datos mediante módulos y bibliotecas específicas. A continuación, veremos cómo trabajar con MongoDB y MySQL, dos de las bases de datos más populares.

MongoDB

MongoDB es una base de datos NoSQL orientada a documentos. Utiliza documentos JSON para almacenar datos, lo que la hace muy flexible y fácil de usar con aplicaciones JavaScript.

Instalación de MongoDB y Mongoose

Mongoose es una biblioteca de Node.js que proporciona una solución basada en esquemas para modelar datos en MongoDB.

npm install mongoose

Conexión a MongoDB

const mongoose = require('mongoose');

mongoose.connect('mongodb://localhost:27017/mydatabase', {
  useNewUrlParser: true,
  useUnifiedTopology: true
});

const db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function() {
  console.log('Connected to MongoDB');
});

MySQL

MySQL es una base de datos relacional ampliamente utilizada. Para interactuar con MySQL en Node.js, podemos usar el módulo mysql.

Instalación del Módulo MySQL

npm install mysql

Conexión a MySQL

const mysql = require('mysql');

const connection = mysql.createConnection({
  host: 'localhost',
  user: 'root',
  password: 'password',
  database: 'mydatabase'
});

connection.connect((err) => {
  if (err) {
    console.error('Error connecting to MySQL:', err.stack);
    return;
  }
  console.log('Connected to MySQL as id ' + connection.threadId);
});

Ejercicio Práctico

Ejercicio 1: Conectar a una Base de Datos MongoDB

  1. Instala MongoDB y Mongoose.
  2. Crea una conexión a una base de datos MongoDB llamada testdb.
  3. Define un esquema y un modelo para una colección llamada users con los campos name y email.
  4. Inserta un documento en la colección users.

Solución

const mongoose = require('mongoose');

mongoose.connect('mongodb://localhost:27017/testdb', {
  useNewUrlParser: true,
  useUnifiedTopology: true
});

const db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function() {
  console.log('Connected to MongoDB');
  
  const userSchema = new mongoose.Schema({
    name: String,
    email: String
  });

  const User = mongoose.model('User', userSchema);

  const newUser = new User({ name: 'John Doe', email: '[email protected]' });

  newUser.save((err) => {
    if (err) return console.error(err);
    console.log('User saved successfully');
  });
});

Ejercicio 2: Conectar a una Base de Datos MySQL

  1. Instala MySQL y el módulo mysql.
  2. Crea una conexión a una base de datos MySQL llamada testdb.
  3. Crea una tabla llamada users con los campos id, name, y email.
  4. Inserta un registro en la tabla users.

Solución

const mysql = require('mysql');

const connection = mysql.createConnection({
  host: 'localhost',
  user: 'root',
  password: 'password',
  database: 'testdb'
});

connection.connect((err) => {
  if (err) {
    console.error('Error connecting to MySQL:', err.stack);
    return;
  }
  console.log('Connected to MySQL as id ' + connection.threadId);

  const createTableQuery = `
    CREATE TABLE IF NOT EXISTS users (
      id INT AUTO_INCREMENT PRIMARY KEY,
      name VARCHAR(255) NOT NULL,
      email VARCHAR(255) NOT NULL
    )
  `;

  connection.query(createTableQuery, (err, results, fields) => {
    if (err) throw err;
    console.log('Table created or already exists');

    const insertUserQuery = `
      INSERT INTO users (name, email)
      VALUES ('John Doe', '[email protected]')
    `;

    connection.query(insertUserQuery, (err, results, fields) => {
      if (err) throw err;
      console.log('User inserted successfully');
      connection.end();
    });
  });
});

Conclusión

En esta sección, hemos introducido los conceptos básicos de las bases de datos y cómo integrarlas con Node.js. Hemos explorado tanto bases de datos relacionales (SQL) como no relacionales (NoSQL), y hemos visto ejemplos prácticos de cómo conectarse a MongoDB y MySQL desde una aplicación Node.js. En el próximo módulo, profundizaremos en el uso de MongoDB con Mongoose y bases de datos SQL con Sequelize para realizar operaciones CRUD.

Curso de Node.js

Módulo 1: Introducción a Node.js

Módulo 2: Conceptos Básicos

Módulo 3: Sistema de Archivos y E/S

Módulo 4: HTTP y Servidores Web

Módulo 5: NPM y Gestión de Paquetes

Módulo 6: Framework Express.js

Módulo 7: Bases de Datos y ORMs

Módulo 8: Autenticación y Autorización

Módulo 9: Pruebas y Depuración

Módulo 10: Temas Avanzados

Módulo 11: Despliegue y DevOps

Módulo 12: Proyectos del Mundo Real

© Copyright 2024. Todos los derechos reservados