sql >> Base de Datos >  >> RDS >> Sqlserver

¿Puede una clave externa ser NULL y/o duplicada?

Respuesta corta:Sí, puede ser NULL o duplicado.

Quiero explicar por qué una clave foránea podría necesitar ser nula o podría necesitar ser única o no única. Primero, recuerde que una clave externa simplemente requiere que el valor en ese campo exista primero en una tabla diferente (la tabla principal). Eso es todo lo que un FK es por definición. Null por definición no es un valor. Nulo significa que aún no sabemos cuál es el valor.

Déjame darte un ejemplo de la vida real. Suponga que tiene una base de datos que almacena propuestas de ventas. Supongamos además que cada propuesta solo tiene asignado un vendedor y un cliente. Entonces, su tabla de propuestas tendría dos claves foráneas, una con la identificación del cliente y otra con la identificación del representante de ventas. Sin embargo, en el momento en que se crea el registro, no siempre se asigna un representante de ventas (porque nadie tiene la libertad de trabajar en él todavía), por lo que se completa la identificación del cliente, pero la identificación del representante de ventas puede ser nula. En otras palabras, generalmente necesita la capacidad de tener un FK nulo cuando es posible que no sepa su valor en el momento en que se ingresan los datos, pero sí conoce otros valores en la tabla que deben ingresarse. Para permitir nulos en un FK, generalmente todo lo que tiene que hacer es permitir nulos en el campo que tiene el FK. El valor nulo está separado de la idea de que sea un FK.

Si es único o no único se relaciona con si la tabla tiene una relación uno-uno o uno-muchos con la tabla principal. Ahora, si tiene una relación de uno a uno, es posible que pueda tener todos los datos en una tabla, pero si la tabla se vuelve demasiado ancha o si los datos son sobre un tema diferente (el ejemplo del empleado - seguro que @tbone dio por ejemplo), entonces desea tablas separadas con un FK. Luego, querrá hacer que este FK sea también el PK (lo que garantiza la unicidad) o ponerle una restricción única.

La mayoría de los FK son para una relación de uno a muchos y eso es lo que obtiene de un FK sin agregar una restricción adicional en el campo. Por lo tanto, tiene una tabla de pedidos y la tabla de detalles del pedido, por ejemplo. Si el cliente pide diez artículos a la vez, tiene un pedido y diez registros de detalles de pedido que contienen el mismo ID de pedido que el FK.