• No results found

The Vegetarian Monster: Problematising Human Conceptions of Nonhuman Animals as Food

Dado que las relaciones básicamente son conjuntos de n-tuplas, el álgebra relacional incluye una versión de las operaciones de conjunto básicas: unión, intersección y diferencia de con- juntos. Para que estas operaciones binarias sean posibles, las dos relaciones sobre las que se realizan deben ser compatibles en unión. Esto significa que es posible realizar una opera- ción unión dado que tienen la misma estructura básica. En particular, deben tener el mismo grado y atributos en la posición correspondiente y ambas relaciones deben tener el mismo domi- nio. Por ejemplo, la tercera columna en la primera tabla debe tener el mismo dominio que la tercera columna en la segunda tabla, aunque los nombres de columna podrían ser dife- rentes. El resultado de cada una de las operaciones de conjunto es una nueva tabla con la misma estructura que las dos tablas originales. Las cuatro tablas con las que ha trabajado tienen todas distintas estructuras, de modo que ningún par de ellas es compatible en unión. Por tanto, se usarán las dos tablas de la figura 4.8(a) para operaciones de conjuntos. Supon- ga que la tabla MainFac contiene registros de miembros del personal docente que imparten en el mismo campus, mientras que la tabla BranchFac contiene registros de quienes impar- ten en el campus alterno de la universidad. Algunos miembros del personal docente dan clases en ambas ubicaciones.

La unión de dos relaciones es el conjunto de tuplas en cualquiera o en ambas relaciones. Por ejemplo, puede encontrar la unión de MainFac y BranchFac del modo siguiente:

MainFac UNION BranchFac

o simbólicamente

MainFac ∪ BranchFac

El resultado se muestra en la figura 4.8(b).

La intersección de dos relaciones es el conjunto de tuplas en ambas relaciones simultánea- mente. La intersección de MainFac y BranchFac,

MainFac INTERSECTION BranchFac

FIGURA 4.7(b) La tabla Stu FIGURA 4.7(c) Club ÷ Stu StuNumber StuLastName S1001 Smith S1002 Chin S1005 Lee Stu ClubName Drama Karate

o simbólicamente

MainFac ∩ BranchFac

se muestra en la figura 4.8(c).

La diferencia entre dos relaciones es el conjunto de tuplas que pertenecen a la primera rela- ción pero no a la segunda. Por tanto,

MainFac MINUS BranchFac

o simbólicamente

MainFac – BranchFac

es la tabla que se muestra en la figura 4.8(d).

Existen muchas extensiones del álgebra relacional. A los operadores estándar se han agrega- do métodos para tratar los valores nulos de manera sistemática, y varios investigadores han definido funciones agregadas como SUM, AVG, MAX, MIN y COUNT.

FIGURA 4.8

Las operaciones de conjuntos

FIGURA 4.8(a)

Relaciones compatibles en unión MainFac y BranchFac

FacID name department rank

F101 Adams Art Professor

F105 Tanaka CSC Instructor

F221 Smith CSC Professor

MainFac

FacId name department rank

F101 Adams Art Professor

F110 Byre Math Assistant

F115 Smith History Associate

F221 Smith CSC Professor

BranchFac

FIGURA 4.8(b)

UNIÓN de MainFac y BranchFac

FacId name department rank

F101 Adams Art Professor

F105 Tanaka CSC Instructor

F110 Byrne Math Assistant

F115 Smith History Associate

F221 Smith CSC Professor

MainFac UNION BranchFac

FIGURA 4.8(c)

INTERSECCIÓN de MainFac y BranchFac

FacId name department rank

F101 Adams Art Professor

F221 Smith CSC Professor

MainFac INTERSECTION BranchFac

FIGURA 4.8(d)

DIFERENCIA de MainFac y BranchFac

FacId name department rank

F105 Tanaka CSC Instructor

4.6.3 Cálculo relacional

