我对触发器和PL / SQL相当新,所以我的问题主要是设计。
我正在创建一组表来代表购票。门票有三种类型:
所以我创建了三个表:(我相信这叫做,规范化):
表1 列有价格,数量和时间
表2 有座位和可退款
表3 有食物和饮料
我已经将一个主键列插入到Table1中,并使用Table2和Table3中的外键,这些外键指向Table1&#39的PK。
计划:当用户购买故障单时,我会将记录插入相应的表格中。例如,如果用户购买:
机票#1,我在表1中插入一条记录
票号#2,我在表1和表2中插入记录
机票#3,我在表1和表3中插入记录
问题:如何接收非类型1的故障单的所有数据,然后拆分参数以插入到单独的表中。例如,当我尝试为Table2创建触发器时,该触发器只能接收与Table2列相匹配的参数。如何收到Table1的数据?
完整购买2号机票的示例。
用户在线购买门票 - >网络形式的东西发生... - > dao向数据库发送一个插入命令 - > Table2的触发器启动并验证Table1和Table2的信息。
谢谢!
答案 0 :(得分:0)
你可以用你想要的任何方式设计它,但鉴于票数类型之间没有太大区别,我只有一张表:
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约束用于确保仅根据故障单类型填写相应的字段。
祝你好运。