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_bdCrear 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
- 352