0% encontró este documento útil (0 votos)
39 vistas37 páginas

Clase Base de Datos

El documento proporciona una introducción a las bases de datos relacionales, explicando su importancia, estructura y funcionamiento. Se detalla el papel de los sistemas gestores de bases de datos (SGBD) y los niveles de abstracción que permiten la independencia física y lógica de los datos. Además, se discuten las ventajas y desventajas de utilizar bases de datos relacionales, así como ejemplos de diseño y manipulación de datos utilizando SQL.

Cargado por

cantincuzjanely
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PPTX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
39 vistas37 páginas

Clase Base de Datos

El documento proporciona una introducción a las bases de datos relacionales, explicando su importancia, estructura y funcionamiento. Se detalla el papel de los sistemas gestores de bases de datos (SGBD) y los niveles de abstracción que permiten la independencia física y lógica de los datos. Además, se discuten las ventajas y desventajas de utilizar bases de datos relacionales, así como ejemplos de diseño y manipulación de datos utilizando SQL.

Cargado por

cantincuzjanely
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PPTX, PDF, TXT o lee en línea desde Scribd

Bases de Datos

Tema 01. Introducción a las BD


Relacionales
las s
Importancia de las Bases de Datos

 ¿Qué es una base de datos?


 ¿Utiliza alguna?
 ¿Considera que son
importantes?
 ¿Qué interfaces presentan?
 Estructuras de datos gestionadas por un
programas
conjunto de permite almacenar grandes
que n cantidades
de información y manipularla de forma eficiente
 Dan soporte a:
 Procesos transaccionales
(compras, préstamos, gestión académica, experimentos
científicos…)
 Planificación de trabajos
(Workflow, scheduler, … )
 Oferta de servicios
(búsquedas bibliográficas, videotecas,..)
 La inteligencia de negocio
 DW, O LAP, minería de datos
Base de Datos (def): colección organizada de datos, relativa a
un problemapued se compartida por conjunto usuarios/
concreto,
que
Sirve para e r un de aplicaciones.
n :

ALMACENAR
Restricciones
CONTROLAR
Seguridad

CONSULTAR

INFORMACIÓN
ACTUALIZAR

DATOS
RELACIONES
RESTRICCIONES
Base de Datos
Relacionales
• Es un conjunto exhaustivo (en su modelización del
mundo real) de datos estructurados, fiables y
homogéneos, organizados independientemente de su
utilización y de su implementación en máquina,
accesibles en tiempo real, compartibles por usuarios
concurrentes que tienen necesidades de información
diferentes y no predecibles en el tiempo.
• Los sistemas relacionales operan conceptualmente
sobre tablas de datos y no sobre los datos individuales
contenidos en el archivo.
• Las tablas permiten representar la información de forma
más compacta.
• Es posible acceder a la información contenida en dos o
más tablas simultáneamente.
Sistema Gestor de Base de
Datos
• Un SGBD es un conjunto de programas de propósito
general que permite controlar el acceso y la utilización
de la Base de Datos, por los usuarios, para incluir,
modificar o recuperar información, incluyendo
prestaciones para conseguir la independencia, la
integridad y la seguridad de los datos, así como la
concurrencia de usuarios.
• Entre la Base de Datos física (el almacenamiento real de
los datos) y los usuarios del sistema existe un software
que recibe el nombre de SGBD y es el responsable de
tratar todas las peticiones de información de los
usuarios.
Niveles de abstracción, Independencia Física y Lógica
La finalidad de trabajar con técnicas de BD relacionales es disfrutar de una visión
abstracta de los datos que facilite el desarrollo y uso de aplicaciones. Esto es
centrarse en determinar qué datos se han de almacenar y como se relacionan,
olvidándose de detalles internos de como el gestor de BD los almacena y gestiona.
Niveles de abstracción, Independencia Física y Lógica

ANSI-SPARC (1975) propuso la arquitectura en tres


