**Fundamentos de bases de datos**
**Entidad **
Creando un diagrama de relaciones
Relaciones
-se representan por un rombo
-son la unión de entidades
Cardinalidades
UNO a UNO --|----------------|–
UNO a UNO estricto --|-|-------------|-|–
CERO a UNO -|- - - - - - -|-
UNO a MUCHOS -|-------------°<–
CERO a MUCHOS -|°- - - - - -|<–
MUCHOS a MUCHOS -->------------<–
MUCHOS a MUCHOS estricto -->|---------|<–
Tipos de datos
-texto
-CHAR(n)
-VARCHAR(n)
-TEXT
-Números
-INTEGER
-BIGINT
-SMALLINT
-DECIMAL(n, s)
-NUMERIC(n, s)
-Fecha/Hora
-DATE
-TIME
-DATETIME
-TIMESTAMP
**-Lógicos **
-BOOLEAN
Constraint(Restricciones)
Constraint ** ** Descripción
NOT NULL Se asegura que la columna no tenga valores nulos
UNIQUE Se asegura que cada valor en la columna no se repita
PRIMARY KEY Es una combinación de NOT NULL y UNIQUE
FOREIGN KEY Identifica de manera única una tupla en otra tabla
CHECK Se asegura que el valor en la columna cumpla una condición dada
DEFAULT Coloca un valor por defecto cuando no hay un valor especificado
INDEX Se crea por columna para permitir búsquedas más rápidas
Normalización
Primera forma normal (1FN)
-atributos atómicos (campos sin repetir)
Segunda forma normal (2FN)
-Cumple 1FN y cada campo de la tabla debe depender de una clave única.
Tercera forma normal (3FN)
-Cumple 1FN y 2FN y los campos que NO son clave, NO deben tener dependencias.
Cuarta forma normal (4FN)
-Cumple 1FN, 2FN, 3FN y los campos multivaluados se identifican por una clave única.
//RDBMS (Relational Database Management System)
//SQL (Structured Query Language)
//NOSQL (Not Only Structured Query Language)
Sentencias SQL / DDL (Data Definition Language)
Create: crear una base de datos, una tabla, una vista, etc.
-Database
-Table
-View
Alter: alterar o modificar una tabla, agregando, cambiando, eliminando una columna, etc.
Drop: borrar una base de datos, una tabla o una columna, etc.
Sentencias SQL / DML (Data Manipulation Language)
Insert: agregar un nuevo registro a la tabla de datos
Update: actualizar o formatear la tabla
Delete: borrar un row de una tabla
Select: mostrar los datos de las tablas
Estructura básica de un Query
SELECT city, count(*) AS total
FROM people
WHERE active = true
GROUP BY city
ORDER BY total DESC
HAVING total >= 2;
Sentencia FROM
Tipos de JOIN
-Diferencia
-LEFT JOIN
-Trae todos los datos de la tabla A estén o no en la tabla B
-Trae todos los datos de la tabla A que no estén en la tabla B
-RIGHT JOIN
-Trae todos los datos de la tabla B estén o no en la tabla A
-Trae todos los datos de la tabla B que no estén en la tabla A
-Intersección
-INNER JOIN
-Trae los datos de la tabla A que estén asociados en la tabla B
-OUTER JOIN
-Unión: Trae todos los datos de las dos tablas (conjunto entero)
-Diferencia simétrica: Trae los datos de la tabla A qué no están en la tabla B y lo datos de la tabla B que no están en A
Sentencia WHERE
Ayuda a filtrar los datos que queremos traer
LIKE: nos trae lo que tenga la palabra que le indiquemos.
ejemplo: WHERE LIKE ‘%escándalo%’
BETWEEN: nos trae datos entre dos parámetros.
ejemplo: WHERE fecha_publicacion BETWEEN ‘2025-01-01’ AND '2028-01-01’
IS NULL/IS NOT NULL: nos trae datos que tengan el dato que le pasamos nulo o no dependiendo si le dijimos IS NULL o IS NOT NULL
ejemplo: WHERE usuario_id IS NULL
AND: agregar varias condiciones de filtrado
Sentencia GROUP BY
Agrupa los datos de en base a un datos de la tabla que le indiquemos
ejemplo: **select **year(fecha_publicacion) **as **post_year, count(*) **as **post_quantity
**from **posts
group by post_year;
Order by y Having
La sentencia ORDER BY tiene que ver con el ordenamiento de los datos dependiendo de los criterios que quieras usar.
ASC sirve para ordenar de forma ascendente.
DESC sirve para ordenar de forma descendente.
LIMIT se usa para limitar la cantidad de resultados que arroja el query.
HAVING tiene una similitud muy grande con** WHERE**, sin embargo el uso de ellos depende del orden. Cuando se quiere seleccionar tuplas agrupadas únicamente se puede hacer con HAVING.
ejemplo:
select monthname(fecha_publicacion) **as **post_month, estatus, count(*) **as **post_quantity
**from **posts
group by estatus, post_month
**having **post_quantity > 1
order by post_month;
Nested queries
Se refiere a que dentro de un query podemos hacer otro query. Esto sirve para hacer join de tablas, estando una en memoria. También teniendo un query como condicional del otro.
ejemplo: **select **new_table_projection.date, count(*) **as **post_count
**from **(
**select **date(min(fecha_publicacion)) **as **date, year(fecha_publicacion) as post_year
**from **posts
group by post_year
) **as **new_table_projection
group by new_table_projection.date
order by new_table_projection.date;
De pregunta a Query
Lo que mostrar = SELECT
De donde voy a tomar los datos = FROM
Los filtros de los datos que quieres mostrar = WHERE
Los rubros por los que me interesa agrupar la información = GROUP BY
El orden en que quiero presentar mi información = ORDER BY
Los filtros que quiero que mis datos agrupados tengan = HAVING
**++BBDD no relacionales++**
Basado en algoritmos de Hash(diccionarios)
-DynamoDB/Cassandra
-Clave-Valor
-Almacenar datos de manera rápida y extraerlos con la clave ligada a ellos
-Almacenar grandes cantidades de información ligadas a un solo ID
-Extraerlos de manera rápida
-Dificultad para extraer consultas más complejas
Basadas en Documentos
-Objetos de tipo JSON
-MongoDB/Firestore
-Dificultad para extraer consultas más complejas
-Útil para extraer el estado actual de una aplicación
Basadas en Grafos
-Ideal para almacenar relaciones complejas
-Generalmente están relacionadas todos con todos
-Utilizada para Ciencia de datos
-neo4j/titanDB
En memoria
-Sumamente rápidas
-Desventaja: Son volátiles
-Memcached/Redis
Optimizadas para búsqueda
-Queries complejas en muy corto tiempo y de manera muy sencilla
-Usadas en business intelligence y machine learning
-BigQuery/ElasticSearch
Jerarquía de datos en FireStore: BBDD que está estructurada por Colecciones las cuales contienen Documentos que ellos pueden contener subColecciones
**++Conceptos++**
Big data: Grandes cantidades de datos procesada de manera rápida (millones de datos por segundo o menos) y eficiente para ser soportados por la BDD.
Data Warehouse: Almacén de datos, se utiliza para almacenar grandes cantidades de datos de manera histórica una de las tipos de base de datos que se utiliza es big table o big Query.
Data Mining: Se utiliza para minar datos, se basa en extraer datos de donde sea que estén, organizarlos y que puedan ser utilizables.
ETL(Extract Transform load): Tomar datos de un lugar, transformarlos y depurarlos para que sean utilizable y luego cargarlos en otro lado donde se puedan utilizar, es una manera de realizar Data Mining.
Business Intelligence: Tener todos los datos (actuales e históricos) de manera clara y oportuna, para que sean útiles para el momento de tomar decisiones de negocios basados en esos datos.
Machine Learning: Aplicada a los datos, se encarga de encontrar patrones y relaciones en base a tus datos, clasificarlos y dar información oportuna de ellos la cual puede ser utilizada en Business Intelligence.
Data Science: Aplicar todos las técnicas de procesamiento de datos, complementarlas entre ellas y armar un proceso completo de trabajo en base a los datos