2016-04-05 6 views
-1

У меня есть база данных с 2 таблицы, которые выглядят как:SQL ALTER TABLE на TRIGGER

TABLE_1       TABLE_2 
ID  NAME      ID  object1  object2     

1  object1     1  TRUE   FALSE 
2  object1     2  TRUE   TRUE 
2  object2 

Я хочу, чтобы для каждого нового объекта на TABLE_1, это добавить колонку на TABLE_2. И для каждого нового идентификатора на TABLE_1 он добавляет новое Происхождение на TABLE_2 (но я знаю, как сделать «только» этот).

Для Exemple с INSERT INTO TABLE_1 values(1,"object3"); Я хочу

TABLE_1     TABLE_2 
ID  NAME    ID  object1  object2  object3    

1  object1    1  TRUE   FALSE   TRUE 
2  object1    2  TRUE   TRUE   FALSE 
2  object2      
1  object3 

и с INSERT INTO TABLE_1 values(3,"object2);

TABLE_1     TABLE_2 
ID  NAME    ID  object1  object2  object3    

1  object1    1  TRUE   FALSE   TRUE 
2  object1    2  TRUE   TRUE   FALSE 
2  object2    3  FALSE   TRUE   FALSE      
1  object3 
3  object2 

Это не нужно заполнить добавленный столбец (я могу сделать это вручную).

Я пытался сделать это

CREATE TRIGGER triggTest 
BEFORE INSERT 
ON TABLE_1 
WHEN (NEW.NAME not in (SELECT NAME FROM TABLE_1)) 
BEGIN 
ALTER TABLE TABLE_2 
ADD NEW.NAME BOOLEAN 
END; 

Но это не сработало ... Вы можете мне помочь? (И извините, если мой английский не идеален)

+2

Я думаю, вы должны обновить свой дизайн своей базы данных. Изменить таблицу на вставке мне не кажется законным. – vaso123

+0

Синтаксис выглядит как MySQL, поэтому я удалил тег mysql. –

+0

Если вы знаете другой способ иметь TABLE_2, как я показал его, так что я мог бы продлить дизайн ... В настоящее время я не вижу другого способа сделать это – Driikolu

ответ

0

Похоже, вам нужно больше таблиц для достижения того, чего вы хотите.

Табличные идентификаторы должны быть уникальными. Идентификаторы «TABLE_1», которые не являются уникальными, должны храниться в другой таблице в качестве Первичных ключей, тогда ваша таблица «TABLE_1» может ссылаться на другую таблицу, содержащую эти идентификаторы как ForeignKeys.

Ваша таблица «TABLE_2» выглядит так, что ее следует разбить на две части: одну, которая будет содержать ваши «объекты», и одну, которая связывает «объекты» и «идентификаторы».

Или это только вид «TABLE_1», отображаемый по-разному? Тогда вы можете просто отказаться от него.

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