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设计进行改进.

这是检查约束的方法:
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刚推荐的那样,外键是最好的方法.