Está en la página 1de 7

Estrategias de persistencia

Universidad: Universidad Nacional de Hurlingham


Carrera: Licenciatura en informática
Profesor: Lic. Pablo Marcelli.
Alumno: Tomas Benjamin Vasquez
Fecha: 14/08/2022

Práctica

create table Fabricantes (


codigo int auto_increment,
nombre varchar(100),

primary key (codigo)


);

create table Articulos (


codigo int auto_increment,
nombre varchar(100),
precio int,
fabricante int,

primary key (codigo),


foreign key (fabricante) references Fabricantes(codigo)
);

insert into Fabricantes (nombre)


values
("Coca cola"),
("Serenisima"),
("Pepsi"),
("Manaos"),
("Marolio"),
("Randon"),
("NVidia"),
("Microsoft");

insert into Articulos (nombre, precio, fabricante)


values
("Sprite", 100, 1),
("Fanta", 120, 1),
("Leche", 80, 2),
("7up", 120, 3),
("Cola", 80, 4),
("Arvejas", 60, 5),
("Tuerca", 15, 6),
("Placa Grafica", 150000, 7),
("Windows", 1500, 8);

select * from Fabricantes

select * from Articulos

-- 1 Obtener los nombres de los productos de la tienda


select nombre from Articulos

-- 2 Obtener los nombres y los precios de los productos de la tienda.


select nombre, precio from Articulos

-- 3 Obtener el nombre de los productos cuyo precio sea menor o igual a 200
select nombre from Articulos
where precio <= 200

-- 4 Obtener todos los datos de los articulos cuyo precio este entre los 30$ y 120$ (ambas
cantidades incluidad)
select * from Articulos
where precio BETWEEN 60 and 120

-- 5 Obtener nombre y precio en dolares (es decir, el precio multiplicado por 85)
select nombre, precio * 85 as precioEnDolares from Articulos

-- 6 Seleccionar el precio medio de todos los productos


select avg(precio)from Articulos

-- 7 Obtener un listado de articulos, incluyendo el nombre del articulo, su precio y el nombre


de su fabricante.
select a.nombre, a.precio, f.nombre from Articulos a
inner join Fabricantes f on f.codigo = a.fabricante
create table Departamentos (
codigo int,
nombre varchar(100),
presupuesto int,

primary key (codigo)


);

create table Empleados (


DNI varchar(8),
nombre varchar(100),
apellidos varchar(255),
departamento int,

primary key (DNI),


foreign key (departamento) references Departamentos(codigo)
);

insert into Departamentos (codigo, nombre, presupuesto)


values
(1, "Tecnologia", 200000),
(2, "Producto", 300000),
(3, "Logistica", 40000),
(4, "Salud", 10000),
(5, "RR HH", 20000),
(37, "Diseño", 50000),
(77, "Educacion", 500000);

insert into Empleados (DNI, nombre, apellidos, departamento)


values
("42225566", "Lucas", "Perez", 4),
("45669878", "Maria", "Lopez", 5),
("42220131", "Ludmila", "Arevalo", 2),
("40526352", "Maria", "Del mar Pinto", 37),
("40253625", "Franco", "Etcheverri", 77),
("43598434", "Tomas", "Vasquez", 1),
("43598686", "Franco", "Troncoso", 1),
("39565656", "Jonathan", "Vargas Pinzon", 1),
("43565656", "Leandro", "Alvarez", 77),
("46858545", "Laura", "Lopez", 3),
("45696985", "Oscar", "Rincon", 2),
("45695885", "Rube", "Direy", 2);

-- 8 Obtener todos los datos de los empleados que se apellidan Lopez y los que se apellidan
Perez.
select * from Empleados
where apellidos like "lopez" or apellidos like "perez"

-- 9 Obtener todos los datos de los empleados que trabajan para el departamento 37 y el
departamento 77.
select * from Empleados
where departamento in (37, 77)

-- 10 Obtener un listado completo de empleados, incluyendo el nombre y apellidos del


emplaeado junto al nombre y presupuesto de su departamento.
select e.nombre, e.apellidos, d.nombre nombreDepartamento, d.presupuesto from Empleados
e
inner join Departamentos d on d.codigo = e.departamento

-- 11 Obtener los nombres (unicamente los nombres) de los departamentos que tienen mas de
dos empleados.S
select d.nombre from Departamentos d
inner join Empleados e on e.departamento = d.codigo
group by d.nombre
having count(d.nombre) > 2

-- 12 Añadir un nuevo departamento: "Calidad", con presupuesto de 40000 y codigo.


-- añadir un empleado vinculado al departamento recien creado: "Esther Vasquez", DNI:
89267109
insert into Departamentos (codigo, nombre, presupuesto)
values
(6, "Calidad", 40000);

insert into Empleados (DNI, nombre, apellidos, departamento)


values
("89267109", "Esther", "Vazquez", 6);

-- 13 Aplicar un recorte presupuestario del 10% a todos los departamentos.

update Departamentos
set presupuesto = presupuesto - ((10 * presupuesto) / 100)
create table Almacenes (
codigo int auto_increment,
lugar varchar(100),
capacidad int,

primary key (codigo)


);

create table Cajas (


numReferencia varchar(5),
contenido varchar(100),
valor int,
almacen int,

primary key (numReferencia),


foreign key (almacen) references Almacenes(codigo)
);

insert into Almacenes (lugar, capacidad)


values
("Hurlingham", 1),
("San Isidro", 3),
("Mar del plata", 10),
("CABA", 10000),
("Merlo", 1);

insert into Cajas (numReferencia, contenido, valor, almacen)