El cálculo relacional es un lenguaje de manipulación de datos relacionales formal no pro- cedural, en el que el usuario simplemente especifica cuáles datos se deben recuperar, pero no cómo recuperarlos. Es un estándar alternativo para los lenguajes de manipulación de datos relacionales. Esta sección sólo presenta una breve discusión con propósitos de compa- ración, y no tiene la intención de ser un tratamiento completo del lenguaje. El cálculo rela- cional no se relaciona con los familiares cálculos diferencial e integral de matemáticas, pero usa una rama de la lógica simbólica llamada cálculo de predicados. Cuando se aplica a las bases de datos, viene en dos formas: cálculo relacional orientado a tuplas y cálculo relacio- nal orientado a dominio. Ambos usan conceptos de la lógica simbólica.

En lógica, un predicado es una oración declarativa que puede ser verdadera o falsa. Por ejemplo, las oraciones “Mary Jones es estudiante” y “Mary Jones tiene 500 créditos” son pre- dicados, pues se puede decidir si son verdaderos o falsos. Por otra parte, “¡Vaya día!” no es un predicado. Si un predicado contiene una variable, como en “x es estudiante”, debe haber un conjunto de sustitución asociado o rango para x. Cuando algunos valores del rango se sus- tituyen por x, el predicado puede ser verdadero; para otros valores puede ser falso. Por ejemplo, si el rango es el conjunto de todas las personas, y x se sustituye con Mary Jones, el predicado resultante, “Mary Jones es estudiante”, es verdadero. Si x se sustituye con el profe- sor Adams, el predicado probablemente sea falso.

Si se usa P para representar un predicado, entonces {x|P(x)} significa el conjunto de todos los valores x tales que P es verdadero. Podría usar Q, R o cualquiera otra letra para el predi- cado. De igual modo, podría usar y, z, w o cualquiera otra letra para representar la variable, de modo que

{t|P(t)}, {s|Q(s)}, {x|R(x)}

significan el conjunto de valores en el conjunto de sustitución para los que el predicado correspondiente es verdadero.

Los predicados se pueden conectar mediante los conectivos lógicos and (∧), or (∨) y not

(¬) para formar predicados compuestos como:

P(x)AND Q(x) P(x) OR Q(x) NOT(P(x)) OR Q(x)

que se pueden escribir como

P(x) ∧ Q(x) P(x) ∨ Q(x) ¬P(x) ∨ Q(x)

Una conjunción consiste en predicados conectados con and, una disyunción consiste en predicados conectados con or y una negación es un predicado precedido por un not. En lógica existen dos cuantificadores usados con predicados para decir a cuántas instancias se aplica el predicado. El cuantificador existencial, EXISTS (existe), significa precisamente eso: “existe”. Se usa en aseveraciones, o enunciados que deben ser ciertos para al menos una instancia, como:

EXISTS x (P(x)}

“Existe al menos un valor variable x tal que P(x) es verdadero.” A veces se usa el símbolo ∃ para “existe”, de modo que la aseveración se podría escribir como

∃ x (P(x))

El cuantificador universal, FORALL (para todo), significa “para todo”. En ocasiones se escribe ∀. Se usa en aseveraciones acerca de toda instancia, como:

FORALL s(P(s)) o A s(P(s))

que significa que P(s) es verdadero para todos los valores, s, en el rango. Una variable sin cuan- tificador (∃ o ∀) se llama variable libre, y una con cuantificador se llama variable acotada.

Cálculo relacional orientado a tupla En el cálculo relacional orientado a tupla se usan variables tupla, que son variables que toman las tuplas de alguna relación o relaciones

como valores. Intuitivamente, una consulta (query) se expresa en una forma como:

{S | P(S)}

que significa “Encontrar el conjunto de todas las tuplas, por decir s, tales que P(S) sea ver- dadera cuando S=s”. Aquí, S es la variable tupla y P(S) es una fórmula que describe S. Dado que S representa una tupla de una relación, a un atributo de la tupla se le puede refe- rir mediante la notación punto. Por ejemplo:

{S | S ∈ Student ∧ S.credits > 50}

significa “Encontrar todos los estudiantes que tengan más de 50 créditos”. De igual modo,

{S.stuId | S ∈ Student ∧ S.major='History' ∧ S.credits < 30}

