Для создания связи 1-к-1 с возможностью каскадного удаления используется функционал sequelize - одной из самых популярных ORM для работы с базами данных в Node.js.
Для начала, установите необходимые пакеты:
npm install sequelize sequelize-typescript
После этого, создайте модели для обоих связанных объектов.
Например, пусть у нас есть модели User
и Profile
, причем каждый пользователь имеет только один профиль, а при удалении пользователя также нужно удалить и его профиль.
import { Model, Table, Column, PrimaryKey, ForeignKey, BelongsTo } from 'sequelize-typescript'; import { User } from './user.model'; @Table export class Profile extends Model<Profile> { @PrimaryKey @Column id: number; @Column firstName: string; @Column lastName: string; @ForeignKey(() => User) @Column userId: number; @BelongsTo(() => User, { onDelete: 'CASCADE' }) user: User; } @Table export class User extends Model<User> { @PrimaryKey @Column id: number; @Column username: string; @Column email: string; @HasOne(() => Profile, { onDelete: 'CASCADE' }) profile: Profile; }
В модели Profile
мы используем декоратор @BelongsTo
для определения связи с моделью User
, указывая при этом опцию onDelete: 'CASCADE'
. Это позволяет установить каскадное удаление, при котором при удалении пользователя будет также удален и его профиль.
В модели User
мы используем декоратор @HasOne
для определения связи с моделью Profile
с тем же параметром onDelete: 'CASCADE'
.
Теперь, при создании или удалении объектов User
и Profile
, sequelize автоматически управляет каскадным удалением, сохраняя целостность данных и упрощая кодирование логики удаления связанных объектов.
Для большего количества моделей вам может потребоваться расширить или изменить код в соответствии с вашей конкретной ситуацией, однако данное объяснение предоставляет базовую концепцию работы с sequelize-typescript для создания связи 1-к-1 с возможностью каскадного удаления.