Base de Datos Relacionales y Archivos en Prolog

19
BASE DE D MANEJ AL CURSO DATOS RELACION Y JO DE ARCHIVOS LARCON TAMBO, HARRY JACK QUINTO TAZA, CARLOS O DE INTELIGENCIA ARTIFICIAL 2012-I FCM - UNMSM NALES EN

Transcript of Base de Datos Relacionales y Archivos en Prolog

Page 1: Base de Datos Relacionales y Archivos en Prolog

BASE DE DATOS

MANEJO DE ARCHIVOS EN

ALARCON TAMBO, HARRY JACK

CURSO DE INTELIGENCIA ARTIFICIAL 2012

BASE DE DATOS RELACIONALES

Y

MANEJO DE ARCHIVOS EN

ALARCON TAMBO, HARRY JACK

QUINTO TAZA, CARLOS

CURSO DE INTELIGENCIA ARTIFICIAL 2012-I

FCM - UNMSM

ELACIONALES

MANEJO DE ARCHIVOS EN

Page 2: Base de Datos Relacionales y Archivos en Prolog

PROGRAMACIÓN LÓGICA Y BASES DE DATOS

OBJETIVOS

� Analizar las similitudes entre las bases de datos relacionales y prolog.

� Operadores básicos del álgebra relacional y su codificación.

� Implementar una regla prolog para cada operador algebraico.

FUNDAMENTOS

El algebra relacional está relacionado con:

� La teoría de conjuntos.

CLASIFICACIÓN DE LOS OPERADORES

1. OPERADORES UNARIOS:

Operan sobre una sola relación.

π es el operador de proyección y se denota con la letra P del alfabeto griego.

σ es el operador de selección y se denota con la letra S del alfabeto griego.

SINTAXIS

πXE : Donde E es una expresión algebraica (EA) y x es una lista de atributos.

σθE : Donde θ es una expresión boolena y E es una EA.

Page 3: Base de Datos Relacionales y Archivos en Prolog

¿CÓMO FUNCIONA EL OPERADOR DE PROYECCIÓN?

πXE se lee: la proyección de E sobre X.

Para simplificar supongamos que E es una relación (tabla) r; entonces este operador muestra

solamente las columnas de r que correspondan a los atributos que están en X y oculta todos

los demás.

Ejemplo de proyección:

VEAMOS COMO SE HACE EN PROLOG:

Page 4: Base de Datos Relacionales y Archivos en Prolog

¿CÓMO FUNCIONA EL OPERADOR DE SELECCIÓN?

σθE se lee: la selección de E según θ.

Nuevamente para simplificar supongamos que E es una relación r; entonces este operador

muestra solamente los elementos (filas) de r para las cuales la evaluación de θ sea verdadera.

Ejemplo de selección:

VEAMOS COMO SE HACE EN PROLOG:

Page 5: Base de Datos Relacionales y Archivos en Prolog

2. OPERADORES BINARIOS

Operan sobre dos relaciones.

� X es el operador Producto Cartesiano.

� U es el operador Unión.

� - es el operador Diferencia.

SINTAXIS Y SEMÁNTICA

E1XE2: Da la combinación de cada elemento de E1 con cada uno de los elementos de E2.

E1UE2: Da todos los elementos que pertenecen a E1 y/o a E2.

E1 - E2: Da todos los elementos que pertenecen a E1 y que no pertenecen a E2.

Ejemplo del operador producto cartesiano:

Page 6: Base de Datos Relacionales y Archivos en Prolog

VEAMOS COMO SE HACE EN PROLOG

Ejemplo del operador unión:

Page 7: Base de Datos Relacionales y Archivos en Prolog

VEAMOS COMO SE HACE EN PROLOG

Ejemplo del operador diferencia:

Page 8: Base de Datos Relacionales y Archivos en Prolog

VEAMOS COMO SE HACE EN PROLOG

Page 9: Base de Datos Relacionales y Archivos en Prolog

RESUMEN

OPERADORES UNARIOS

OPERADORES BINARIOS

EQUIVALENCIAS

Page 10: Base de Datos Relacionales y Archivos en Prolog

MANEJO DE ARCHIVOS EN PROLOG

Hasta ahora hemos manejado nuestra base de datos temporalmente en memoria, ahora nos

interesa poder INSERTAR, BORRAR y GUARDAR nuestros hechos en tiempo real en una fuente

externa para poder consultarlos nuevamente.

Veremos algunos comandos útiles para esto:

tell(mi archivo.xxx’)

Usando archivos con tell(‘archivo.xxx’) se abre al archivo ‘archivo.xxx’ y redirige la escritura

hacia él. Sobrescribe la información si el archivo existiese.

told

Se usa junto con tell para cerrar el archivo y guardar.

:- dynamic name/n

dynamic se usa para definir a un predicado como dinámico lo que le dota con la particularidad

de redefinirse en tiempo de ejecución, con name (nombre del predicado) y n (número de

atributos del mismo).

assert(predicado(nuevo_atrib1,nuevo_atrib2,….,nuevo_atribn))

Permite agregar un hecho a nuestro base de datos en tiempo de ejecución, es necesario definir

a nuestro predicado primeramente como dinámico.

retract(predicado(atrib1, atrib2,…., atribn))

Permite borrar un hecho de nuestro base de datos en tiempo de ejecución, es necesario definir

a nuestro predicado primeramente como dinámico.

Page 11: Base de Datos Relacionales y Archivos en Prolog

EJERCICIOS RESUELTOS EN PROLOG

