2012-01-15 55 views
0

我的dtb編程觸發器沒有問題。我需要在一張表中控制2個值。我有名爲Concert的表格,它有2個外鍵:1是表格Place的ID。其次對我來說這並不重要。觸發器,以防止在一個表中插入2個相同的值

音樂會id_concert, id_place<fk>, id_organizer<fk>, date, name, sponsor

地點id_place, name, capacity, adress, town

我想要消除是,在同一天舉辦2場音樂會不能在同一個地方。所以,我需要以某種方式控制該用戶不能爲音樂會插入相同的日期和相同的地點,如果已經存在與該值的音樂會。

非常感謝您的建議,並對壞英語感到抱歉。

+0

什麼類型的數據庫是這樣的,即MySQL,甲骨文,SQL Server .... – JStead 2012-01-15 15:51:37

+0

Oracle數據庫:) – 2012-01-15 19:18:41

回答

3

您需要在由(id_place,date)對組成的Concert表上添加一個唯一約束。這將指示數據庫引擎不允許同時在同一地點放置多個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); 

約束是處理這種情況下,不觸發正確的方法。約束條件是數據庫固有的,沒有競爭條件,並且首先防止數據被添加。

+0

我剛剛意識到我還需要日期應該是今天或未來。那麼,我應該爲這個日期和這兩個值設定一個唯一的約束條件? :) – 2012-01-15 18:06:12

+0

你能舉個例子嗎? – 2012-01-15 19:19:10

+0

哦,是的,我已經做到了,這很容易。無論如何,謝謝你的時間:) – 2012-01-15 20:20:51

相關問題