我的dtb编程触发器没什么问题。我需要在一个1表中控制2个值。我有一个名为Concert的表,它有2个外键:1是表Place的id。其次,我认为并不重要。
音乐会:id_concert, id_place<fk>, id_organizer<fk>, date, name, sponsor
放置:id_place, name, capacity, adress, town
我想要消除的是,在同一天组织的2场音乐会不能在一个地方。所以,我需要以某种方式控制用户不能为音乐会插入相同的日期和相同的地方,如果已经存在这个值的音乐会。
非常感谢你的建议,对不好的英语抱歉。
答案 0 :(得分:3)
您需要在Concert表上添加一个由(id_place,date)对组成的唯一约束。这将指示数据库引擎不允许同时在同一个地方放置多个Concert。
对于Oracle,可以在此处找到相关信息:http://www.techonthenet.com/oracle/unique.php
CREATE TABLE Concert
(
... (filled in with your existing table definition)
CONSTRAINT concert_place_unique UNIQUE (id_place, date)
);
或更改现有表:
ALTER TABLE Concert
add CONSTRAINT concert_place_unique UNIQUE (id_place, date);
约束是处理这种情况的正确方法,而不是触发器。约束是数据库固有的,没有竞争条件,并且防止数据首先被添加。