Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

¿Una clave foránea, puede ser nula?

Estas en el tema de ¿Una clave foránea, puede ser nula? en el foro de Bases de Datos General en Foros del Web. Bueno, a ver: Supongamos que tengo en una tabla una clave foránea de una columna. La columna "estación", que ha de coger el id. de ...
  #1 (permalink)  
Antiguo 01/03/2005, 21:36
 
Fecha de Ingreso: febrero-2005
Mensajes: 1.015
Antigüedad: 19 años, 10 meses
Puntos: 6
¿Una clave foránea, puede ser nula?

Bueno, a ver:

Supongamos que tengo en una tabla una clave foránea de una columna. La columna "estación", que ha de coger el id. de otra tabla. ¿Puede haber aquí valores nulos? En principio no, puesto que no coincidiría con ningún valor de la tabla de la clave primaria a la cual ha de seguir.

Entonces, ¿puede ser nula?

La cosa es que todavía no he creado la tabla "estaciones", y ya debería ir poniendo en los campos de la otra tabla, el id de la estación (pero como no las tengo, pues lo dejo en blanco).

(estoy con sql server pero me imagino que esto será genérico a todo sql).
  #2 (permalink)  
Antiguo 02/03/2005, 02:04
Avatar de parentesys  
Fecha de Ingreso: octubre-2003
Ubicación: Madrid
Mensajes: 235
Antigüedad: 21 años, 3 meses
Puntos: 0
Ningún tipo de clave, (foranea o principal) puede ser nula. Ten en cuenta que la clave foranea apunta a la clave principal de una tabla, y por definición las claves deben tener valores únicos y no nulos (integridad referencial).

Esto se aplica para todas las bases de datos relacionales (SQL SERVER, ORACLE, etc.)

Saludos
__________________
Administrador de :
givemefun.net
givemefun.org
  #3 (permalink)  
Antiguo 27/03/2005, 08:51
 
Fecha de Ingreso: febrero-2005
Mensajes: 1.015
Antigüedad: 19 años, 10 meses
Puntos: 6
Cita:
Iniciado por parentesys
Ten en cuenta que la clave foranea apunta a la clave principal de una tabla,
¿La clave foránea no puede apuntar a un campo de otra tabla que no sea clave principal?
  #4 (permalink)  
Antiguo 28/03/2005, 00:43
Avatar de parentesys  
Fecha de Ingreso: octubre-2003
Ubicación: Madrid
Mensajes: 235
Antigüedad: 21 años, 3 meses
Puntos: 0
Pon un ejemplo, por favor.
__________________
Administrador de :
givemefun.net
givemefun.org
  #5 (permalink)  
Antiguo 28/03/2005, 08:48
 
Fecha de Ingreso: febrero-2005
Mensajes: 1.015
Antigüedad: 19 años, 10 meses
Puntos: 6
Pues ahora que lo dices... Realmente hay pocos casos donde se dé eso.

Sí, en lo que yo estaba: supongamos que tengo una tabla en la que guardo objetos de cualquier tipo (por ejemplo, "coches"), y quiero en ella decir en qué localización están (y las localizaciones se encuentran en otra tabla). Bien, hasta aquí, tendríamos una clave foránea y una clave primaria (la clave primaria de localización estaría en su propia tabla de localizaciones), pero ahora supón, que mi tabla de "coches" la construyo ANTES de la tabla de localizaciones... y no puedo poner en el campo "localización" un valor nulo por eso mismo...
  #6 (permalink)  
Antiguo 04/04/2005, 00:34
Avatar de parentesys  
Fecha de Ingreso: octubre-2003
Ubicación: Madrid
Mensajes: 235
Antigüedad: 21 años, 3 meses
Puntos: 0
Si no quieres tener ese tipo de problemas, lo mejor es que siempre que crees un campo clave(ya sea primaria o ajena) lo hagas siempre sin permitir valores nulos.

Saludos
__________________
Administrador de :
givemefun.net
givemefun.org
  #7 (permalink)  
