[英]Unique constraint on another table's column
我正在創建兩個表。 首先是類似於驗證步驟,而第二步將在通過驗證后保存數據。
所以我的第一張桌子是:
CREATE TABLE TABLE_NAME_TEMP(
SOME_NO number not null,
GROUP_NAME VARCHAR2(100) NOT NULL,
PARENT_GROUP_ID INT,
PRIMARY KEY (SOME_NO),
CONSTRAINT FK_PARENT FOREIGN KEY(PARENT_GROUP_ID) REFERENCES
TABLE_NAME(ID),
CONSTRAINT GROUP_NAME_UNIQUE UNIQUE (TABLE_NAME.GROUP_NAME, GROUP_NAME)
);
驗證成功通過后保存的第二張表:
CREATE TABLE TABLE_NAME(
ID number not null,
GROUP_NAME VARCHAR2(100) NOT NULL,
PARENT_GROUP_ID INT,
PRIMARY KEY(ID),
CONSTRAINT FK_PARENT FOREIGN KEY(PARENT_GROUP_ID) REFERENCES
TABLE_NAME(ID),
CONSTRAINT GROUP_NAME_UNIQUE UNIQUE (GROUP_NAME),
CONSTRAINT PK_ID_UNIQUE UNIQUE (ID)
);
我的問題是GROUP_NAME在TABLE_NAME中必須唯一。 因此,我需要確保TABLE_NAME_TEMP中的GROUP_NAME不能與TABLE_NAME中的現有值匹配。 我嘗試的方式CONSTRAINT GROUP_NAME_UNIQUE UNIQUE (TABLE_NAME.GROUP_NAME, GROUP_NAME)
給出了錯誤。 有什么建議嗎?
您不能在兩個單獨的表之間定義唯一約束。 唯一約束不是這樣工作的。 您可以執行以下操作之一:
理想情況下,您還可以向視圖添加唯一約束。 好了,您可以指定唯一約束,但是不強制執行。 默認情況下,約束處於“禁用,不驗證”模式。
TABLE_NAME_TEMP
是某種登台表。 在數據倉庫環境中,與最終表(在您的方案中為TABLE_NAME
)相比,登台表上的約束通常更寬松。
“第一個類似於驗證步驟,第二個將在驗證通過后保存數據”
檢查TABLE_NAME_TEMP.GROUP_NAME
是否不存在TABLE_NAME
似乎是一個驗證步驟。 如果確實在TABLE_NAME_TEMP
得到重復項,則可能要加載它們,以便可以在加載失敗的情況下進行調查(取決於將數據存入暫存表的方式)。 在需要加載最終表時,只需刪除它們或過濾它們即可。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.