2009-09-01 9 views
10

¿Una clave externa que hace referencia a una clave primaria necesita la restricción NOT NULL en una base de datos PostgreSQL?
La base de datos está muy normalizada y será muy grande. No deseo agregar restricciones adicionales que ralentizarán las consultas aún más si dichas consultas no son necesarias.¿Una PK de referencia de clave externa necesita la restricción NOT NULL?

+1

¿Es la velocidad de su aplicación realmente más importante que la corrección? No se dará cuenta de los costos de un cheque no nulo. La respuesta a su pregunta es no, pero especificaría cualquier restricción conocida. –

Respuesta

11

Si desea poder representar desconocido en la columna FK de esa tabla, puede convertirlo en nulo, si tiene que tener un valor, que sea No nulo.

Puede tener tantos registros como desee en la tabla de referencia con valores FK nulos. La restricción única está en las filas de la tabla referenciada (donde está la PK) y no en las filas de la tabla de referencia (donde está el FK).

+1

Esto es correcto. Para decirlo de otra manera, depende de si estás modelando una relación 1: N o una relación 0..1: N. es decir, ¿es la relación opcional? –

+0

relación 1: 1. La tabla en la que estoy trabajando es una tabla de bridge. – WolfmanDragon

+1

Si es 1: N Entonces la columna FK DEBERÍA tener la restricción No nulo. –

-1

Una clave principal debe ser única e idealmente debe ser seleccionada por la base de datos para limitar los problemas de simultaneidad, por lo que, aunque puede ser única, para 1 registro, cualquier otro registro debe tener un valor.

De lo contrario, ¿cómo sabrá a qué fila se refiere esta clave externa si hay más de una coincidencia?

Por lo tanto, como Nuevo en la ciudad mencionada, NULL debe ser válido, pero para un solo registro, ya que la singularidad será el problema más grande.

EDITAR: oops, malentendió la pregunta.

He puesto nulo antes en las claves foráneas, pero si tiene la opción de eliminar en cascada, por ejemplo, null no funcionará, a menos que tenga la clave en la tabla principal con un valor nulo.

+2

OP preguntaba sobre la restricción "no nula" en la tecla _FOREIGN_ – ChssPly76

Cuestiones relacionadas