有没有办法为数据库表的列强制执行一组值?

deo*_*ngh 2 sql sql-server database-design

我有一个表,在其中一个列中我将指定实体的类型.实体只能有三种类型 - 标题,图像或注释,因此我想确保表列只应接受其中一个三弦.有没有办法把这个约束放在ms sql server 2008中?

编辑: - 添加了db图以获得有关改进设计的提示.

设计: - 1)故事板有许多幻灯片,每个幻灯片可以有一个或多个标题或图像.

2)每个故事板可以有一个或多个作者,零个或多个评论者.

3)每个对象的图像,幻灯片和标题(可能更多的对象将在稍后出现,如音频等)可以对它们进行评论.这些评论可以由作者或评论者提供.为了存储注释,我创建了一个注释表.

4)有必要记住幻灯片中幻灯片的顺序和图像顺序,我正在使用幻灯片和图像编号字段.

5)由于可以对任何对象给出注释,我需要为每个对象都有一个全局ID,因为它们的引用将存储在注释表中.为了维护一个全局id,所有以name GID结尾的字段都是uniqueidentifiers使用默认值生成:NEWID().

请建议对此db设计进行改进.

数据库图

Mil*_*ric 6

这是检查约束的方法:

create table #tableWithConstrainedColumn (
    constrainThis varchar(20)
)

ALTER TABLE #tableWithConstrainedColumn ADD CONSTRAINT TempCheck
    CHECK (constrainThis in ('caption', 'image', 'comment'))

-- this statement will succeed
insert into #tableWithConstrainedColumn
select 'caption'
-- this statement will fail
insert into #tableWithConstrainedColumn
select 'captions'

drop table #tableWithConstrainedColumn
Run Code Online (Sandbox Code Playgroud)

您也可以定义数据类型,但我不建议这样做:http://msdn.microsoft.com/en-us/library/aa933121(v = sql.80).aspx

正如@Widor刚推荐的那样,外键是最好的方法.