Удаление устаревших данных из таблицы картографа - PullRequest
0 голосов
/ 16 апреля 2019

Я работаю над дизайном со следующими объектами на C # и Microsoft SQL Server для моего школьного проекта

Таблица пользователей - таблица пользователей, в которой хранится информация о пользователях

Таблица продуктов - Таблица продуктов, в которой хранится информация о продуктах

Таблица избранного - таблица избранного продукта пользователя, отображающая идентификаторы пользователя и productId для избранного

Пользователь предпочитает товар PUT - / users / {userId} / products / {productId} / избранное

Проверяет, существуют ли userId и productId, и вставляет запись в таблицу Избранное с userId и productId

Пользователь выбрал товар УДАЛИТЬ - / users / {userId} / products / {productId} / избранное

Проверяет, существуют ли userId и productId, и удаляет существующую запись (userId, productId) из таблицы Избранного

Список всех любимых продуктов для пользователя GET - / users / {userId} / favourites - возвращает список productIds

Я думаю о способах обработки следующего варианта использования для Список всех любимых продуктов для пользователя

1) Если продукт удален, каким образом можно удалить данные из таблицы избранного.

Я думаю о следующих путях

  • Удалить записи (userId, productId) из таблицы избранного, а также при удалении продукта.
  • Во время вызова GET для получения всех любимых продуктов для пользователя я перебираю каждый productId, чтобы проверить, существует ли продукт

Какой из этих двух подходов лучше или я что-то здесь упускаю

1 Ответ

0 голосов
/ 17 апреля 2019

Вы должны использовать внешние ключи, чтобы связать product_id в таблице избранного с идентификатором продукта в таблице products.Таким образом, вы можете определить, что делать со связанными избранными при удалении определенного продукта.

Поскольку вы не предоставили схему своей базы данных, код может потребовать некоторой настройки на основе определений столбцов.

ALTER TABLE db.Favorites
ADD CONSTRAINT FK_Favorites_Products
    FOREIGN KEY (ProductID) REFERENCES db.Products(ID) ON DELETE CASCADE

С помощью этого запроса вы определяете внешний ключ (называемый FK_Foving_Products) в таблице Избранное , которая сопоставляет столбец ProductID с идентификаторами продуктов .Это также помешало бы иметь записи в таблице «Избранное» с идентификатором продукта, который не соответствует ни одному из идентификаторов таблицы «Продукты».

Всякий раз, когда продукт удаляется , все Избранное записи, которые имеют ProductID = ID продукта, который вы удаляете, также будут удалены.

...