viernes, 18 de noviembre de 2011

TA (1)

Crear un trigger que actualice la cantidad de unidades que se tiene en stock [Q_Stock] de la tabla Productos cuando el vendedor modifique el pedido de un cliente.
Tener presente que el campo [Q_Stock] se debe actualizar de forma correcta para los siguientes casos:
  • El cliente aumenta la cantidad unidades compradas
  • El cliente disminuye la cantidad unidades compradas
  • Validar la cantidad de unidades compradas (Mayor que cero).



CODIGO:


CREATE TRIGGER ACTUALIZAR_STOCK ON VENTA_DETALLE
FOR UPDATE
AS
BEGIN
DECLARE @CANT INT
DECLARE @AUX INT
DECLARE @PROD INT
DECLARE @STOCK INT
SELECT @AUX = Q_CANTIDAD FROM INSERTED
SELECT @PROD = C_PRODUCTO FROM INSERTED
SELECT @CANT = Q_CANTIDAD FROM DELETED
SELECT @STOCK=P.Q_STOCK FROM PRODUCTO P WHERE P.C_PRODUCTO=@PROD
IF UPDATE(Q_CANTIDAD)
BEGIN
IF(@CANT-@AUX) != 0
BEGIN
IF(@STOCK+@CANT-@AUX<0)
BEGIN
RAISERROR ('EL STOCK ES MENOR QUE CERO',16,1);
ROLLBACK TRANSACTION;
RETURN;
END
ELSE
BEGIN
UPDATE PRODUCTO
SET Q_STOCK=@STOCK+@CANT-@AUX
WHERE C_PRODUCTO=@PROD
END
END
END
END

TA (2)

Crear un trigger que actualice el monto de la venta total [S_VentaTotal] de la tabla Ventas cuando el vendedor anule o elimine la compra de uno de los productos en venta a un cliente.


CODIGO:

CREATE TRIGGER ACTUALIZAR_MONTO_VENTAS ON VENTA_DETALLE
FOR DELETE
AS
BEGIN
DECLARE @cant_prod INT
DECLARE @prec_unit MONEY
DECLARE @VENTA_TOTAL MONEY
SELECT @cant_prod = Q_CANTIDAD FROM DELETED
SELECT @VENTA_TOTAL= S_VENTA_TOTAL FROM VENTA_DETALLE WHERE C_PRODUCTO=(SELECT C_PRODUCTO FROM DELETED)
SELECT @prec_unit = S_PRECIO_UNITARIO FROM PRODUCTO
WHERE C_PRODUCTO=(SELECT C_PRODUCTO FROM DELETED)
IF(@VENTA_TOTAL-@cant_prod*@prec_unit<0)
BEGIN
RAISERROR ('LA VENTA TOTAL ES MENOR QUE CERO',16,1);
ROLLBACK TRANSACTION;
RETURN;
END
ELSE
BEGIN
UPDATE VENTA
SET S_VENTA_TOTAL=@VENTA_TOTAL-@cant_prod*@prec_unit
WHERE C_VENTA = (SELECT C_VENTA FROM DELETED)
END
END

TA (3)

Crear un trigger que actualice la cantidad de unidades que se tiene en stock [Q_Stock] de la tabla Productos cuando el vendedor anule o elimine la compra de uno de los productos en venta a un cliente.

CODIGO:

CREATE TRIGGER ACTUALIZAR_STOCK2 ON VENTA_DETALLE
FOR DELETE
AS
BEGIN
DECLARE @CANT INT
DECLARE @PROD INT
DECLARE @STOCK INT
SELECT @PROD = C_PRODUCTO FROM DELETED
SELECT @CANT = Q_CANTIDAD FROM DELETED
SELECT @STOCK=P.Q_STOCK FROM PRODUCTO P WHERE P.C_PRODUCTO=@PROD
UPDATE PRODUCTO
SET Q_STOCK=@STOCK+@CANT
WHERE C_PRODUCTO=@PROD
END

TA (4)

Crear un procedimiento que permita abrir una cuenta de ahorros para un cliente con un saldo inicial.
Los parámetros del procedimiento son el código del cliente y monto de apertura.
Considerar las siguientes especificaciones:
Las cuentas de ahorro son secuenciales y se numeran anteponiendo la “C” de cuenta y un correlativo. Ejemplo C0001, C0002, C0003,...etc.
Al crear la cuenta su primer movimiento será el de apertura de cuenta de ahorros.
El monto de apertura de una cuenta de ahorros será mayor a 100 nuevos soles.