1) BASE DE DATOS RELACIONALES

Dada estas tablas de suministradores-partes:

TABLA DE SUMINISTRADORES (sumin)

Scodigo Snombre Estatus ciudad

s1 Juan 20 Madrid

s2 Pedro 10 Castellón

s3 Raquel 30 Alicante

s4 María 20 valencia

S5 Luis 30 Castellón

TABLA DE SUMINISTROS (partes)

Pcodigo Pnombre Color Peso Ciudad

p1 mesa verde 20 Castellón

p2 silla verde 6 Castellón

p3 armario azul 60 Alicante

p4 sofá amarillo 55 Valencia

p5 cama marrón 20 Madrid

p6 librería roja 70 Castellón

TABLA DE SUMINISTRADORES-PARTES (s_p)

Scodigo Pcodigo Cantidad

s1 p1 300

s1 p2 200

s1 p3 400

s1 p4 300

s1 p5 700

s1 p6 300

s2 p1 300

Page 12: Base de Datos Relacionales y Archivos en Prolog

s2 p2 400

s3 p2 200

s4 p2 200

s4 p4 300

s4 p5 400

Resolver en PROLOG las siguientes consultas:

a) Nombre de los suministradores que suministran al menos una parte roja.

b) Nombres de los suministradores que no suministran la parte p2.

c) Nombre de los suministradores que suministran al menos todas las partes que

suministra el suministrador s2.

d) Nombre de los suministradores que suministran solo partes de Castellón.

e) Nombre de las partes que hayan sido suministradas por todos los suministradores.

f) Nombre de los suministradores "al por mayor" (que nunca suministran partes en una

cantidad menor a 400 piezas).

g) Nombre de los suministradores y la cantidad total de partes que han suministrado.

h) Calcular la media de las cantidades totales que han suministrado todos los suministradores.

Primeramente definimos nuestra base de datos en prolog, así:

Page 13: Base de Datos Relacionales y Archivos en Prolog

Y lo guardamos con el nombre datos.pl

a)

b)

c)

d)

e)

Page 14: Base de Datos Relacionales y Archivos en Prolog

f)

g)

h)

Page 15: Base de Datos Relacionales y Archivos en Prolog

2) MANEJO DE ARCHIVOS

Usando la tabla de suministradores anterior:

TABLA DE SUMINISTRADORES (sumin)

Scodigo Snombre Estatus ciudad

s1 Juan 20 Madrid

s2 Pedro 10 Castellón

s3 Raquel 30 Alicante

s4 María 20 valencia

S5 Luis 30 Castellón

Vamos a hacer un programa que busque, añada y guarda nuestra base de hechos

dinámicamente.

• Primeramente creamos nuestra base de datos en prolog asi:

Lo guardamos en el disco duro C: como datos2.pl (será nuestra base de datos inicial)

• Luego creamos un nuevo archivo consulta.pl donde estarán nuestras programas que

modificaran nuestra base de datos.

Comenzamos:

dynamic sumin/4. Para dinamizar nuestro predicado sumin. (para añadir nuevos hechos).

El proceso “inicio” lanza el programa y consulta nuestra base de datos existente(datos2.pl) ,

enseguida nos manda a proceso_principal que es el bucle principal del programa.

Page 16: Base de Datos Relacionales y Archivos en Prolog

proceso_principal nos pide un nombre para poder ver si se encuentra en nuestra base de

datos consultada (datos2.pl) ese nombre se guarda en la variable Nombre enseguida nos

manda al proceso “respuesta” que evaluara el nombre ingresado.

Si el usuario ingresa “parar” abrimos datos2.pl y graba nuestra base de datos modificada.

Enseguida salimos del programa.

Si el usuario proporciona un Nombre que esta en la base de datos, este proceso nos muestra

su código, Estatus y ciudad del suministrador. Enseguida nos redirige a proceso_principal para

que ingresemos otro Nombre a evaluar o parar para grabar los cambios y salir.

Page 17: Base de Datos Relacionales y Archivos en Prolog

Si el nombre suministrado no esta en la base de datos el proceso “respuesta” nos pide su

código, Estatus y ciudad del nuevo suministrador y lo inserta usando el predicado assert.

Veamos el programa en ejecución:

Vemos que si ingresamos “juan” como ya se encuentra en la base de datos inicial, nos

proporciona sus datos almacenados en nuestra base de datos.

Si ingresamos el nombre “carlos”, el programa no lo encuentra en nuestra base de datos,

entonces nos pide los datos de el y lo agrega a la base de datos.

Page 18: Base de Datos Relacionales y Archivos en Prolog

Si ingresamos parar, el programa graba los cambios en la base de datos y finaliza el programa.

Vemos que el archivo datos2.pl se ha modificado y ha añadido un nuevo hecho:

sumin(s8,carlos,22,sjl).

Page 19: Base de Datos Relacionales y Archivos en Prolog

BIBLIOGRAFIA

• [Bratko, 90] I. Bratko. PROLOG. Programming for Artificial Intelligence. Second Edition. Addison- Wesley. 1990. (puntos 4.1 y 4.2)

• [Clocksin 93] Clocksin, W.F., Mellish, C.S., Programación en PROLOG. Colección Ciencia Informática, 2ª edición. Editorial Gustavo Gili, S.A., 1993. (Capítulo 7, puntos 7.8 y 7.9)

• [Date, 93] C.J.Date, Introducción a los Sistemas de bases de datos. Volumen I. Quinta edición. Ed. Addison-Wesley Iberoamericana, 1993.