C3 - Introducción a las bases de datos
SQL / NoSQL

Full Stack amb React

Full Stack amb React

Full Stack amb React

Full Stack amb React

  • Colección de datos a la que puedo acceder para crearlos, manipularlos o leerlos

  • La mayoría pertenecen al backend (aunque también hay de frontend)

  • Dos grandes grupos: 

    • Relacionales (SQL)

      • MySQL, MariaDB, SQL Server, Oracle, PostgreSQL

    • NoSQL

      • MongoDB, Redis, Cassandra, CouchDB, DynamoDB

Bases de datos

Full Stack amb React

Full Stack amb React

  • Servidor

  • Cliente

Bases de datos

Full Stack amb React

Full Stack amb React

  • Tablas

  • Campos

  • Registros

Bases de datos relacionales

Full Stack amb React

Full Stack amb React

  • Lenguaje de consultas, para hacer peticiones a la base de datos

  • Operaciones para crear y modificar datos (CREATE TABLE, INSERT, UPDATE)

  • Operaciones para leer datos (SELECT)

El lenguaje SQL

SELECT * FROM alumnos WHERE nota >= 5;
SELECT nombre, apellidos, dni, aula FROM alumnos ORDER BY apellidos, nombre;
UPDATE alumnos SET nota = 10 WHERE dni = "28638192H";

Full Stack amb React

Full Stack amb React

  • CREATE TABLE

  • Hay que dar el nombre de la tabla y definir las columnas

  • Cada columna (campo):

    • nombre

    • tipo

    • restricciones

Crear tablas

CREATE TABLE alumnos (
  id int PRIMARY KEY AUTO_INCREMENT,
  nombre varchar(32) NOT NULL,
  apellidos varchar(32),
  dni varchar(9) NOT NULL UNIQUE,
  aula int DEFAULT 0
)

Full Stack amb React

Full Stack amb React

  • ALTER TABLE

  • Hay que dar el nombre de la tabla y la acción que queremos hacer

  • Añadir columna: ADD COLUMN

  • Borrar columna: DROP COLUMN

  • Modificar columna: MODIFY COLUMN

Modificar tablas

ALTER TABLE gatos ADD COLUMN raza VARCHAR(32);
ALTER TABLE gatos MODIFY COLUMN raza VARCHAR(10) NOT NULL;
ALTER TABLE gatos DROP COLUMN raza;

Full Stack amb React

Full Stack amb React

  • TRUNCATE TABLE

  • Hay que dar el nombre de la tabla

  • ¡No se puede deshacer!

Vaciar tablas

TRUNCATE TABLE gatos;

Full Stack amb React

Full Stack amb React

  • DROP TABLE

  • Hay que dar el nombre de la tabla

  • ¡No se puede deshacer!

Borrar tablas

DROP TABLE gatos;

Full Stack amb React

Full Stack amb React

  • INSERT INTO tabla (columnas) VALUES (valores)

Insertar registros

INSERT INTO alumnos (nombre, apellidos, dni, aula) VALUES ("Arturo", "Valls", "87376211S", 1);

INSERT INTO alumnos (nombre, apellidos, dni, aula) VALUES 
("Margarita", "Ferrán Soria", "12657483I", 2), 
("Ana", "Rimbaud Flores", "71998300P", 3), 
("Jorge", "Oms Peláez", "81928473V", 2);

Full Stack amb React

Full Stack amb React

  • UPDATE tabla SET campo = valor WHERE condición

Modificar registros

UPDATE alumnos SET dni = "87743912X" WHERE id = 3;

Full Stack amb React

Full Stack amb React

  • DELETE FROM tabla WHERE condición

  • Importante: poner el WHERE (recordatorio)

Borrar registros

DELETE FROM alumnos WHERE id = 7;

Full Stack amb React

Full Stack amb React

  • Numéricos

    • INT, TINYINT, DECIMAL

  • Textos

    • VARCHAR(n), TEXT

  • Fechas

    • DATE, DATETIME

Tipos de datos

Full Stack amb React

Full Stack amb React

Relaciones

alumnos

exámenes

  • Relaciones entre tablas

  • Tipos de relaciones:

    • 1-1  (candidatos-cvs)

    • 1-N (clientes-pedidos)

    • N-M (actores-películas)

candidatos

cvs

1-1

Full Stack amb React

Full Stack amb React

Relaciones

clientes

pedidos

  • Relaciones entre tablas

  • Tipos de relaciones:

    • 1-1  (candidatos-cvs)

    • 1-N (clientes-pedidos)

    • N-M (actores-películas)

1-N

municipios

habitantes

Full Stack amb React

Full Stack amb React

Relaciones

actores

películas

  • Relaciones entre tablas

  • Tipos de relaciones:

    • 1-1  (candidatos-cvs)

    • 1-N (clientes-pedidos)

    • N-M (actores-películas)

