lunes, 5 de diciembre de 2016

[SQL] Foreign Key para principiante scripts

Buenas! Hoy vamos a ver qué es un foreign key y cómo crear tablas relacionadas por un foreign key por medio de scripts en SQL Server:
Supongamos que queremos crear una relación como la siguiente:
Donde Subtema esta estrechamente relacionado con tema, ya que cada SubTema tien un Tema propio,  para referirnos a esto vamos a llamarle "padre" a Tema e "hijo" a SubTema. Ejemplo:
Tema: Deportes
  • Subtema: Futbol
  • Subtema: Baseball
  • Subtema: Basketball
Tema: Paises
  • Subtema: Argentina
  • Subtema: México
  • Subtema: Costa Rica
Pero para representar estas relaciones es muy tedioso agregar un campo en cada subtema que tenga de nuevo el nombre del tema, por ello utilizamos los Foreign Key, que son campos/atributos de la tabla "hijo" que posee el número de ID correspondiente a su "padre".
Así por ejemplo imaginemos que la fila 1 de Tema corresponde a Deportes y la fila 2 a Paises:


 

Entonces nuestra tabla de Subtema quedaría de la siguiente forma:

Si son observadores se darán cuenta que cada subtema tiene su correspondiente categoría en el tema al que pertenece en el campo "fkTema" (por ejemplo México tiene 2 ya que es el ID de "Países" y Futbol tiene 1 ya que es el ID de "Deportes"). No sería congruente si Argentina tuviera 1 ya que Argentina no es un Deporte, ni que Baseball tuviera el 2 ya que Baseball no es un país. A esta relación de tablas le llamamos foreign key o fk y es IMPORTANTE que sea entre el ID de la tabla "padre" y el campo correspondiente en la tabla "hijo". Son importantes porque optimizan consultas dentro del lenguaje SQL.

CÓDIGO
Para implementar estas relaciones basta el siguiente código (el cual puede conseguir en el enlace):
Notese que luego del constraint debemos nombrar la relación con el nombre que querramos, a continuación en los paréntesis del foreign key debemos escribir el nombre de la columna que va a albergar el fk, en reference escribirmos el nombre de la tabla "padre"y entre parentesis el ID de esta tabla padre.

No hay comentarios: