Está en la página 1de 18

1.

- que es llave foranea simple

En una relacin la tabla principal contiene la clave principal o llave primaria. La tabla
relacionada contiene una (o varias) claves externas o llaves foraneas.
Son campos de un tabla que hacen referencia al campo (o campos) de clave principal de
la tabla con la que se realacionan. La clave externa permite ver el tipo de relacin que se
define entre dos tablas. La clave principal (llave primaria)y la clave externa (llave
foranea) deben contener el mismo tipo de datos.

2.- que es una tupla colgada

Cuando no se activa la integridad referencial en una relacin, pueden introducise en una


tabla registros que no tiene relacin con los registros correspondientes en la otra tabla.
Se le llama tupla colgada a esos registros sin relacin. Puede que una tabla de VENTAS
tenga registros de clientes cuyo nmero de cliente no exista en la tabla CLIENTES. La
integridad referencia evita que pueda existir registros en esas condiciones...
Consulta el titulo C10 en el foro sobre registros o tuplas cogadas...

3.- que es una llave fornea compuesta

En una relacin varios a varios dos llaves forneas sobre la misma tabla (tabla de unin)
referencian dos tablas relacionadas. La llave primaria se compone de la llave fornea
compuesta que podra contener columnas adicionales. No se permiten nulos ni defaults
en la llave fornea, el borrado es en cascada o no se restringe del todo.

Bueno, primero debemos ponernos de acuerdo en qu es una clave


compuesta (tal vez t tienes otro concepto):
Una clave compuesta es aquella que se forma por dos o ms claves. Por
ejemplo, puedes tener las siguientes tablas con sus campos:
SERVICIOS
-IdServicio
-Descripcion
PERSONAL
-IdPersona
-Nombre
-Puesto

-IdDepartamento
SOLICITUDES
-IdSolicitud
-IdPersona
-Fecha
DETALLES
-IdSolicitud
-IdServicio
-DescripcionProblema
En este caso, SERVICIOS almacenar las categoras de los servicios que se
le ofrece al personal de una pequea empresa, para eso en SOLICITUDES se
guardan las solicitudes de servicio que haya solicitado el PERSONAL, con los
datos de la persona (IdPersona) y la fecha de solicitud (Fecha). Como una
persona puede solicitar ms de un servicio al mismo tiempo, tenemos que
recurrir a otra tabla auxiliar llamada DETALLES, la cual utiliza una "Clave
compuesta" para identificar los registros de forma nica, mediante los
campos IdSolicitud e IdServicio.
Si te fijas, el servicio:
IdServicio=1
Descripcion=Requisicin de papelera
puede ser un servicio que solicite TODO el personal, por tanto, si en
DETALLES guardas slo la clave del servicio as:
DETALLES
-IdServicio
-DescripcionProblema
lo que ocurrira es que habra infinidad de servicios IdServicio=1 duplicados
los cuales no se podra identificar a qu solicitud pertenecen y, por tanto,
tampoco se podra determinar quien los solicit.
Por si no lo habas notado, al tener IdSolicitud e IdServicio juntos, NUNCA
deberan aparecer registros en DETALLES donde estos campos se dupliquen,
por ejemplo, la solicitud 1 puede tener 3 servicios:
IdSolicitud, IdServicio
1,3
1,7
1,8
luego la solictud 2 puede tener el mismo servicio 7:

IdSolicitud, IdServicio
2,7
2,19
Si te fijas, el nmero de solicitud puede repetirse (1), pero el nmero de
servicio lo diferencia en cada registro (3,7,8). De forma similar, el nmero
de servicio puede repetirse (7), pero el nmero de solicitud lo diferencia en
cada registro (1,2).
Si se disea bien la tabla de DETALLES, haciendo que IdSolicitud e IdServicio
sean CLAVES, nunca existirn registros duplicados. Como ves, en la tabla
DETALLES una clave simple NO NOS SIRVE DE NADA.
Para marcar 2 campos como claves, simplemente al estar en modo de
diseo de tu tabla, selecciona los dos campos deseados y con el botn
derecho del mouse sobre la seleccin eliges "Clave principal", o tambin
puedes hacerlo desde el men Edicin.

