【数据库课程】研讨1

来源:互联网 发布:python 接口测试 编辑:程序博客网 时间:2024/04/27 22:46

1. 请说明school数据库中各表的主键和外键。同时说明:在学生表中的yxh字段输入“04”或在院系表中删除yxh为“01”记录,会有什么结果?

要找出各表中的主键和外键,首先要掌握主键和外键的定义。从网上找到的数据如下:
主键:唯一标识一条记录,不能有重复的,不允许为空,并且只能有一个,用来保证数据完整性。
外键:表的外键是另一表的主键, 外键可以有重复的, 可以是空值,一个表可以有多个外键。
主键子句的关键词为:primary key,如以下语句:

yxh varchar(2) not null primary key

就是定义了一个属性yxh并且为主键。并且如果在其他定义属性语句之后添加primary key,则会报错提示无法添加多个primary key。
外键的关键词为:references(XXX),如以下语句:

yxh varchar(2) not null references D(yxh)

这里意思为在该表中定义了一个属性yxh,并且与表D中的yxh相关联,即为外键。

院系表D如下:其中yxh为主键
这里写图片描述

学生表S如下:其中xh为主键,yxh为外键
这里写图片描述

如果在学生表中的yxh字段输入“04”记录,如以下指令:
insert into S values('1108','李明','男','1993-03-06','上海','13613005466','04')

则会报错:INSERT 语句与 FOREIGN KEY 约束”FK__S__yxh__0DAF0CB0”冲突。该冲突发生于数据库”school”,表”dbo.D”, column ‘yxh’。
根据主键外键的定义,‘04’这一单元并未在外键yxh中定义,只存在01-03,所以被外键约束,无法输入。但如果将‘04’改成‘03’,就可以正常输入了。

如果院系表中删除yxh为“01”记录,如以下指令:
 delete from D where yxh='01'

也会报错:DELETE 语句与 REFERENCE 约束”FK__S__yxh__0DAF0CB0”冲突。该冲突发生于数据库”school”,表”dbo.S”, column ‘yxh’。
我们可以发现,在表S中,引用了表D中yxh=01的数据,则表D被表S的外键所约束,无法删除。
那么如何成功执行该指令呢?将表S中yxh属性下为01的值修改成非01的值,就可以正常执行该指令了。

2. 什么是关系型数据库?什么是非关系型数据库?各举1个典型产品简单介绍他们特点?

关系数据库(Relationaldatabase),是创建在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。现实世界中的各种实体以及实体之间的各种联系均用关系模型来表示。关系模型是由埃德加·科德于1970年首先提出的,并配合“科德十二定律”。现如今虽然对此模型有一些批评意见,但它还是数据存储的传统标准。标准数据查询语言SQL就是一种基于关系数据库的语言,这种语言执行对关系数据库中数据的检索和操作。

典型产品:Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。是目前最流行的客户/服务器(CLIENT/SERVER)或B/S体系结构的数据库之一。作为一个通用的数据库系统,它具有完整的数据管理功能;作为一个关系数据库,它是一个完备关系的产品;作为分布式数据库它实现了分布式处理功能。但它的所有知识,只要在一种机型上学习了ORACLE知识,便能在各种类型的机器上使用它。

优点:
高稳定性、可靠性。
Oracle在导数据工具sqlload.exe,Oracle可以按照条件把文本文件数据导入。
优秀的安全机制:没有读锁,采取快照SNAP方式完全消除了分布读写冲突。自动检测死锁和冲突并解决,并且数据安全级别为C2级(最高级)。
在处理大数据方面Oracle会更稳定。
兼容绝大多数主流平台。
采用标准的SQL结构化查询语言。具有丰富的开发工具,覆盖开发周期的各阶段。
支持大型数据库,数据类型支持数字、字符、大至2GB的二进制数据,为数据库的面向对象存储提供数据支持。

缺点:
太贵。
对内存的高依赖导致数据库崩溃后恢复较繁琐。
大对象不好用,vchar2字段太短,不够用;
对数据库管理员的经验要求较高;
对硬件的要求很高;

非关系型数据库(NoSQL):随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题。
NoSQL与传统的关系数据库存在许多显著的不同点,其中最重要的是NoSQL不使用SQL作为查询语言。其数据存储可以不需要固定的表格模式,也经常会避免使用SQL的JOIN操作,一般有水平可扩展性的特征。

典型产品:Neo4j是一个高性能的,NOSQL图形数据库,它将结构化数据存储在网络上而不是表中。它是一个嵌入式的、基于磁盘的、具备完全的事务特性的Java持久化引擎,但是它将结构化数据存储在网络(从数学角度叫做图)上而不是表中。Neo4j也可以被看作是一个高性能的图引擎,该引擎具有成熟数据库的所有特性。程序员工作在一个面向对象的、灵活的网络结构下而不是严格、静态的表中——但是他们可以享受到具备完全的事务特性、企业级的数据库的所有好处。

Neo4j的优点:
它很容易表示连接的数据
检索/遍历/导航更多的连接数据是非常容易和快速的
它非常容易地表示半结构化数据
Neo4j CQL查询语言命令是人性化的可读格式,非常容易学习
它使用简单而强大的数据模型
它不需要复杂的连接来检索连接的/相关的数据,因为它很容易检索它的相邻节点或关系细节没有连接或索引
Neo4j的缺点或限制:
AS的Neo4j 2.1.3最新版本,它具有支持节点数,关系和属性的限制。
它不支持Sharding。

3. 教师表中定义两个检查约束:

  1. 性别只能输入“男”和“女”

首先需要了解什么是检查约束:检查约束在表中定义一个对输入的数据按照设置的逻辑进行检查的标识符,标识符为check。只要在语句指令之后加上check(XXX)即可,如以下语句:

 xb varchar not null check(xb='男' or xb='女')

check之前的语句很简单,即定义了一个xb属性,最大长度为2,然后在检查约束中规定只能输入‘男’或者‘女’,如果输入其他字符,则会报错:INSERT 语句与 CHECK 约束”CK__T__xb__1B0907CE”冲突。该冲突发生于数据库”school”,表”dbo.T”, column ‘xb’。
意思是没有满足约束。

2.男老师的基本工资必须超过2500元

和上题同理,只不过多了一个条件,代码如下:

jbgz numeric(6,2) not null check(xb='男' and jbgz>2500.00 or xb=‘女’)

以上为第一次研讨的全部内容。

原创粉丝点击