Closed VicenteVicente closed 5 years ago
Hola, claro! Las llaves foráneas no son restringidas, es más, son muy necesarias ya que son un atributo que se encarga de relacionar una tupla con otra de alguna otra tabla - y eso ya lo tienes en varias de las que les fueron entregadas.
Por ejemplo, para normalizar esquemas a veces necesitas crear tablas intermedias, como el ejemplo que vieron hace un tiempo en clases: Películas
y Actores
están relacionadas a través de la tabla Actuo_en
, la que tenía el id
de una película y de un actor que trabajó en ella en cada una de sus filas. Ahí puedes ver el uso de foreign keys en un esquema normalizado.
Saludos!
Hola, con respecto a esto, ese es un ejemplo donde Películas y Actores tienen relación N:N, pero en el caso en que hipotéticamente un actor solo pueda actuar en una película en su vida (relación 1:N), si hago uso de Foreing Key dentro de la tabla Actores para referirme a la tabla Películas ¿eso se considera normalizado? ¿o ni siquiera se necesita usar Foreing Key en este caso y ya estaría normalizado? Saludos!
Disculpa, creía que los atributos de Actuo_en
debía tener como primary key la tupla pid
y aid
, pero según lo que me dices, ¿deberían ser Foreign Key?
Saludos!
@VicenteVicenteVicenteVicenteVicente Ni pid
ni aid
serían primary key, ya que ninguno es único si la relación es N:N - ambas son foreign keys ya que pid
hace referencia a una película de la tabla Películas
y aid
a un actor de la tabla Actores
.
@Faalfaro Claro, en caso de que fuera 1:N no tendría sentido hacer una tabla intermedia, en ese caso basta con que cada actor tenga la única película en la que ha actuado como foreign key. Si estamos hablando netamente de este atributo, sí estaría normalizado, pero depende de qué otra información contengan tus tablas. Se entiende?
Saludos!
Clarísimo!, muchas gracias 😃
@VicenteVicenteVicenteVicenteVicente Creo que Valentina no te endendió y pensó que te referías a pid
y aid
como primary keys por separado o algo así. Sucede que como tupla sí es válido que sean Primary Key, ya que esa restricción evitará que se inserten filas repetidas en la tabla intermedia.
En general, una tabla intermedia se ve de la siguiente forma:
Aunque también tienes cmo alternativa agregar una 3ra columna que corresponda a un id único.
Saludos!
Entonces, si tengo una tabla Actuo_en
con TAN SOLO LAS COLUMNAS pid
(Película id) y aid
(Actor id), ¿estas deben ser PRIMARY KEY
como tupla (pid, aid)
y FOREIGN KEY
por separado (aid REFERENCES Actores(aid)
y pid REFERENCES Peliculas(pid)
)?
No es obligación, pero es una buena práctica que evitará que insertes filas repetidas y que luego al hacer JOINs se obtenga información duplicada.
Ahora sí, gracias! 😄
@VicenteVicenteVicenteVicenteVicente Sí, no te había entendido, perdón! Como dice @nivek0o0 es una buena práctica, puedes dejarla tal como está pero después podrías tener información redundante (a no ser que, dependiendo de tu consulta, uses distinct por ejemplo). En el ejemplo que te dio hace exactamente lo que dijiste :) Saludos!
Gracias!!!
¿Es permitido por BCNF utilizar Foreign Keys? Lo quiero hacer específicamente en una relacion 1:N