CODIGO:

CREATE PROCEDURE APERTURA_CUENTA @COD_CLIENTE CHAR(5), @MONTO MONEY
AS
BEGIN
TRANSACTION
DECLARE @CUENTA CHAR(5)
DECLARE @AUX INT

SELECT @CUENTA = MAX(C_CUENTA) FROM CUENTA
IF @CUENTA is NULL
BEGIN
SET @CUENTA = 'C0001'
INSERT INTO CUENTA VALUES(@CUENTA, @COD_CLIENTE, @MONTO)
INSERT INTO MOVIMIENTO VALUES(@CUENTA,1,'1',@MONTO,GETDATE())
END
ELSE
BEGIN
SET @AUX = CONVERT(INT,RIGHT(@CUENTA,4)) + 1
SET @CUENTA = 'C'+RIGHT('000'+CONVERT(VARCHAR,@AUX),4)

INSERT INTO CUENTA VALUES(@CUENTA, @COD_CLIENTE, @MONTO)
INSERT INTO MOVIMIENTO VALUES(@CUENTA,1,'1',@MONTO,GETDATE())
END
COMMIT

TA (5)

Crear un procedimiento que permita realizar operaciones de retiro de un determinado monto en nuevos soles o en dólares de una cuenta de ahorros en soles perteneciente a un cliente.
Los parámetros del procedimiento serán el tipo de moneda, monto a retirar y el número de la cuenta de ahorros del cliente.
Considerar las siguientes especificaciones:
El monto de retiro o su equivalente traducido a nuevos soles no deberá ser mayor al saldo de la cuenta.
Cuando el monto de retiro es en dólares deberá obtener y aplicar el cambio del día (Venta dólares).
Por las operaciones de retiro se cobra una comisión de S/. 0.10 a partir del quinto retiro en un mes, el cual se cumula en la cuenta “M0002” con sus movimientos de depósito respectivos.
Se guarda en la cuenta “ITF02” la aplicación del impuesto a las transacciones financieras correspondiente al 0.8 % del monto retirado en soles.



CODIGO

CREATE PROCEDURE RETIRAR_MONTO @TIPO_M INT, @MONTO MONEY, @CUENTA VARCHAR(5)
AS
BEGIN
TRANSACTION
DECLARE @MONTO_ACTUAL MONEY
DECLARE @NUM_RETIRO_MES INT
SELECT @MONTO_ACTUAL=C.S_MONTO FROM CUENTA C WHERE C.C_CUENTA=@CUENTA
SELECT @NUM_RETIRO_MES=C.NUM_RET_MES FROM CUENTA C WHERE C.C_CUENTA=@CUENTA
IF(@TIPO_M=1)--DOLARES
BEGIN
SELECT @MONTO=@MONTO*2.70;
END
IF(@MONTO>@MONTO_ACTUAL)
BEGIN
RAISERROR ('EL MONTO A RETIRAR ES MAYOR AL MONTO ACTUAL',16,1)
ROLLBACK
RETURN
END
ELSE
BEGIN
IF(@NUM_RETIRO_MES>4)
BEGIN
UPDATE CUENTA
SET S_MONTO+=0.10
WHERE CUENTA.C_CUENTA='M0002'
UPDATE CUENTA
SET S_MONTO-=0.10
WHERE CUENTA.C_CUENTA=@CUENTA
END
UPDATE CUENTA
SET S_MONTO+=@MONTO*0.008
WHERE CUENTA.C_CUENTA='ITF02'
UPDATE CUENTA
SET S_MONTO-=@MONTO*0.008
WHERE CUENTA.C_CUENTA=@CUENTA
UPDATE CUENTA
SET S_MONTO=@MONTO_ACTUAL-@MONTO,NUM_RET_MES=@NUM_RETIRO_MES+1
WHERE CUENTA.C_CUENTA =@CUENTA
END
COMMIT

TA (6)