Antiguo 04/04/2005, 01:09
Avatar de Vice  
Fecha de Ingreso: agosto-2003
Mensajes: 613
Antigüedad: 21 años, 5 meses
Puntos: 2
Las claves foráneas se definen sobre la clave primaria de otra tabla y las claves primarias no admiten valores nulos, ergo, las claves foráneas no admiten valores nulos.
Un saludo.
__________________
Estoy contagiado de Generación-I
  #8 (permalink)  
Antiguo 04/04/2005, 03:30
 
Fecha de Ingreso: agosto-2002
Mensajes: 230
Antigüedad: 22 años, 4 meses
Puntos: 1
todo depende del diseño que tengas de tu base de datos, imagínate que tienes una relación 1-0..1, es decir que tu registro se pueda relacionar con 0 o con un registro de otra tabla, en este caso estás permitiendo que esa clave foránea pueda ser nula ya que permites que no se relacione con ningún registro de la otra tabla, otra cosa es que en la otra tabla al dar de alta un registro el valor de la clave no puede ser nulo, de manera que al relacionar las dos tablas la clave foránea no puede ser nula

No se si me he explicado, sino es así intento poner un ejemplo y explicarlo mejor
  #9 (permalink)  
Antiguo 04/04/2005, 11:02
 
Fecha de Ingreso: febrero-2005
Mensajes: 1.015
Antigüedad: 19 años, 10 meses
Puntos: 6
Cita:
Iniciado por Vice
Las claves foráneas se definen sobre la clave primaria de otra tabla y las claves primarias no admiten valores nulos, ergo, las claves foráneas no admiten valores nulos.
Un saludo.
¿Seguro? ¿No puedes referenciar a un campo que no sea clave primaria? Yo creo que sí, y más según lo que he ido averiguando por ahí (para hacerlo desde el analizador de consultas).

El único requisito indispensable es que los dos campos tengan el mismo tipo de datos, tamaño, etc., pero no es necesario que el campo "clave primaria" sea clave primaria en su propia tabla (aunque generalmente, lo será).

Última edición por un_tio; 04/04/2005 a las 11:03
  #10 (permalink)  
Antiguo 04/04/2005, 12:07
Avatar de padrino  
Fecha de Ingreso: mayo-2004
Ubicación: Aguascalientes, Ags. la tierra de la gente buena
Mensajes: 161
Antigüedad: 20 años, 7 meses
Puntos: 0
Nada es imposible

sabes, nada es imposible en esta vida, mira una cosa es el poder y otra el deber, lo que estas haciendo va encontra de la definicion de integridad referencial, ya que si admitieras valores nulos no podias asegurar una integridad referencial en tus Bases de Datos. por lo cual te digo que vas por mal camino, con el ejemplo de las estaciones, por querer correr antes de aprender a caminar te vas a caer y creeme sera una caida dura, te pongo un ejemplo despues de varios registros nulos como sabras cual pertenece a cual estacion???? sera imposible, pero si puedes saberlo, eso me indicaria que no tienes bien normalizadas tus tablas y estarias redundando informacion..



suerte
__________________
The God Father
__________________________________________
No hay un error tan grande como el de no seguir adelante (:pensando:) William Blake
  #11 (permalink)  
Antiguo 04/04/2005, 13:19
 
Fecha de Ingreso: febrero-2005
Mensajes: 1.015
Antigüedad: 19 años, 10 meses
Puntos: 6
padrino no me eches sermones anda... jajaja. Que yo ni siquiera voy a hacer esto que estoy diciendo, lo decía por saberlo simplemente y oír la opinión de todos.

Y de lo último que estábamos diciendo, el interés podría ser grande: el que referencies a un campo aunque no sea clave primaria. Vamos, sería una especie de hacer un "check". Lo que podría ocurrir sería que realmente no hiciera falta, y estuviéramos redundando información; no lo sé, sería cosa de analizarlo en profundidad.

Última edición por un_tio; 04/04/2005 a las 13:20
  #12 (permalink)  
Antiguo 05/04/2005, 01:09
 
Fecha de Ingreso: agosto-2002
Mensajes: 230
Antigüedad: 22 años, 4 meses
Puntos: 1
si no fuera una clave primaria no podrías identificar el registro al que hace referencia, con lo que no se si sería de utilidad, si puede haber valores repetidos en ese campo cómo identificas el registro?
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Tema Cerrado

SíEste tema le ha gustado a 1 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 00:42.