在SQL Server数据库中加强数据的完整性(一)

日期: 2008-11-12 作者:SearchSQLServer.com翻译:April 来源:TechTarget中国 英文

参考完整性   我们在第二章理已经讨论过了参考完整性(RI)。现在再来看看你如何在物理数据库中执行参考完整性。一般而言,数据完整性就是保持数据连续性并帮助你数据真实、便于检索这样的一个概念。完整性有很多种,参考完整性确保在你插入或更新数据时就附加了表之间的关系。

例如,假如你有两个表,一个是Employee,另一个叫Vehicle。你要求每辆交通工具(Vehicle)和每个员工( employee) 之间能够进行匹配,这就要通过关系,规则也就是参考完整性规则。通过使用主键和外键实施这种关系。   主键   SQL Server中的主键约束和它在逻辑模块中的工作原理一样。

主键约束由一个或以上的列组……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

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

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

参考完整性

  我们在第二章理已经讨论过了参考完整性(RI)。现在再来看看你如何在物理数据库中执行参考完整性。一般而言,数据完整性就是保持数据连续性并帮助你数据真实、便于检索这样的一个概念。完整性有很多种,参考完整性确保在你插入或更新数据时就附加了表之间的关系。例如,假如你有两个表,一个是Employee,另一个叫Vehicle。你要求每辆交通工具(Vehicle)和每个员工( employee) 之间能够进行匹配,这就要通过关系,规则也就是参考完整性规则。通过使用主键和外键实施这种关系。

  主键

  SQL Server中的主键约束和它在逻辑模块中的工作原理一样。主键约束由一个或以上的列组成,这些列能够识别指定表中的行。

  创建PK的第一步就是鉴别用于创建键的列。大多数时候这一步都是在逻辑建模的时侯完成。在SQL Server中怎样才能创建一个好的主键?更重要的是,什么能导致关键弱权(poor key)?你表中的任意一列或组合列可以识别候选键。通常一个表中有很多个候选键。我们要谈的第一个PK技巧就是避免字符串列。在你连接两个表时,SQL Server必须比较主键中的数据和外键中其他表的数据。字符串本来就比数字型数据类型就要花更多时间和处理能量进行比较。

  所以我们就选择了数字型数据类型。你应该用什么样的数字呢?整数同常是最好的选择,所以,只有数据类型够大,能够包含潜在的行,你就可以使用int数据类型。同样,你还能够创建一个复合PK(使用多个列以上的PK),但是如果你能够避免,我们并不建议你用复合PK。为什么呢?如果在PK中有四个列,那么参考这个表的每个表也需要同样的四个列。它不仅仅需要更长的时间建立这四个列之间的联系,而且你还要对数据存储进行复制,否则就会被消除。

  以下是在你从候选键中选择PK时,应该遵循的一些规则。

  • 避免使用字符串函数。
  • 尽量使用整数数据。
  • 避免用复合主键

  列出了这些规则后,我们再看看一个表,判断使用哪个列来作为我们的主键PK。图3.1表示产品表。该表有一系列的候选键,首先就是型号(model number)。但是,型号只用于具体的制造厂商。所以最佳选择就是包括型号和制造商的复合键。该表中的另外一个候选键为SKU。SKU(stock-keeping unit)编号通常是只能被购买或出售该产品的公司识别,不包括生产商。 

  需要主键的产品表

  图3.1:需要主键的产品表


  我们看看每个候选键是不是违反了规则。第一个候选键(型号和厂商)违反了所有规则。这一数据属于字符串型数据,还是一个复合键。所以我们只能选择SKU,它正好可以鉴别该行,它是一个整数并且是一个单独的列。

  现在我们已经识别了主键,那么怎么在SQL Server中设定它呢?有很多创建主键的方法,你可以根据表的情况来选择采用什么样的方法。首先,我们一起来看看在创建表的同时怎样创建主键。以下是创建表同时完成PK的脚本。


CREATE TABLE Products(
sku        int      NOT NULL PRIMARY KEY, 
modelnumber  varchar(25)     NOT NULL,  
name     varchar(100)     NOT NULL,  
manufacturer  varchar(25)     NOT NULL,  
description  varchar(255)     NOT NULL,  
warrantydetails varchar(500)    NOT NULL,  
price      money(10,0)     NOT NULL,  
weight       decimal(5,2)   NOT NULL,  
shippingweight   decimal(5,2)   NOT NULL,  
height        decimal(4,2)  NOT NULL,  
width        decimal(4,2)  NOT NULL,  
depth         decimal(4,2) NOT NULL,  
isserialized       bit    NOT NULL,  
status       tinyint     NOT NULL,  
)

翻译

April
April

相关推荐