niveles para
conseguir la separación entre los programas de aplicación y
Nivel
los interno: Describe la estructura de almacenamiento físico de base de
datos
datos (árboles B+, montones, estructura de índices…). Los datos se almacenan
en este nivel. Cada SGBD implementa su propio nivel interno. No estándar.
Nivel conceptual: Representación del conjunto de datos correspondiente al
problema de información a gestionar. Recoge el esquema conceptual, esto es,
la estructura de la base de datos en términos de elementos lógicos
(entidades, atributos, relaciones y restricciones), ocultando los detalles
físicos de almacenamiento.
Nivel externo o de vistas: Esquemas que recogen las distintas
perspectivas de los usuarios y/o aplicaciones para cada proceso (compras,
matrícula, expedientes, etc.). Permiten ocultar información por cuestiones
de seguridad (Ley de protección de datos, datos sensibles para la
seguridad de una empresa, etc.)
Niveles de abstracción, Independencia Física y Lógica

La arquitectura de tres niveles es útil para explicar el concepto de


independencia de datos :
Independencia lógica: capacidad de cambiar el nivel conceptual sin tener
que cambiar las vistas ni los programas de aplicación
Añadir restricciones de dominio, incorporar un nuevo atributo, añadir
nuevas relaciones,…
Independencia física: capacidad de cambiar el nivel interno sin tener que
cambiar ni el nivel conceptual ni nivel externo.
Añadir índices, ampliar espacio de almacenamiento, realizar particiones, etc.

DATE (1981) define la independencia como “la inmunidad


de las aplicaciones ante cambios de la estructura del
almacenamiento y de los métodos de acceso”
Ventajas del Uso de las Bases de Datos Relacionales

• Flexibilidad de adaptación a cada problema.


• Optimización en la gestión de la información.
• Garantiza la independencia física y lógica de los
datos.
• Control de la integridad de los datos.
• Garantía sobre la consistencia de la
información.
• Facilidad de acceso concurrente.
• Protección ante fallos del sistema.
• Seguridad ante accesos restringidos.
Cuando no usar Bases de Datos Relacionales

Ficheros
• Aplicaciones sencillas cuyo esquema es poco probable que
cambie
• Cuando hay restricciones de tiempo real
• Cuando no hay acceso multiusuario

NoSQL (non-relational databases)


• Grandes volúmenes de datos sin requisitos ACID
(transacciones)
• Sistemas distribuidos y escalables
•Ej: Google (BigTable), Facebook (Cassandra), etc.
• Una tabla está formada Características
por Filas y Columnas. de las Tablas
• Las Filas son
equivalentes a los
Registros de un archivo
clásico.
• Las Columnas son
equivalentes a los
campos,
características o
atributos (que
representan los
atributos de los objetos
o entidades descritas).
El conjunto de valores
que puede tomar un
Los datos se conciben agrupados en forma de tablas
Cada fila establece una relación entre un conjunto de valores
Ejemplo de Tabla Persona

Clave Nombre Apellido Teléfono Ocupación


Primaria
2341 Pedro Ramos 023454565 Estudiante
2347 Antonio Sanchez 072342343 Profesor
2344 Rafael Medina 042342344 Abogado
4543 Maria Lopez 012323456 Medica

Una clave Primaria Primary Key (PK) es una referencia


que se utiliza para identificar los registros de forma única
y está formada por uno o más atributos (columnas) y no
puede ser nula ni repetida
Relaciones entre tablas
PK BANCOS Las tablas se relacionan entre si mediante
ENTIDAD NOMBRE
vínculos jerárquico.
Este vínculo se establece mediante columnas de igual
0893 Santander
tipo de datos denominada clave ajena o Foreign Key
0059 Popular (FK) .
3428 BBVA La referencia de una fila de una tabla a otra se produce
5632 Banesto
cuando ambos campos tienen el mismo valor

FK PK SUCURSAL
ENTIDAD CODIGO_SUCURSAL POBLACION DIRECCION

0893 001 Madrid Castellana, 73

3428 022 Las Palmas Triana, 21


0893 025 Gáldar R. Moreno, 3

5632 213 Oviedo Uría, 43


0893 300 Barcelona Diagonal, 435