Crear un procedimiento que permita realizar la transferencia de un monto en nuevos soles de una cuenta de ahorros origen a otra cuenta de ahorros destino ambas en soles.
Los parámetros del procedimiento serán el monto a transferir, el número de la cuenta de ahorros origen y el número de la cuenta de ahorros destino.
Considerar las siguientes especificaciones:
El monto de transferencia en nuevos soles no deberá ser mayor al saldo de la cuenta.
Por las operaciones de transferencia se cobra una comisión de S/.5 para montos menores a S/.1000 y del 0.5% del monto de transferencia a partir de S/. 1000, el cual se cumula en la cuenta “M0002” con sus movimientos de depósito respectivos para transferencias entre cuentas de diferentes clientes.
Si la cuenta origen y la cuenta destino pertenecen al mismo cliente no se cobra ninguna comisión.
Se guarda en la cuenta “ITF02” la aplicación del impuesto a las transacciones financieras correspondiente al 0.8 % del monto transferido en soles.



CODIGO

CREATE PROCEDURE TRANSFERENCIA_MONTO @MONTO MONEY, @CUENTA_O VARCHAR(5), @CUENTA_D VARCHAR(5)
AS
BEGIN
TRANSACTION
DECLARE @SALDO MONEY
SELECT @SALDO=C.S_SALDO FROM CUENTA C WHERE C.C_CUENTA=@CUENTA_O
IF(@MONTO>@SALDO)
BEGIN
RAISERROR ('EL MONTO SUPERA SU SALDO',16,1)
ROLLBACK
RETURN
END
IF(@CUENTA_O!=@CUENTA_D)
BEGIN
IF(@MONTO<1000)
BEGIN
UPDATE CUENTA
SET S_SALDO-=5
WHERE C_CUENTA=@CUENTA_O
UPDATE CUENTA
SET S_MONTO+=5
WHERE CUENTA.C_CUENTA='M0002'
END
IF(@MONTO>1000)
BEGIN
UPDATE CUENTA
SET S_SALDO-=05*@MONTO
WHERE C_CUENTA=@CUENTA_O
UPDATE CUENTA
SET S_MONTO+=0.005*@MONTO
WHERE CUENTA.C_CUENTA='M0002'
END
END
UPDATE CUENTA
SET S_MONTO+=@MONTO*0.008
WHERE CUENTA.C_CUENTA='ITF02'
UPDATE CUENTA
SET S_MONTO-=@MONTO*0.008
WHERE CUENTA.C_CUENTA=@CUENTA_O

COMMIT

TA (7)

Listar mediante una función los empleados que han realizado ventas superiores al promedio durante el año 1997 junto a los clientes que han realizado compras inferiores al promedio en el mismo año, la función debe retornar los nombres, ciudad, región, código postal, país, ventas y compras en una sola tabla.
Modificar la función de tal modo que se aplique lo mismo pero para cualquier mes y año.


CODIGO

CREATE FUNCTION LISTAR_EMPLEADOS(@Mes INT,@Anno INT)
RETURNS @Resultado TABLE(Names NVARCHAR(40),City NVARCHAR(15),Region NVARCHAR(15),
PostalCode NVARCHAR(10),Country NVARCHAR(15),Ventas FLOAT,
Compras FLOAT)
AS
BEGIN
DECLARE @promedio FLOAT
SELECT @promedio=SUM((d.Quantity * d.unitprice)/ d.Quantity)
FROM [Order Details] d INNER JOIN Orders o ON o.orderid=d.orderid
WHERE MONTH(o.orderdate)=@Mes AND YEAR(o.orderdate)=@Anno

INSERT INTO @Resultado
SELECT E.LastName +' '+ E.FirstName Nombre,E.City,E.Region,E.PostalCode,E.Country,
SUM(d.Quantity * d.unitprice) Ventas,0.00 Compras
FROM EMPLOYEES E JOIN ORDERS O ON E.EmployeeID=O.EmployeeID JOIN [Order Details] D ON O.orderid=D.orderid
WHERE MONTH(o.orderdate)=@Mes AND YEAR(o.orderdate)=@Anno
GROUP BY E.LastName,E.FirstName ,E.City,E.Region,E.PostalCode,E.Country
HAVING SUM(d.Quantity * d.unitprice) >@promedio
UNION
SELECT C.CompanyName Nombre,C.City,C.Region,C.PostalCode,C.Country,
0.00 Ventas,sum(d.Quantity * d.unitprice) Compras
FROM CUSTOMERS C INNER JOIN ORDERS O ON C.CustomerID=O.CustomerID
INNER JOIN [Order Details] D ON O.orderid=D.orderid
WHERE MONTH(o.orderdate)=@Mes AND YEAR(o.orderdate)=@Anno
GROUP BY C.CompanyName,C.City,C.Region,C.PostalCode,C.Country
HAVING SUM(d.Quantity * d.unitprice) <@promedio
RETURN
END