Clave primaria
En el diseo de bases de datos relacionales, se llama clave primaria a un
campo o a una combinacin de campos que identifica de forma nica a cada
fila de una tabla. Una clave primaria comprende de esta manera una
columna o conjunto de columnas. No pueden haber dos filas en una tabla
que tengan la misma clave primaria.
Una clave primaria debe identificar unvocamente a todas las posibles filas
de una tabla y no solo a las filas que se encuentran en un momento
determinado. Ejemplos de claves primarias son DNI (asociado a una
persona) o ISBN (asociado a un libro). Las guias telefnicas y diccionarios no
pueden usar nombres o palabras o nmeros del sistema decimal de Dewey
como claves candidatas, porque identifican unvocamente nmeros de
telfono o palabras.
Una clave primaria es un caso especial de clave nica. La mayor diferencia
es que para claves nicas, no se impone automticamente la restriccin
implcita NOT NULL, mientras que para claves primarias, s. As, los valores
en columnas de clave nica pueden o no ser NULL. Otra diferencia es que
las claves primarias deben definirse por medio de otra sintaxis.
El modelo relacional, segn se lo expresa mediante clculo relacional y
lgebra relacional, no distingue entre clave primaria y otros tipos de claves.
Las claves primarias fueron agregadas al estndar SQL principalmente para
conveniencia del programador.

Tanto claves nicas como claves primarias pueden referenciarse con claves
forneas.
Cada uno de los identificadores de la entidad ser una clave candidata. De
entre las claves candidatas hay que escoger la clave primaria; el resto sern
claves alternativas. Para escoger la clave primaria entre las claves
candidatas se pueden seguir estas indicaciones:
Escoger la clave candidata que tenga menos atributos.
Escoger la clave candidata cuyos valores no tengan probabilidad de
cambiar en el futuro.
Escoger la clave candidata cuyos valores no tengan probabilidad de perder
la unicidad en el futuro.
Escoger la clave candidata con el mnimo nmero de caracteres (si es de
tipo texto).
Escoger la clave candidata ms fcil de utilizar desde el punto de vista de
los usuarios..

Llave Fornea
- Es llamada clave Externa, es uno o mas campos de un tabla que hacen referencia al
campo o campos de clave principal de otra tabla, una clave externa indica como esta
relacionadas las tablas. Los datos en los campos de clave externa y clave principal
deben coincidir, aunque los nombres de los campos no sean los mismos.
- Los campos continuos se deben de marcos ambos campos y de la misma forma como
se selecciona la Llave Primaria se debe de seleccionar la Llave Externa o Llave
Fornea, utilizando el botn de Barra de Herramientas, Mouse o utilizando el Men y la
opcin Edit. (Debe de aparecer una flecha)
- Si los campos no son continuos:
- Seleccionar el primer campo
- Presionar Control y sin soltarlo se debe seleccionar el otro campo (Seleccionar la
Llave Externa de la misma Forma que la Llave Principal)
- La Llave Fornea tambin se determinar en el momento de las relaciones entre las
tablas en la cual la Llave Primaria se realizar la unin con el otro campo de otra tabla y
automticamente se vuelve una llave fornea
QUE ES UNA LLAVE PRIMARIA Y UNA LLAVE FORANEA EN BASES DE

