oracle 参照完整性,Oracle中用表外键来保证系统参照完整性

欢迎进入Oracle社区论坛,与200万技术人员互动交流 >>进入 Oracle中表的外键是保证系统参照完整性的手段,而参照完整性是指分布在两个表中的列所满足的具有主从性质的约束关系。外键涉及到两个表,其中一个称之为父项表,另一个称之为子项表。 父项表 ( par

欢迎进入Oracle社区论坛,与200万技术人员互动交流 >>进入

Oracle中表的外键是保证系统参照完整性的手段,而参照完整性是指分布在两个表中的列所满足的具有主从性质的约束关系。外键涉及到两个表,其中一个称之为父项表,另一个称之为子项表。

父项表( parent table )是参照约束的基础,即通过检查这张表的有效数据情况来判断约束是否成立,它是参照约束的条件,影响约束,而不受约束的任何影响。

子项表( child table )是参照约束的对象,当其发生变化,如有新数据输入时,通过比较父项表中的有效数据状况,来判断这些变化是否符合约束条件,若不符合,则拒绝要发生的变化。

在实际应用系统中,开发者为了保证系统的完整性,一般要定义大量的外键。然而,如果外键的命名不规范,如采用系统自动生成的名称,则在以后的系统运行维护中会造成很大的麻烦。如在系统运行后,加载大量数据或者进行一些数据转换操作等时,出现外键错误时,根据系统提示的外键错误,根本不可能直接定位到那两个表间的外键发生错误,需要浪费很多时间查找造成错误发生的外键的父项表和子项表,然后才能进一步确定是那条记录违反了外键约束条件。通常,我们采用这样的命名规则来命名外键 FK_Child_table name_Parent_table name 。由于外键名称的最大长度限制在 30 个字符之内,对 child_table_name 和 Parent_table name 不一定和原表一模一样,可以采取一些简写的办法,但名称一定要能反映出约束的两个表。这里的命名, Child_table name 指子项表,也就是约束表, Parent_table name 是指父项表,也就是被约束的表。

下面来详细讨论如何将应用系统中不规范的外键命名修改为规范的外键名称。在讨论之前,需要提醒读者注意的是,完成下面的操作需要花费较长的时间,所以一定要规划在系统空闲时来完成。同时这里的外键更名,采用的方法是首先删除然后重建,涉及到删除应用系统对象的操作,所以在操作之前,为安全起见,应该备份应用系统。

一、生成系统目前的外键报告单

首先生成系统目前模式下的所有外键情况报告单, SQL 脚本如下:

脚本 1 :列出当前模式下所有外键的报告表,可以将其 spool 到某个文件中

SELECT RPAD(child.TABLE_NAME,25,' ') Child_Tablename,

RPAD(cp.COLUMN_NAME,17,' ') Referring_Column,

RPAD(parent.TABLE_NAME,25,' ') Parent_Tablename,

RPAD(pc.COLUMN_NAME,15,' ') Referred_Column,

RPAD(child.CONSTRAINT_NAME,25,' ') Constraint_Name

FROM USER_CONSTRAINTS child,

USER_CONSTRAINTS parent,

USER_CONS_COLUMNS cp,

USER_CONS_COLUMNS pc

WHERE child.CONSTRAINT_TYPE = 'R' AND

child.R_CONSTRAINT_NAME = PARENT.CONSTRAINT_NAME AND

child.CONSTRAINT_NAME = cp.CONSTRAINT_NAME AND

parent.CONSTRAINT_NAME = pc.CONSTRAINT_NAME AND

cp.POSITION = pc.POSITION

ORDER BY child.OWNER,

child.TABLE_NAME,

child.CONSTRAINT_NAME,

cp.POSITION;

该脚本生成所在模式下的所有外键情况,包括外键名称,父项表名称,子项表名称以及引用的列名称等。在 SQL/PLUS 下运行该脚本,在运行该脚本之前,可以将输出 SPOOL 到本地某个文件中。同时要注意,如果应用系统中的外键比较多且复杂的话,这个脚本的运行时间会比较长。

[1] [2]

test.jsp?url=http%3A%2F%2Fwww.chinaitlab.com%2Fcms%2Fimages%2Flogo14.gif&refer=http%3A%2F%2Foracle.chinaitlab.com%2Foptimize%2F715148.html

声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/298780.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于数据仓库 — 总体工具介绍

数据仓库项目是以关系数据库为依托,以数据仓库理论为指导、以 OLAP为多层次多视角分析,以 ETL工具进行数据集成、整合、清洗、加载转换,以前端工具进行前端报表展现浏览,以反复叠代验证为生命周期的综合处理过程。最终目标是为了达…

你好,同学!在云端学习最潮的技术吧!

开学季大礼包9月开学了,作为学生的你,有想过在这个数字化年代,学最cool的技术吗?人工智能,物联网,云计算,还有区块链这些互联网产物影响着你的生活,也影响着你将来的职业发展。不论你…

seo关键词互点软件报价_SEO关键词优化收费问题和外包报价问题,一文详解

在竞争日益激烈的市场环境中,企业为了在互联网平台中获得较好的排名,以及实现产品的较好变现,大多数都是使用SEO搜索引擎,因为通过优化关键词可以不断地为用户创造“用户最想得到的”“最匹配”搜索结果,在快速找到心仪…

15张令人震撼的物理动图,看完惊呆了!

全世界只有3.14 % 的人关注了爆炸吧知识比抖音还上瘾看了会让人上瘾的物理动图,赶紧给家里的孩子看看吧,绝对让他开拓眼界,脑洞大开。1.有弹性的岩浆2.高速转动时,因向心力不足而被撕开的的CD(慢镜头)3.震荡…

linux目录结果说明,Linux目录结构及文件说明

Linux中所有文件都是从(/)根开始的,下面是典型的Linux目录结构说明:/:根目录/bin: binary 主要用来存放可执行文件/sbin: super bin 存放系统管理程序,通常只有管理员才有权限使用/boot: 存放内…

Java wait notify

2019独角兽企业重金招聘Python工程师标准>>> Java wait && notify ‍wait、notify和notifyAll方法是Object类的final native方法,所以这些方法不能被子类重写。 方法 notifyAll() Wakes up all threads that are waiting on this objects monito…

使用ETag协议实现ASP.NET Core API缓存

通常,我们在ASP.NET Core API服务端实现缓存,数据直接从缓存中取出,返回给客户端,以便加快响应速度。但是这样的做法,解决不了数据传输到客户端需要占用带宽带来的性能问题。这时,可以尝试使用ETag。ETag协…

手机通话有回声

今年9月份买了部新手机,某品牌手机,而且是3G手机,买之前都有先了解详细了才出手的,买回来之后一阵兴奋………,总比我原先的那部手机好多了,功能多,外观也好看多了,(原先的…

python读写文件实例_python读写文件的简单示例

这篇文章主要为大家详细介绍了python读写文件的简单示例,具有一定的参考价值,可以用来参考一下。 感兴趣的小伙伴,下面一起跟随512笔记的小编罗X来看看吧。 首先看一个例子: # 来自www.512pic.com f open(thefile.txt,w) #以写方…

深度优化sql 查询, 提升性能一百倍是什么概念?

正在做一个软件设计, 希望有个功能, 然而, 对于加上该功能后对系统性能造成的影响很是担忧. 可以说是, 一方面想要有这个功能, 另一方面又对性能问题是否能够解决很怀疑, 正处于犹豫不决状态. 于是决定进行实验. 首先对表结构和索引进行了优化, 初步结果还不错, 性能基本进入可…

女老师vs男老师的区别...

1 被帅到了2 失传已久的如来神掌??!!3 哎呦,谁拉我一把?4 决定到底要不要开始学习的我…5 女老师vs男老师监考的区别...6 函数广播体操7 这个打包装置够便捷,够酷炫!关键是省事你点的…

windows分区给linux根目录,解决双系统安装Linux之后找不到Windows分区

1.把硬盘分区回复给Windows用PQ把Linux分区,删除掉再新建个Windows分区就可以了把那个分区格称FAT32或NTFSwindows就可以用了呀!fdisk/mbr重建主引导记录我以前是这么做的,用dos启动盘启动,删除非dos分区,然后创建分区,把所有的自由空间都分给他就完了.现…

Redis Windows环境安装

1、下载Windows 版本 Redis: https://github.com/ServiceStack/redis-windows 2、 解压文件: F:\开源代码学习\01_Redis 打开 目录:F:\开源代码学习\01_Redis\src\msopentech\redis64-2.6.12.1 3、启动Redis 指向CMD命令: 4、测试安装成果&am…

python答题系统的代码_答题辅助python代码实现

本文实例为大家分享了答题辅助python具体代码,供大家参考,具体内容如下 from screenshot import pull_screenshot import time, urllib.request try: import Image except ImportError: from PIL import Image, ImageDraw import pytesseract # 屏幕顶端…

Hello Blazor:(11)全局截获事件执行

前言在Blazor中&#xff0c;我们使用on{DOM EVENT}"{DELEGATE}"这样的Razor语法在组件标记中指定委托事件处理程序&#xff1a;<button onclick"IncrementCount">Click me</button>但是没有提供解除委托的方法。比如&#xff0c;我们需要在某种…

ActionEnglish Notes

ActionEnglish 1 1. sound engineer 录音师2. Rumor has it that * 人们都说… 据说… * Rumor has it that Andy is a nice guy. * Rumar has it that he is a rather difficult sound engineer. * 类似的还有&#xff1a;It is said that… * 类似的还有&#xff1a;it is …

Hashtable, ArrayList, List, Dictionary学习

Hashtable用法 在.NET Framework中&#xff0c;Hashtable是System.Collections命名空间提供的一个容器&#xff0c;用于处理和表现类似key/value的键值对&#xff0c;其中key通常可用来快速查找&#xff0c;同时key是区分大小写&#xff1b;value用于存储对应于key的值。Hashta…

深度学习会不会被取代?深度学习必看发展史

近年来&#xff0c;随着人工智能时代的来临&#xff0c;数据科学、计算机科学迎来飞速发展&#xff0c;多次引发讨论的人机对战也正是人工智能与人类的对决。从无人驾驶汽车到AlphaGo战胜人类&#xff0c;机器学习成为了当下最热门的技术。而机器学习中一种重要的方法就是深度学…

Xcode6中如何对scrollview进行自动布局(autolayout)

本文转载至 http://www.cocoachina.com/ios/20141011/9871.html XCodeAutolayoutscrollView Xcode6中极大的增强了IB中自动布局的能力&#xff0c;下面就通过对刺儿头scrollview进行一次自动布局实战&#xff0c;看看自动布局在Xcode6中到底值不值得使用。 说 UIScrollView是个…