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.
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.
-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?
Compatibilidad respecto a la
unin (las cabeceras deben ser
idnticas).
SINTAXIS
(A UNION B)
INTERSECCIN
Operador binario.
DIFERENCIA
Operador binario.
PRODUCTO
CARTESIANO
Operador binario.
Compatibilidad respecto a la
unin.
(A INTERSECT B)
Compatibilidad respecto a la
unin.
( A MINUS B)
(A TIMES B)
A WHERE X theta Y
RESTRICCIN
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
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
de un
NO.
NO.
Operador binario.
atributo.
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:
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.
(
(
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}
(A[X] TIMES B) =
Se obtienen las tuplas que se necesitaran para que todos pasaran.
Soluciones:
a. (Enunciado a)
En lgebra relacional:
En SQL:
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
);
En SQL:
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'
);