Добавление Foreign key с условием

246
14 сентября 2018, 05:30

У меня есть 3 таблицы:
Inventory1 : id | item
Inventory2 : id | item
Warehouse : _id | inventory_id | type_
Inventory1 и Inventory2 это таблицы, которые похожи, но содержат информацию для разных блоков сайта. В свою очередь Warehouse содержит последовательность записей Inventory при этом важна последовательность (например сначала идет строка из Inventory1-Inventory1-Inventory2-Inventory1 и т.д.) для определения к какой из двух таблиц относится запись в Warehouse используется поле type.
Основной вопрос: можно ли настроить внешний ключ (с ON DELETE CASCADE возможно с условием типа WHERE type = 1/0 ?) таким образом, чтобы например удалении строки из Inventory1 приводило к удалению записи в Warehouse именно с inventory_id = Inventory1.id?
Возможно есть вариант более правильной архитектуры таблиц для данной задачи?
Заранее спасибо!

Answer 1

Мне кажется в вашем случае лучше использовать триггерную функцию.

CREATE OR REPLACE FUNCTION public.delete_inventory()
RETURNS trigger AS
$BODY$DECLARE
pid integer;
BEGIN
pid = NEW.id;
IF TG_OP = 'DELETE' THEN
DELETE FROM Warehouse where id = pid
RETURN OLD;
END;$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION public.delete_inventory()
OWNER TO postgres;
READ ALSO
Вывод больших дробей из базы

Вывод больших дробей из базы

В базе есть запись со значением 00000000500

261
ошибка sql запроса (неизвестный столбец)

ошибка sql запроса (неизвестный столбец)

Подскажите почему не работает запрос по псевдонимному столбцу (time_work):

256
Подсчет строк таблицы MySQL

Подсчет строк таблицы MySQL

Пытаюсь подсчитать кол-во одинаковых полей сборной таблицы(из 2-х шт)

254
MySQL запрос, выборка из таблиц

MySQL запрос, выборка из таблиц

Имеется две таблицы: catalog, catalog_alias

257