利用SSMS表设计器设置数据库约束

  编者按:本系列文章将介绍利用SQL Server Management Studio Table Designer(表设计器)来在SQL Server数据库表上进行创建和设置属性。本文主要介绍设置数据库约束。 为一个表添加数据库约束是表创建过程非常重要的一部分。对于大多数表来说,你可能会定义一个PRIMARY KEY(主键)约束,但是可能也会需要其他类型的数据库约束,例如UNIQUE(唯一)、FOREIGN KEY(外键)、 CHECK(检查)或DEFAULT(默认)。

  你已经看过如何添加一个DEFAULT约束,我们是在定义DateAdded字段的时候添加的。因此,我们来看一下如何添加一个PR……

  【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

  为一个表添加数据库约束是表创建过程非常重要的一部分。对于大多数表来说,你可能会定义一个PRIMARY KEY(主键)约束,但是可能也会需要其他类型的数据库约束,例如UNIQUE(唯一)、FOREIGN KEY(外键)、CHECK(检查)或DEFAULT(默认)。

  你已经看过如何添加一个DEFAULT约束,我们是在定义DateAdded字段的时候添加的。因此,我们来看一下如何添加一个PRIMARY KEY约束,我们将根据 StoreID和ProductID字段对其进行说明。创建此约束,要在表设计器网格中选择这两个字段,然后右击上窗格里的某处,接着单击SetPrimary Key。一个钥匙图标就会加入到字段清单以表明已经添加了一个主键,如图6所示。

  你所要做的就是创建主键。要查看或更改此键的设置,再次右击上网格,但是本次要单击Indexes/Keys以打开Indexes/Keys(索引/键)对线中所见,此对话框会显示此新建主键的相关信息,其被命名为PK_SpecialtyProducts。

  在这一点上,你可以坚持使用默认设置或修改属性为必要。例如,可以改变约束名称,主键字段,以及是否需要创建一个非聚簇索引而不是聚簇索引。对于本例,我将名称改为pk_StoreID_ProductID,而将其他属性置为默认值。

  还可以在通过单击Add按钮 在Indexes/Keys对话框创建一个UNIQUE约束。当单击此按钮的时候,一个基本索引会添加至此对话框,本例中将其命名为IX_SpecialtyProducts,如图8所示。

  另外,可以改变名称同样也可以修改其他设置。对于这个例子来说,我已将名称改为uq_AltID,因为约束会在AltID字段上进行创建。然而,要将此变为UNIQUE约束,我们必须采取更多的步骤。首先,我们要实际指定AltID字段。而需要注意的是,AltID字段允许空值。通过在此字段上创建UNIQUE索引,在同一时间只允许有一个空值。大多数关系型数据库都不会这样工作,出于这个原因,需要重新考虑是否要在这个字段上允许空值。

  要指定AltID字段,选择Columns(字段)属性然后单击属性清单右边的浏览按钮(省略号)。这会打开Index Columns(索引字段)对话框,可以在里面选择约束所涉及到的字段并为每个字段进行排序,如图9中所示。

  在选择了AltID字段之后,单击OK以关闭IndexColumns对话框。在Indexes/Key 对话框中,为Type(类型)属性选择Unique Key(唯一键)选项。这会自动将Is Unique(是否唯一)属性变更为Yes(是)。图10显示了UNIQUE约束在有了新名称及更新了设置情况下的样子。

  我们下一个步骤是在ProductID字段上创建一个外键约束。此外键将会在Production.Product表内引用ProductID字段。要创建此外键约束,右键点击表设计器中的上窗格然后单击Relationships。当出现Foreign Key Relationships对话框时,点击Add以创建此新约束。图11显示了此对话框尚未配置任何属性而拥有初始外键时的情况。

  至少,必须修改Tables And Columns Specification属性组,它标示了在此外键中过去引用的和正在引用的字段。选择属性组清单然后点击其相关的浏览按钮。当Tables and Columns对话框出现时,选择Product表作为主键表并从表中选择 ProductID字段。对于SpecialtyProducts表,它是外键表,选择ProductID字段。此外,如果需要,可以修改外键的名称。我将其修改为fk_ProductID。表和字段对线中所示。

  一旦你定义了约束表和字段,点击OK来关闭Tables and Columns对话框。Foreign KeyRelationships对话框应该会反映出所做的更改,如图13所示。注意Tables And Columns Specification属性组及其单独属性现在会显示正在引用和过去引用过的表和字段。此约束的名称也已经更新过了。

  此时如果需要,可以添加更多的外键约束。例如在StoreID字段上定义一个外键来引用Sales.Store表中的BusinessEntityID字段。

  要添加一个检查约束,再次右键表设计器中的上窗格然后单击Check Constraints。当检查约束对话框出现时,点击Add按钮来创建一个新的约束。图14显示了此对话框尚未配置任何属性而拥有初始约束的情况。

  要创建此检查约束,必须配置Expression属性。你可以直接输入表达式或者点击浏览按钮打开Check Constraint Expression对话框,在此对话框中,你会有更多的空间来写表达式,如图15中所示。

  在这种情况下,我所定义的表达式指定了每个AltID值必须与正则表达式所定义的字符串值相匹配,即以“SP”开始并以五位数结尾。此五位数必须是1到9的数字而剩下的数字则可以是0到9。结果就是只有与此格式相匹配的值才能插入到AltID字段。例如,可以插入SP54321,而不是SC01234。

  一旦已经定义了自己的表达式,就可以设置任何其他属性了,包括Name。在本例中,我将此约束重命名为ck_AltID。图16显示了在Check Constraints 对话框中检查属性的样式。

  如你所见,表设计器使得添加检查约束如添加其他两类约束一样简便。考虑到约束在保证数据完整性上所扮演的重要角色,正确的设置是非常重要的,而表设计器可以帮你做到这一点。

  定义了表属性,创建了字段并添加了约束之后,就做好了保存此表定义到数据库的准备。你可以单击工具栏上的Save按钮。Save对话框会出现,并提供给你一个会受新表影响的表的清单,如图17中所示。在本例中,包含了Product表,这是因为我们为其定义了一个外键关系。

  在创建了表之后,你可以在SSMS中的Object Explorer(对象管理器)里查看。图18显示在AdventureWorks2012数据库中列出了此新表。注意每个结点都是展开的以显示所创建的字段,键,约束,索引以及统计数据。

  你现在可以轻松地查看用于定义此表的T-SQL并将其代码保存至一个脚本文件。右击此表,点ScriptTable as,再点CREATE To然后点击New Query EditorWindow。代码会出现在其自身的查询窗口中。你可以查看字段和约束是如何创建的以及表级别的属性是如何配置的。

  表设计器可能并不适合每个人,但是对于那些寻找一种方法来轻松地创建表和在此过程中了解表定义的人来说,表设计器确实是一个颇有价值的资源。它不仅可以让你轻松地访问一个表可用的各种设置及其字段,而且还会提供一个友好的环境来让你可以查看所有的选项并让你可以看到它们之间是如何相互影响的。即使只是想要把表设计器作为学习T-SQL的一块垫脚石,你也会从其所提供的功能中获益良多。

  自由技术撰稿人和技术咨询专家,曾出版和发布若干本书籍、文章和培训教材,重点关注Windows、数据库、商务智能等。

  SSMS提供了配置,管理和管理Microsoft SQL Server实例的工具,并汇集了一系列图形和可视化设计工具和丰富的脚本编辑器,以简化与SQL Server的工作。

  本文我们讨论了配置SQL Server恢复模式的两种方式,用T-SQL或者SQL Server管理工具都可以修改恢复模式的设置。

  SQL Server 2012中引入了两项功能,即创建用户自定义服务器角色和分配服务器级别的权限。本文为初级DBA给出了一个用户自定义服务器角色的示范用例。

  在SQL Server中创建一个表并不像听上去那么简单,尤其对于刚接触数据库开发的人员。不仅需要定义表的字段,而且还包括对限制插入字段数据类型的约束。

相关阅读