我創建一個表在數據庫中設置預先定義的值列
create tabel xyz
(id number (10) not null,
code char(1) ,
primary key (id)
)
我希望用戶對代碼柱像P,S,C 如何做到這一點預設值? 目前我正在使用代碼字符(1)默認('P','S','C') 但與此我得到錯誤。 請建議和我也想此列不空...
我創建一個表在數據庫中設置預先定義的值列
create tabel xyz
(id number (10) not null,
code char(1) ,
primary key (id)
)
我希望用戶對代碼柱像P,S,C 如何做到這一點預設值? 目前我正在使用代碼字符(1)默認('P','S','C') 但與此我得到錯誤。 請建議和我也想此列不空...
如果需要顯示這些值的用戶,可能最容易創建另一個表,並使用外鍵引用。你可能實現這個作爲強制執行CHECK約束的dbms中的CHECK約束,但向用戶呈現有效的選擇會很麻煩。
-- You'll want to restrict permissions on this table pretty tightly. Very few
-- people should be allowed to change it.
create table xyz_codes (
code char(1) primary key CHECK (code in ('P', 'S', 'C'))
);
insert into xyz_codes values ('P'), ('S'), ('C');
create table xyz (
id integer primary key,
code char(1) references xyz_codes (code)
);
完成該操作後,下面的INSERT語句將會因外鍵違例而失敗。
insert into xyz values (1, 'D');
但是這個會成功。
insert into xyz values (1, 'C');
要選擇演示文稿有效的選擇給用戶,使用
select code
from xyz_codes
order by code;
ENUM
列類型是容易的,但可以回來困擾你。我建議增加一個「查找」表,將房子你所說的,然後添加一個「value_id」列到你的主要目標表中的值,是這樣的:
primary_table:
id
value_id
value_table:
id:
name: #P, S, C
如果你的表是大,你需要更改任何枚舉值,您將不得不在表上運行一個更改,這可能意味着顯着的停機時間。
你會讓「value_table.name」是唯一的嗎? – 2014-02-13 16:49:25
@RafaelBarros:雅,我爲我所有的查找表添加唯一的鍵。 – 2014-02-13 17:21:48
謝謝大家的建議。我將使用基於我的應用程序的解決方案之一。 – Mohit224 2012-03-10 00:25:37