He visto a muchas personas escribir migraciones sin definir restricciones de clave externa, incluido Jeffrey Way en sus videos . Por ejemplo,
Schema::create('post',function(Blueprint $table){ $table->id(); $table->integer('user_id')->index(); $table->text('body'); // });Aquí, no hay una restricción de clave externa definida como la siguiente
$table->foreign('user_id')->references('id')->on('users');Siempre defino clave externa porque así es como mantienes las relaciones y la integridad entre las tablas. Pero he visto muchos videos donde no definen la clave foránea. ¿Hay alguna razón específica detrás de esto?
Las restricciones de clave externa hacen que su base de datos sea consistente. No conozco otra forma de hacer algo como en cascada. Deberías leer sobre esto también. Considere un escenario en el que elimina el elemento principal y el elemento secundario simplemente está sentado allí en alguna tabla relacionada. ¡eh! Ahora eso puede romper su aplicación.
PD: No es necesario pero DEBE hacerse.
No es necesario, pero deberíamos indexar todo lo que usamos en where(). Entonces sí, debe crear claves externas, de esta manera crea índices y vincula las tablas.
Las únicas razones para no usar estas claves son si no necesita consistencia en su base de datos o si está seguro de que su marco/código no es propenso a estos errores de referencia. Pero como se ve en los videos, las claves foráneas no tienen que estar definidas para tener relaciones funcionales en su aplicación laravel.