簡體   English   中英

如何確保在SQL的另一個表中未設置外鍵?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM