的更好的方法,在一般情況下,做的事情列出這是使用一個域或查找表。
如果您的屬性是必需的,它應該是不可空的。如果不是必需的,它應該是可空的。Null
表示數據丟失;用戶沒有回答這個問題。這是一個不同於「我不知道」或「與你無關」的肯定答案的價值。但我離題了。
像這樣的模式是你想要什麼:
create table dbo.person
(
. . .
gender_id tinyint null foreign key references dbo.gender(id) ,
. . .
)
create table dbo.gender
(
id tinyint not null primary key clustered ,
description varchar(128) not null unique ,
)
insert dbo.gender values(1 , 'Fale' )
insert dbo.gender values(2 , 'Memale')
insert dbo.gender values(3 , 'Prefer Not To Say')
列gender_id
在person
表中的域由外鍵約束強制執行,是
null
缺失或不明數據。沒有提供數據。
- 1表示該人是女性。
- 2表示該人是男性。
- 3表示該人不想給你提供信息。
而且,更重要的是,當你需要擴大價值的領域,像這樣:
insert dbo.gender values(4 , 'Transgendered, male-to-female, post-gender reassignment surgery')
insert dbo.gender values(5 , 'Transgendered, male-to-female, receiving hormone therapy')
insert dbo.gender values(6 , 'Transgendered, female-to-male, post-gender reassignment surgery')
insert dbo.gender values(7 , 'Transgendered, female-to-male, receiving hormone therapy')
更改您的代碼[理論]由插入幾行到域表。用戶界面控件,驗證器等等(或應該)自己從域表中填充。
一般來說,如果你的系統是IO綁定的,那麼你的數據類型越小越好。 – Laurence
這取決於許多事情,特別是您的服務器實現,你沒有給。找出唯一合理的方法是測試。但如果你看到很大的差異,我會感到驚訝。 – Gene
使用字符。我不喜歡女性等於0,而男性則等於1 ......似乎沒有。字符對查看數據的任何人都有意義。不要忘記你也可以使用'null'。 –