详谈关系数据库中的“键”(续2)

原创 2006年05月28日 14:15:00

详谈关系数据库中的“键”(续)

 今天我们来讨论外键。

   从表通过指向主表的外键来与主表相关联。人们常犯的一种错误是:认为参照完整性是对于主键的约束。但实际上,参照完整性要求的是外键值必须引用有效的主键值,所以这项约束是对于外键的约束,而不是对于主键的约束。
T-SQL脚本中,可以使用两种方法来声明完整性约束:既可以在创建表的代码中声明完整性约束,也可以在创建表之后再创建约束。其声明的格式如下:
  ForeignKeyColumn FOREIGN KEY REFERENCES PrimaryTable(PKID)
      可选的外键与强制的外键之间存在着很大的区别。一些关系的外键必须具有值,但对于其他一些关系就不必如此,无论外键有值或者没有值,其数据都是有效的。在物理层,这种差别是通过外键列能否为空体现出来的。如果外键是强制的,那么外键列就不能允许输入空值。相反,可选的外键,在相应的列上允许输入空值。对于具有复杂的可选性的关系,将需要通过Check约束或者触发器来全面地维护这种关系。
       由参照完整性所带来的一种复杂性是:如果从表中的记录引用了主表中的一行记录,那么RI(Referential Integrity)将阻止对这一行记录进行删除操作,除非从表中引用了它的记录都被删除了。否则,如果删除了主表中的这一行记录,而从表中的那些记录行仍旧指向这个刚被删除的记录的主键值,参照完整性就被破坏了。
       解决这个问题的一种方法就是做级联删除操作。它将把主表中的记录及其相关的从表中的记录一起删除,删除的顺序是:首先删除从表中的相关记录,然后再删除主表中的记录,因此它能够维护参照完整性。在T-SQL代码中启用级联删除选项的方法如下:
    FOREIGN KEY REFERENCES dbo.[TABLENAME] ON DELETE CASCADE
       在确定对于某个外键是否要采用级联删除选项时,可以使用以下由实践中总结出来的原则:
        1. 如果从表中的数据必须与主表中的数据结合在一起才有意义,一旦脱离了主表中的数据便毫无意义,那么应当使用级联删除。
        2. 如果从表中的数据具有它自己的含义,那么就不应该使用级联删除。
        3. 如果外键是可选的,那么永远也不要使用级联删除。

关系数据库标准语言SQL (续2).

  • 2011年09月10日 23:07
  • 447KB
  • 下载

2.关系数据库(1)

2.1关系数据库的概述                   关系数据库系统是支持关系模型的数据库系统 单一的数据结构----关系 现实世界的实体以及实体间的各种联系均用关系来表示 数据...
  • sxnuqk
  • sxnuqk
  • 2016年12月22日 11:28
  • 92

关系数据库标准语言SQL基础1续

—–>接基础1 CASCADE:级联,表示在删除模式的同时把该模式中所有的数据库对象全部一起删除。 RESTRICT:限制,表示如果该模式中已经定义了下属的数据库对象,则拒绝该删除...

【数据库系统概论】-关系数据库标准语言SQL(2)

三、ORDER BY子句 对查询结果按照一个或多个属性列的升序(ASC)或降序(DESC)排列,缺省为ASC。 四、聚集函数 COUNT([DISTINCT | ALL] *) 统计元组个数 C...

数据库系统-- 2 关系数据库

1. 关系:逻辑结构--二维表 域:Domain笛卡儿积:元组:一个n元组分量:元素中的每一个值R(D1,D2...,Dn)       n为度候选码:关系中某以属性组的值唯一标识一个元组主...

关系数据库设计中,用中间表好还是直接设定主外键关联好?

有人会对数据库有这样的疑问: 因为大多数的数据库教程上都是告诉你关系数据库如何去创建1:1、1:N和N:M的数据库关系,但我发现很多开源产品中,并没有直接使用关系数据库的关系查询、关系删除等功能,而...

关系数据库中无意义代理主键的生成与JDBC实现总结

(原文出自:http://www.theserverside.com/news/thread.tss?thread_id=63243) 在Java应用中代理主键的生成策略会因数据库甚至JDBC驱...
  • caijb
  • caijb
  • 2011年11月19日 07:58
  • 685

关系数据库设计

  • 2014年12月18日 11:24
  • 1.73MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:详谈关系数据库中的“键”(续2)
举报原因:
原因补充:

(最多只允许输入30个字)