DATOS?
ES UN TRQABAJO DE INFORMATICA ASI QUE NECESITO INFORMACION BN
AMPLIA AGRADEZCO SU COLABORACION DE PASO SI POR AHI TIENEN
MAS INFORMACION SOBRE ATRIBUTOS Y CLASES DE ATRIBUTOS EN LAS
ENTIDADES GRACIAS
Una llave o clave primaria es un indicador nico en una tabla, por ejemplo:
Tabla: Facturas
Campos:
- IDFactura (IDFactura es la clave primaria, nica e irrepetible para cada factura)
- SucursalDeVenta (otro campo)
- FechaDeVenta (otro campo)
Luego tenemos la clave fornea, que tambin es un indicador muy similar a la clave
primaria:
Tabla: DetallesFacturas
Campos:
- IDDetalleFactura (IDDetalleFactura es la clave primaria, nica e irrepetible para cada
detalle de cada factura)
-IDFactura (IDFactura es ahora nuestra clave fornea ya que es la clave por la cual se
relacionan ambas tablas)
- Item (otro campo)
- Cantidad (otro campo)
En resumen, las claves primarias y forneas permiten relacionar tablas, cuando la clave
se encuentra como ndice nico de la tabla se llama primaria, y cuando es la referencia y
relacin hacia otra tabla es la fornea. En las fuentes te dejo ms informacin.

Ahora, los atributos son las propiedades de una entidad. Estn relacionados a la POO
(Programacin Orientada a Objetos). Para definirlo en trminos ms comunes, son
como caractersticas de cierto objeto.
Tabla resumen de los principales operadores relacionales:

OPERACIN

UNION
Operador binario.

DESCRIPCIN

REQUIERE
COMPATIBILIDAD?

A partir de dos relaciones construye una relacin


formada de todas las tuplas que aparecen en las
dos relaciones.

Compatibilidad respecto a la
unin (las cabeceras deben ser
idnticas).

SINTAXIS

(A UNION B)

INTERSECCIN
Operador binario.

DIFERENCIA
Operador binario.

PRODUCTO
CARTESIANO
Operador binario.

Construye una relacin formada de las tuplas


que aparecen en la primera relacin y que
tambin aparecen en la segunda relacin.

Compatibilidad respecto a la
unin.

(A INTERSECT B)

Construye una relacin formada por las tuplas


que aparecen en la primera relacin pero que no
estn en la segunda relacin.

Compatibilidad respecto a la
unin.

( A MINUS B)

A partir de dos relaciones obtiene una nueva


formada de todas las combinaciones posibles de
tuplas.

Compatibles con respecto al


producto (las cabeceras de
ambas relaciones no deben
tener nombres de atributo en
comn).

(A TIMES B)

A WHERE X theta Y

RESTRICCIN

Restringe la relacin a slo las tuplas que


cumplan con la restriccin especificada (donde
X theta Y sea verdadera).

NO.

X es un atributo de la relacin A.
"theta" es un operador de
comparacin.
Y puede ser un atributo o un literal.

A [x, y, ...., z]

PROYECCIN

Extrae los atributos especificados de una


relacin dada y genera una nueva relacin a
partir de dichos atributos.

A es una relacin.
NO.

x, y, z son atributos.
Dentro de los corchetes se
especifican los atributos a proyectar.

( A JOIN B)
REUNIN
Operador binario.
Este operador puede
ser clasificado en dos
tipos de operadores:
reunin natural y
reunin theta. De
stas, la reunin
natural es la ms
importante y ms
utilizada.

DIVISIN

Reunin natural. Junta tuplas pertenecientes a


una relacin con las tuplas pertenecientes a otra
relacin, en donde los atributos comunes
(mismo nombre y mismo dominio) tengan los
mismos valores.

Reunin theta. Junta tuplas pertenecientes a


una relacin con las tuplas pertenecientes a otra
relacin, en donde los valores de ciertos
atributos (de mismo dominio) cumplan con una
cierta condicin de comparacin.

Toma dos relaciones, una binaria y una

de un

solo atributo (esto puede generalizarse), y

NO.

Este operador es equivalente a


hacer un producto cartesiano, luego
una restriccin de igualdad sobre
los atributos comunes y finalmente
una proyeccin.

(A TIMES B) WHERE A.X theta B.Y


Compatibilidad respecto al
producto.

Ntese que la reunin theta se logra