En este ejemplo: Se evidencia una relación 1 – N entre las dos tablas, se debe
entonces crear una columna FK en Sucursal, que debe heredar la información de la
PK de la tabla Bancos. Considerar que el FK nunca debe ser nulo, ni tampoco puede
tener información que no este previamente creadas en el PK al que se vincula
Modelo Relacional
Tipos de Datos : Cada columna de una tabla tiene asociado un tipo de dato. Existe un
subconjunto estándar, pero hay otros dependiendo del gestor que se utilice.
Cadena de caracteres (char).
Cada carácter requiere un byte para su
almacenamiento.
Numérico (numeric).
Enteros: Cortos (smallint).
Largos (integer).
Decimales: definidos por su precisión y escala
(decimal)
Notación científica: Simple precisión (smallfloat)
Doble precisión (float)
Fecha (date) y hora (datetime).
Diferentes opciones según nivel de precisión.
Objeto grande (large object, LOB).
Binary large object (blob).
Character large object
(clob).
Tipos definidos por el
Modelo Relacional
ÍNDICES: datos adicionales que
estructuras de permiten
• Realizar búsquedas más ágiles en las tablas….
aunque suponen una sobrecarga para realizar las
actualizaciones
de datos
ej: campo ―título o en una tabla que recoja los libros
disponibles en una biblioteca. Se justifica por ser el campo
sobre el que se realizan más consultas
Conviene definirlos sobre las columnas con FK

• Establecer restricciones de unicidad


no permitir repeticiones de un valor en la columna o
columnas afectadas por el índice
ej: campo ―ISBN en una tabla que recoja los libros
disponibles en
una biblioteca
Leyes básicas de los SBDR
• La Base de Datos contendrá generalmente muchas Tablas.
• Una Tabla sólo contiene un número fijo de Campos.
• El nombre de los Campos que componen una Tabla es distinto.
• Cada Registro de una Tabla es único.(Primary Key)
• El orden de los Registros y el orden de los Campos de una Tabla no está
determinado.
• Para cada Campo existe un conjunto de valores posibles (Dominio).
El El problema del diseño
problema del diseño
Construir el diseño más adecuado para gestionar la información siguiente
PROPIETARIOS: DNI (único) PREDIOS: CODIGO (único )
NOMBRE UBICACION
DIRECCION SUPERFICIE

Primera alternativa
Predios_propietarios
PK CODIGO UBICACION SUPERFICIE DNI NOMBRE DIRECCION

Problemas del diseño


• Repetición de información
• Posibilidad de contradicciones en los datos
• Problemas en inserciones
• Pérdida de información al borrar
El problema del diseño
El problema del diseño

Propietarios
Segunda alternativa
PK DNI NOMBRE DIRECCION

Predios
PK CODIGO UBICACION SUPERFICIE

Problemas del diseño


• Pérdida de dependencias funcionales
¿de quién es cada predios?
El problema del diseño

Tercera alternativa
Propietarios
PK DNI NOMBRE DIRECCION

Predios
FK DNI CODI UBICACION SUPERFICIE

Problemas del diseño


• Un predio no podría pertenecer a más de un propietario
El problema del diseño
La relación entre estas tablas es “ n - m”

Un propietario puede tener Tercera


Cuarta
varios alternativa
locales alternativa
(n) mientras
Propietarios
Propietarios
que un local sólo puede ser de un propietario (1).
DNI NOMBRE DIRECCION
DNI NOMBRE DIRECCION

Propiedad Predios Locales


ID DNI CODIGO DNI CODIGO UBICACION
CODIGO SUPERFICIE
UBICACION SUPERFICIE

Si se desea que un propietario pueda tener varios predios y, al mismo tiempo, que
un
predio pueda ser de varios propietarios, la relación es simétrica, es “de n - m” y no
puede ser resuelta con sólo dos tablas. Para conseguirlo, es necesario introducir una
tabla auxiliar que tenga relaciones de “de n a 1” con las tablas de Propietario y
Predio.
Diseño de Base de Datos
Relacionales
Planificación del tipo de información a almacenar:
Información disponible
(vida real, entrevistas con expertos en tema).
Información que necesitamos.
Esquematizar sobre papel el problema.
Considerar los datos a gestionar y estimar el espacio de
memoria que necesitan.

Los dos aspectos más importantes a la hora del diseño de las


