Триггер аналог внешнего ключа

Drakon

Новичок
Триггер аналог внешнего ключа

Есть таблица, в которой хранятся связи с разными таблицами...
Например вот так:
Код:
CREATE TABLE links_list (`type` INT NOT NULL , `item_id` INT NOT NULL , `link_info`VARCHAR(255));

CREATE TABLE type_1 ( id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255) );
CREATE TABLE type_2 ( id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255) );
CREATE TABLE type_3 ( id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255) );
Если links_list.type = 1, то item_id указывает на таблицу type_1, если links_list.type = 2, то item_id указывает на type_2 и т. д.

Так вот хочу чтобы при добавлении в links_list например значений (1,10,'aaaa') проверялось, что в таблице type_1 есть строка с id=10 и если её нету, то чтоб вставка записи блокировалась. Вопрос в том, что не пойму как в триггере блокировать вставку записи.
 

x-yuri

Новичок
Drakon а зачем связывать с несколькими таблицами через одно поле?
 

tashkentchi

Новичок
Drakon, осознал свою ошибку. Невнимательно прочел твою проблему.

Тогда другое интересует. Почему бы не объединить таблицы type_1, ..., type_3 в одну?
 

Drakon

Новичок
На тот пример, что я привёл вариант через внешние ключи вижу тока один: сделать 3 поля: item_id_type1, item_id_type2, item_id_type3: первое поле будет для связи с таблицей type_1, второе с type_2, третье c type_3.
В принципе вариант работоспособен и памяти не так уж много займёт, но менять код, который работает с этими таблицами чего-то неохото... Вот и задумался о триггере.

-~{}~ 02.03.09 01:58:

Автор оригинала: tashkentchi

Тогда другое интересует. Почему бы не объединить таблицы type_1, ..., type_3 в одну?
Это я для простоты восприятия таблицы сделал одинаковыми... В реальности они у меня очень разные и описывают совершенно разные сущности.

Как один из вариантов блокировки добавления записи вижу выполнить деление на 0... Но как-то некрасиво, должны же быть штатные методы в MySQL сделать это.
 
Сверху