07.11.2014 Views

Bases de Datos y Sistemas de Información ... - Pedeciba

Bases de Datos y Sistemas de Información ... - Pedeciba

Bases de Datos y Sistemas de Información ... - Pedeciba

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Maestría en Bioinformática<br />

<strong>Bases</strong> <strong>de</strong> <strong>Datos</strong> y <strong>Sistemas</strong> <strong>de</strong> Información<br />

Fundamentos <strong>de</strong> Lógica<br />

Ing. Alfonso Vicente, PMP<br />

alfonso.vicente@logos.com.uy


Agenda<br />

Introducción<br />

Valores, variables y tipos<br />

Proposiciones y predicados<br />

Valores nulos<br />

Conclusiones<br />

‣ ¿Qué es la lógica?<br />

‣ ¿Por qué es importante?


Agenda<br />

Introducción<br />

Valores, variables y tipos<br />

Proposiciones y predicados<br />

Valores nulos<br />

Conclusiones<br />

‣ Definiciones


Agenda<br />

Introducción<br />

Valores, variables y tipos<br />

Proposiciones y predicados<br />

Valores nulos<br />

Conclusiones<br />

‣ Lógica proposicional<br />

‣ Lógica <strong>de</strong> predicados<br />

‣ Conectivos y tablas <strong>de</strong> verdad<br />

‣ Implicancia<br />

‣ Equivalencia, tautología,<br />

contradicción<br />

‣ ¿Para qué sirve todo esto?


Agenda<br />

Introducción<br />

Valores, variables y tipos<br />

Proposiciones y predicados<br />

Valores nulos<br />

Conclusiones<br />

‣ Necesidad <strong>de</strong>l valor NULL<br />

‣ Problemas <strong>de</strong>l valor NULL<br />

‣ Lógica trivalorada


Agenda<br />

Introducción<br />

Valores, variables y tipos<br />

Proposiciones y predicados<br />

Valores nulos<br />

Conclusiones<br />

‣ Aplicabilidad en la disciplina <strong>de</strong><br />

<strong>Bases</strong> <strong>de</strong> <strong>Datos</strong>


Agenda<br />

Introducción<br />

Valores, variables y tipos<br />

Proposiciones y predicados<br />

Valores nulos<br />

Conclusiones<br />

‣ ¿Qué es la lógica?<br />

‣ ¿Por qué es importante?


Introducción<br />

La lógica estudia los principios <strong>de</strong>l razonamiento, la<br />

<strong>de</strong>mostración y la inferencia.<br />

Toda teoría es un sistema <strong>de</strong> sentencias o <strong>de</strong>claraciones, que<br />

se aceptan como verda<strong>de</strong>ras y pue<strong>de</strong>n ser utilizadas para<br />

obtener nuevas <strong>de</strong>claraciones utilizando reglas bien <strong>de</strong>finidas.<br />

Es importante en computación, porque nosotros <strong>de</strong>bemos<br />

enseñar a razonar a las máquinas.<br />

Es importante en la disciplina <strong>de</strong> <strong>Bases</strong> <strong>de</strong> datos, porque<br />

trabajaremos con una lógica diferente a la clásica bi-valorada.


Agenda<br />

Introducción<br />

Valores, variables y tipos<br />

Proposiciones y predicados<br />

Valores nulos<br />

Conclusiones<br />

‣ Definiciones


Valores, variables y tipos<br />

• Un Valor es una constante individual, con un significado bien<br />

<strong>de</strong>finido (por ejemplo, el entero 17). Un Valor no se pue<strong>de</strong><br />

modificar, ya que no sería el mismo Valor. Los Valores se<br />

codifican <strong>de</strong> alguna manera y pue<strong>de</strong>n ser arbitrariamente<br />

complejos.<br />

“El peso atómico <strong>de</strong>l Helio es 4,0026”


Valores, variables y tipos<br />

• Una Variable mantiene un Valor, pero pue<strong>de</strong> mantener<br />

múltiples Valores a lo largo <strong>de</strong>l tiempo. Las Variables sí se<br />

pue<strong>de</strong>n modificar; cambiando el Valor que mantienen. Las<br />

Variables tienen nombre, lo que nos permite hablar (o<br />

predicar) sobre ellas.<br />

v_peso_atomico := 4,0026;<br />

If (v_peso_atomico < 28,88) then<br />

print “Este elemento es más liviano que el aire”<br />

end if


Valores, variables y tipos<br />

• Diremos que todas las Variables tienen un Tipo, y diremos<br />

que el Tipo <strong>de</strong> una Variable es el conjunto <strong>de</strong> todos los<br />

Valores que la Variable pue<strong>de</strong> mantener. Ejemplos comunes<br />

<strong>de</strong> tipo son strings, números enteros o fechas.<br />

<strong>de</strong>fine v_peso_atomico numeric(12,9);<br />

<strong>de</strong>fine v_<strong>de</strong>scubierto date;<br />

<strong>de</strong>fine v_nombre varchar(20);<br />

• Una base <strong>de</strong> datos se pue<strong>de</strong> ver como una variable; en<br />

cada momento <strong>de</strong>l tiempo tiene un <strong>de</strong>terminado valor (<strong>de</strong> un<br />

tipo muy complejo, <strong>de</strong>terminado por el esquema <strong>de</strong> la base).


Agenda<br />

Introducción<br />

Valores, variables y tipos<br />

Proposiciones y predicados<br />

Valores nulos<br />

Conclusiones<br />

‣ Lógica proposicional<br />

‣ Lógica <strong>de</strong> predicados<br />

‣ Conectivos y tablas <strong>de</strong> verdad<br />

‣ Implicancia<br />

‣ Equivalencia, tautología,<br />

contradicción<br />

‣ ¿Para qué sirve todo esto?


Proposiciones y predicados<br />

• Una proposición es una sentencia <strong>de</strong>clarativa que pue<strong>de</strong> ser<br />

verda<strong>de</strong>ra o falsa, y se <strong>de</strong>be po<strong>de</strong>r <strong>de</strong>cidir cuál <strong>de</strong> las dos.<br />

Po<strong>de</strong>mos <strong>de</strong>terminar si una sentencia S es <strong>de</strong>clarativa<br />

verificando que tenga sentido la pregunta ¿es cierto que S?<br />

• Diremos que las proposiciones tienen un valor <strong>de</strong> verdad,<br />

que pue<strong>de</strong> ser verda<strong>de</strong>ro o falso.<br />

• Un ejemplo <strong>de</strong> proposición es "1 + 1 = 3", la cual<br />

obviamente, es falsa…


Proposiciones y predicados<br />

• Un predicado, a diferencia <strong>de</strong> una proposición, admite<br />

variables <strong>de</strong> las que no se conoce su valor <strong>de</strong> verdad. Estas<br />

variables se conocen como parámetros <strong>de</strong>l predicado.<br />

• Un ejemplo <strong>de</strong> predicado es "X aprobará <strong>Bases</strong> <strong>de</strong> <strong>Datos</strong>", y<br />

po<strong>de</strong>mos suponer que el valor <strong>de</strong> verdad <strong>de</strong> este predicado<br />

<strong>de</strong>pen<strong>de</strong>rá <strong>de</strong>l parámetro X, que varía en el conjunto <strong>de</strong><br />

estudiantes.<br />

• Si sustituye el lector la variable X por su nombre (esto se<br />

<strong>de</strong>nomina instanciar un predicado con valores) obtendrá una<br />

proposición. Queda como tarea averiguar el valor <strong>de</strong> verdad<br />

<strong>de</strong> la proposición que obtiene.


Proposiciones y predicados<br />

• Hay MUCHO más: Lógica para Ingeniería en Computación<br />

Fuente: http://www.fing.edu.uy/inco/cursos/logica/admin/Programa.pdf, 2012-03-14


Proposiciones y predicados<br />

• Los parámetros <strong>de</strong> un predicado también se <strong>de</strong>nominan<br />

variables libres, y se pue<strong>de</strong>n cuantificar (esto es, vincular <strong>de</strong><br />

alguna forma a un conjunto <strong>de</strong> valores).<br />

• No permitiremos algunos tipos especiales <strong>de</strong> <strong>de</strong>claraciones<br />

como "esta proposición es falsa", ya que son <strong>de</strong>claraciones<br />

auto referenciadas que generan paradojas con las que no<br />

queremos lidiar. Tampoco <strong>de</strong>claraciones mal formadas como<br />

la proposición "3 es un elemento <strong>de</strong> 4" ya que 4 no es un<br />

conjunto, o "el conjunto <strong>de</strong> todas las cosas...“ ya que "todas<br />

las cosas“ es un conjunto que no po<strong>de</strong>mos <strong>de</strong>finir<br />

matemáticamente.