jueves, 3 de noviembre de 2011

Consultas

BASE DE DATOS: CICLISMO

JOIN
Mostrar los nombres de los productos y el nombre de su respectivo tipo:
SELECT P.[Nombre producto], T.[Nombre tipo producto]
FROM Productos P JOIN Tipo_Productos T ON (P.[ID tipo producto]=T.[ID tipo producto])

Mostrar los nombres de los empleados y su respectivo pais:
SELECT E.Nombre, D.Pais
FROM Empleados E JOIN Direccion_Empleados D ON (E.[ID empleado]=D.[ID empleado])


HAVING
Mostrar los tipos de productos con ID menor a 4 y el precio total de cada uno:
SELECT T.[Nombre tipo producto], SUM(P.Precio) 'Precio total'
FROM Productos P JOIN Tipo_Productos T ON (P.[ID tipo producto]=T.[ID tipo producto])
GROUP BY T.[Nombre tipo producto]
HAVING T.[Nombre tipo producto]<4


Mostrar la cantidad de empleados en los países Canadá y USA:
SELECT D.Pais, COUNT (E.Nombre) 'cantidad de nombres por pais'
FROM Empleados E JOIN Direccion_Empleados D ON (E.[ID empleado]=D.[ID empleado])
GROUP BY D.Pais
HAVING D.Pais='Canada' OR D.Pais='USA'

GROUP BY
Mostrar los tipos de productos y el precio total de cada uno:
SELECT T.[Nombre tipo producto], SUM(P.Precio) 'Precio total'
FROM Productos P JOIN Tipo_Productos T ON (P.[ID tipo producto]=T.[ID tipo producto])
GROUP BY T.[Nombre tipo producto]

Mostrar la cantidad de empleados por cada país:
SELECT D.Pais, COUNT (E.Nombre) 'cantidad de nombres por pais'
FROM Empleados E JOIN Direccion_Empleados D ON (E.[ID empleado]=D.[ID empleado])
GROUP BY D.Pais


JOIN, WHERE, GROUP BY, HAVING

Mostrar los tipos de productos con ID menor a 4 y precio unitario menor que 16:
SELECT T.[Nombre tipo producto], SUM(P.Precio) 'Precio total'
FROM Productos P JOIN Tipo_Productos T ON (P.[ID tipo producto]=T.[ID tipo producto])
WHERE P.Precio>16
GROUP BY T.[Nombre tipo producto]
HAVING T.[Nombre tipo producto]<4


Mostrar la cantidad de empleados de los países Canadá y USA que tengan anexo mayor que 500 :
SELECT D.Pais, COUNT (E.Nombre) 'cantidad de nombres por pais'
FROM Empleados E JOIN Direccion_Empleados D ON (E.[ID empleado]=D.[ID empleado])
WHERE E.Anexo>500
GROUP BY D.Pais
HAVING D.Pais='Canada' OR D.Pais='USA'


OUTER JOIN
Left Join:
SELECT P.[Nombre producto], P.Color.P[M/F],P.Precio,T.[Nombre tipo producto]
FROM Productos P LEFT JOIN Tipo_Productos T ON (P.[ID tipo producto]=T.[ID tipo producto])


Right Join:
SELECT E.Nombre,E.[Telefono domicilio],D.Ciudad,D.Pais
FROM Empleados E RIGHT JOIN Direccion_Empleados D ON (E.[ID empleado]=D.[ID empleado])


miércoles, 26 de octubre de 2011

Instalación de MySQL

1.-Ejecutamos el "Setup.exe" para iniciar. Se puede descargar el instalador de "http://dev.mysql.com/downloads".
Le damos click a "Next"


2.- Marcamos la opción "Custom" y le damos a "Next"


3.-Seleccionamos las herramientas a instalar y seleccionamos la opción la ubicación.


