FOREIGN KEYS
solo asegúrese de que sus datos sean consistentes.
No mejoran las consultas en términos de eficiencia, solo hacen que algunas consultas incorrectas fallen.
Si tienes una relación como esta:
CREATE TABLE department (id INT NOT NULL)
CREATE TABLE employee (id INT NOT NULL, dept_id INT NOT NULL, FOREIGN KEY (dept_id) REFERENCES department(id))
, entonces no puede eliminar un department
si tiene algunos employee
.
Si proporciona ON DELETE CASCADE
a la FOREIGN KEY
definición, las filas de referencia se eliminarán automáticamente junto con las referenciadas.
Como restricción, en FOREIGN KEY
realidad ralentiza un poco las consultas.
Es necesario realizar una verificación adicional al eliminar de una tabla de referencia o insertar en una de referencia.
JOIN
puede ser mucho menos eficiente que dos DELETE que usan FULL TABLE SCANLos principales beneficios de usar claves externas reales son garantizar la integridad de los datos y poder configurar acciones en cascada en elementos relacionados cuando algo se modifica o elimina.
Por ejemplo, imagina que estás programando un foro. Tiene una tabla de "temas" con clave principal
topics.topic_id
y tiene una tabla de "publicaciones" donde las publicaciones se adjuntan a los temas con la columnaposts.topic_id
, que es una clave externa a la tabla de temas.Esta relación de clave externa garantiza que cada publicación se adjunte a un tema válido. Si el único tema que tiene tiene ID # 1, es imposible que exista una publicación en la base de datos adjunta al tema # 2. La base de datos asegura esto.
Para el beneficio en cascada, puede configurarlo para que, si se elimina un tema de la tabla de temas, la base de datos elimine automáticamente todas las publicaciones en la tabla de publicaciones que se adjuntaron a este tema. Esto es bueno porque elimina un paso que debe recordar hacer manualmente, que puede volverse bastante complejo cuando tiene muchas tablas vinculadas entre sí. Con las claves externas, todas las relaciones se pueden limpiar automáticamente.
fuente
1.FOREIGN KEYS solo asegúrese de que sus datos sean consistentes.
2. Si aplicamos en cascada de eliminación a la definición de clave externa, la fila de referencia se eliminará automáticamente cuando la fila principal se elimine.
3. Si aplicamos Update Cascade a la definición de clave externa, la fila secundaria se actualizará automáticamente cuando la fila principal se actualice.
Consulta: ALTER TABLE child ADD FOREIGN KEY (parent_id) REFERENCES parent (id) ON UPDATE CASCADE ON DELETE CASCADE;
fuente
La principal ventaja es que puede limitar los valores que puede ingresar en la tabla; si intenta ingresar un valor que no existe en la tabla referenciada, no podrá hacerlo.
Además, si actualiza o elimina el valor en la tabla referenciada, puede configurarlo para que actualice automáticamente el valor o elimine en cascada cualquier fila que contenga ese valor.
De hecho, es una gran característica aprovechar su código.
fuente