您可以通過更改的情況下,你檢查它這樣做:
ALTER TABLE account
ADD CONSTRAINT chk_account_type CHECK (lower(Type) IN ('saving', 'credit',
'home loan', 'personal loan', 'term deposit', 'check', 'isaver', 'share'));
但允許變化似乎很奇怪,因爲沒有強制執行通過檢查約束這些限制。將賬戶類型放在一個帶有主鍵的單獨表中,並使type
列成爲一個外鍵是比較正常也更靈活的。然後,您可以通過添加新表來添加新的帳戶類型,而不必修改檢查約束,並且可以根據需要允許帳戶類型表中的不區分大小寫的查找,但始終始終顯示它們。
喜歡的東西:
create table account_types(account_type_id number, description varchar2(30),
constraint account_type_pk primary key (account_type_id));
insert into account_types (account_type_id, description) values (1, 'Saving');
insert into account_types (account_type_id, description) values (2, 'Credit');
insert into account_types (account_type_id, description) values (3, 'Home loan');
...
create table account(account_number number, account_type_id number,
-- other columns...
constraint account_pk primary key (account_number),
constraint account_fk_account_type foreign key (account_type_id)
references account_types(account_type_id));
然後創建一個 '保存' 帳戶:
insert into account values (123, 1);
1 rows inserted.
如果你有一個無效的值,您可以:
insert into account values (124, 42);
SQL Error: ORA-02291: integrity constraint (MYSCHEMA.ACCOUNT_FK_ACCOUNT_TYPE) violated - parent key not found
02291. 00000 - "integrity constraint (%s.%s) violated - parent key not found"
你爲什麼要接受不同情況下的相同價值?他們當然應該一致? –