IIC2413 / Syllabus-2020-1

36 stars 22 forks source link

Duda Llaves Foráneas #122

Closed carajila closed 4 years ago

carajila commented 4 years ago

¿Para que sea una llave foránea dentro de una entidad, necesariamente tiene que ser llave de esa entidad? Por ejemplo tenemos las siguientes entidades: A(a: int PRIMARY KEY, b: int) B(c: int PRIMARY KEY, a:int FK) ¿Para este caso, "a" sería una llave foránea en B, por ser llave de A (pero no es llave de B)?

Siguiendo con lo mismo, ¿cuando tenemos una herencia, ahí si sería una llave foránea? Ejemplo, donde B es una entidad herencia de A: A(a: int PRIMARY KEY, b: int) b(a: int FK)

nivek0o0 commented 4 years ago

¿Para que sea una llave foránea dentro de una entidad, necesariamente tiene que ser llave de esa entidad?

Nop. Puede ser o no llave primaria, da lo mismo. No hay restricciones en ello.

Recuerda que PK sirve para evitar filas duplicadas en ésta tabla. FK sirve para evitar referenciar a una fila que no existe en otra tabla.

¿cuando tenemos una herencia, ahí si sería una llave foránea?

Sí, y también primaria. Lo mismo pasa en una tabla intermedia.

Tomas-Ira commented 4 years ago

Tengo una duda respecto a las FK. Si tengo la entidad ciudad, que tiene un atributo llamado pid(id del pais), tengo una relacion entre la tabla ciudades y la tabla paises, y tengo la entidad país.

¿No es redundante tener el atributo pid en la tabla ciudades? (Ya que tengo una tabla que las relaciona). En la tabla relación, debe haber un primary key? o solo 2 FKs?

nivek0o0 commented 4 years ago

Poner un atributo pid en la tabla Ciudades es una alternativa a crear la tabla intermedia.

En este caso no es necesaria la tabla intermedia puesto que una ciudad pertenece a un único país, por lo que la columna es suficiente.

Por otra parte, en una tabla intermedia deben haber tanto PK como FK. Las FKs serían los ids de ambas entidades que se están relacionando. La PK dependerá de la cardinalidad de la relación (ver otras issues donde se explica esto)