N-M

libros

usuarios

Full Stack amb React

Full Stack amb React

Relaciones

  • Clave primaria

    • única

    • not null

    • un registro sólo puede tener una

    • columnas múltiples

CREATE TABLE alumnos (
  id int PRIMARY KEY AUTO_INCREMENT,
  nombre varchar(32) NOT NULL UNIQUE,
  apellidos varchar(32),
  dni varchar(9) NOT NULL,
  aula int DEFAULT 0
)
CREATE TABLE alumnos (
  id int AUTO_INCREMENT,
  nombre varchar(32) NOT NULL,
  apellidos varchar(32),
  dni varchar(9) NOT NULL UNIQUE,
  aula int DEFAULT 0,
  PRIMARY KEY (id)
)
CREATE TABLE prestamos (
  id_usuario int,
  id_libro int,
  fecha datetime,
  estado varchar(16),
  PRIMARY KEY (id_usuario, id_libro)
)

Full Stack amb React

Full Stack amb React

Relaciones

  • Claves foráneas

    • apuntan a una columna de otra tabla

    • múltiples

    • restricciones ON DELETE y ON UPDATE

      • RESTRICT / NO ACTION

      • CASCADE

      • SET NULL

CREATE TABLE examenes (
  id int AUTO_INCREMENT,
  alumno int,  
  PRIMARY KEY (id),
  FOREIGN KEY (alumno) REFERENCES alumnos (id)
)
CREATE TABLE examenes (
  id int AUTO_INCREMENT,
  alumno int,  
  PRIMARY KEY (id),
  FOREIGN KEY (alumno) REFERENCES alumnos (id) ON DELETE SET NULL
)

Full Stack amb React

Full Stack amb React

SELECT sobre varias tablas

  • INNER JOIN

  • Todos los registros que están en ambas tablas

SELECT tabla1.columna1, tabla1.columna2, tabla2.columna1 
FROM tabla1 INNER JOIN tabla2 
ON tabla1.columna3 = tabla2.columna3

Full Stack amb React

Full Stack amb React

SELECT sobre varias tablas

  • LEFT JOIN

  • Todos los registros que están en la primera tabla

  • Valores NULL en la segunda tabla

SELECT tabla1.columna1, tabla1.columna2, tabla2.columna1 
FROM tabla1 LEFT JOIN tabla2 
ON tabla1.columna3 = tabla2.columna3

Full Stack amb React

Full Stack amb React

SELECT sobre varias tablas

  • RIGHT JOIN

  • Todos los registros que están en la segunda tabla

  • Valores NULL en la primera tabla

SELECT tabla1.columna1, tabla1.columna2, tabla2.columna1 
FROM tabla1 RIGHT JOIN tabla2 
ON tabla1.columna3 = tabla2.columna3

Full Stack amb React

Full Stack amb React

MongoDB

  • NoSQL

  • Documental

  • Estructura flexible

  • Colecciones y documentos

  • Relaciones o documentos embebidos

/* 1 */
{
    "_id" : ObjectId("5f8d83ddb2d082350806eb9d"),
    "nombre" : "Luis",
    "apellidos" : "Gutiérrez Márquez",
    "curso" : ObjectId("5f8d80291fe7a908a05c6935"),
    "nota" : 6,
    "__v" : 0
}

/* 2 */
{
    "_id" : ObjectId("5f8d844bc6414a33c87c07b5"),
    "nombre" : "María Jesús",
    "apellidos" : "Suárez Romero",
    "curso" : ObjectId("5f8d80291fe7a908a05c6937"),
    "nota" : 7,
    "__v" : 0
}

/* 3 */
{
    "_id" : ObjectId("5f8d84ae5a9f7c36c01b5ca4"),
    "nombre" : "Marta",
    "apellidos" : "Castejón de la Huerta",
    "curso" : ObjectId("5f8d80291fe7a908a05c6937"),
    "nota" : 6,
    "__v" : 0
}

/* 4 */
{
    "_id" : ObjectId("5f8d853341710e373cb2d32f"),
    "nombre" : "Roberto",
    "apellidos" : "Marco Santos",
    "curso" : ObjectId("5f8d80291fe7a908a05c6936"),
    "nota" : 7.5,
    "__v" : 0
}

/* 5 */
{
    "_id" : ObjectId("5f8d8c1703d82c0e40c0f933"),
    "nombre" : "Julia",
    "apellidos" : "Sanz Reverte",
    "curso" : ObjectId("5f8d80291fe7a908a05c6936"),
    "nota" : 6,
    "__v" : 0
}
/* 1 */
{
    "_id" : ObjectId("605d76b1d166de4699ce9830"),
    "nombre" : "Luis",
    "edad" : 25,
    "direccion" : {
        "calle" : "Luis Montoto",
        "numero" : 32,
        "planta" : 1,
        "puerta" : 2,
        "localidad" : "Sevilla",
        "provincia" : "Sevilla"
    }
}