4.-La instalción estará lista para empezar, seleccionamos "Install" para empezar.


5.-En la siguiente ventana podemos registrarnos en MySQL.com o si ya estamos registrados introducir email de registro y contraseña. Hacemos click a "Next"


6.-Cuando termine le damos a "Finish"


Instalación de Posgresql

1.-Se ejecuta el "Setup.exe", se escoge el idioma y seleccionamos la opción "Start"


2.- Una vez que el programa nos de la bienvenida, seleccionamos la opción "Next"


4.-Leemos la información que nos brindan y le damos a "Next"


5.-En esta ventana podemos habilitar/deshabilitar las opciones de instalación. Es importante deshabilitar la opción PostGIS. Si se quiere cambiar la ubicación de la instalación, seleccionamos "Browse" y buscamos la carpeta deseada. Después le damos en "Next"


6.-Se ingresa los datos requeridos y le damos a "Next"


7.-Si aparece el siguiente mensaje quiere decir que la cuenta que ingresamos no existe, para crearla le damos a "Yes".


8.- Ahora se inicializa el Cluster de la base de datos.
♦Port Number: Es recomendable dejar el que sale por defecto.
♦Addresses: Se deja deshabilitado.
♦Locale: Seleccionamos la ubicación.
♦Encoding: UTF-8
♦Super user name: Es preferible dejarlo con el predeterminado (postgres)
♦Password: Se ingresa la contraseña.
Una vez completos los datos le damos a "Next"

9.- Nos dan la posibilidad de seleccionar los módulos contrib, si no se desea modificarlos no hay ningun inconveniente. Le damos a "Next" y la instalación estará lista para empezar.

10.- Esperamos que finalice y estará listo para usar.

martes, 25 de octubre de 2011

Instalación de Oracle 10g

1.-Empezamos abriendo el instalador.
Seleccionamos la opción "Install"


2.-Una vez que estamos en la ventana método de Instalación, se elige
la opción "instalación avanzada" y le damos "siguiente"


3.- Elegimos la opción "Standard Edition" y le damos en "siguiente"


4.-Asignamos la ubicación y seleccionamos "siguiente"


5.-Verificamos que todas las comprobaciones de requisitos tienen
el estado "correcto" y le damos a "siguiente".


6.-Para crear la base de datos, seleccionamos "Crear base de datos"
y le damos a "siguiente"


7.-Elegimos la opción "Avanzadas" y seleccionamos, una vez mas, "siguiente"


8.-Una vez en la pantalla de Summary (resumen) seleccionamos
la opción "Instalar"


9.-En esta ventana podemos ver el progreso de nuestra
instalación.

Instalación de Microsoft SQL Server 2005

1.-Una vez que tenemos el instalador. Ejecutamos "setup.exe"


2.-Seleccionamos la opción Instalar y seguimos seleccionando "siguiente"
hasta observar la lista de requisitos.


3.-Cuando observamos que se cumplen los requisitos seleccionamos "siguiente"


4.-Cuando aparecen los campos para rellenar la información de registro,
completamos los datos respectivos.

5.-Seleccionamos la opción "Avanzados"

6.- Seleccionamos la ruta en la cual se quiere instalar,
si no hay espacio en C: se puede escoger la ruta de instalación D:


7.-Seleccionamos la opción "Instancia determinada",
le damos en "siguiente" para continuar con la instalación


8.-Elegimos la opción "Modo de autentificación de Windows",
lo configuramos al gusto y continuamos.


9.-Cuando ya está preparada la instalación, seleccionamos
la opción "Instalar" y veremos como empieza.


10.-Cuando termine de instalar, nos aparece un mensaje de instalación completa.
Para salir de la instalación seleccionamos la opción "Finalizar"

martes, 18 de octubre de 2011

SOLUCION PC3

