Appearance
Teoria de bases de datos
Vamos a aprender algunos de los conceptos clave para trabajar con bases de datos.
Bases de datos no relacionales
Las bases de datos no relacionales son bases de datos que no utilizan tablas para almacenar los datos, en su lugar usan documentos de texto plano que luego se parsea siguiendo unas reglas. Las bases de datos no relacionales son muy utilizadas en aplicaciones web, ya que son muy escalables y muy rápidas, aunque muchas han quedado en desuso.
Uno de los aspectos más positivos de las bases de datos no relacionales es que no es necesario definir la estructura de los datos, ya que estos se almacenan en documentos de texto plano. Además, escalarlos horizontal y verticalmente es muy sencillo, ya que no es necesario modificar la estructura de estos documentos.
Por el contrario, uno de los aspectos más negativos de las bases de datos no relacionales es que no es posible realizar consultas sobre los datos, ya que no se almacenan en tablas, por lo que no es posible relacionar los datos entre sí. Además, la integridad de los datos recae en nosotros como desarrolladores, ya que no es posible definir restricciones sobre la entrada de los mismos, y si tenemos un proceso que requiere modificar varios documentos es posible que se produzcan inconsistencias en los datos si no tenemos cuidado.
Vamos a ver algunos de los formatos de texto plano más utilizados para representar datos:
JSON
JSON es un formato de texto que se utiliza para representar datos. La estructura de un documento JSON es muy similar a la estructura de un objeto en JavaScript. Un documento JSON es una colección de pares clave-valor. Los valores pueden ser de cualquier tipo de dato, incluso otros documentos JSON. Se guarda en archivos con extensión .json
.
json
{
"nombre": "Juan",
"apellidos": "García",
"edad": 20,
"email": "
}
{
"nombre": "Juan",
"apellidos": "García",
"edad": 20,
"email": "
}
Es junto a XML el formato de texto más utilizado para representar datos.
XML
XML es un formato de texto que se utiliza para representar datos. La estructura de un documento XML es muy similar a la estructura de un documento HTML. Un documento XML es una colección de etiquetas, con libertad de anidamiento. Los valores pueden ser de cualquier tipo de dato, incluso otros documentos XML. Se guarda en archivos con extensión .xml
.
xml
<alumno>
<nombre>Juan</nombre>
<apellidos>García</apellidos>
<edad>20</edad>
<email>
</alumno>
<alumno>
<nombre>Juan</nombre>
<apellidos>García</apellidos>
<edad>20</edad>
<email>
</alumno>
YAML
YAML es un formato de texto que se utiliza para representar datos. La estructura de un documento YAML es muy similar a la estructura de un objeto en JavaScript. Un documento YAML es una colección de pares clave-valor. Los valores pueden ser de cualquier tipo de dato, incluso otros documentos YAML. Se guarda en archivos con extensión .yml
.
yaml
nombre: Juan
apellidos: García
edad: 20
posts:
- title: Post 1
content: Lorem ipsum dolor sit amet, consectetur adipiscing elit.
- title: Post 2
content: Lorem ipsum dolor sit amet, consectetur adipiscing elit.
nombre: Juan
apellidos: García
edad: 20
posts:
- title: Post 1
content: Lorem ipsum dolor sit amet, consectetur adipiscing elit.
- title: Post 2
content: Lorem ipsum dolor sit amet, consectetur adipiscing elit.
CSV
CSV (Comma Separated Values) es un formato de texto que se utiliza para representar datos. La estructura de un documento CSV es muy similar a la estructura de una tabla. Se guarda en archivos con extensión .csv
.
csv
nombre,apellidos,edad,email
Juan,García,20,juangarcia@gmail.com
José,Pérez,21,joseperez@gmail.com
nombre,apellidos,edad,email
Juan,García,20,juangarcia@gmail.com
José,Pérez,21,joseperez@gmail.com
NO es muy utilizado para representar datos, pero es muy utilizado para exportar datos de una base de datos a un archivo de texto plano.
Todos estos formatos son muy simples, pero tienen una gran desventaja: no son escalables. Modificarlos no solo conlleva modificar todo el archivo, al tener toda la información en un único archivo es muy difícil mantener la integridad de los datos.
No nos aportan ninguna ventaja a la hora de trabajar con los datos, ya que no podemos realizar consultas sobre los datos, ni podemos relacionar los datos entre sí, todo este aspecto recae en nosotros como desarrolladores.
Bases de datos relacionales
El álgebra relacional es un modelo de datos que se utiliza para representar datos en forma de tablas. Una base de datos relacional es una colección de tablas que se relacionan entre sí. Las tablas se relacionan entre sí mediante claves primarias y claves foráneas.
Tipos de datos en SQL
Los datos son información que se almacena en un formato determinado. Los datos pueden ser de cualquier tipo de dato, desde un número, hasta una imagen, pasando por un texto, un documento, etc.
Los datos en SQL pueden ser de los siguientes tipos:
Texto: CHAR
, VARCHAR
, TEXT
, ENUM
, SET
Cada uno de estos tipos de datos tiene una longitud máxima, por ejemplo, CHAR(10)
solo puede almacenar 10 caracteres, VARCHAR(10)
puede almacenar hasta 10 caracteres, pero no tiene por qué usarlos todos, TEXT
puede almacenar hasta 65535 caracteres.
Número: TINYINT
, SMALLINT
, MEDIUMINT
, INT
, BIGINT
, FLOAT
, DOUBLE
, DECIMAL
Cada uno de estos tipos de datos tiene un rango de valores, por ejemplo, TINYINT
puede almacenar valores entre -128 y 127, INT
puede almacenar valores entre -2147483648 y 2147483647, FLOAT
puede almacenar valores entre -3.402823466E+38 y 3.402823466E+38, etc.
Fecha: DATE
, DATETIME
, TIMESTAMP
, TIME
, YEAR
Dependiendo del tipo de dato, puede almacenar desde una fecha hasta una fecha y una hora.
Binario: BINARY
, VARBINARY
, BLOB
, ENUM
, SET
Cada uno de estos tipos de datos tiene una longitud máxima, por ejemplo, BINARY(10)
solo puede almacenar 10 bytes, VARBINARY(10)
puede almacenar hasta 10 bytes, pero no tiene por qué usarlos todos, BLOB
puede almacenar hasta 65535 bytes y se utiliza para almacenar imágenes, archivos, etc.
Otros: JSON
, GEOMETRY
, POINT
, LINESTRING
, POLYGON
, MULTIPOINT
, MULTILINESTRING
, MULTIPOLYGON
, GEOMETRYCOLLECTION
Características
Cada dato puede poseer diferentes características, se definen mediante palabras clave que se colocan después del tipo de dato.
Claves primarias (PK)
Una clave primaria es un campo o conjunto de campos que identifican un registro de una tabla. Una clave primaria no puede contener valores nulos y no puede repetirse en otros registros de la tabla.
id (PK) | nombre | password | rol |
---|---|---|---|
1 | admin | superadmin | admin |
2 | firulai | kjsdh092 | moderador |
3 | user0 | 0123 | usuario |
4 | user1 | 0123 | usuario |
Claves foráneas (FK)
Una clave foránea es un campo o conjunto de campos que identifican un registro de otra tabla. Una clave foránea puede contener valores nulos y puede repetirse en otros registros de la tabla.
id(PK) | mensaje | autor (FK) |
---|---|---|
1 | hola mundo | 1 |
2 | eee k pasa | 2 |
3 | vamooooooooo | 2 |
4 | buenasss | 4 |
Un ejemplo de claves primarias y foraneas en una tienda simple:
mermaid
flowchart TD
shop(["Tienda"])
shop --> prod[("Productos")]
prod --> id
prod --> nombre
prod --> precio
shop --> out
out[("Pedidos")]
out --> id2["id"]
out --> prod2["Producto"]
out --> prod3["Cantidad"]
id2 --> pk2["Primary key"]
id --> pk["Primary key"]
prod2 --> fk["Foreign key"]
fk --> pk
flowchart TD
shop(["Tienda"])
shop --> prod[("Productos")]
prod --> id
prod --> nombre
prod --> precio
shop --> out
out[("Pedidos")]
out --> id2["id"]
out --> prod2["Producto"]
out --> prod3["Cantidad"]
id2 --> pk2["Primary key"]
id --> pk["Primary key"]
prod2 --> fk["Foreign key"]
fk --> pk
Para definir una clave primaria en SQL, utilizamos la sentencia PRIMARY KEY
. Para definir una clave foránea en SQL, utilizamos la sentencia FOREIGN KEY
.
No nulidad (NN)
Los valores nulos son valores que no existen. Los valores nulos se utilizan para indicar que un valor no existe o que no se conoce.
En SQL, podemos hacer que un campo no acepte valores nulos utilizando la sentencia NOT NULL
.
Los campos no nulos son muy importantes, ayudan a mantener la integridad de los datos, y evitan que se introduzcan valores nulos en la base de datos.
Unicidad (UN)
Los valores únicos son valores que no se repiten. Los valores únicos se utilizan para indicar que un valor no se puede repetir.
En SQL, podemos hacer que un campo no se repita utilizando la sentencia UNIQUE
.
Esta propiedad tambien es muy importante, ya que evita que se introduzcan valores repetidos en la base de datos, facilitando la búsqueda de registros.
Autoincremento (AI)
Los valores autoincrementales son valores que se incrementan automáticamente. Los valores autoincrementales se utilizan para indicar que un valor se incrementa automáticamente.
En SQL, podemos hacer que un campo se incremente automáticamente utilizando la sentencia AUTOINCREMENT
.
Utilizar autoincremento es muy útil, ya que nos permite generar valores únicos para los campos de clave primaria, sin tener que preocuparnos de generarlos nosotros mismos.
Valor por defecto
Cuando un campo tiene un valor por defecto
significa que si no se especifica ningún valor para ese campo, se utilizará el valor por defecto.
En SQL, podemos hacer que un campo tenga un valor por defecto utilizando la sentencia DEFAULT
.