Tablas son:
Campos
Nombre del campo
Tipo del campo
Anchura del campo
Datos
Caracteres (texto), valores numéricos, fechas,
informaciones lógicas, imágenes, multimedia.
Dominio de los Datos
Ejemplo Diseño de Dase de Datos
1. Una empresa de transporte que brinda servicio al público, desea
diseñar una base de datos que genere utilidad a la empresa. Relación
Chofer – Vehículo, en la que se trata de minimizar el tiempo libre de
los choferes y maximizar el tiempo de uso del vehículo,
Ejemplo Diseño de Dase de Datos

Apellido pkChofer pkvehículo Año


Nombre
Modelo
Cédula
1-N Placa
Sexo
Chasis
Licencia Chofer N-M Vehículo
Matrícula
Edad
N-1 Seguro
Dirección
Kilometraje
Teléfono
GPS
Correo
Tipo de sangre fkChofer
Tabla auxiliar fkvehículo
pkRecorrido Destino
recorrido Fecha
Distancia
pago
El lenguaje SQL
• SQL: Structured Query Language.
• Cualquier SBDR lleva asociado un lenguaje de
manipulación de datos compuesto de una
serie de mandatos u órdenes que permiten
consultar y modificar la estructura de la Base
de Datos y su información.
Historia del Lenguaje SQL

Lenguaje declarativo de acceso a los datos.


Estándar para las bases de datos relacionales
y objeto- relacionales.
Incluye la capacidad de actuar tanto sobre la
estructura de la base de datos como sobre los
propios datos.
Desarrollado en el San José Research Center
(IBM) Fue utilizado por primera vez en 1970.

En 1986: ANSI (American National Standards


Institute) e ISO (International Standards
Organization) publicaron las normas
SQL/ANSI y SQL-86.
Actualizaciones SQL-92, SQL-1999 y, en vigor
SQL:2003
Definición de BD y Creación de Tablas - Lenguaje SQL
CREATE DATABASE GESTION;

CREATE TABLE PROPIETARIOS


(DNI CHAR(10) NOT NULL CONSTRAINT pk_prop PRIMARY KEY,
NOMBRE CHAR(25) NOT NULL,
DIRECCION CHAR(30));

CREATE TABLE LOCALES


(CODIGO CHAR(5)
NOT NULL CONSTRAINT
pk_loc PRIMARY KEY,
DNI CHAR(10) NOT
NULL,
UBICACIÓN CHAR(4) NOT NULL,
SUPERFICIE DEC(8,2) PROPIETARIOS
NOT NULL,
CONSTRAINT fk_loc FOREIGN KEY
DNI ( DNI ) REFERENCES
NOMBRE DIRECCION PROPIETARIOS ( DNI ));

LOCALES
CODIGO DNI UBICACION SUPERFICIE
Manipulación de datos - Lenguaje SQL
Insertar una nueva fila en la tabla
PROPIETARIOS
INSERT INTO PROPIETARIOS (DNI, NOMBRE, DIRECCION)
PROPIETARIOS VALUES (‘13234567R‘, ‘Sanz, Luis‘, ‘Gran Vía 26‘)
DNI
NOMBRE
DIRECCION Encontrar los locales con superficie 200 su
mayor que y propietario
SELECT CODIGO, UBICACION, NOMBRE, DIRECCION
FROM LOCALES, PROPIETARIOS
WHERE [Link] = [Link]
LOCALES
AND SUPERFICIE > 200
CODIGO
DNI Resultado
UBICACIO CODIGO UBICACION NOMBRE DIRECCION
N
L-31 Alta 236 Sanz, Luis Gran Vía 26
SUPERFI
CIE L-234 Bailén 46 Laso, Ana Isabel II 38
L-9 Cuesta 2 Sanz , Luis Gran Vía 26
L-302 Becedo 10 Fe, Pedro

Modificar la dirección del propietario cuyo


D.N.I. Borrar el local de código L-
es 20333444F
UPDATE PROPIETARIOS SET DIRECCION =‘Alta 87’ 234
DELETE FROM LOCALES
WHERE DNI = ‘20333444F‘ WHERE CODIGO = ‘L-234‘
Restricciones a nivel de columnas - Lenguaje SQL
Ejemplo: para cada fila de la tabla JUGADORES_BALONCESTO
• NOT NULL:Todas las columnas excepto ESTATURA son obligatorias de
rellenar
• CHECK: el SEXO solo puede tomar los valores M o F y la ESTATURA debe ser
superior a
1,75

