2016-04-05 19 views
-1

Ich habe eine Datenbank mit 2 Tabellen, die wie folgt aussehen:SQL ALTER TABLE auf TRIGGER

TABLE_1       TABLE_2 
ID  NAME      ID  object1  object2     

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

Ich möchte, dass für jedes neue Objekt auf table_1, eine Spalte auf table_2 hinzufügen. Und für jede neue ID in TABLE_1 fügt sie ein neues Vorkommen auf TABLE_2 hinzu (aber ich weiß, wie man "nur" dieses tut).

Für exemple mit INSERT INTO TABLE_1 values(1,"object3"); Ich möchte

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 

und mit 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 

notwendig Es ist nicht die zusätzliche Spalte zu füllen (ich kann es manuell).

ich versucht, dieses

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; 

zu tun, aber es hat nicht funktioniert ... Können Sie mir helfen? (Und tut mir leid, wenn mein Englisch ist nicht perfekt)

+2

Ich denke, Sie sollten Ihr Design Ihrer Datenbank erneuern. Alter Tisch auf einer Beilage ist für mich nicht legitim. – vaso123

+0

Die Syntax sieht wie MySQL aus, also habe ich das mysql-Tag entfernt. –

+0

Wenn Sie eine andere Möglichkeit kennen, TABLE_2 zu haben, wie ich es gezeigt habe, könnte ich in der Lage sein, das Design zu erneuern ... Momentan sehe ich keinen anderen Weg – Driikolu

Antwort

0

Es sieht aus wie Sie mehr Tabellen benötigen, um zu erreichen, was Sie wollen.

Tabellen-IDs sollten eindeutig sein. "TABLE_1" IDs, die nicht eindeutig sind, sollten in einer anderen Tabelle als Primärschlüssel geführt werden, dann könnte Ihre Tabelle "TABLE_1" auf diese andere Tabelle verweisen, die diese IDs als ForeignKeys enthält.

Ihre Tabelle "TABLE_2" sieht so aus, als sollte sie in zwei Teile geteilt werden: eine, die Ihre "Objekte" enthält, und eine, die "Objekte" und "IDs" assoziiert.

Oder ist es nur eine Ansicht von "TABLE_1", anders angezeigt? Dann kannst du es einfach fallen lassen.

Bitte lesen Sie über Junction tables und SQL und relationale Datenbanken im Allgemeinen, weil Sie mehr Wissen benötigen, bevor Sie Ihr Projekt starten.