Creo que eso no soluciona el problema (aunque se lo he puesto porque es necesario que valgan NULL si inicialmente no hacen referencia a ningún usuario).
Verás, cuando hago:
Código PHP:
DELETE FROM usuario;
me da el siguiente error:
Código PHP:
ERROR: insert or update on table usuario" violates foreign key constraint "usuario_cod_usuario_fkey"
Estado SQL:23503
Detalle:Key (cod_usuario)=(1) is not present in table "sub_usuario".
Contexto:SQL statement "UPDATE ONLY "public"."usuario" SET "depende2" = NULL WHERE "depende2" = $1"
Y mi lectura de ese error es que postgreSQL comprueba
al hacer DELETE FROM usuario qué elemento hace referencia a cod_usuario y hace con él lo que diga su sentencia ON DELETE (poner a nulo o borrarlo en cascada). Y ya no sigue comprobando más referencias a ese campo (al menos que vengan de una misma tabla). Entonces postgresql comprueba que depende2 y depende3 hacen referencia a algo que no existe y da ese error.
Esa es mi lectura del problema, quizás me equivoque, porque me parecería un fallo de postgreSQL, ya que no permitiría una relación como la que yo intento. Ahora mismo tengo incluido el DEFAULT NULL que me has dicho cacr. A pesar de eso, da ese error que es el mismo de antes.
A ver si alguien sabe cual puede ser la posible solución.