详谈关系数据库中的“键”(续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. 如果外键是可选的,那么永远也不要使用级联删除。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

2.关系数据库(1)

2.1关系数据库的概述                   关系数据库系统是支持关系模型的数据库系统 单一的数据结构----关系 现实世界的实体以及实体间的各种联系均用关系来表示 数据...

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

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

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

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

关系数据库标准语言SQL

  • 2015-09-21 16:44
  • 656KB
  • 下载

关系数据库 OMRLite

package com.example.ormlite; import java.sql.SQLException; import java.util.List; import com.j256....

关系数据库标准语言SQL

  • 2015-09-22 16:39
  • 1.77MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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