Proposiciones y predicados<br />

• Recor<strong>de</strong>mos los conectivos lógicos básicos <strong>de</strong> la lógica<br />

proposicional: conjunción (AND), disyunción (OR) y<br />

negación (NOT). Los conectivos lógicos son operadores<br />

lógicos; toman predicados y <strong>de</strong>vuelven predicados,<br />

permitiendo construir (en un proceso inductivo) predicados<br />

compuestos a partir <strong>de</strong> predicados simples (predicados sin<br />

conectivos).<br />

• El significado preciso <strong>de</strong> los conectivos pue<strong>de</strong> ser <strong>de</strong>finido<br />

mediante tablas <strong>de</strong> verdad, que son estudiadas en los<br />

cursos <strong>de</strong> lógica.


• Tabla <strong>de</strong>l AND<br />

Proposiciones y predicados


• Tabla <strong>de</strong>l OR<br />

Proposiciones y predicados


• Tabla <strong>de</strong>l NOT<br />

Proposiciones y predicados<br />

• Queda como tarea recordar las tablas <strong>de</strong> verdad <strong>de</strong> la<br />

implicancia y <strong>de</strong> la equivalencia


Proposiciones y predicados<br />

• Una implicancia se pue<strong>de</strong> consi<strong>de</strong>rar como un or<strong>de</strong>n entre<br />

predicados, <strong>de</strong>terminando uno más fuerte y uno más débil.<br />

Si se tiene una implicancia verda<strong>de</strong>ra P Q se dice que P<br />

es más fuerte que Q (o que Q es más débil que P).<br />

• Por ejemplo, en la implicancia "X > 42 X > 0", <strong>de</strong>cimos<br />

que "X > 42" es más fuerte que "X > 0". Esto es consistente<br />

con la noción <strong>de</strong> cantidad <strong>de</strong> información, el primer<br />

predicado contiene más información (es más fuerte) que el<br />

segundo.


Proposiciones y predicados<br />

• Dados dos predicados P y Q no siempre se cumple que P <br />

Q o que Q P, por lo que la implicancia es un or<strong>de</strong>n parcial<br />

en el conjunto <strong>de</strong> los predicados, pero no es un or<strong>de</strong>n total.<br />

• Hay un predicado más fuerte que todos los <strong>de</strong>más y es valor<br />

F (falso), ya que para cualquier Q, se cumple que F Q. De<br />

manera análoga, hay un predicado más débil que todos los<br />

<strong>de</strong>más y es el valor V (verda<strong>de</strong>ro), ya que para cualquier P,<br />

se cumple que P V.


Proposiciones y predicados<br />

• Hay proposiciones (y <strong>de</strong> la misma forma predicados) que<br />

son equivalentes, e.g. los predicados "X < 10 OR X > 20" y<br />

"NOT(X >= 10 AND X


Proposiciones y predicados<br />

• Una <strong>de</strong>claración pue<strong>de</strong> ser rescrita en una forma<br />

equivalente, pero que tal vez requiera menos trabajo <strong>de</strong><br />

cómputo para ser evaluada por una computadora.<br />

• Por ejemplo, el predicado "X < 2 OR X > 1" es una<br />

tautología, y es equivalente a V. Lo que se pue<strong>de</strong> ganar con<br />

una rescritura, es que si X varía en un conjunto <strong>de</strong> 100<br />

elementos sería necesario evaluar 200 <strong>de</strong>sigualda<strong>de</strong>s, y<br />

calcular 100 veces un conectivo OR para hallar el valor <strong>de</strong><br />

verdad <strong>de</strong>l predicado en función <strong>de</strong> cada valor <strong>de</strong>l parámetro<br />

X. Si se rescribe el predicado, no importa dón<strong>de</strong> varíe X, se<br />

sabe <strong>de</strong> antemano que para cualquier X el predicado será<br />

verda<strong>de</strong>ro.


Proposiciones y predicados<br />

• Normalmente, se pue<strong>de</strong> evaluar <strong>de</strong> forma sistemática si se<br />

pue<strong>de</strong> aplicar alguna tautología conocida, o regla <strong>de</strong><br />

reescritura, como i<strong>de</strong>mpotencia ( P AND P es equivalente a<br />

P, así como P OR P es equivalente a P), doble negación (<br />

NOT NOT P es equivalente a P), etc<br />

• El siguiente ejemplo es bastante avanzado por el momento,<br />

