Enviar respuesta 
 
Calificación:
  • 0 votos - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Buscar en el tema
Final GDD 21/02/2018
Autor Mensaje
MatiPetrilli Sin conexión
Empleado del buffet
No esta muerto quien pelea.
*

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 8
Agradecimientos dados: 11
Agradecimientos: 13 en 3 posts
Registro en: Dec 2012
Twitter
Mensaje: #1
Final GDD 21/02/2018 Finales Gestión de Datos
Buenas, les dejo el final que tomaron en Febrero.

   

Saludos
25-05-2018 17:35
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
[-] MatiPetrilli recibio 6 Gracias por este post
CarooLina (25-05-2018), emilio_murray (04-07-2018), lucianovperez (16-09-2018), Smitten1994 (02-12-2018), chrisgel15 (04-12-2018), Joaquin Alsamendi (04-12-2018)
Joaquin Alsamendi Sin conexión
Empleado del buffet
"No es oro todo lo que re...
*

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 3
Agradecimientos dados: 9
Agradecimientos: 0 en 0 posts
Registro en: Feb 2017
Mensaje: #2
RE: Final GDD 21/02/2018
1) VOF

a - Falso: Es un arbol equilibrado porque, todos los nodos maximales se encuentran en el mismo nivel
b - Falso: Dado que tiene un mayor alcance de lockeo de los registros, se verá afectada la performance. Es recomendable un nivel mas permisivo como read commited o read uncommited

2)

a - Las vistas son objetos de las bases de datos. Son conjuntos de columnas, ya sean reales o virtuales, que no ocupan (allocan) espacio de almacenamiento, no contienen datos almacenados, sino que están definidas por una consulta que implica una o varias tablas. Se utilizan para suministrar un nivel adicional de seguridad restringiendo el acceso a un conjunto de datos, ocultar complejidad de datos, simplificar sentencias. Al crear una view el usuario debe tener permisos de select sobre las columnas de las tablas involucradas. No se puede adicionar a una view las cláusulas de order by o union, tal como tampoco se pueden definir triggers sobre una vista.
Se pueden utilizar para casos en los que se ven involucradas tablas con información sensible. Por ejemplo tengo la tabla cliente que tiene el nombre, numero de cuenta bancaria, cuanto dinero dispone en ella y su sucursal principal; y otra tabla que tiene la información de las sucursales. Si yo quisiese que un grupo de usuarios puedan ver que clientes tienen asignadas ciertas sucursales, podría crear una vista que se encargue de traer esta información ocultado los datos sencibles. Obteniendo asi que los usuarios consulten sobre la vista, y sobre ella puedan hacer sus sub busquedas siendo que en ningun momento ellos tuvieron conocimiento de la información sensible ni la logica o complejidad que hubo por detras para obtener dicha información.
-ejemplo asi nomas, pero se entiende-

b - El dominio son todos los valores reales posibles que pueden tomar los registros.
Integridad de Entidad: es usada para garantizar que los datos pertenecientes a una misma tabla tienen una única manera de identificarse. Que tenga una primary key única y no nula. Se valida unicidad y existencia.
Integridad Referencial: es usada para garantizar que la coherencia entre datos de dos tablas. El uso de foreign keys hace que dado una o mas columnas se estará referenciando a la primary key de otra. Si vos queres borrar un registro que esta siendo referenciado por otra tabla, ocurrira un error.
Integridad Semantica: es usada para garantizar el sentido y configuración de los datos que vamos a almacenar, y que estos respeten las restricciones de dominio o sobre los atributos. Ej, DATA TYPE, DEFAULT, UNIQUE, NOT NULL, CHECK

3 )
a - Yo crearia dos triggers
(Cero performante, pero es sencillo de entender lo que hago)


GO
CREATE TRIGGER tr_nuevaProv ON Provincia
FOR INSERT, UPDATE
AS

IF NOT EXISTS( SELECT * FROM CIUDAD c, INSERTED i WHERE c.idpcia = i.idpcia )
BEGIN
UPDATE Provincia SET habitantes = null where idpais in (select idpcia from inserted)
END
ELSE
BEGIN
IF ( (select habitantes from inserted) <= 0 )
BEGIN
RAISERROR('hab deben ser mayor a 0',1,1)
ROLLBACK TRANSACTION
END
END

GO
CREATE TRIGGER tr_nuevaCiu ON Ciudad
AFTER INSERT
AS
IF EXISTS( SELECT * FROM Provincia p, INSERTED i WHERE i.idpcia = p.idpcia )
BEGIN
DECLARE @hb int;
SELECT @hb = ISNULL(habitantes,0) FROM Provincia -- esta logica la intento yo como para hcer algo, no se si habria que ponerlo
UPDATE Provincia SET habitantes = @hb+1 where idpais in (select idprov from inserted)
END
GO


