Ответ
Foreign Key (внешний ключ) — это ограничение целостности в реляционных базах данных, которое обеспечивает ссылочную связь между таблицами. При разработке на Node.js с использованием ORM типа Sequelize или query builder типа Knex, внешние ключи гарантируют согласованность данных.
Пример реализации с Sequelize:
// Модель User
const User = sequelize.define('User', {
id: { type: DataTypes.INTEGER, primaryKey: true, autoIncrement: true },
name: DataTypes.STRING
});
// Модель Post с Foreign Key
const Post = sequelize.define('Post', {
id: { type: DataTypes.INTEGER, primaryKey: true, autoIncrement: true },
title: DataTypes.STRING,
content: DataTypes.TEXT,
userId: {
type: DataTypes.INTEGER,
references: {
model: User, // Ссылка на таблицу Users
key: 'id'
},
onDelete: 'CASCADE' // Удаление постов при удалении пользователя
}
});
// Определение связи
User.hasMany(Post, { foreignKey: 'userId' });
Post.belongsTo(User, { foreignKey: 'userId' });
Практическое применение в Node.js:
- При миграциях с Knex:
exports.up = function(knex) { return knex.schema.table('orders', function(table) { table.integer('customer_id').unsigned(); table.foreign('customer_id').references('id').inTable('customers'); }); }; - В REST API я проверяю существование связанных сущностей перед созданием записей.
- Использую каскадное удаление (
ON DELETE CASCADE) для автоматической очистки зависимых данных. - В сложных запросах JOIN опираюсь на внешние ключи для эффективного получения связанных данных.