Las foreign keys (FK) son referencias de registros de una tabla a registros en otras tablas que condicionan la existencia de unas a las otras. Me explico con un ejemplo:
Imagina estas dos tablas para controlar los usuarios y las respuesas en todoexpertos:
Tabla: 'Usuarios' ; Campos: Código_usuario, nombre_usuario, fecha_alta
Tabla: 'Respuestas' ; Campos: Codigo_respuesta, Codigo_usuario, fecha_respuesta, Texto
La situación sería que para que exista una respuesta debe existir un usuario que la responda, por lo tanto, en la tabla respuestas debe existir una FK que la relacione con la tabla usuarios. En este caso la FK es el campo "Codigo_usuario" en la tabla "Respuestas".
Si a la hora de insertar un registro en la tabla Respuestas, el valor que pongamos en "codigo_usuario" no se encuentra en la tabla Usuario, la inserción devolverá un error de FK.
Este ejemplo es con un solo campo, pero una FK puede estar compuesta de múltiples campos.
¿Qué pasaría si creas la BD sin FKs?: Desde un punto de vista estricto, contando con que la programación de la aplicación sea perfecta, no pasaría nada pero siempre corres el riesgo de tener información no relacionada e incoherente debido a errores en inserciones, registros que se borren, actualicen etc. Es complicado controlar la integridad de una BD únicamente por código.
Totalmente de acuerdo con el compañero javier cg . Solo añadir que, al crear una restricción FK, puedes indicar reglas de actualización o eliminado de registros relacionados en cascada. Siguiendo con el ejemplo. esto significa que al eliminar un "usuario" se borrarían también sus "respuestas" manteniendo la coherencia de la BD y evitando tener campos huerfanos. - Víctor Fernández Portero