Javascript-форум (https://javascript.ru/forum/)
-   Node.JS (https://javascript.ru/forum/node-js-io-js/)
-   -   Как запретить удаление SQLITE (https://javascript.ru/forum/node-js-io-js/84201-kak-zapretit-udalenie-sqlite.html)

Jimy 05.07.2022 06:31

Как запретить удаление SQLITE
 
Добрый день! Есть две таблицы, Category и Good.
CREATE TABLE Good (
    id          INTEGER       PRIMARY KEY AUTOINCREMENT,
    title       VARCHAR (100),
    id_unit     INTEGER       REFERENCES Unit (id) DEFERRABLE INITIALLY DEFERRED
                              NOT NULL,
    id_category INTEGER       REFERENCES Category (id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED
                              NOT NULL
);


CREATE TABLE Category (
    id    INTEGER       PRIMARY KEY,
    title VARCHAR (100),
    image VARCHAR (200) 
);

В общем, мне надо запретить удаление категории, если в таблице товаров есть товары с данной категорией. Как это сделать можно? Сейчас удаляется.... Или проверять каждый раз это условие в коде удаления?
//Удаление
    router.post("/delete/:id", (req, res) => {
        const id = req.params.id;
        const sql = "DELETE from Category where (id =?)" ;
        db.run(sql,id,err => {
            if (err) {
               return console.error(err.message);
              }
              res.redirect("/category");
               });
         });

ksa 05.07.2022 08:45

Цитата:

Сообщение от Jimy
надо запретить удаление категории, если в таблице товаров есть товары с данной категорией. Как это сделать можно?

Перед удалением проверить есть ли в таблице товаров товары с такой категорией... Если нет - удалять.
В противном случае отвечать что удаление невозможно.

Jimy 05.07.2022 10:23

Ну я так и думал... А средствами самой СУБД нельзя?

ksa 05.07.2022 10:26

Цитата:

Сообщение от Jimy
А средствами самой СУБД нельзя?

Я с SQLITE не работал...
А в других SQL-подобных СУБД не встречал неких "ограничений" для удаления по наличию чего-то, где-то...

ksa 05.07.2022 11:33

Jimy, как вариант усилить условие на удаление...
Что-то типа такого
DELETE from Category where (id =?) and not EXISTS (SELECT * FROM Good  where id_category=?)

Но так будет не понятно удалилась запись или нет...


Часовой пояс GMT +3, время: 03:40.