精华内容
下载资源
问答
  • 外码,参照关系和被参照关系

    千次阅读 2020-03-22 23:11:10
    如果F与K(s)相对应,则称F是R的外码,并称基本关系R为参照关系,基本关系S为被参照关系或者目标关系。关系RS不一定是不同关系。 例:学生关系的“专业号”属性与专业关系的主码“专业号”相对应,“专业号”属性是...

    定义: 设F是基本关系R的一个或一组属性,但不是关系R的码,K(s)是基本关系S的主码。如果F与K(s)相对应,则称F是R的外码,并称基本关系R为参照关系,基本关系S为被参照关系或者目标关系。关系R和S不一定是不同关系。
    例:学生关系的“专业号”属性与专业关系的主码“专业号”相对应,“专业号”属性是学生关系的外码,专业关系是被参照关系,学生关系是参照关系

    展开全文
  • 或者某个表其它哪些表参照,最好能用图表(ER图)的方式展现,开始想通过TOAD或其它工具打开,但打开后导成图片,因为表太大,报错说资源不足,后来想通过数据字典来查,折腾好久,才写出来参照关系: 主要用到2张...

    今天开发人员询问我怎么看某个表参照了其它哪些表,或者某个表被其它哪些表参照,最好能用图表(ER图)的方式展现,开始想通过TOAD或其它工具打开,但打开后导成图片,因为表太大,报错说资源不足,后来想通过数据字典来查,折腾好久,才写出来参照关系:

    主要用到2张数据字典:user_constraints和user_cons_columns

    sql如下,2个地方的表名“EMP”同时变换为需要查看的表,就可以查出和这个表“EMP”相关的参照关系:

    select a.table_name,a.COLUMN_NAME,c.table_name,c.column_name from  
    user_cons_columns a, user_constraints b, user_cons_columns c
    where a.constraint_name=B.CONSTRAINT_NAME
    and b.r_constraint_name=c.constraint_name
    and (c.table_name='EMP' or a.table_name ='EMP');
    

    得出的结果为:前2列参照后2列。

    展开全文
  • 参照完整性

    2020-04-12 12:11:26
    定义关系的参照完整性就是要定义哪个属性是该关系的外码,它要参照的是哪个关系的主码 语法: 在CREATE TABLE 中用FOREIGN KEY 短语定义外码, ...首先先定义表级主码,再依次定义外码,并说明被参照关系 ...

    定义关系的参照完整性就是要定义哪个属性是该关系的外码,它要参照的是哪个关系的主码

    语法:

    在CREATE TABLE 中用FOREIGN KEY 短语定义外码,
    用REFERENCES 短语指明这些外码参照哪些表的主码
    

    举例:
    关系SC中( Sno, Cno )是主码。Sno, Cno分别参照Student表
    的主码和Course表的主码
    首先先定义表级主码,再依次定义外码,并说明被参照关系
    在这里插入图片描述
    在对参照表和被参照表进行增删改操作时可能破坏参照完整性
    在这里插入图片描述
    可以显式的设置违约处理,即当违反某个约束条件时,执行用户设置的违约处理方式,语句为: ON 操作 违约处理方法,例如:
    在这里插入图片描述
    还可以采用设置SET NULL策略

    展开全文
  • 参照完整性之多对多多表查询

    千次阅读 2019-04-10 20:23:13
    例如:老师学生是多对多关系, 一个老师对应多个学生,一个学生多个老师教。 多对多关系中 需要创建三个表 其中有一个是关系表。 首先创建学生表: Create table students( id int, name varchar(100), grade ...

    一,参照完整性的多对多关系的表格创建
    例如:老师和学生是多对多关系, 一个老师对应多个学生,一个学生被多个老师教。
    多对多关系中 需要创建三个表 其中有一个是关系表。
    首先创建学生表:

    Create table students(
    	id int,
    	name varchar(100),
    	grade varchar(100),
    	primary key(id)
    	);	
    

    其次创建老师表:

    Create table teachers(
    		id int,
    		name varchar(100)
    		salary float(8,2),
    		primary key(id)
    );
    

    最后创建师生:

    `
    Create table teacher_student(
    	t_id int,
    	s_id int,
    CONSTRAINT teacher_id_fk FOREIGN KEY(t_id) REFERENCES teachers(id),
    CONSTRAINT student_id_fk FOREIGN KEY(s_id) REFERENCES students(id)
    );
    

    建成之后的表格如图。
    即现在学生表和老师表中创建主键,然后在关系表中将俩个表的主键设为外键,并以主键为参照进行对应。

    一对一关系比较简单,若用外键关联 则添加唯一约束,若用主键关联。则添加外键约束。

    二,多表查询
    使用单个select 语句从多个表格中取出相关的查询结果,多表连接通常是建立在有相互关系的父子表上;
    1,交叉连接
    第一个表格的所有行 乘以 第二个表格中的所有行,也就是笛卡尔积。
    语法:
    隐式语法(不使用关键字): select * from 表a,表b;
    显式语法(使用关键字): select * from 表a CROSS JOIN 表b;
    这种查询方式基本不会使用,因为其本身得到的结果集就是不正确的。

    2,内连接
    因为交叉连接获得的结果集是错误的。因此内连接是在交叉连接的基础上只列出连接表中与连接条件相匹配的数据行,匹配不上的记录不会被列出。内连接查询,可以有效的去除笛卡尔集现象。
    语法:
    隐式语法:
    select * from 表A,表B where 条件;
    使用别名:select * from A 别名1,B 别名2 where 别名1.xx=别名2.xx;
    显式语法:
    select * from 表A INNER JOIN 表B ON 条件;
    使用别名:select * from A 别名1 inner join B 别名2 on 别名1.xx=别名2.xx;
    内连接只列出所有购买过商品的用户的信息,不会列出没有购买商品用户。

    3,外连接
    外链接是以一张表为基表,其他表信息进行拼接,如果有就拼接上,如果没有显示null; 外链接分为左外连接和右下连接。
    左外连接: 以关键字左边的表格为基表进行拼接。
    语法:select * from A left outer join B on条件
    右外连接: 以关键字右边的表格为基表
    语法:select * from A right out join B on 条件

    左外连接就是左边的表的内容全部显示,然后匹配右边的表,如果右边的表匹配不到,则空。
    右外连接就是右边的表的内容全部显示,然后匹配左边的表,如果左边的表匹配不到,则空。

    总结:
    内连接就是两个表的交集
    左外连接就是左边表加两表交集
    右外连接就是右边表加两表交集
    在这里插入图片描述

    4,子查询
    某些情况下,当进行查询的时候,需要的条件是另外一个select语句的结果,这个时候就会用到子查询,为了给主查询(外部查询) 提供数据而首先执行的查询(内部查询)被叫做子查询; 子查询分为嵌套子查询和相关子查询。
    子查询出现在where后是作为条件出现的
    子查询出现在from之后是作为表存在的
    例如:查询出id为1的老师教过的所有学生。
    在这里插入图片描述
    查询结果:
    select s_id from teacher_student where t_id=1;
    select * from students where id in(1,2);

    嵌套子查询:
    内部查询的执行独立于外部查询,内部查询仅执行一次,执行完毕后将结果作为外部查询的条件使用(嵌套子查询中的子查询语句可以拿出来单独运行。)
    则上面的例子用嵌套子查询的结果为:select * from students where id in(select s_id from teacher_student where t_id=1);

    相关子查询:
    内部查询的执行依赖于外部查询的数据,外部查询每执行一次,内部查询也会执行一次。每一次都是外部查询先执行,取出外部查询表中的一个元组,将当前元组中的数据传递给内部查询,然后执行内部查询。根据内部查询执行的结果,判断当前元组是否满足外部查询中的where条件,若满足则当前元组是符合要求的记录,否则不符合要求。然后,外部查询继续取出下一个元组数据,执行上述的操作,直到全部元组均被处理完毕。

    例如:
    在这里插入图片描述
    求:每一科考试成绩大于平均分的学生的分数。
    查询结果:select * from score as a where a.score>(select avg(b.score) from score as b where a.cou_id=b.cou_id);
    在这里插入图片描述

    聚合函数
    1.count() :求满足列条件的总的行数。
    例如:统计数学成绩大于90的学生有多少个?
    SELECT COUNT(*) FROM student WHERE math>90;
    注意: 除了COUNT( * )以外,其他字段都会忽略NULL值;
    2,sum()求和
    例如:统计一个班级语文、英语、数学的成绩总和
    SELECT SUM(chinese+english+math) FROM student;
    3,avg(): 求平均数。
    例如:求数学平均分
    SELECT AVG(math) FROM student;
    4,min() 和 max() 求最大值和最小值。
    例如:求班级数学最高分和最低分
    select max(math),min(math) from student;
    5,group by分组
    group by子句的真正作用在于与各种聚合函数配合使用。它用来对查询出来的数据进行分组。
    分组的含义是:把该列具有相同值的多条记录当成一组记录处理,最后只输出一条记录。分组函数忽略空值。
    例如:
    在这里插入图片描述
    1.对订单表中商品归类后,显示每一类商品的总价
    SELECT product,SUM(price) FROM t_order GROUP BY product;
    在这里插入图片描述

    2.查询商品总价格大于3000的商品
    SELECT product,SUM(price) FROM t_order GROUP BY product HAVING SUM(price)>100;
    在这里插入图片描述
    注意:
    (1)、分组函数的重要规则
    如果使用了分组函数,或者使用GROUP BY 的查询:出现在SELECT列表中的字段,要么出现在聚合函数里,要么出现在GROUP BY 子句中。
    (上面的product出现在了group by中,price出现在了聚合函数中)
    GROUP BY 子句的字段可以不出现在SELECT列表当中。

    (2)、having where 的区别
    ①、where和having都是用来做条件限定的,
    ②、WHERE是在分组(group by)前进行条件过滤,
    ③、HAVING子句是在分组(group by)后进行条件过滤,
    ④、WHERE子句中不能使用聚合函数,HAVING子句可以使用聚合函数。

    ⑤、HAVING子句用来对分组后的结果再进行条件过滤。

    展开全文
  • ARC之循环参照

    2015-05-10 23:43:37
    概念 当我们使用强参照(Strong reference)时,往往需要留意 循环参照 的...比如通讯薄对象AddrBook每个通讯录Entry的关系如下。 这种情况下,由于Entry对象AddrBook强参照,所以不能释放。另
  • 关系模式造磨一时刻的状态或内容 动态的、随时间不断变化的关系模式和关系统称为关系,需根据上下文加以区分关系的完整性:实体完整性、参照完整性、用户定义的完整性 实体完整性和参照完整性是关系模型必须满足的...
  • 关系模型

    千次阅读 2018-07-11 18:31:41
    关系模型 关系模型组成的三要素 关系数据结构 ...关系 关系模式 什么是关系模式 ...实体完整性和参照完整性是关系模型必须满足的完整性约束条件,称作是关系的两个不变性,应该由关系系统自动...
  • 概念 当我们使用强参照(Strong reference)时,往往需要留意 循环参照 ...比如通讯薄对象AddrBook每个通讯录Entry的关系如下。 这种情况下,由于Entry对象AddrBook强参照,所以不能释放。另一方面,
  • 因为满足参照完整性的原则是要有外键,满足一对多,选择多的一方的外键(分数,courseno为外键),少的一方(课程,courseno为主键)。 2、多对多 如:学生课程 一名学生可以选修多门课程,而一门课程也可以...
  • 概念 当我们使用强参照(Strong reference)时,往往需要留意 循环参照 ...比如通讯薄对象AddrBook每个通讯录Entry的关系如下。 这种情况下,由于Entry对象AddrBook强参照,所以不能释放。另一方面,
  • 循环参照指的是两个对象互相强参照,以至于任一对象都不能释放。 一般情况下,当对象之间有“父子关系”时,强参照的情况发生的比较多。比如通讯薄对象AddrBook每个通讯录Entry的关系如下。
  • 概念 当我们使用强参照(Strong reference)时,往往需要留意循环参照的...比如通讯薄对象AddrBook每个通讯录Entry的关系如下。 这种情况下,由于Entry对象AddrBook强参照,所以不能释放。另一方面...
  • 关系数据库关系的完整性

    千次阅读 2014-11-14 22:57:39
    1、关系:D1×D2×…×Dn的子集叫做在域D1,D2,…Dn上...其中实体完整性和参照完整性是关系模型必须满足的完整性约束条件,称作是关系的两个不变性,应该由关系系统自动支持。用户定义的完整性是应用领域需要遵循的约
  • 概念 当我们使用强参照(Strong reference)时,往往需要留意 循环参照 的问题。...比如通讯薄对象AddrBook每个通讯录Entry的关系如下。 这种情况下,由于Entry对象AddrBook强参
  • 1. OSI七层TCP/IP四层的关系 1.1OSI引入了服务、接口、协议、分层的概念,TCP/IP借鉴了OSI的这些概念建立TCP/IP模型。 1.2OSI先有模型,后有协议,先有标准,后进行实践;而TCP/IP则相反,先有协议应用再提出...
  • —在没有数据冗余的情况下, 应该尽可能减少表的数目, 简化表之间的参照关系, 以便提高数据的访问速度 Hibernate 把持久化类的属性分为两种:  值(value)类型(pay): 没有 OID, 不能单独持久化, 生命周期依赖...
  • 概念 当我们使用强参照(Strong reference)时,往往需要留意 ...比如通讯薄对象AddrBook每个通讯录Entry的关系如下。 这种情况下,由于Entry对象AddrBook强参照,所以不能释放。另一方面,如果En...
  • 映射组成关系

    2017-12-20 14:27:47
    在没有数据冗余的情况下, 应该尽可能减少表的数目, 简化表之间的参照关系, 以便提高数据的访问速度 持久化类的属性Hibernate 把持久化类的属性分为两种: 值(value)类型: 没有 OID, 不能单独持久化, 生命周期依赖...
  • 原因:没有理解外键的概念,涉及到外键时,一定有一个参照关系和被参照关系,也就是有一个参照表和被参照表。 如创建两个表:Student和SC表,SC表中有一列Sno,Sno是SC表的外键,同时Sno也是Student表的主键,因此在...
  • 原因:没有理解外键的概念,涉及到外键时,一定有一个参照关系和被参照关系,也就是有一个参照表和被参照表。 如创建两个表:Student和SC表,SC表中有一列Sno,Sno是SC表的外键,同时Sno也是Student表的主键,因此...
  • Hibernate 映射关系

    2016-08-27 22:35:00
     –在没有数据冗余的情况下, 应该尽可能减少表的数目, 简化表之间的参照关系, 以便提高数据的访问速度 •Hibernate 把持久化类的属性分为两种:  –值(value)类型: 没有 OID, 不能单独持久化, 生命周期依赖.....
  • 本章主要关于关系模型的基本概念,即关系模型的数据结构,关系操作和关系的完整性。 关系模型中有三类完整性约束:实体完整性,参照完整性以及用户定义的完整性。前两个约束条件是关系模型必须满足的完整...

空空如也

空空如也

1 2 3 4 5 ... 13
收藏数 245
精华内容 98
关键字:

参照关系和被参照关系