pero ya po<strong>de</strong>mos compren<strong>de</strong>r por qué el optimizador <strong>de</strong><br />

DB2 ni siquiera acce<strong>de</strong> a la tabla para resolver una consulta.


Proposiciones y predicados<br />

create table numeros(n int);<br />

insert into numeros values (1), (2), (3), (4), (5), (6), (7);<br />

select n<br />

from numeros<br />

where n < 2<br />

Estimated Cost = 7.582313<br />

Optimizer Plan:<br />

RETURN<br />

( 1)<br />

|<br />

TBSCAN<br />

( 2)<br />

|<br />

Table:<br />

DB2INST9<br />

NUMEROS<br />

select n<br />

from numeros<br />

where n < 2 and n > 3<br />

Estimated Cost = 0.000177<br />

Optimizer Plan:<br />

RETURN<br />

( 1)<br />

|<br />

TBSCAN<br />

( 2)<br />

|<br />

TFunc:<br />

SYSIBM<br />

GENROW


Agenda<br />

Introducción<br />

Valores, variables y tipos<br />

Proposiciones y predicados<br />

Valores nulos<br />

Conclusiones<br />

‣ Necesidad <strong>de</strong>l valor NULL<br />

‣ Problemas <strong>de</strong>l valor NULL<br />

‣ Lógica trivalorada


Valores nulos<br />

• Hasta aquí todo es sencillo, las proposiciones lógicas<br />

pue<strong>de</strong>n ser verda<strong>de</strong>ras o falsas, y <strong>de</strong>cimos que trabajamos<br />

en una lógica bi-valorada.<br />

• Sin embargo, en sistemas <strong>de</strong> información, muchas veces<br />

<strong>de</strong>sconocemos alguna información, o no aplica (por ejemplo,<br />

fecha <strong>de</strong> <strong>de</strong>ceso en una base <strong>de</strong> personas).<br />

• Admitiremos la existencia <strong>de</strong> un valor que no es verda<strong>de</strong>ro<br />

ni falso, sino que representa la ausencia <strong>de</strong> información, sea<br />

porque es <strong>de</strong>sconocido (UNKNOWN) o simplemente porque<br />

no aplica. Llamaremos NULL a este valor.


Valores nulos<br />

• Es importante notar que el valor <strong>de</strong>sconocido es un valor<br />

que aplica a todos los tipos <strong>de</strong> datos, y <strong>de</strong> naturaleza<br />

diferente al resto <strong>de</strong> los valores <strong>de</strong>l tipo. Por ejemplo, NULL<br />

no <strong>de</strong>bería ser igual al string vacío o al número entero 0 (se<br />

<strong>de</strong>bería codificar <strong>de</strong> una forma diferente).<br />

• Sin embargo... Oracle implementa el NULL como un string<br />

vacío<br />

“Oracle Database currently treats a character value with a length of zero as null. However,<br />

this may not continue to be true in future releases, and Oracle recommends that you do<br />

not treat empty strings the same as nulls.”<br />

Fuente: http://docs.oracle.com/cd/E11882_01/server.112/e17118/sql_elements005.htm


Valores nulos<br />

• La introducción <strong>de</strong>l valor <strong>de</strong> verdad <strong>de</strong>sconocido hace que<br />

<strong>de</strong>bamos repensar la semántica <strong>de</strong> las operaciones lógicas.<br />

Por ejemplo, ¿qué <strong>de</strong>bería <strong>de</strong>volver el OR entre falso y<br />

<strong>de</strong>sconocido?<br />

• Diremos que cada vez que el valor <strong>de</strong> verdad <strong>de</strong>l resultado<br />

<strong>de</strong> una operación lógica <strong>de</strong>penda <strong>de</strong>l valor que pudiera<br />

tener algún operando <strong>de</strong>sconocido, el resultado será<br />

<strong>de</strong>sconocido (para la semántica <strong>de</strong> la lógica tri-valorada<br />

conviene pensar en NULL como un valor <strong>de</strong>sconocido).<br />

• Así, <strong>de</strong>bemos construir nuevas tablas <strong>de</strong> verdad,<br />

extendidas, para admitir valores <strong>de</strong>sconocidos.


• Tabla <strong>de</strong>l AND, extendida<br />

Valores nulos


• Tabla <strong>de</strong>l OR, extendida<br />

Valores nulos


• Tabla <strong>de</strong>l NOT, extendida<br />

Valores nulos


Valores nulos<br />

