的更好的方法,在一般情况下,做的事情列出这是使用一个域或查找表。
如果您的属性是必需的,它应该是不可空的。如果不是必需的,它应该是可空的。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'。 –