命名约束 vs 系统生成的约束

ZDNet软件频道 时间:2003-07-23 作者:ZDNet China , 翻译:Java研究组织barney |  我要评论()
本文关键词:sqltips
当你为一个表定义约束时,给约束命名是一个好习惯。另外,SQL Server会为约束创建系统自动生成的名称。
本文译自Builder.com,未经许可请勿转载当你为一个表定义约束时,给约束命名是一个好习惯。另外,SQL Server会为约束创建系统自动生成的名称。当在没有给约束命名的情况下,生成数据定义语言(DDL)(当DDL应用在几个数据库上时),那么系统生产约束名一般是不一样的。

在为数据库生成计划后,再生成详细的约束列表,与一个详细计划构造的合法约束列表进行对比,是一个很好的习惯。当数据库相当大时,这样做是非常有益的。

下面的脚本演示了命名约束、不命名约束及系统自动生成的约束名之间的区别,三者使用了同样的表,只不过每次都是重新创建的:

CREATE TABLE Parent
(pkey1 INT NOT NULL
       CONSTRAINT pk_Parent PRIMARY KEY (pkey1))
GO


CREATE TABLE ConstraintName
(Pkey INT NOT NULL
 CONSTRAINT pk_CnstNm primary key,
 Parent_pkey1 INT NOT NULL,
col1  INT NULL
 CONSTRAINT ck_CnstNm_col1 CHECK  (col1 IN ( 'a','b' ) )
 CONSTRAINT df_CnstNm_col1 DEFAULT 1,
CONSTRAINT fk_Parent_CnstNm FOREIGN KEY (Parent_pkey1)
       REFERENCES Parent (pkey1)
)
GO
exec sp_helpconstraint ConstraintName
GO
DROP TABLE ConstraintName
GO
CREATE TABLE ConstraintName
(Pkey INT NOT NULL
       primary key,
 Parent_pkey1 INT NOT NULL
       FOREIGN KEY (Parent_pkey1) REFERENCES PARENT(pkey1),
 col1  INT NULL
       CHECK  (col1 IN ( 'a','b' ) )
       DEFAULT 1
)
GO
exec sp_helpconstraint ConstraintName
GO
DROP TABLE ConstraintName
GO
CREATE TABLE ConstraintName
(Pkey INT NOT NULL
       primary key,
 Parent_pkey1 INT NOT NULL
       FOREIGN KEY (Parent_pkey1) REFERENCES PARENT(pkey1),
 col1  INT NULL
       CHECK  (col1 IN ( 'a','b' ) )
       DEFAULT 1
)
GO
exec sp_helpconstraint ConstraintName
GO
DROP TABLE ConstraintName
GO
DROP TABLE Parent
GO



责任编辑:炒饭

欢迎评论或投稿


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134