一般来说,做事列表的更好方法是使用域或查找表。
如果您的属性是必需的,它应该是不可为空的。如果它不是必需的,它应该可以为空。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' )
您的代码更改 [理论上] 包括在域表中插入几行。用户界面控件、验证器等正在(或应该)从域表中填充它们自己。