我有6张桌子:在SQL中创建查询需要一些帮助?
Staff (StaffID, Name)
Product (ProductID, Name)
Faq (FaqID, Question, Answer, ProductID*)
Customer (CustomerID, Name, Email)
Ticket (TicketID, Problem, Status, Priority, LoggedTime, CustomerID* , ProductID*)
TicketUpdate (TicketUpdateID, Message, UpdateTime, TicketID* , StaffID*)
要回答的问题: 给定的产品ID,删除的记录该产品。当产品被移除时,所有相关的常见问题解答可以保留在数据库中,但ProductID字段中应该有一个空引用。但是,产品的删除也应该删除任何关联的故障单及其更新。为了完整性,已删除的故障单及其更新应复制到审计表或一组表中,以维护产品,其故障单和更新的历史数据。 (提示:您需要定义一个或多个表来维护此审核信息,并在产品被删除时自动复制任何已删除的故障单和故障单更新)。您的审核表应记录请求删除的用户和删除操作的时间戳。
我已经创造了额外的maintain_audit表:
CREATE TABLE maintain_audit(
TicketID INTEGER NOT NULL,
TicketUpdateID INTEGER NOT NULL,
Message VARCHAR(1000),
mdate TIMESTAMP NOT NULL,
muser VARCHAR(128),
PRIMARY KEY (TicketID, TicketUpdateID)
);
Addittionally我已创建1个功能和触发:
CREATE OR REPLACE FUNCTION maintain_audit()
RETURNS TRIGGER AS $BODY$
BEGIN
INSERT INTO maintain_audit (TicketID,TicketUpdateID,Message,muser,mdate)
(SELECT Ticket.ID,TicketUpdate.ID,Message,user,now() FROM Ticket, TicketUpdate WHERE Ticket.ID=TicketUpdate.TicketID AND Ticket.ProductID = OLD.ID);
RETURN OLD;
END;
$BODY$
LANGUAGE plpgsql;
CREATE TRIGGER maintain_audit
BEFORE DELETE
ON Product
FOR EACH ROW
EXECUTE PROCEDURE maintain_audit()
DELETE FROM Product WHERE Product.ID=30;
当我运行此我得到这样的:
ERROR: null value in column "productid" violates not-null constraint
CONTEXT: SQL statement "UPDATE ONLY "public"."faq" SET "productid" = NULL WHERE $1 OPERATOR(pg_catalog.=) "productid""
GUYS,你能帮我解决这个问题吗?
感谢贾斯汀!;-)这是非常有帮助! – BlackOctober 2012-04-18 23:05:00