• Más allá <strong>de</strong> las operaciones lógicas, al admitir el valor<br />

<strong>de</strong>sconocido en variables <strong>de</strong> cualquier tipo, se nos<br />

presentan otros problemas como ¿cuál <strong>de</strong>bería ser la suma<br />

<strong>de</strong> 5 y NULL? En general, cualquier operación que involucre<br />

un NULL <strong>de</strong>volverá NULL.<br />

• En ocasiones se <strong>de</strong>be <strong>de</strong>volver un valor <strong>de</strong> verda<strong>de</strong>ro o<br />

falso, pero no <strong>de</strong>sconocido. Por ejemplo, si tenemos que<br />

<strong>de</strong>cidir si NULL es mayor que 9 y no po<strong>de</strong>mos <strong>de</strong>volver<br />

NULL, tendremos que tomar una <strong>de</strong>cisión. En general, se<br />

asume que cualquier comparación con NULL es falsa, pero<br />

por supuesto que esto nos traerá problemas.


Valores nulos<br />

• En nuestra lógica bi-valuada teníamos que proposiciones y<br />

predicados <strong>de</strong>l tipo P OR NOT P eran tautologías, pero<br />

consi<strong>de</strong>remos ahora que P tiene el valor NULL... y haga<br />

cuentas !!<br />

• Sólo para hacer énfasis en la complejidad <strong>de</strong>l asunto,<br />

imaginemos que queremos realizar una partición <strong>de</strong>l<br />

conjunto <strong>de</strong> personas; los mayores <strong>de</strong> edad y los menores<br />

<strong>de</strong> edad. Supongamos que tenemos una función para contar<br />

(COUNT), y que al contar las personas <strong>de</strong> 18 años o más el<br />

resultado nos da 37 personas. Por otro lado, las personas<br />

<strong>de</strong> menos <strong>de</strong> 18 años resultan ser 11.<br />

• ¿Cuál es el total <strong>de</strong> personas?


Valores nulos<br />

• Podríamos <strong>de</strong>ducir que el total <strong>de</strong> personas era <strong>de</strong> 37 + 11 =<br />

48, sin embargo esto es cierto solamente si no había<br />

personas con edad <strong>de</strong>sconocida (NULL). Para éstas, las<br />

comparaciones <strong>de</strong> <strong>de</strong>sigualdad se asumirán falsas, por lo<br />

que no sumarán en ninguno <strong>de</strong> los dos conjuntos, y el total<br />

<strong>de</strong> personas podría ser mayor <strong>de</strong>l que se <strong>de</strong>dujo.<br />

• En otras palabras, antes podíamos asumir que un conjunto<br />

se podía particionar en dos subconjuntos: los que cumplían<br />

P y los que cumplían NOT P. Con nulos, un conjunto se<br />

divi<strong>de</strong> en los que cumplen P, los que cumplen NOT P y los<br />

que por tener nulos no cumplen P ni tampoco NOT P.


Valores nulos<br />

• En resumen, la introducción <strong>de</strong>l valor NULL es un mal<br />

necesario, y se <strong>de</strong>be tener mucho cuidado cuando los datos<br />

pue<strong>de</strong>n admitir valores NULL. En los DBMSs existen formas<br />

<strong>de</strong> restringir los tipos <strong>de</strong> datos para que no admitan valor<br />

NULL, y a veces se recomienda hacer esto para evitar el<br />

valor NULL tanto como sea posible, especialmente para<br />

evitar errores como el <strong>de</strong>l ejemplo anterior…


Agenda<br />

Introducción<br />

Valores, variables y tipos<br />

Proposiciones y predicados<br />

Valores nulos<br />

Conclusiones<br />

‣ Aplicabilidad en la disciplina <strong>de</strong><br />

<strong>Bases</strong> <strong>de</strong> <strong>Datos</strong>


Conclusiones<br />

• En el mundo real, las consultas a una Base <strong>de</strong> <strong>Datos</strong> se<br />

basan y se parecen mucho a la lógica <strong>de</strong> predicados<br />

• Algunas construcciones <strong>de</strong> la lógica como las equivalencias,<br />

tautologías y contradicciones se pue<strong>de</strong>n utilizar para<br />

rescribir los predicados y optimizar las búsquedas<br />

• La comprensión <strong>de</strong> la lógica trivalorada es fundamental para<br />

trabajar con <strong>Bases</strong> <strong>de</strong> <strong>Datos</strong>

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!