versucht, diese Trigger zu schreiben, aber ich kann es nicht wirklich funktionieren ..Sie benötigen Hilfe beim Schreiben von SQL-Trigger
Was ich tun muss:
ein Element aus der Elementtabelle löschen, aber gleichzeitig Löschen Sie alle Fragen, die dem Element zugeordnet sind, sowie alle Fragen, die mit dieser Frage verbunden sind. Diese gelöschten Datensätze müssen dann in den archivierten Tabellen mit dem Zeitpunkt des Löschens sowie der ID des Operators, der sie gelöscht hat, gespeichert werden.
Eine Frage kann mehrere Updates zugeordnet haben, da ein Artikel viele Fragen dazu haben kann.
Ich habe das ganze Schema in die SQL-Fiedel gelegt, da es viel einfacher ist, dort zu arbeiten, aber ich werde es hier einfügen, wenn nötig.
Die Verbindung zum SQL Geige:
http://sqlfiddle.com/#!1/1bb25
EDIT: Ich dachte, es auch hier ..
setzen könnteTables:
CREATE TABLE Operator
(
ID INTEGER NOT NULL PRIMARY KEY,
Name VARCHAR(40) NOT NULL
);
CREATE TABLE Item
(
ID INTEGER NOT NULL PRIMARY KEY,
Name VARCHAR(40) NOT NULL
);
CREATE TABLE Faq
(
ID INTEGER NOT NULL PRIMARY KEY,
Question VARCHAR(150) NOT NULL,
Answer VARCHAR(2500) NOT NULL,
ItemID INTEGER,
FOREIGN KEY (ItemID) REFERENCES Item(ID)
);
CREATE TABLE Customer
(
ID INTEGER NOT NULL PRIMARY KEY,
Name VARCHAR(20) NOT NULL,
Email VARCHAR(20) NOT NULL
);
CREATE TABLE Question
(
ID INTEGER NOT NULL PRIMARY KEY,
Problem VARCHAR(1000),
AskedTime TIMESTAMP NOT NULL,
CustomerID INTEGER NOT NULL,
ItemID INTEGER NOT NULL,
FOREIGN KEY (ItemID) REFERENCES Item(ID),
FOREIGN KEY (CustomerID) REFERENCES Customer(ID)
);
CREATE TABLE qUpdate
(
ID INTEGER NOT NULL PRIMARY KEY,
Message VARCHAR(1000) NOT NULL,
UpdateTime TIMESTAMP NOT NULL,
QuestionID INTEGER NOT NULL,
OperatorID INTEGER,
FOREIGN KEY (OperatorID) REFERENCES Operator(ID),
FOREIGN KEY (QuestionID) REFERENCES Question(ID)
);
-- Archive Tables
CREATE TABLE DeletedQuestion
(
ID INTEGER NOT NULL PRIMARY KEY,
Problem VARCHAR(1000),
AskedTime TIMESTAMP NOT NULL,
CustomerID INTEGER NOT NULL,
ItemID INTEGER NOT NULL
);
CREATE TABLE DeletedqUpdate
(
ID INTEGER NOT NULL PRIMARY KEY,
Message VARCHAR(1000) NOT NULL,
UpdateTime TIMESTAMP NOT NULL,
Question INTEGER NOT NULL
);
CREATE TABLE DeletedItem
(
ID INTEGER NOT NULL PRIMARY KEY,
Name VARCHAR(40) NOT NULL,
OperatorDeleteID INTEGER NOT NULL,
FOREIGN KEY (OperatorDeleteID) REFERENCES Operator(ID)
);
Einige Proben Einsätze für die Prüfung
--Product Inserts
INSERT INTO Item (ID, Name) VALUES (1, 'testitem1');
INSERT INTO Item (ID, Name) VALUES (2, 'testitem2');
--Operator Inserts
INSERT INTO Operator (ID, Name) VALUES (1, 'testname1');
INSERT INTO Operator (ID, Name) VALUES (2, 'testname2');
--Faq Inserts
INSERT INTO Faq (ID, Question, Answer, ItemID) VALUES (1, 'testq1', 'testa1', 1);
INSERT INTO Faq (ID, Question, Answer, ItemID) VALUES (2, 'testq2', 'testa2', 2);
-- Customer Inserts
INSERT INTO Customer (ID, Name, Email) VALUES (1, 'testcust1', 'testemail1');
INSERT INTO Customer (ID, Name, Email) VALUES (2, 'testcust2', 'testemail2');
-- Question Inserts
INSERT INTO Question (ID, Problem, AskedTime, CustomerID, ItemID) VALUES (1,'testproblem1','2012-03-14 09:30',1,1);
INSERT INTO Question (ID, Problem, AskedTime, CustomerID, ItemID) VALUES (2,'testproblem1','2012-07-14 09:30',2,1);
INSERT INTO qUpdate (ID, Message, UpdateTime, OperatorID, QuestionID) VALUES (1, 'test1','2012-05-14 09:30', 1, 1);
INSERT INTO qUpdate (ID, Message, UpdateTime, OperatorID, QuestionID) VALUES (2, 'test2','2012-08-14 09:30', 2, 1);
Dies scheint wie ziemlich einfaches Material für einen plpgsql Trigger. Hast du versucht, einen zu schreiben? Brauchen Sie bestimmte Informationen, bevor Sie dies tun? – kgrittn
Um ehrlich zu sein, bin ich ein kompletter Anfänger in SQL, so dass ich im Allgemeinen Probleme habe. Ich habe unzählige Anleitungen gelesen, und ich finde die grundlegende Syntax schwer und setze verschiedene Werte aus mehreren Tabellen in mehrere Tabellen alle in einem Trigger. Hier ist, was ich nur für Artikel getan habe: http://sqlfiddle.com/#!1/1bb25/3 – Jimmy