Ingeniería en Sistemas Computacionales
9 años de experiencia laboral
Actualmente dirijo proyectos de software
OFERTA COMERCIAL
Diseñar correctamente una base de datos relacional
Conocer lo que es una base de datos
Modelar datos en base a una problematica
Realizar las 4 acciones principales de un recurso de datos (Listar, Crear, Actualizar, Eliminar)
Se define como una serie de datos organizados y relacionados entre sí, los cuales son recolectados y explotados por los sistemas de información de una empresa o negocio en particular.
Un dato es una representación simbólica (numérica, alfabética, algorítmica, espacial, etc.) de un atributo o variable cuantitativa o cualitativa
Los metadatos consisten en información que caracteriza datos, describen el contenido, calidad, condiciones, historia, disponibilidad y otras características de los datos.
Es una grupo de atributos al que se le otorga un contexto para darle sentido a los valores registrados
Un atributo de una entidad es un dato
Es un conjunto de programas (DDL, DML, DCL) que permiten el almacenamiento, modificación y extracción de la información en una base de datos.
Es un lenguaje de programación para definir estructuras de datos, proporcionado por los sistemas gestores de bases de datos.
Utilizando instrucciones de SQL, permite a los usuarios introducir datos para posteriormente realizar tareas de consultas o modificación de los datos que contienen las Bases de Datos.
Es un lenguaje que incluye una serie de comandos SQL que permiten controlar el acceso a los objetos, es decir, podemos otorgar o denegar permisos a uno o más roles para realizar determinadas tareas.
Es un tipo de lenguaje de programación que ayuda a solucionar problemas específicos o relacionados con la definición, manipulación e integridad de la información representada por los datos almacenados.
Integra conceptos de cálculo y álgebra relacional
CREATE DATABASE curso_db;
CREATE TABLE `curso_db`.`clientes` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE=InnoDB CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci
ALTER TABLE `curso_db`.`clientes`
CHANGE COLUMN `id` `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
ADD COLUMN `nombre` VARCHAR(100) NOT NULL AFTER `id`,
ADD COLUMN `notas` TEXT NULL AFTER `nombre`
SELECT * FROM clientes
GRANT ALL ON curso_db.* TO 'usuario'@'localhost'
IDENTIFIED BY 'contra';
Es un tipo de modelo de datos que determina la estructura lógica de una base de datos y de manera fundamental determina el modo de almacenar, organizar y manipular los datos
Una base de datos es tan buena como lo es su modelado de datos, es decir, requiere de un análisis profundo sobre la aplicación que tendrá, los actores y acciones involucradas así como la implementación de reglas de negocio.
Se necesita modelar la información para unas conferencias.
Es necesario tener un registro de las conferencias y sus ponentes, así como los asistentes a cada conferencia
Se necesita modelar la información para una tienda que necesita mantener un registro de sus ventas
Demos saber: ¿quién realizo la venta?, ¿cuántos productos se vendieron?, ¿cuánto se vendió por día?, ¿qué vendedor vendió mas?, ¿qué producto fue el mas vendido?, ¿quién fue el mejor cliente?
Se necesita modelar la información para un hospital, el cual necesita llevar un registro detallado de los doctores agrupados por especialidad, de los pacientes agrupados según el área de atención (especialidad del doctor), un listado de las enfermedades que tiene el paciente y un histórico de las citas junto al doctor que atendió y su diagnostico
jmanuel@apdevs.com
José Manuel Ruiz Pérez
Un modelo de datos jerárquico es un modelo de datos en el cual los datos son organizados en una estructura parecida a un árbol. La estructura permite a la información que se repite y usa relaciones padre/Hijo: cada padre puede tener muchos hijos pero cada hijo sólo tiene un padre.
Este es un modelo de bases de datos ligeramente distinto del jerárquico. Su diferencia fundamental es la modificación del concepto de un nodo, permitiendo que un mismo nodo tenga varios padres (algo no permitido en el modelo jerárquico).
Modelo de organización y gestión de bases de datos consistente en el almacenamiento de datos en tablas compuestas por filas, o tuplas, y columnas o campos. Se distingue de otros modelos, como el jerárquico, por ser más comprensible y por basarse en la teoría de conjuntos para establecer relaciones entre distintos datos.
En una relación de uno a muchos, un registro de una tabla se puede asociar a uno o varios registros de otra tabla
En una relación de uno a uno, un registro de una tabla se asocia a uno y solo un registro de otra tabla
Una relación de muchos a muchos se produce cuando varios registros de una tabla se asocian a varios registros de otra tabla
Por lo general, los sistemas de bases de datos relacionales no permiten implementar una relación directa de muchos a muchos entre dos tablas
Una relación de autounión (o autounión) es una relación en la que los dos campos de coincidencia se definen en la misma tabla
Es una forma de relacionar muchas tablas con una sola mediante una única relación
NO hay un Manejador de Bases de Datos Relacionales que tenga un una restricción de integridad referencial para las relaciones polimórficas
jmanuel@apdevs.com
José Manuel Ruiz Pérez
CREATE DATABASE dbNameYouWant
CREATE DATABASE dbNameYouWant CHARACTER SET utf8
DROP DATABASE dbNameYouWant
ALTER DATABASE dbNameYouWant CHARACTER SET utf8
SHOW DATABASES
SHOW TABLES
SHOW FIELDS FROM table / DESCRIBE table
SHOW CREATE TABLE table
SHOW PROCESSLIST
KILL process_number
INSERT INTO table1 (field1, field2, ...)
VALUES (value1, value2, ...)
UPDATE table1 SET field1=new_value1 WHERE condition
UPDATE table1, table2 SET field1=new_value1, field2=new_value2, ...
WHERE table1.id1 = table2.id2 AND condition
CREATE TABLE table (field1 type1, field2 type2, ...)
CREATE TABLE table (field1 type1, field2 type2, ..., INDEX (field))
CREATE TABLE table (field1 type1, field2 type2, ..., PRIMARY KEY (field1))
CREATE TABLE table (field1 type1, field2 type2, ..., PRIMARY KEY (field1,
field2))
CREATE TABLE table1 (fk_field1 type1, field2 type2, ...,
FOREIGN KEY (fk_field1) REFERENCES table2 (t2_fieldA))
[ON UPDATE|ON DELETE] [CASCADE|SET NULL]
CREATE TABLE table1 (fk_field1 type1, fk_field2 type2, ...,
FOREIGN KEY (fk_field1, fk_field2) REFERENCES table2 (t2_fieldA, t2_fieldB))
CREATE TABLE table IF NOT EXISTS (...)
ALTER TABLE table MODIFY field1 type1
ALTER TABLE table MODIFY field1 type1 NOT NULL ...
ALTER TABLE table CHANGE old_name_field1 new_name_field1 type1
ALTER TABLE table CHANGE old_name_field1 new_name_field1 type1 NOT NULL ...
ALTER TABLE table ALTER field1 SET DEFAULT ...
ALTER TABLE table ALTER field1 DROP DEFAULT
ALTER TABLE table ADD new_name_field1 type1
ALTER TABLE table ADD new_name_field1 type1 FIRST
ALTER TABLE table ADD new_name_field1 type1 AFTER another_field
ALTER TABLE table DROP field1
ALTER TABLE table ADD INDEX (field);
DELETE FROM table1 / TRUNCATE table1
DELETE FROM table1 WHERE condition
DELETE FROM table1, table2 FROM table1, table2
WHERE table1.id1 = table2.id2 AND condition
SELECT * FROM table
SELECT * FROM table1, table2, ...
SELECT field1, field2, ... FROM table1, table2, ...
SELECT ... FROM ... WHERE condition
SELECT ... FROM ... WHERE condition GROUPBY field
SELECT ... FROM ... WHERE condition GROUPBY field HAVING condition2
SELECT ... FROM ... WHERE condition ORDER BY field1, field2
SELECT ... FROM ... WHERE condition ORDER BY field1, field2 DESC
SELECT ... FROM ... WHERE condition LIMIT 10
SELECT DISTINCT field1 FROM ...
SELECT DISTINCT field1, field2 FROM ...
field1 = value1
field1 <> value1
field1 LIKE 'value _ %'
field1 IS NULL
field1 IS NOT NULL
field1 IS IN (value1, value2)
field1 IS NOT IN (value1, value2)
condition1 AND condition2
condition1 OR condition2
AVG() Return the average value of the argument
BIT_AND() Return bitwise AND
BIT_OR() Return bitwise OR
BIT_XOR() Return bitwise XOR
COUNT() Return a count of the number of rows returned
COUNT(DISTINCT) Return the count of a number of different values
GROUP_CONCAT() Return a concatenated string
JSON_ARRAYAGG() Return result set as a single JSON array
JSON_OBJECTAGG()Return result set as a single JSON object
MAX() Return the maximum value
MIN() Return the minimum value
STD() Return the population standard deviation
STDDEV() Return the population standard deviation
STDDEV_POP() Return the population standard deviation
STDDEV_SAMP() Return the sample standard deviation
SUM() Return the sum
VAR_POP() Return the population standard variance
VAR_SAMP() Return the sample variance
VARIANCE() Return the population standard variance
SELECT ... FROM t1 JOIN t2 ON t1.id1 = t2.id2 WHERE condition
SELECT ... FROM t1 LEFT JOIN t2 ON t1.id1 = t2.id2 WHERE condition
SELECT ... FROM t1 JOIN (t2 JOIN t3 ON ...) ON ...
SELECT
clientes.nombre as Cliente,
SUM(ventas.total) as Venta
FROM clientes
JOIN ventas ON clientes.id = ventas.cliente_id
GROUP BY clientes.id
ORDER BY nombre;
SELECT
clientes.nombre as Cliente,
SUM(ventas.total) as Venta,
MAX(ventas.total) as VentaMaxima
FROM clientes
JOIN ventas ON clientes.id = ventas.cliente_id
WHERE ventas.estatus = 'pagada'
GROUP BY clientes.id
ORDER BY VentaMaxima DESC;
SELECT
clientes.nombre as Cliente,
SUM(ventas.total) as Venta,
MAX(ventas.total) as VentaMaxima
FROM clientes
JOIN ventas ON clientes.id = ventas.cliente_id
WHERE (ventas.fecha BETWEEN '2019-01-01' AND '2019-12-31')
AND ventas.estatus = 'pagada'
GROUP BY clientes.id
ORDER BY VentaMaxima DESC;
SELECT
clientes.nombre AS Cliente,
MAX(ventas.fecha) as FechaUltimaVenta
FROM clientes
INNER JOIN ventas ON clientes.id = ventas.cliente_id
GROUP BY clientes.id
ORDER BY FechaUltimaVenta
LIMIT 10
(Listar nombre y fecha de ultima venta)
SELECT
clientes.nombre as Cliente,
SUM(ventas.total) as Venta,
MAX(ventas.total) as VentaMaxima
FROM clientes
JOIN ventas ON clientes.id = ventas.cliente_id
JOIN rutas ON ventas.ruta_id = rutas.id
WHERE ventas.ruta_id = 3
AND ventas.estatus = 'pagada'
GROUP BY clientes.id
ORDER BY VentaMaxima DESC;
SELECT
clientes.nombre
FROM clientes
LEFT JOIN ventas
ON clientes.id = ventas.cliente_id
WHERE ventas.id IS NULL
SELECT
repartidores.nombre,
rutas.nombre,
SUM(prospectos.no_visitas) as TotalVisitas
FROM repartidores
JOIN rutas ON rutas.id = repartidores.ruta_id
JOIN prospectos ON prospectos.ruta_id = rutas.id
GROUP BY repartidores.id
(Repartidor, Ruta, SumaVisitas)
SELECT
repartidores.nombre,
SUM(prospectos.no_visitas) as TotalVisitas
FROM repartidores
JOIN prospectos
ON prospectos.ruta_id = repartidores.ruta_id
GROUP BY repartidores.id
(Repartidor, Ruta, SumaVisitas)
(que esta dentro de una lista de precios)
SELECT
productos.id as Clave,
productos.nombre as Producto,
IF(precios_productos.precio IS NULL,
productos.precio,
precios_productos.precio
) as Precio,
productos.precio as Original,
precios_productos.precio as Preferencial
FROM productos
LEFT JOIN precios_productos
ON precios_productos.producto_id = productos.id
AND precios_productos.lista_id IN (
SELECT lista_id FROM clientes WHERE id=5
)
OR precios_productos.id IS NULL
Probar cliente ID=5 y ID=6
(join)
SELECT productos.id, productos.nombre
FROM productos
LEFT JOIN precios_listas
ON productos.id = precios_listas.producto_id
WHERE precios_listas.id IS NULL
(sub consulta)
SELECT id, nombre
FROM productos
WHERE id NOT IN (
SELECT producto_id FROM precios_listas
)
SELECT producto_id
FROM detalle_venta
GROUP BY producto_id
ORDER BY SUM(cantidad) DESC
LIMIT 3
SELECT id
FROM productos
GROUP BY id
ORDER BY precio DESC
LIMIT 3
CREATE
[DEFINER = user]
TRIGGER trigger_name
trigger_time trigger_event
ON tbl_name FOR EACH ROW
[trigger_order]
trigger_body
trigger_time: { BEFORE | AFTER }
trigger_event: { INSERT | UPDATE | DELETE }
trigger_order: { FOLLOWS | PRECEDES } other_trigger_name
delimiter $$
CREATE TRIGGER update_visits
AFTER INSERT ON visitas
FOR EACH ROW
BEGIN
UPDATE prospectos
SET no_visitas = no_visitas + 1
WHERE id = NEW.prospecto_id;
END;
$$
delimeter ;
delimiter $$
CREATE TRIGGER realPricesOnProducts
AFTER INSERT ON productos
FOR EACH ROW
BEGIN
IF NEW.precio < 0 THEN
signal sqlstate '45000'
set message_text = 'Product price cannot be less than 0';
END IF;
END;
$$
delimeter ;