不,沒有這樣的東西存在,雖然它有可能是假的。
如果要關聯地執行此操作(這將比視圖/觸發器好很多),最簡單的方法是將E
添加到所有員工ID並將C
添加到所有客戶ID。但是,如果您有其他屬性並且您想確保它們不是同一個人(即您不只是對該ID感興趣),則這將不起作用。
如果這是你需要創建第三個表的情況下,讓我們把它的人:
create table people (
user_id varchar2(10) not null
, user_type varchar2(1) not null
, constraint pk_people primary key (user_id)
, constraint chk_people_user_types check (user_type in ('C','E'))
);
C
會站在客戶和E
在檢查約束員工。然後,您需要創建人唯一索引/約束:
create index ui_people_id_type on people (user_id, user_type);
個人而言,我停在這裏完全放下你的客戶和員工表;他們不再有任何用處,你的問題已經解決。
如果您無法添加新的列/表格,您需要與所做的並說服他們改變它的人說話。過度複雜的事情只會導致邏輯錯誤和混淆(相信我 - 使用視圖意味着需要大量觸發器來維護表格,並且必須確保只有人更新視圖)。即使花費更長時間,做事情也會更容易。
但是,如果你真的想繼續你改變你的客戶和員工的表格,包括他們的USER_TYPE,並確保它總是在表,即每行的相同:
alter table customers add user_type default 'C' not null;
alter table customers add constraint chk_customers_type
check (user_type is not null and user_type = 'C');
來源
2014-01-13 20:28:51
Ben
聽起來像你的數據模型搞砸了。這不是FK。 FK將是一個表中與另一個表中的字段相關的字段。在這裏你只需要有兩個互相排斥的IDS。 – OldProgrammer
是來自USER表的user_id? (這意味着員工不能成爲客戶?) – tbone