significa “Encontrar el stuId de todos los estudiantes que tengan especialidad en historia con menos de 30 créditos”. Estas consultas se evalúan al instanciar la variable tupla, S, con cada tupla, s, de su rango, Student, a su vez, y poner a prueba el predicado para dicha tupla. Las tuplas para las que el predicado sea verdadero forman el resultado de la consulta. Ahora se definirá de manera más formal el concepto de fórmula. Comience con la defini- ción de una fórmula atómica o átomo. Sean s, t representaciones de variables tupla que tienen atributos a y b, respectivamente; sea θ la representación de los operadores de com- paración (<, <=, >, >=, =, ≠), y sea r la representación de una relación. Una fórmula atómica es aquella que tiene una de las siguientes formas:

S ∈ r

■ S.a θ R.b

S.a θ constante

Las fórmulas se construyen de manera recursiva a partir de fórmulas atómicas usando estas reglas:

■ Una fórmula atómica es una fórmula

■ Si F

1 y F2 son fórmulas, entonces también lo son F1∧ F2, F1∨ F2 y ¬ F1

Si S es una variable tupla que aparece como variable libre en una fórmula F, entonces

■ ∃ S (F(S)) es una fórmula y

■ ∀ S(F(S)) es una fórmula

Una expresión del cálculo relacional de tuplas, como las consultas que se mostraron ante- riormente, tiene la forma

{S1.a1, S2.a2, . . ., Sn.an | F(S1, S2, . . ., Sn)}

donde S1 son las variables tuplas que tienen rangos que son las relaciones S1, S2, . . . , Sn y los

a1 son atributos de dichas relaciones. F es una fórmula, como se definió anteriormente.

Ejemplos de cálculo relacional orientado a tuplas

■ Ejemplo 1. Encuentre los nombres de todos los miembros del personal docente que

sean profesores en el departamento CSC.

{F.name | F ∈ Faculty ∧ F.department = 'CSC' ∧ F.rank ='Professor'}

■ Ejemplo 2. Encuentre los apellidos de todos los estudiantes inscritos en CSC201A.

{S.lastName | S ∈ Student ∧ EXISTS E (E ∈ Enroll ∧ E.stuId =

■ Ejemplo 3. Encuentre los nombres y apellidos de todos los estudiantes inscritos en al menos una clase que se imparta en el salón H221.

{S.firstName, S.lastName | S ∈ Student ∧ EXISTS E (E ∈ Enroll

∧ E.stuId = S.stuId ∧ EXISTS C (C ∈ Class ∧C.classNo = E.classNo ∧ C.room = 'H221'))}

■ Ejemplo 4. Encuentre los nombres de los docentes que estén en el departamento CSC

pero no impartan CSC201A.

{F.name | F ∈ Faculty ∧ F.department= 'CSC' ∧ ¬ EXISTS C (C ∈ Class

∧ C.facId = F.facId ∧ C.classNo = 'CSC201A')}

■ Ejemplo 5. Encuentre los apellidos de los estudiantes inscritos en todas las clases

ofrecidas.

{S.lastName | S ∈ Student ∧ C ∈ Class ∧ FORALL C (EXISTS E (E ∈ Enroll ∧ E.stuId =

S.stuId ∧ E.classNo = C.classNo))}

Al crear una expresión en cálculo relacional de tuplas es importante que sea segura, esto es, las condiciones a poner a prueba se restrinjan a un conjunto finito de posibilidades, de modo que no se pierda tiempo intentando poner a prueba un predicado que no se pueda probar en una cantidad finita de tiempo. Por ejemplo, la expresión

{S | ¬ (S ∈ Student)}

no es segura, pues existe un número infinito de posibles tuplas que no están en Student. Para evitar tales consultas se define el dominio de una expresión como el conjunto de todos los valores que o aparecen explícitamente en la expresión (por ejemplo, constantes como ‘H221’) o que aparecen en una o más de las relaciones que se presentan en la expresión. Una expresión es segura si todos los valores en su resultado están en su dominio. En el texto, las consultas se limitan a expresiones seguras.

Se puede demostrar que el álgebra relacional es lógicamente equivalente al cálculo relacio- nal seguro, de modo que cualquier expresión en uno se puede traducir en una expresión equivalente en la otra.

Related documents