[英]How to make sure that a foreign key is not set in another table in SQL?
我正在使用Oracle Database 12c企業版。
我有三個表:
table producer (
pid int primary key,
name varchar2(50)
);
table movie (
mid int primary key,
pid varchar2(50),
name varchar2(50)
);
table moviecoproducers (
mid int,
pid int
);
電影表中的pid(例如moviecoproducers表中的pid和mid)由適當的外鍵引用。 另外,moviecoproducers表中的mid和pid值的組合是唯一的。
現在,我必須確保在電影表中沒有任何生產者被引用為同一電影的(主要)生產者,在moviecoproducer中間表中也沒有被稱為聯合生產者。 我創建了一個觸發器來做到這一點,但現在我問自己是否要重新設計表結構是否有更輕松的解決方案(例如檢查約束)。
因為設計不好,我是否只需要觸發器,因為我不知道如何以不同/更好的方式進行操作。
創建一個典型的3表多對多結構。
table producer (
pid int primary key,
name varchar2(50)
);
table movie (
mid int primary key,
name varchar2(50)
);
table movieproducer (
mid int,
pid int,
status varchar2(10)
)
status
將保留“ main ”或“ co ”值。
現在,您可以使用表約束和無觸發器來管理您的限制。
另外一個好處是:如果將來您想引入“ 初級聯合制作人 ”之類的東西,則無需更改架構。
此設計未完全標准化:缺少狀態表。 查看您是否有興趣添加它。
好吧,不知道varchar pid代表什么。.因此,讓我們從一個稍微混亂的表結構開始...
table producer ( producer_id int primary key,
producer_name varchar2(50) )
table movie ( movie_id int primary key,
movie_data varchar2(50)
movie_name varchar2(50) )
table movieproducers ( movie_id int*#
producer_type int*
producer_id int# )
在這里,MovieProducers中有2個共享密鑰(或唯一索引)。 首先是movie_id和producer_type,其中1是主要制片人,大於1的任何其他數字將是共同制片人,以防止重復的制片人類型-movie_id和producer_id將避免制片人針對特定電影多次出現
我相信這可以解決您遇到的問題,不需要觸發器
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.