SQL37861
SQL37861
Tienen tablas que se relacionan mediante claves. Existen las claves primarias y las
foráneas. Están basadas en SQL (Standard Query Language).
● Se debe evitar que el software modifique los datos, solo el usuario puede hacerlo
con peticiones.
● Evitar redundancia de datos
SQL
Modelo relacional
Redundancia
Cuando algún atributo se repite varias veces en una tabla, es mejor crear una tabla para
dicho atributo y conectarla con la entidad con una clave foránea. En el peor de los casos se
tendrán “n” registros donde ningún dato se repita, que ocuparía el mismo espacio que si no
se hubiera hecho la tabla, pero en el mejor (cuando se repiten) puede reducir
significativamente el peso de la base de datos.
Tablas
Ente donde se guarda información, puede ser una entidad. Cada columna es un dato y cada
fila un registro.
Clave primaria
Dato que tiene un valor único para cada registro, este dato no puede ser nulo ni puede tener
el mismo valor para dos registros diferentes.
Clave foránea
Dato que establece una relación entre tablas, indica la clave primaria del registro con el que
se quiere enlazar.
Lenguaje SQL
Crear base de datos:
Para crear una base de datos se utiliza el comando
CREATE DATABASE IF NOT EXISTS nombre_de_la_base_de_datos;
El comando “IF NOT EXISTS” hace que solo se cree si no existe ninguna base de datos con
el mismo nombre en esa misma ruta.
Donde CHARACTER se refiere al encoding que se usará, el utf8mb4 sirve para captar letras
de la mayoría de idiomas y además emojis. utf8 no capta emojis, pero si letras de la
mayoría de los idiomas.
Crear tabla
Para crear una tabla se usa el comando
CREATE TABLE nombre_tabla IF NOT EXISTS(
nombre_columna1 tipo_dato1 [parametros]
nombre_columna2 tipo_dato1 [parametros]
.
.
.
PRIMARY KEY (nombre_columna1)
FOREIGN KEY (nombre_columna2) REFERENCES otra_tabla(columna_conex)
INDEX (nombre_columna3)
) ENGINE = ENGINE_NAME;
INDEX: Sirve para mejorar el sistema de búsquedas, se debe definir como INDEX las
columnas que de antemano se sabe que serán usadas en las consultas para buscar
registros.
Engines
InnoDB: Soporta transacciones, bloqueo a nivel de fila, y es el motor predeterminado
recomendado.
Tipos de datos
INT: Almacena números enteros
CHAR(n): Almacena strings siempre con n caracteres. (Si el string tiene menos los incluye)
VARCHAR(n): Almacena strings de máximo “n” caracteres. (No añade más caracteres)
Parámetros de fila
NOT NULL: impide que el valor quede vacío
CHECK (condición): hace que los valores tengan que cumplir una condición
Algebra relacional
Selección ( ): operador para filtrar registros en base a una condición.
● Notación en álgebra relacional: .
● Notación en SQL: SELECT columnas FROM tabla WHERE condicion
Proyección ( ): operador para seleccionar columnas de una tabla y tomar todos los
registros.
● Notación en álgebra relacional:
● Notación en SQL: SELECT columna1, columna2, ... FROM tabla
Unión ( ): operador para sumar registros sin duplicados
● Notación de álgebra relacional:
● Notación en SQL: SELECT columnas FROM tabla1 UNION SELECT columnas
FROM tabla2
Intersección ( ): operador para seleccionar los registros comunes entre dos tablas.
● Notación en álgebra relacional:
○ INNER JOIN sirve para crear una tabla temporal que solo contenga los
registros donde ambas tablas coinciden. Su forma SQL es: SELECT
t1.columnas FROM tabla1 t1 INNER JOIN tabla2 t2 ON (condicion
de relacion entre t1 y t2)
○ IN sirve para filtrar los registros de una tabla, sin tener que crear otra
temporal. Su forma SQL es: SELECT columnas FROM tabla1 WHERE
columna_t1 IN (SELECT columna_t2 FROM tabla2)
Diferencia ( - ): operador para seleccionar registros que están en una tabla pero no en otra.
○ LEFT JOIN permite combinar dos tablas y mostrar todos los registros de la
primera tabla, incluyendo aquellos que no tienen coincidencias en la segunda
tabla. Su forma SQL es: SELECT t1.columnas FROM tabla1 t1 LEFT
JOIN tabla2 t2 ON (condicion de relacion entre t1 y t2) WHERE
t2.columna_t2 IS NULL
Producto cartesiano ( ): operador para crear todas las tuplas posibles entre los registros
de la tabla 1 y la tabla 2.
● Notación en álgebra relacional:
Unión natural ( ): operador para combinar registros de dos tablas basado en un atributo
común.
● Notación en álgebra relacional:
Normalización
Clave primaria: Es un atributo o conjunto de atributos que identifica de manera única cada
fila en una tabla. No puede contener valores nulos y debe ser única para cada registro.
Clave candidata: Son los atributos o conjuntos de atributos que pueden ser clave primaria
porque también identifican de forma única a cada registro, pero solo uno de ellos se
selecciona como la clave primaria. Las demás se conocen como claves candidatas.
Dependencias funcionales: Función con los atributos de una tabla, donde se dice que
existe una dependencia funcional si implica necesariamente que
.
Primera forma normal (1NF): Todos los atributos de las tablas son atómicos. Esto quiere
decir que un atributo no puede tener valores con comas o comportarse como si fuera un
array.
Segunda forma normal (2NF): Se debe cumplir 1NF y que todos los atributos que no sean
clave primaria deben depender funcionalmente de la clave primaria.
Tercera forma normal (3NF): Se debe cumplir 2NF y que ningún atributo no-primario
depende transitivamente de una clave primaria. Es decir, todos los atributos deben
depender directamente de la clave primaria.
● La Forma Normal de Boyce-Codd (NFBC): Se debe cumplir la 3NF y que
para cada dependencia funcional no trivial, el determinante es una
superclave. Es decir para toda dependencia funcional
tiene que ser una superclave.
Cuarta forma normal (4NF): Se debe cumplir 3NF o NFBC (cualquiera de las dos)
y ningún atributo está relacionado con múltiples valores de algún otro.