我对触发器和PL/SQL相当陌生,所以我的问题主要是设计问题。
我正在创建一组表来表示购票。有三种类型的票:
因此,我创建了三个表:(我相信这被称为正常化):
Table1有价格、数量和时间栏
Table2有座位和退款
Table3有食物和饮料
我在Table1中插入了一个主键列,并在Table2和Table3中使用外键,这指向表1的PK。
The Plan:当用户购买票证时,我会将记录插入到适当的表中。例如,如果用户购买:
票据#1,我在Table1中插入了一条记录
票据#2,我在Table1和Table2中插入了一条记录
票据#3,我在Table1和Table3中插入了一条记录
The Problem:如何接收非类型1的票证的所有数据,然后将参数拆分到单独的表中。例如,当我试图为Table2创建触发器时,该触发器只能接收与Table2列具有的参数匹配的参数。如何接收Table1的数据?
--一个完整购买票证类型2.的示例
用户购买票证网上->网站的东西发生..。-> dao将一个insert命令发送到用于Table2的数据库->触发器,并验证Table1和Table2的信息。
谢谢!
发布于 2016-02-07 01:47:52
您可以任意设计它,但是考虑到票证类型之间没有太大的差别,我将有一个表:
CREATE TABLE TICKET
(ID_TICKET NUMBER
CONSTRAINT PK_TICKET
PRIMARY KEY
USING INDEX,
TICKET_TYPE NUMBER
NOT NULL
CONSTRAINT TICKET_CK1
CHECK(TICKET_TYPE IN (1, 2, 3)),
PRICE NUMBER
NOT NULL,
QUANTITY NUMBER
NOT NULL,
DEPARTURE_TIME DATE
NOT NULL,
SEATING NUMBER
CONSTRAINT TICKET_CK2
CHECK(1 = CASE TICKET_TYPE
WHEN 1 THEN CASE
WHEN SEATING IS NULL
THEN 1
ELSE 0
END
WHEN 2 THEN CASE
WHEN SEATING IS NULL
THEN 0
ELSE 1
END
WHEN 3 THEN CASE
WHEN SEATING IS NULL
THEN 1
ELSE 0
END
END),
REFUNDABLE_INDC CHAR(1)
NOT NULL
CONSTRAINT TICKET_CK3
CHECK(REFUNDABLE_INDC = CASE TICKET_TYPE
WHEN 1 THEN 'N'
WHEN 2 THEN 'Y'
WHEN 3 THEN 'N'
END),
FOOD CHAR(1)
NOT NULL
CONSTRAINT TICKET_CK4
CHECK(FOOD = CASE TICKET_TYPE
WHEN 1 THEN 'N'
WHEN 2 THEN 'N'
WHEN 3 THEN 'Y'
END),
DRINK CHAR(1)
NOT NULL
CONSTRAINT TICKET_CK5
CHECK(DRINK = CASE TICKET_TYPE
WHEN 1 THEN 'N'
WHEN 2 THEN 'N'
WHEN 3 THEN 'Y'
END));这里,根据票证类型,使用CHECK约束来确保只填充适当的字段。
祝你好运。
https://stackoverflow.com/questions/35247483
复制相似问题