• DEFAULT: la fecha de alta toma por defecto la del sistema, si ésta no se


especifica
CREATE(noTABLE
es restricción en sí misma, si no una ayuda para el usuario final)
JUGADORES_BALONCESTO
(DNI CHAR(10) NOT NULL,
NOMBRE CHAR(25) NOT NULL,
DIRECCION CHAR(30) NOT NULL,
TELEFONO CHAR(15) NOT NULL,
SEXO CHAR(1) CHECK ( SEXO in (M‟, ‟F‟) NOT NULL,
FE_ALTA DATE DEFAULT getdate() NOT NULL,
ESTATURA DEC(3,2)
CONSTRAINT Valor_estatura CHECK (ESTATURA > 1,75)
PRIMARY KEY ( DNI ));
Restricciones a nivel de filas - Lenguaje SQL

Ejemplo: para cada fila de la tabla LOCALES creada previamente, los


valores de
DNI_propietario DNI_arrendatario no pueden iguales
y ser .

PERSONAS LOCALES

Mediante la instrucciónDNICREATECodigo
DOMAIN (SQL-99) se pueden definir un tipo de dato de
Nombre DNI_propietario
usuario a partir de un tipo de dato estándar (no la incluyen todos los gestores)
X
Direccion DNI_arrendatario
CREATE DOMAIN
UbicacionEstatura DEC(3,2)
CONSTRAINT
Superficie Valor_estatura CHECK (Estatura > 1,75)

ALTER TABLE LOCALES WITH NOCHECK ADD


CONSTRAINT CK_locales CHECK (DNI_propietario
<> DNI_arrendatario)
Restricciones - Lenguaje SQL

Los triggers (disparadores) de manipulación son procesos predefinidos


que entran en acción en respuesta a eventos específicos de manipulación
de datos (insert, update, delete).
Son más flexibles que los asertos para expresar restricciones
semánticas.
Generalmente se utilizan para:
• recoger restricciones complejas (reglas de negocio)
• automatizar procesos
• anotar acciones (log)
Los incluyen generalmente los gestores aunque su codificación no es
estándar
PERSONAS LOCALES
Ejemplo: para cada fila de la tabla LOCALES, los DNI Codigo
valores de D N I_propietario y Nombre DNI_propietario X
DNI_arrendatario no pueden ser iguales. Direccion DNI_arrendatario
Ubicacion
AHORA LO CONTROLAMOS POR DISPARADOR, Superficie

SOLO A MODO DE EJEMPLO,


YA QUE SI SE PUEDE DEFINIR MEDIANTE CHECK
RESULTARÁ MÁS EFICIENTE
Ejemplo disparador - Lenguaje SQL
Al ejecutar la instrucción
UPDATE LOCALES SET DNI_propietario = '60601602‘ UPDATE
WHERE DNI_propietario = '40401402' sobre la tabla LOCALES, entra en
acción el disparador. Este hace
LOCALES uso de la tabla inserted, tabla
Codigo DNI_pr opiet ar io DNI_ar r endat ar i o Ubicacion Superficie que SQL Server utiliza para
almacenar las filas afectadas por
L- 31 505 01502 606 01602 Alta 236 220
la instrucción y que guardará en
L- 234 404 01402 505 01502 Bailén 46 350
la BD si no hay error. Esta tabla y
L- 9 303 01302 707 01702 Cuesta 2 280
L- 302 606 01602 Becedo 10 255
la tabla deleted (que contiene
404 01402
las filas que se sustituyen o
eliminan
de la BD) se utilizan para
realizar el control de reglas
integridad.
CREATE TRIGGER CTRL_locales ON LOCALES FOR INSERT, UPDATE AS
En TSQL, el programador es el
BEGIN responsable de cerrar la
IF ( SELECT count(*) FROM inserted transacción con error (rollback)
WHERE inserted .dni_propietario= inserted.dni_arrendatario) >0
BEGIN
RAISERROR ('El DNI del propietario no puede coincidir con el DNI del Arrendatario.', 16, 1)
ROLLBACK TRANSACTION inserted
RETURN Codigo DNI_propietario DNI_arrendatario Ubicacion Superficie
END L-234 60601602 50501502 Bailén 46 350
END L-302 60601602 60601602 Becedo 10 255
Concepto de transacción
Transacción: conjunto de BEGIN TRANSACTION
operaciones de manipulación de UPDATE CUENTA
datos que deben ser SET saldo = saldo + 50
consideradas como una unidad. WHERE numero_cuenta = ‘0893’
Las debe definir el programador. UPDATE CUENTA
Todas las operaciones que se SET saldo = saldo - 50
ejecutan individualmente en un WHERE numero_cuenta = „2345‟
gestor ACID son transaccionales.
Si no ha habido ningún error, se confirman los cambios
Propiedades (ACID): COMMIT TRANSACTION
ATOMICIDAD:

todo o nada CONSISTENCIA: Y si ha habido algún error, no se almacenan los cambios


coherencia de ROLLBACK TRANSACTION
los datos AISLAMIENTO: serialización
de Ejemplo: Transferencia de 50€ de la cuenta nº
transacciones 0893 a la 2345
DURABILIDAD: lossucursal
cambios son cuenta impositor
permanentes
codigo_sucursal numero_cuenta codigo_cliente
ciudad_sucursal activos codigo_sucursal numero_cuenta
saldo
Arquitectura de un SGBDR

El Procesador de consultas es el
módulo
responsable de:
* interpretar las instrucciones de definición y
registrar
su definición en el diccionario de datos
* traducir las instrucciones LMD en el
lenguaje del motor de evaluación para
determinar elconsultas
* ejecutar las plan de ejecución.
solicitadas

consulta Analizador y Representación


Representación
consulta internaálgebra
álgebra
traductor interna
relacional
relacional

Optimizador

resultado
resultado Motor de Plande
deejecución
ejecución
ejecución Plan

estadísticas
datos

©Silberschatz, Korth and Sudarshan


Arquitectura de un SGBDR
El Gestor de almacenamiento es el
módulo que
proporciona la interfaz entre los datos de bajo
nivel almacenados en la BD y los programas de
aplicación y las consultas remitidas al sistema.
Es el responsable de:
- interaccionar con el gestor de archivos
- almacenamiento eficiente y recuperación y
actualización de datos
* El Gestor de Transacciones asegura la
Atomicidad
y la Durabilidad de las transacciones a pesar de
fallos
en el sistema ( p. ej. Corte de luz, caída del S.O. )
o de
las transacciones establecidas
entre las transacciones en los
concurrentes
(aislamiento) para
programas.
garantizar
- Gestorladeconsistencia de la información
Concurrencia controla la
- Gestor
situación de
estable.
interacción Recuperación permite
* El Gestor de Archivos retornargestiona
a una la
asignación de y las estructuras de datos
espacio en disco
* El Gestor de Memoria Intermedia trae
los disco
del datosa la
caché.

©Silberschatz, Korth and Sudarshan


Tipos de Usuarios
Los tipos de usuario se determinan por el
tipo de
interacción que realizan:
 Usuarios normales – invocan programas
de
aplicación que se han escrito previamente
 E.j. acceso a BD en la Web (cuentas
bancarias,

carritos de la compra, etc…)
Programadores de aplicación –
escriben

programas que embeben las llamadas a la BD.
Utilizan
 herramientas como Eclipse, .Net,…)
Usuarios sofisticados – interactúan con el
sistema
sin escribir programas, trabajan con el LDD y
LMD
 Usuarios especializados – escriben
aplicaciones de
bases de datos especializadas que no encajan
con el
procesamiento tradicional.
 Ej. BD con tipos de datos complejos
©Silberschatz, Korth and Sudarshan
Preguntas

1. Defina qué es una Base de datos relacional


2. ¿Qué restricciones se pueden recoger en una BD Relacional? Ponga
un ejemplo de cada una.
3. ¿Qué significa independencia física y lógica de los datos?
4. ¿Qué se entiende por integridad y consistencia de los
datos?¿Cómo se pierde la consistencia?
5. Indique las instrucciones del lenguaje SQL que permiten realizar la
manipulación de datos.
6. ¿Qué es una transacción? ¿Cuándo se deben utilizar?
7. Enumere los elementos que componen un SGBDR e indique la función
de cada uno.

También podría gustarte