b - Para mi ninguna opcion, para mi trae de cada pais que tenga provincias , el id de la provincia que tiene mas habitantes, en caso de que dos provincias del mismo pais tengan la misma cantidad y esta sea maxima, te traera los dos ids, ordenado de modo asc por la cantidad de habitantes de las proviencias

Es algo que respondo, pero si ven algo mal corrijan sin problema!
04-12-2018 16:39
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Smitten1994 Sin conexión
Militante
La verdad es que no hay una ve...
***

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 95
Agradecimientos dados: 267
Agradecimientos: 185 en 36 posts
Registro en: Aug 2013
Mensaje: #3
RE: Final GDD 21/02/2018
De la 1)a) para mi es Verdadera:

Un Árbol principal derecho balanceado es un árbol que cumple dos condiciones a la vez:

1- Árbol Balanceado: todas sus hojas tienen el mismo nivel.
2- Árbol principal derecho: todos los nodos no-principales tienen un único padre y el nodo principal es el minimal del árbol (llamado raíz) y es único.

La condición 2 se cumplen para TODOS los árboles binarios.

De la 1)b) Concuerdo que es Falsa:

Al tener un mayor alcance de lockeo en los registros, puede verse afectada la performance, por lo que para alta concurrencia, sería recomendable el nivel de aislamiento uncommitted read(teniendo en cuenta que en este hay lecturas no repetibles, lecturas sucias y lecturas fantasmas), o committed read (teniendo en cuenta que en este SI hay lecturas repetibles, lecturas sucias y lecturas fantasmas), dependiendo lo que considere más adecuado el DBA.
(Este mensaje fue modificado por última vez en: 09-12-2018 10:37 por Smitten1994.)
09-12-2018 10:32
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Smitten1994 Sin conexión
Militante
La verdad es que no hay una ve...
***

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 95
Agradecimientos dados: 267
Agradecimientos: 185 en 36 posts
Registro en: Aug 2013
Mensaje: #4
RE: Final GDD 21/02/2018
El 3a arme el trigger de esta manera:

CREATE TRIGGER regla_negocio ON provincia INSTEAD OF INSERT,UPDATE
AS
BEGIN

DECLARE @id_pcia INTEGER,@id_pais INTEGER, @habitantes INTEGER

DECLARE cursor_prov CURSOR FOR
SELECT id_pcia,id_pais,habitantes FROM inserted;

OPEN cursor_prov
FETCH NEXT FROM cursor_prov INTO @id_pcia,@id_pais,@habitantes
WHILE @@FETCH_STATUS=0
BEGIN
IF (@habitantes>0) AND (SELECT COUNT(*) FROM ciudad c WHERE id_pcia=@id_pcia) > 0
BEGIN
INSERT INTO provincia (id_pcia,id_pais,habitantes) VALUES (@id_pcia,@id_pais,@habitantes)
END
ELSE
BEGIN
INSERT INTO provincia (id_pcia,id_pais,habitantes) VALUES (@id_pcia,@id_pais,0)
END
FETCH NEXT FROM cursor_prov INTO @id_pcia,@id_pais,@habitantes
END
CLOSE cursor_prov
DEALLOCATE cursor_prov
END

Para hacer las pruebas en SQL SERVER:

Spoiler: Mostrar
CREATE TABLE pais
(id_pais INTEGER PRIMARY KEY,
detalle VARCHAR(20)
)

CREATE TABLE provincia
(id_pcia INTEGER PRIMARY KEY,
id_pais INTEGER FOREIGN KEY REFERENCES pais(id_pais),
habitantes INTEGER
)

CREATE TABLE ciudad
(id_ciudad INTEGER PRIMARY KEY,
id_pcia INTEGER FOREIGN KEY REFERENCES provincia(id_pcia),
nombre VARCHAR (20)
)

INSERT INTO pais (id_pais,detalle) VALUES (1,'Argentina');
INSERT INTO provincia (id_pcia,id_pais,habitantes) VALUES (1,1,2000);
INSERT INTO ciudad (id_ciudad,id_pcia,nombre) VALUES (1,1,'San Martin');

SELECT * FROM pais;
SELECT * FROM provincia;
SELECT * FROM ciudad;

INSERT INTO provincia (id_pcia,id_pais,habitantes) VALUES (3,1,1000);
INSERT INTO ciudad (id_ciudad,id_pcia,nombre) VALUES (3,1,'Lomas de Zamora')

DROP TRIGGER regla_negocio
DELETE FROM provincia WHERE id_pcia=2
(Este mensaje fue modificado por última vez en: 10-12-2018 16:18 por Smitten1994.)
10-12-2018 15:37
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Buscar en el tema
Enviar respuesta 




Usuario(s) navegando en este tema: 1 invitado(s)



    This forum uses Lukasz Tkacz MyBB addons.