- 1、本文档共132页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* 引用完整性约束 即前面所学的“参照完整性约束” [复习] 若属性(组)F是基本关系R的外码,它与基本关系S的主码Ks相对应,则对于R中每个元组在F上的值必须为: 空值(F的每个属性值均为空值); 等于S中某个元组的主码值。 参照完整性规则就是定义外码与主码之间的引用规则 职工(职工编号,姓名,性别,部门编号)(关系R-参照关系) 部门(部门编号,名称,地址,简介) (关系S-被参照关系) 关系S的主码 关系R的外码 * 用关系代数表述引用完整性 概括来讲,如果关系R中的某个元组的属性分量(设为A)的值为v,那么按照设计意图,人们期望v也是另一个关系S的某个元组的一个相应的属性分量(设为B)的值。 用关系代数将引用完整性表述为 或等价地写为 * 示例1 例2.21 考虑电影数据库中的两个关系 Movies( title, year, length, genre, studioName, producerC#) MovieExec(name, address, cert# , netWorth) 必须保证Movies关系中每个元组的producerC#分量也必须在关系MovieExec元组的cert#分量中出现。 该约束用集合-包含的形式写为: * 示例2 如果一个“值”在多个属性中出现,则也可以为它引入引用完整性约束。 例如: StarsIn (movieTitle, movieYear, starName) Movies( title, year, length, genre, studioName, producerC#) 引用完整性约束应该表达为: * 键约束 P33 例2.23 MovieStar (name, address, gender, birthdate) name为主键,那就意味着没有任何两个元组在分量name上具有相同的值。该约束蕴含着几个事实,其中之一是:关系MovieStar上必然不存在这样的元组对:它们在name分量上值相同,但是却在address分量上具有不同的值。这一约束可以表达为: MS1和MS2是对关系MovieStar重命名得来的。 * 其他的约束举例1 假设关系MovieStar中gender属性的合法值只有‘F’和‘M’于是这个约束就可以表示为: 意思是:MovieStar的元组中,gender分量既不等于‘F’也不等于‘M’的结果是空集。 * 其他的约束举例2 要求一个电影公司的经理至少拥有$10 000 000的资产 该约束可以用如下关系代数表达: 或 MovieExec(name, address, cert# , netWorth) Studio( name, address, presC#) * 1、CHAR。CHAR存储定长数据很方便,CHAR字段上的索引效率级高,比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间,不足的自动用空格填充。 2、VARCHAR。存储变长数据,但存储效率没有CHAR高。如果一个字段可能的值是不固定长度的,我们只知道它不可能超过10个字符,把它定义 为 VARCHAR(10)是最合算的。VARCHAR类型的实际长度是它的值的实际长度+1。为什么“+1”呢?这一个字节用于保存实际使用了多大的长度。 从空间上考虑,用varchar合适;从效率上考虑,用char合适,关键是根据实际情况找到权衡点。 3、TEXT。text存储可变长度的非Unicode数据,最大长度为2^31-1(2,147,483,647)个字符。 * 4、NCHAR、NVARCHAR、NTEXT。这三种从名字上看比前面三种多了个“N”。它表示存储的是Unicode数据类型的字符。我们知道 字符中,英文字符只需要一个字节存储就足够了,但汉字众多,需要两个字节存储,英文与汉字同时存在时容易造成混乱,Unicode字符集就是为了解决字符 集这种不兼容的问题而产生的,它所有的字符都用两个字节表示,即英文字符也是用两个字节表示。nchar、nvarchar的长度是在1到4000之间。 和char、varchar比较起来,nchar、nvarchar则最多存储4000个字符,不论是英文还是汉字;而char、varchar最多能存 储8000个英文,4000个汉字。可以看出使用nchar、nvarchar数据类型时不用担心输入的字符是英文还是汉字,较为方便,但在存储英文时数 量上有些损失。 * * P25 例 2.14 两个公共属性 R: A B
文档评论(0)