Включение каскадного удаления по обе стороны соединительной таблицы - PullRequest
0 голосов
/ 25 мая 2018

У меня есть одна User модель с первичным ключом id.В настоящее время я моделирую Supervisor> Отношения пользователей с таблицей соединений, называемой user_supervisors, которая имеет только два столбца, user_id и supervisor_id, оба из которых являются внешними ключами, ссылающимися на первичный ключ записи User.

Возможно ли, что когда я удаляю пользователя (независимо от того, является ли он супервизором или нет), все записи, содержащие этого пользователя в таблице user_supervisors, также удаляются?

Я пытался сделатьиспользование каскадных удалений sql-сервера, но не представляется возможным иметь каскадные удаления одновременно для внешних ключей user_id и supervisor_id.Я всегда сталкиваюсь с сообщением следующего содержания:

Knex: предупреждение - миграция не выполнена с ошибкой: CREATE TABLE [user_supervisors] ([user_id] int, [supervisor_id] int, CONSTRAINT [user_supervisors_pkey] PRIMARY KEY([user_id], [supervisor_id]), CONSTRAINT [user_supervisors_user_id_foreign] FOREIGN KEY ([user_id]) ССЫЛКИ [users] ([id]) ON УДАЛИТЬ CASCADE, CONSTRAINT [user_supervisors_supervisor_id_foreign] [FOREIGN][id]) ON DELETE CASCADE) - Не удалось создать ограничение или индекс.См. Предыдущие ошибки.

Для записи, которую я использую knex для запуска миграций моей базы данных Ниже приведен SQL, используемый при создании каждой таблицы, упомянутой выше:

CREATE TABLE [users] 
(
    [id] int identity(1,1) not null primary key
    , [created_at] datetime
    , [updated_at] datetime
    , [email] nvarchar(255) not null
    , [first_name] nvarchar(255)
    , [last_name] nvarchar(255)
    , [password] nvarchar(255) not null
    , [company_id] int
    , CONSTRAINT [users_email_unique] UNIQUE ([email])
    , CONSTRAINT [users_company_id_foreign] FOREIGN KEY ([company_id]) REFERENCES [companies] ([id]) ON DELETE CASCADE
)

CREATE TABLE [user_supervisors] 
(
    [user_id] int
    , [supervisor_id] int
    , CONSTRAINT [user_supervisors_pkey] PRIMARY KEY ([user_id], [supervisor_id])
    , CONSTRAINT [user_supervisors_user_id_foreign] FOREIGN KEY ([user_id]) REFERENCES [users] ([id]) ON DELETE CASCADE
    , CONSTRAINT [user_supervisors_supervisor_id_foreign] FOREIGN KEY ([supervisor_id]) REFERENCES [users] ([id])
)
...