/* 2 */
{
    "_id" : ObjectId("605d76c7d166de4699ce9ee5"),
    "nombre" : "Ana",
    "edad" : 32,
    "direccion" : {
        "calle" : "Bruc",
        "numero" : 76,
        "planta" : 3,
        "puerta" : 2,
        "localidad" : "Barcelona",
        "provincia" : "Barcelona"
    }
}

/* 3 */
{
    "_id" : ObjectId("605d76cfd166de4699cea133"),
    "nombre" : "Lorenzo",
    "edad" : 53,
    "direccion" : {
        "calle" : "Plaça del Dr. Galtés",
        "numero" : 1,
        "planta" : 1,
        "puerta" : 1,
        "localidad" : "Sant Cugat del Vallès",
        "provincia" : "Barcelona"
    }
}

Full Stack amb React

Full Stack amb React

MQL

  • Seleccionar / crear una base de datos:
    use nombre_bd

  • Crear colección:
    db.createCollection(nombre_colección)

  • Borrar colección:
    db.colección.drop()

Full Stack amb React

Full Stack amb React

MQL

  • Insertar documentos:
    db.colección.insertOne(documento)
    db.colección.insertMany(array_de_documentos)

db.personas.insertOne({
  nombre: "Luis",
  edad: 34
})
db.personas.insertMany([
  {
    nombre: "Marta",
    edad: 30
  },
  {
    nombre: "José Luis",
    edad: 48
  },
  {
    nombre: "Antonia",
    edad: 59
  }
])

Full Stack amb React

Full Stack amb React

MQL

  • Borrar documentos:
    db.colección.deleteOne(condición)
    db.colección.deleteMany(condición)

db.personas.deleteOne({ nombre: "Marta" })
db.personas.deleteMany({ edad: { $lt: 50 } })

Full Stack amb React

Full Stack amb React

MQL

  • Modificar documentos:
    db.colección.updateOne(condición, modificación)
    db.colección.updateMany(condición, modificación)

db.personas.updateMany({edad: {$gt: 20}}, { $set: { edad: 20 }})

Full Stack amb React

Full Stack amb React

MQL

  • Sustituir un documento:
    db.colección.replaceOne(condición, nuevo_documento)

db.personas.replaceOne({ nombre: "Antonia"}, { nombre: "Antoñita", edad: 33 })

Full Stack amb React

Full Stack amb React

MQL

  • Crear un índice único:
    db.colección.createIndex( { nombre_campo : 1 }, { unique : true } )

db.personas.createIndex( { "dni" : 1 }, { unique : true } )

Full Stack amb React

Full Stack amb React

MQL - Ejemplos de consultas

db.alumnos.find( { nota: { $in: ["A", "B"] } } )
db.alumnos.find( { aula: "A", nota: { $gte: 5 } } )
db.alumnos.find( { dni: { $exists: true } } )
db.alumnos.find( { aula: "A", nota: { $gte: 5, $lte: 8 } } ).count()
db.alumnos.find( { aula: "A", "direccion.poblacion": "Sevilla" } )

Full Stack amb React

Full Stack amb React

MQL - Ejemplos de consultas

db.alumnos.find( { nota: { $lt: 5 } }, { nombre: 1, aula: 1 } )
  • Elegir campos

Full Stack amb React

Full Stack amb React

MQL - Ejemplos de consultas

db.alumnos.find({}).sort({ nota: -1 })
  • Ordenar

Full Stack amb React

Full Stack amb React

MQL - Ejemplos de consultas

db.alumnos.find({}).limit(10)
  • Límite y offset (desplazamiento)

db.alumnos.find({}).skip(10).limit(10)

Full Stack amb React

Full Stack amb React

MQL - Consultas en dos tablas

db.pedidos.aggregate([
  { 
    $lookup: {
      from: "clientes",
      localField: "cliente",
      foreignField: "_id",
      as: "cliente"
  	}
  }
])
db.clientes.aggregate([
  { 
    $lookup: {
      from: "pedidos",
      localField: "pedidos",
      foreignField: "_id",
      as: "pedidos"
  	}
  }
])
db.pedidos.aggregate([
  { 
    $match: { estado: "enviado" }
  },
  {
    $sort: { fecha: 1 }
  },
  { 
    $lookup: {
      from: "clientes",
      localField: "cliente",
      foreignField: "_id",
      as: "cliente"
  	}
  }
])

Desenvolupador Web Full Stack amb React - C3-Bases de datos

By mariogl

Desenvolupador Web Full Stack amb React - C3-Bases de datos

Diapositivas para el curso Desenvolupador Web Full Stack amb React, del 2 de febrero al 27 de abril de 2021 en Barcelona. Módulo C3 - Introducción a las bases de datos SQL / NoSQL

  • 290