ESQUEMAS RELACIONALES:
PREGUNTA 1:
SOFTWARE (S#, DESCRIPCION, VERSION, FABRICANTE)
HARDWARE (H#, NOMBRE, PROCESADOR, CONSTRUCTOR)
INSTALACION (S#, H#, C#, EDIFICIO, RESPONSABLE, PROTOCOLO)

a)Tener las descripciones del software existente en cualquier instalación.
•AR:
π software.descripcion(softwareΘinstalacion)
•SQL:
SELECT software.descripcion
FROM software JOIN instalación ON (software.S#=instalación.S#)

b)Obtener los nombres de los equipos con procesador 'M65000' instalados tanto para protocolo 'TCP/IP', como para protocolo 'CICS'.
•AR:
π hardware.nombre(σ hardware.procesador=”M65000” ^ (instalación.protocolo=”TCP/IP” v instalación.protocolo=”CICS”)(hardwareΘinstalacion))
•SQL:
SELECT hardware.nombre
FROM hardware JOIN instalacion ON (hardware.H#=instalación.H#)
WHERE instalación.protocolo=”TCP/IP” AND (instalación.protocolo=”CICS” OR instalación.protocolo=”CICS”)

c) Obtener los nombres de los equipos hardware que no han sido instalados en ningún edificio.
•AR:
ρ inst(hardwareΘinstalacion)
π hardware.nombre(hardware – inst)
•SQL:
SELECT hardware.nombre
FROM hardware
MINUS
SELECT inst.nombre
FROM (hardware JOIN instalacion (hardware.H#=instalación.H#)) inst


PREGUNTA 2:
C(Bebedor, Bar) S (Bar, Cerveza) P (Bebedor, Cerveza)
Donde la primera indica los bares que cada bebedor frecuenta, la segunda la cerveza que sirve cada bar, y la última relación nos indica la cerveza que consume cada bebedor.

a) Los bebedores que frecuentan al menos un bar que sirve una cerveza que toman.
•AR:
C.bebedor(CΘSΘP)
•SQL:
SELECT C.bebedor
FROM C JOIN S ON (C.bar=S.bar) JOIN P ON (C.bebedor=P.bebedor)

b)Los bebedores que frecuentan sólo bares que sirven alguna cerveza que ellos toman.
•AR:
•SQL:





1.- Melomanía
ENUNCIADO DEL PROBLEMA:
Se desea mantener información sobre todas y cada una de las obras musicales que se poseen y están estampadas en los diferentes soportes en los que se venden en el mercado. Nuestro coleccionista cuenta con una buena colección de discos y cintas, en sus diferentes tamaños y formatos, en los que tiene grabaciones de muchos y variados artistas interpretando muchos y variados temas musicales y, para su correcto archivo y acceso a esta información, desea realizar un sistema que le informe y oriente de todo el material musical que posee.
Para nuestro coleccionista son de interés los siguientes supuestos semánticos:
SUPUESTO 1: Es de interés mantener información tanto de los textos de las obras musicales como de la música de las mismas y, por supuesto, de ambos al mismo tiempo.
SUPUESTO 2: En su colección cuenta con partituras de obras originales, de grabaciones propias y comerciales, y de letras de las canciones que acompañan a las grabaciones comerciales o textos que él mismo ha obtenido.
SUPUESTO 3: Cada tema musical está catalogado en un estilo diferente, y sobre cada estilo se desea almacenar información correspondiente al mismo: origen del mismo, influencia, padre del estilo, etc. A veces, un tema musical presenta influencias de otros estilos.
SUPUESTO 4: Sobre las partituras se desea mantener la información correspondiente a la obra musical, origen de la partitura, precio de la misma (a veces son obras únicas).
SUPUESTO 5: Las obras musicales están grabadas en diferentes soportes: LPs, Singles, Cassettes, Revox, CD y Vídeos, por el momento. En cada unidad de estos soportes están grabadas varias canciones que pueden estar interpretadas por uno o varios autores.
SUPUESTO 6: Sobre cada canción interesa conocer: los autores de la letra y de la música y sus intérpretes. Una canción puede tener varios autores de la letra y de la música que no tienen por qué ser los mismos.
SUPUESTO 7: Existen temas musicales cantados y otros sólo musicales. Se requiere conocer, para cualquier tipo de tema musical, sus intérpretes musicales y vocalistas, en el caso en que los hubiera. Si la interpretación musical se hubiera realizado bajo una dirección (batuta) es requerido también el mantenimiento de esta información.
SUPUESTO 8: Es requerido conocer la información sobre los soportes comerciales que se poseen. Estos soportes están editados por determinadas casas discográficas de las cuales es deseable conocer sus datos generales.
SUPUESTO 9: Cada soporte comercial tiene una identificación única de la propiedad, generalmente también un título único, aunque en él pueden existir grabaciones de uno o varios intérpretes.
SUPUESTO 10: Los intérpretes de los temas musicales pueden ser: solistas, grupos musicales u orquestas de mayor o menor envergadura. Cuando se trate de grupos musicales es deseable conocer información de cada uno de sus componentes y la labor que desempeña en el grupo (naturalmente si es conocido). Esta información general es también solicitada para los solistas. Cuando se trate de una orquesta, la única información solicitada es su origen y denominación, así como su director habitual.
SUPUESTO 11: Como un mismo tema musical puede ser interpretado por diferentes intérpretes (cada uno haciendo su versión), y se pueden tener las diferentes grabaciones, es necesario conocer los soportes en los cuales se encuentran estas grabaciones.
SUPUESTO 12: Se tienen los textos o letras de algunas de las grabaciones y, esta información se encuentra almacenada como si se tratase de las partituras. Un texto de una letra corresponde a una única grabación, si bien, generalmente, los textos de una letra no cambian con las diferentes versiones de una misma canción.
Considere las siguientes orientaciones:
1. Inicialmente conviene abstraer los diferentes soportes en los cuales se pueden tener grabaciones en sus diferentes tipos, expuestos en los supuestos planteados. A cada grabación se le asignará un tipo de los definidos.
2. Existen soportes o grabaciones comerciales y otras propias. De las comerciales se conoce cómo pueden ser identificadas y, con las propias, habrá que determinar un identificador válido para ellas.
3. Las grabaciones comerciales las realizan las productoras. Un tipo de entidad que será necesario definir, mientras que las propias no, por lo que habrá que tener este hecho en cuenta en la relación de estos objetos.
4. Cada grabación está formada por uno o varios temas musicales de los cuales se puede tener, además, la partitura y/o letra de la misma. A veces se tienen partituras y letras de temas de los cuales no se tienen grabaciones.
5. Habrá que considerar también un tipo de entidad que represente los diferentes estilos musicales y que permita representar toda la información correspondiente a los mismos. Recuérdese que como un estilo musical puede provenir de otros estilos, deberá existir un tipo de interrelación reflexiva en este tipo de entidad que represente esta característica.
6. Por otro lado, cada tema musical tiene un estilo musical base y, posiblemente, otros que la influyen. Luego será necesario representar estos dos diferentes tipos de interrelaciones entre estos objetos.
7. Las canciones tienen un nombre, pero diferentes canciones pueden tener el mismo nombre (existen en el mercado muchos temas musicales diferentes, pero con el mismo nombre). No es usual que un intérprete haga grabaciones de diferentes temas musicales que tengan el mismo nombre, ni que un autor (de la letra y/o música) realice temas musicales diferentes con el mismo nombre.
8. Es necesario definir un tipo de entidad que represente a los intérpretes de los temas musicales. El lector, en este punto, debe recordar que estos podrán ser grupos o solitas, y en el primer caso es necesario representar los integrantes del grupo (si se conocen), luego deberá existir un tipo de interrelación que permita representar este comportamiento del problema.
9. Cuando se trata de orquestas, el intérprete de los temas será la orquesta, pero es necesario representar al director de la misma, el cual podrá representarse también como si de un intérprete se tratase.
10. El problema referente a las partituras y letras de las canciones no es difícil de representar. Basta con considerar que estos objetos existen en el sistema (con las propiedades o atributos solicitados) y que están relacionados con los temas musicales correspondientes.
11. Una de las tareas más comprometidas de este problema es la representación de las canciones. Obsérvese que existen diferentes versiones de una misma canción, pero la canción es la misma. Además, pueden existir diferentes grabaciones de una misma canción, de la misma o diferente versión, y será necesario diferenciar cada una de estas grabaciones.
Dejamos a criterio, si lo considera necesario, que introduzca alguna simplificación o restricción que le facilite la tarea de representación para este tipo de objeto y sus relaciones. Nosotros le proponemos que considere que en una misma grabación (en un mismo soporte) no pueden existir grabaciones de una misma versión de una canción.

MODELO LÓGICO:

MODELO FÍSICO:

DICCIONARIO:

viernes, 30 de septiembre de 2011

Bases de datos deductivas

Un sistema de base de datos deductivas es el sistema de base de datos que puede definir reglas con las cuales deducir o inferir información a partir de hechos almacenados en la base de datos.
•Base de datos lógicas: Cuando los fundamentos teoricos que usa son de lógico matematica.
•Base de datos expertos o de conocimientos: Incluyen capacidades de razonamiento e inferencia.
Los conocimientos se extraen de expertos en la aplicación, ya qeu principalmente se refieren al dominio de aplicación más que a conocimietnos sobre los datos.

NOTACIÓN PROTOLOG/DAtALOG:
La notación Prolog/datalog se basa en proveer predicados con nombres únicos.
Estos predicados deben tener un significado implícito y un número establecido de argumentos.
Si todos los argumentos son valores fijos, el predicado dice que un hecho es verdadero.
Pero si el predicado tiene variables como argumentos, es considerado una consulta o parte de una regla o restricción.
Todos los valores constantes en un predicado son numéricos o cadenas de caracteres que comienzan con letras minúsculas.
Y los nombres de variables siempre comienzan con una letra mayúscula.

NOTACIÓN DE DATALOG:
Los programas se construyen a partir de objetos básicos llamados fórmulas atómicas.
En Datalog las fórmulas atómicas para definir la sintaxis de los lenguajes son literales de la forma p(a1,a2,...,a3). "p" es el nombre del predicado y "n" es el
número de argumentos del predicado.
Datalog incluye varios predicados integrados que también sirven para construir fórmulas atómicas.
•Predicados de comparación binarios: less, less_or_equal y greater_or_equal. Estos se aplican sobre
dominios ordenados.
•Predicados de comparación: equal, not_equal: Para dominios ordenados o no ordenados.
Una literal es una fórmula atómica, se llama literal positiva.
La literal negativa es una fórmula precedida por not.
Los programas en Datalog son considerados como un subconjunto de las fórmulas del cáluco relacional de dominios.
Pero en Datalog, estas fórmulas primero se convierten en forma clausal antes de expresarse en Datalog.



Notación de Prolog para hecho, reglas y consultas:
El árbol basado en los hechos dados:


FORMA CLAUSAL Y LAS CLÁUSULAS DE HORN:
Una fórmula del cálculo relacional e suna condición que tiene predicados, a los cuales se le llaman átomos.
Una fórmula puede tener cuantificadores: universal y existencial.
Para convertir una fórmula a otra en la forma casual se debe cumplir estas características:
•Todas las variables estpan cuantificadas universalmente. Por ello no es necesario incluir los cuantificadores universales, los cuantificadores
se eliminan y todas las variables de la fórmula quedan cuantificadas implicitamente por el cuantificador universal
•La fórmula se compone de varias claúsulas y cada una de ellas de varias literales conectadas por coentores lógicos OR.
Por ello se dice que toda clapusula es una disyunción de literales.
•Las claúsulas se conectan mendiante conectores lógicos AND. A ello se debe que la forma clausual es una conjunción de claúsulas.

Forma de la claúsula:
not(P1) OR not(P2) OR...OR not(Pn) OR Q1 OR Q2 OR Q3 OR....OR Qm
En esa claúsula hay n literales negativas y m literales positivas.
Si la transformamos en una fórmula lógica seria:
P1 AND P2 AND...AND Pn = Q1 OR Q2 OR...OR Qm
Ambas fórmulas son equivalentes, ya que sus valores de verdad son iguales.

En Datalog, las reglas se expresan como una forma restringida de claúsulas llamadas claúsulas de Horn.
En estas, una claúsula puede contener a lo mucho una literal positiva.
Sus formas son:
•not(P1) OR not(P2) OR...OR not(Pn) OR Q
•not(P1) OR not(P2) OR...OR not(Pn)
Y se tranforma en:
P1 AND P2 AND...AND Pn = Q
En este caso, si P1, P2, y ... Pn son verdaderos, Q también será verdadero, en otras palabras se puede inferir.
Una consula en Datalog tienes dos componentes:
•Programa en Datalgo: Conjutno finito de reglas.
•Literal P(X1,X2,X3...,Xn): Cada X es una variable o constante.
Un sistema de Prolog/Datalog cuenta con una máquina de inferencia interna que sirve para procesar y calcular los resultados de las consultas.