values
("123AA", "Computadoras", 100000, 1),
("123AS", "Tablets", 50000, 1),
("123AD", "Fideos", 10000, 1),
("123AF", "Manteca", 20000, 5),
("123AG", "Papa", 20000, 5),
("123AH", "Gasoil", 200000, 2),
("123AI", "Pescado", 60000, 3);

-- 14 Obtener el numero de cajas que hay en cada almacen


select count(c.numReferencia) from Almacenes a
inner join Cajas c on c.almacen = a.codigo
group by a.codigo

-- 15 Vaciar el contenido de los almacenes que esten saturados


delete c from Cajas c
inner join (
select a.codigo, count(c.numReferencia) cantidad, a.capacidad from Almacenes a
inner join Cajas c on c.almacen = a.codigo
group by a.codigo
) sq on c.almacen = sq.codigo
where sq.cantidad > sq.capacidad
Cuestionario
1. ¿Que es una transacción y que propiedades tiene? explíquelas
Una transacción es una fracción de un programa al cual se accede y puede
modificar la base de datos. Esta puede estar en un lenguaje de programación o en uno de
manipulación de datos. Está delimitada por las instrucciones BEGIN TRANSACTION y
END TRANSACTION.
Estas tienen distintas propiedades:
● Atomicidad: Es decir que o todas las operaciones se realizan bien o
ninguna.
● Consistencia: Es decir que esta ejecución debe ser única.
● Aislamiento: Es decir que cada transacción que se ejecute debe ser
independiente, es decir que una operación no debe depender de otra.
● Durabilidad: Es decir que por más que se presente un fallo en el sistema, la
información modificada con la transacción debe perdurar.

2. ¿Cuáles son los estados de una transacción?


Hay distintos estados para una transacción:
● Activa: Es el estado inicial de la transacción, es decir que al momento de
ejecutarla, esta pasa a tener este estado.
● Parcialmente comprometida: Este es el estado que toma después de
ejecutarse la última instrucción, es decir cuando está comprobando que los
cambios efectuados se hayan realizado bien.
● Fallida: Tras descubrir que no puede continuar la ejecución normal, es decir
cuando se presenta un fallo en la transacción
● Abortada: Después del retroceso de la transacción y de haberse establecido
la base de datos a su estado antes del comienzo de la transacción.
● Comprometida: Este es el estado de una transacción que se realizó con
éxito.

3. ¿A que se refiere el término control de concurrencia?


Es una forma de asegurar la secuencialidad, que cuando una transacción accede a
un elemento de datos, ninguna otra debería de poder modificarlo. Generalmente, para
implementar este requisito se permite que una transacción acceda a un elemento de datos,
solo si este puede implementar un bloqueo sobre este elemento.

4. ¿Que es el bloqueo en modo compartido y en modo exclusivo?


● Bloqueo en modo Compartido: Este se refiere a que una transacción que
impacte sobre un elemento tiene permisos de lectura sobre dicho elemento.
● Bloqueo en modo Exclusivo: Este se refiere a que una transacción que
impacte sobre un elemento tiene permisos tanto de lectura como de escritura
sobre dicho elemento.

5. ¿Qué son los protocolos de bloqueos en dos fases?


Este protocolo exige que cada transacción realice las peticiones de bloqueo y
desbloqueo de 2 fases:
1. Fase de crecimiento: Una transacción puede obtener bloqueos pero no
liberarlos.
2. Fase de decrecimiento: Una transacción puede liberar bloqueos pero no
obtener ninguno nuevo.
Al inicio, una transacción se encuentra en la fase de crecimiento, acá puede adquirir
los bloqueos que necesite y entra a la fase de decrecimiento y no puede realizar más
peticiones de bloqueo.

6. ¿Cómo es la recuperación de un interbloqueo?


Cuando un algoritmo determina que existe un interbloqueo, el sistema se debe
recuperar, por lo que lo más común en retroceder una o más transacciones para romper el
interbloqueo, por lo que se deben realizar tres acciones:
1. Selección de una víctima: Con un conjunto de transacciones
interbloqueadas se debe determinar cuales son las que se van a retroceder
para solucionar el interbloqueo, por lo que se deben retroceder las que sean
menos costosas, pero este costo mínimo no es preciso.
Factores que determinan el coste:
a. Lo que la transacción ha calculado y lo que se calculará.
b. El número de elementos de datos que uso la transacción
c. La cantidad de elementos de datos que necesita la transacción para
que se complete
d. El numero de transacciones que se veran involucradas en el
retroceso
2. Retroceso: Una vez se determine que transacción será la víctima se debe
determinar hasta donde se retrocederá.
Lo más simple es el retroceso total, se aborta la transacción y se vuelve a
completar. Pero también existe el retroceso parcial el cual consta en
retroceder solo lo necesario para romper el interbloqueo. Pero este requiere
que el sistema guarde también información adicional de todas las
transacciones y registrar cada solicitud/concesión de bloqueos y
actualizaciones para que así el mecanismo de recuperación sea capaz de
realizar los retrocesos parciales. Además las transacciones deben ser
capaces de reanudar la ejecución después de un retroceso parcial.
3. Inanición: En un sistema en el que las víctimas se basen en el coste es
probable que siempre se elija la misma transacción como víctima, y eso es a
lo que se le llama inanición, por lo que para solucionar este problema,
generalmente, se agrega el número de retrocesos al cálculo del coste.

7. ¿A que hace referencia, los niveles débiles de consistencia?


Con todos los protocolos necesarios para asegurar la secuencialidad es muy
probable que los niveles de consistencia sean más bajos. El uso de niveles bajos de
consistencia es algo más a tener en cuenta en la corrección de las bases de datos.

También podría gustarte