Esquema
Considere el siguiente esquema relacional de una biblioteca. La clave primaria de
cada relación aparece subrayada en el enunciado original; aquí debe deducirla.
- EDITORIAL(id_editorial, nombre, pais)
- LIBRO(isbn, titulo, anio, id_editorial)
- EJEMPLAR(id_ejemplar, isbn, estado)
- SOCIO(id_socio, documento, nombre, email)
- PRESTAMO(id_ejemplar, fecha_prestamo, id_socio, fecha_devolucion)
Reglas de negocio
- Cada socio tiene un
id_socio interno; además su documento (cédula) es
único y su email es único.
- Un ejemplar es una copia física de un libro; muchos ejemplares comparten el
mismo
isbn.
- Un ejemplar puede prestarse muchas veces a lo largo del tiempo, pero solo
puede estar prestado a un socio en una misma fecha de préstamo.
Preguntas
-
Para la relación SOCIO:
- Escriba una superclave que no sea clave candidata.
- Liste todas las claves candidatas.
- Indique la clave primaria elegida y justifique la elección.
-
Identifique todas las claves ajenas (FK) del esquema, indicando de qué
relación salen, a qué relación apuntan y qué clave referencian.
-
¿Cuál es la clave primaria de PRESTAMO? Justifique por qué id_socio
no forma parte de ella.
-
Decida si es verdadero o falso: “Toda clave candidata es superclave, pero no
toda superclave es clave candidata.” Justifique.
Solución rápida — la idea clave sin formalismo
La idea clave
Una superclave identifica una fila. Una clave candidata es una superclave
sin nada de sobra (minimal). La clave primaria es la candidata que elegimos.
-
SOCIO tiene tres candidatas: id_socio, documento y email (las tres son
únicas). Elegimos id_socio como primaria porque no cambia nunca; las otras dos
quedan como UNIQUE. Un ejemplo de superclave que no es candidata:
{id_socio, nombre} — sobra nombre.
-
Claves ajenas (una tabla “apunta” a la primaria de otra): EJEMPLAR.isbn →
LIBRO, LIBRO.id_editorial → EDITORIAL, y PRESTAMO apunta tanto a
EJEMPLAR como a SOCIO.
-
PRESTAMO: como un ejemplar se presta muchas veces pero solo a un socio por
fecha, la primaria es {id_ejemplar, fecha_prestamo}. El id_socio no entra
porque ya queda determinado por ese par: es un dato del préstamo, no lo identifica.
-
VF: verdadero — toda candidata es superclave, pero una superclave con
atributos de más no es candidata.
Solución formal — lista para entregar en un parcial
1. SOCIO.
- Claves candidatas: {id_socio}, {documento}, {email} (únicas y minimales).
- Superclave no candidata: {id_socio,nombre} (no minimal).
- Clave primaria: id_socio (estable, simple, no nulo).
documento y email son claves alternas (UNIQUE).
2. Claves ajenas.
LIBRO.id_editorial→EDITORIAL.id_editorial
EJEMPLAR.isbn→LIBRO.isbn
PRESTAMO.id_ejemplar→EJEMPLAR.id_ejemplar
PRESTAMO.id_socio→SOCIO.id_socio
3. PRESTAMO.
Clave primaria: {id_ejemplar,fecha_prestamo}.
Justificación: un ejemplar se presta en varias fechas, pero en cada fecha a un único socio, luego {id_ejemplar,fecha_prestamo} es identificador. Además {id_ejemplar,fecha_prestamo}→id_socio, por lo que id_socio es dependiente y no puede pertenecer a una clave minimal.
4. Verdadero o falso. VERDADERO. Por definición toda clave candidata identifica unívocamente (es superclave) y es minimal; una superclave sin minimalidad no es candidata. Por tanto candidatas⊊superclaves. ■
Explicación completa — paso a paso, con visualizaciones
1. Claves de SOCIO
SOCIO(id_socio, documento, nombre, email), con documento único y email único.
Un atributo (o conjunto) es superclave si identifica unívocamente cada tupla;
es clave candidata si además es minimal (ningún subconjunto propio sigue
siendo superclave).
- Claves candidatas:
{id_socio}, {documento}, {email}. Las tres son
únicas y minimales (son atributos individuales, no se pueden reducir más).
- Superclave que NO es candidata:
{id_socio, nombre}. Identifica unívocamente
(porque ya contiene id_socio), pero no es minimal: sobra nombre. Por eso
no es candidata.
- Clave primaria elegida:
id_socio.
- Es estable (un identificador interno no cambia), simple (un solo
atributo numérico) y no nulo.
documento y email quedan como claves alternas, implementadas con una
restricción UNIQUE. Se evita usarlas como PK porque un documento puede
corregirse y un email puede cambiar, lo que obligaría a propagar el cambio a
todas las claves ajenas.
2. Claves ajenas del esquema
| Relación origen | Atributo(s) FK | Relación destino | Clave referenciada |
|---|
| LIBRO | id_editorial | EDITORIAL | id_editorial (PK) |
| EJEMPLAR | isbn | LIBRO | isbn (PK) |
| PRESTAMO | id_ejemplar | EJEMPLAR | id_ejemplar (PK) |
| PRESTAMO | id_socio | SOCIO | id_socio (PK) |
Toda FK referencia la clave primaria de la relación destino y respeta la
integridad referencial: no puede existir un préstamo de un ejemplar o socio
inexistente.
3. Clave primaria de PRESTAMO
PRESTAMO(id_ejemplar, fecha_prestamo, id_socio, fecha_devolucion).
Clave primaria: {id_ejemplar, fecha_prestamo}.
Por las reglas de negocio, un ejemplar puede prestarse muchas veces a lo largo
del tiempo (distintas fechas), pero en una fecha de préstamo dada solo está
prestado a un socio. Entonces el par (id_ejemplar, fecha_prestamo) identifica
unívocamente cada préstamo.
Por qué id_socio no forma parte de la clave: dado {id_ejemplar, fecha_prestamo}, el socio queda determinado funcionalmente
({id_ejemplar,fecha_prestamo}→id_socio). Es un
atributo dependiente, no un identificador. Añadirlo a la clave rompería la
minimalidad (sería superclave, no candidata).
4. Verdadero o falso
“Toda clave candidata es superclave, pero no toda superclave es clave candidata.”
VERDADERO.
- Toda clave candidata es superclave: por definición identifica unívocamente
cada tupla; la candidata solo añade la condición extra de ser minimal.
- No toda superclave es candidata: una superclave puede tener atributos de más
(p. ej.
{id_socio, nombre}); sigue identificando, pero al no ser minimal no es
candidata.
Formalmente, el conjunto de claves candidatas es un subconjunto propio del
conjunto de superclaves: candidatas⊊superclaves.