al combinar el operador producto
cartesiano y el operador
restriccin.

NO.

A[X,Y] DIVIDEBY B[Y]

Operador binario.

construye una nueva relacin formada por todos


los valores de un atributo de la relacin binaria
que concuerdan (en el otro atributo) con todos
los valores de la relacin de un solo

Debe haber un atributo comn


definido en el mismo dominio.

atributo.

PROPIEDADES DEL LGEBRA RELACIONAL:

Clausura: el resultado de cada una de las operaciones, anteriormente definidas, es


otra relacin.

Debido a la clausura, el resultado de una operacin puede covertirse en el operando de


otra operacin.

EJERCICIOS:
Sean las relaciones:
1. Partes: P (P#, MODELO, COLOR)
2. Proveedores: S (S#, SNOMBRE, CIUDAD)
3. Suministra: SP (P#, S#)
Resuelva los siguientes enunciados:

1. Obtener los nombres de los proveedores que suministran la parte P2.


((SJOINSP)WHEREP#=P2)[SNOMBRE]

2. Obtener los nombres de los proveedores que suministran todas las partes.
((SP[S#,P#]DIVIDEBYP[P#])JOINS)[SNOMBRE]

3. Obtener todos los pares de nmeros de proveedor tales que los dos proveedores
en cuestin estn cosituados.
Segn Date (utilizando JOIN):
(
( (S RENAME S# AS PRIMERS#) [PRIMERS#, CIUDAD]

JOIN
(S RENAME S# AS SEGUNDS#) [SEGUNDS#, CIUDAD]
)
WHERE PRIMERS# < SEGUNDS#
) [PRIMERS#, SEGUNS# ]
Otra solucin (utilizando PRODUCTO CARTESIANO) :
(
(
( (S RENAME S# AS PRIMERS#) RENAME CIUDAD AS CIU1 ) [PRIMERS#,
CIU1]
TIMES
( (S RENAME S# AS SEGUNDS#) RENAME CIUDAD AS CIU2 ) [SEGUNDS#,
CIU2]
)
WHERE CIU1# = CIU2# AND PRIMERS#<SEGUNDS#
) [PRIMERS#, SEGUNDS# ]
Y en SQL:
SELECT S1.S#, S2.S#
FROM S AS S1, S AS S2
WHERE S1.CIUDAD = S2.CIUDAD AND S1.S# < S2.S#; (En un Motor
Microsoft Jet)
SELECT S1.S#, S2.S#
FROM S S1, S S2
WHERE S1.CIUDAD = S2.CIUDAD AND S1.S# < S2.S#; (En un Motor
Oracle)

4. Obtener todos los pares de nmeros de proveedor tales que los dos proveedores
en cuestin no estn cosituados.
(
(

( (S RENAME S# AS PRIMERS#) RENAME CIUDAD AS CIU1 ) [PRIMERS#,


CIU1]
JOIN
( (S RENAME S# AS SEGUNDS#) RENAME CIUDAD AS CIU2 ) [SEGUNDS#,
CIU2]
)
WHERE CIU1# <> CIU2# AND PRIMERS#<SEGUNDS#
) [PRIMERS#, SEGUNDS# ]
Y en SQL:
SELECT S1.S#, S2.S#
FROM S AS S1, S AS S2
WHERE S1.CIUDAD <> S2.CIUDAD AND S1.S# < S2.S#; (En un Motor
Microsoft Jet)
SELECT S1.S#, S2.S#
FROM S S1, S S2
WHERE S1.CIUDAD <> S2.CIUDAD AND S1.S# < S2.S#; (En un Motor
Oracle)

5. Definir las operaciones de REUNION, de INTERSECCION y de


DIVISIN en trminos de las operaciones primitivas.
Solucin:
a. REUNION NATURAL: Sean las relaciones A(W,X,Z) y B(P,X,R), donde
cada atributo puede ser compuesto y X es un atributo comn, la
REUNION NATURAL se puede definir como:
( (A TIMES (B RENAME X AS Q)) WHERE A.X = B.Q)[W,Z,X,P,R]
En caso de que X sea compuesto, se debe hacer un RENAME a cada
atributo que es parte de X y luego hacer un WHERE de igualdad
por cada atributo parte de X.
b. REUNION THETA:
(A TIMES B) WHERE A.X theta B.Y
, donde theta es la representacin de cualquier operador de comparacin escalar
simple (por ejemplo >, <, =, >=, etc.).
Se exige que las relaciones A y B sean compatibles con respecto al producto. Esto
implica que en caso de existir un atributo comn, ste debe ser renombrado.

c. INTERSECCION:
Solucin 1: (A MINUS (A MINUS B))
A={1,2,3,4,5}
B={4,5,6,7}
(A MINUS B) = {1,2,3}
(A MINUS (A MINUS B)) ={4,5}

Solucin 2: ( ((A UNION B) MINUS (A MINUS B)) MINUS (B MINUS


A) )
A={1,2,3,4,5}
B={4,5,6,7}
(A MINUS B) = {1,2,3}
(B MINUS A) = {6,7}
(A UNION B) = {1,2,3,4,5,6,7}
((A UNION B) MINUS (A MINUS B)) = {4,5,6,7}
( ((A UNION B) MINUS (A MINUS B)) MINUS (B MINUS A) ) ={4,5}
(A INTERSECT B) = {4,5}
Por lo tanto (A INTERSECT B) es equivalente a ( ((A UNION B)
MINUS (A MINUS B)) MINUS (B MINUS A) )
d. DIVISION: Sean las relaciones A(X,Y) y B(Y):
La divisin es igual a: (A MINUS (((A[X] TIMES B) MINUS A)[X] JOIN
A) )
Ejemplo:
Sean las relaciones A(X,Y), B(Y):

(A[X] TIMES B) =
Se obtienen las tuplas que se necesitaran para que todos pasaran.

((A[X] TIMES B) MINUS A) =


Se producen las tuplas que les faltan a aquellos valores que no
cumplen con el requisito.

(((A[X] TIMES B) MINUS A)[X] JOIN A) =


Se obtienen la tuplas que no pasarn.

(A MINUS (((A[X] TIMES B) MINUS A)[X] JOIN A) ) =

SE obtienen las tuplas que s pasarn...

(A MINUS (((A[X] TIMES B) MINUS A)[X] JOIN A) )[X] =


Obtener slo el atributo adecuado

Nota: las soluciones dadas funcionan, sin embargo seguramente existen


soluciones mejores a las propuestas en cuanto a la claridad de las
expresiones y a la optimizacin.

1. Sean las relaciones:

Persona (Rut, Nombre)

Auto (Patente, Color, Rut)

donde el atributo Rut de la relacin Auto es una clave fornea que


referencia al atributo Rut de la relacin Persona.
Obtener:
a. Aquellas personas que tengan automviles rojos o amarillos.
b)Aquellas personas (rut y nombre) que posean automviles de color
rojo y de color amarillo.
c)Aquellas personas (rut y nombre) que posean solamente automviles de
color rojos y de color amarillos (no se deben mostrar las personas que
posean automviles que no sean ni rojos ni amarillos).

Soluciones:
a. (Enunciado a)
En lgebra relacional:

(Persona JOIN Auto)[Rut,Nombre] WHERE Color=Rojo OR


Color=Amarillo
En SQL:
SELECT Rut, Nombre
FROM Persona, Auto
WHERE Persona.Rut = Auto.Rut AND
(Auto.Color = Rojo OR
Auto.Color = Amarillo);
b. (Enunciado b)
En lgebra relacional:
(
(
( Persona JOIN Auto ) [ Rut,Nombre,Color]
DIVIDEBY
( Auto [Color] WHERE Color=Rojo OR Color =
Amarillo )
)
)
Explicacin:
La sentencia (Auto[Color] WHERE Color=Rojo OR Color =
Amarillo) genera una relacin que contiene un atributo llamado
Color con slo dos tuplas, una con el valor Rojo y la otra
con el valor Amarillo. Hay un problema: si en la relacin
Auto no hay autos de color rojo o de color amarillo la
consulta final falla Por qu ? Como ejercicio construya una
expresin en lgebra relacional en donde no se produzca ste
problema.
La sentencia (Persona JOIN Auto)[ Rut,Nombre,Color] obtiene
todas las parejas Dueo-Auto.
La operacin DIVIDEBY entrega como resultado todas las personas
que tengan al menos todos los autos de color Rojo y de color
Amarillo.

En SQL:

En este caso las consultas SQL no tienen el problema que se


produjo con la solucin en lgebra relacional (comprubelo).
Solucin 1:
SELECT Nombre, Rut
FROM Persona, Auto
WHERE Persona.Rut = Auto.Rut AND
Persona.Rut IN (SELECT Rut FROM Auto WHERE Color=Rojo) AND
Persona.Rut IN (SELECT Rut FROM Auto WHERE Color=Amarillo);

Solucin 2:
SELECT Nombre, Rut
FROM Persona, Auto
WHERE Persona.Rut = Auto.Rut AND
Persona.Rut IN (SELECT Rut FROM Auto WHERE Color=Rojo) AND
Persona.Rut=Amarillo;

Solucin 3:
SELECT Nombre, Rut
FROM Persona, Auto
WHERE Persona.Rut = Auto.Rut AND
Persona.Rut IN ( Select DISTINCT A1.Rut
FROM Auto A1, Auto A2
WHERE A1.Rut = A2.Rut AND
A1.Color=Rojo AND
A2.Color=Amarillo
);

La siguiente es una solucin errnea tpica!:

ESTA SOLUCIN EST MALA.


TIENE CARA DE BUENA, PERO ES MALA.
SELECT Nombre, Rut
FROM Persona, Auto
WHERE Persona.Rut = Auto.Rut AND
Color = Rojo AND
Color = Amarillo;
c. (Enunciado c)
En lgebra relacional:
(
(
(Persona JOIN Auto)[ Rut,Nombre,Color]
DIVIDEBY
(Auto[Color] WHERE Color = Rojo OR Color = Amarillo)
)
)[Rut, Nombre]
MINUS
( Persona JOIN Auto WHERE Color<>Rojo AND
Color<>Amarillo )[Rut,Nombre]
Explicacin:
La primera parte de esta sentencia es idntica a la consulta (b)
anterior (y por lo tanto tiene el mismo problema. Vase la solucin
del ejercicio 6.b.), obtenindose todas las personas que tengan al
menos autos de color rojo y de color amarillo.
Sin embargo como se pide aquellos que slo tengan autos color amarillo
y rojo es necesario eliminar aquellas personas que, aunque posean
autos rojos y amarillos, sean dueas de autos de otro color tambin.
Esto se logra con el operador MINUS el cual quitar todas las personas
que posean autos de colores distintos de rojos y amarillo.

En SQL:

Nuevamente la sentencia SQL no tiene el problema que se dio en la


solucin en lgebra relacional.
SELECT DISTINCT Persona.Rut, Nombre
FROM Persona, Auto
WHERE Persona.Rut = Auto.Rut AND
( SELECT COUNT(*)

FROM Auto
WHERE AUTO.Rut = Persona.Rut AND
Color='Rojo'
) > 0
AND
( SELECT COUNT(*)
FROM Auto
WHERE Auto.Rut = Persona.Rut AND
Color='Amarillo'

) > 0
GROUP BY Persona.Rut, Nombre
HAVING COUNT(*)=( SELECT COUNT(*)
FROM Auto
WHERE Auto.Rut=Persona.Rut
AND
Color='amarillo'
)+(
SELECT COUNT(*)
FROM Auto
WHERE Auto.Rut=Persona.Rut AND
Color='Rojo'

);

También podría gustarte