当前位置:首页 » 编程语言 » odl和sql的关系
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

odl和sql的关系

发布时间: 2022-11-25 22:22:18

sql与python区别是什么有什么联系

一、性质不同

1、sql:是一种特殊目的的编程语言,是一种数据库查询和程序设计语言。

2、python:Python由荷兰数学和计算机科学研究学会的Guido van Rossum于1990 年代初设计,作为一门叫做ABC语言的替代品。

二、作用不同

1、sql:用于存取数据以及查询、更新和管理关系数据库系统。

2、python:Python提供了高效的高级数据结构,还能简单有效地面向对象编程。

三、特点不同

1、sql:不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,所以具有完全不同底层结构的不同数据库系统, 可以使用相同的结构化查询语言作为数据输入与管理的接口。

2、python:Python语法和动态类型,以及解释型语言的本质,使它成为多数平台上写脚本和快速开发应用的编程语言,随着版本的不断更新和语言新功能的添加,逐渐被用于独立的、大型项目的开发。

Ⅱ ORACLE 和 SQL区别

这两种数据库在不同方面都有着很大的区别,以下是具体的区别:

1.开放性: 1. SQL Server 只能在windows上运行,没有丝毫的开放性,操作系统的系统的稳定对数据库是十分重要的。Windows9X系列产品是偏重于桌面应用,NT server只适合中小型企业。而且windows平台的可靠性,安全性和伸缩性是非常有限的。它不象unix那样久经考验,尤其是在处理大数据库。 2. Oracle 能在所有主流平台上运行(包括 windows)。完全支持所有的工业标准。采用完全开放策略。可以使客户选择最适合的解决方案。对开发商全力支持。

2.可伸缩性:并行性 1. SQL server 并行实施和共存模型并不成熟,很难处理日益增多的用户数和数据卷,伸缩性有限。 2. Oracle 并行服务器通过使一组结点共享同一簇中的工作来扩展windownt的能力,提供高可用性和高伸缩性的簇的解决方案。如果windowsNT不能满足需要,用户可以把数据库移到UNIX中。Oracle的并行服务器对各种UNIX平台的集群机制都有着相当高的集成度。

3.性能: 1. SQL Server 多用户时性能不佳 2. Oracle 性能最高, 保持开放平台下的TPC-D和TPC-C的世界记录。

4.客户端支持及应用模式 :1. SQL Server C/S结构,只支持windows客户,可以用ADO、DAO、OLEDB、ODBC连接。 2. Oracle 多层次网络计算,支持多种工业标准,可以用ODBC、JDBC、OCI等网络客户连接。

5.操作简便性: 1. SQL Server 操作简单,但只有图形界面。 2. Oracle 较复杂,同时提供GUI和命令行,在windowsNT和unix下操作相同。

6.使用风险性 :1. SQL server 完全重写的代码,经历了长期的测试,不断延迟,许多功能需要时间来证明。并不十分兼容。 2. Oracle 长时间的开发经验,完全向下兼容。得到广泛的应用。完全没有风险。

7.价格:ORACLE贵过SQLSRVER

Ⅲ 面向对象数据库的ODL语句中的CLASS 和ORACLE中的CREATE TYPE 有什么联系或者区别么

我无语啦,一个是java语言的方式,一个是oracle的语言,是不同的。联系嘛:都是申明一个类。

Ⅳ oracle数据库 和SQL server 是个什么关系,能简单介绍一下这方面吗

oracle是大型的关系数据库,很多大型的数据应用都用oracle,也就是说500强的企业大部分都是用oracle的数据库,支持集群啊等等的东西。

SQL只是数据库对象的一种操作语言,由于数据库是关系型的,所以SQL在数据库表的维度上来所主要是支持操纵行和列,当然从数据库角度还包括操作数据库对象(表、索引、触发器、存储过程等等),还用于数据库的管理

ORACLE和SQL SERVER的SQL语法存在交集的部分,也由于各自数据库特性的不同,存在区别。

不过如果你会oracle的话,SQL SERVER掌握起来应该很容易,希望回答对你有帮助,呵呵。

Ⅳ 常见数据库和SQL语言之间存在什么关系数据库之间区别是什么拜托了各位 谢谢

SQL是结构化查询语言,SQL数据库其实就是指支持SQL语言的一类数据库,这种数据库的模型为关系模型。目前市场上开发的数据库软件大部分为关系模型为基础的数据库,比如说微软的SQL SERVER 2000数据库,ACCESS数据库,还有ORACLE数据库,MySql数据库,DB数据库等,它们是不同软件商家开发出来的数据库,各有各的特色。但都支持SQL(结构化查询语言)。 我想你是想知道这些软件的区别是吧,就像问IE8.0与遨游,火狐浏览器等软件的区别,其实他们的区别很多,但有一点是相同的,都是按web2.0标准来开发的软件 想了解更多的数据库知识,可以去网络看看的 http://ke..com/view/1088.htm

Ⅵ sql 和 ADO是什么关系

数据库是一个存放数据的软件。数据库管理系统是用来管理数据的。

SQL是数据库操作语言的一种,是用来操作数据库中的数据以及管理数据库的。而现在常用的主要是结构化查询语言,也就是SQL,各个厂家的数据库系统有不同的实现以及扩展。

ADO这些东西是为了让程序访问数据库更方便而做的一层封装,或API。ADO.NET,JDBC是分别的不同的技术实现。

ADO是一个用于存取数据源的COM组件,提供了编程语言和统一数据访问方式OLEDB的一个中间层。允许开发人员编写访问数据的代码而不用关心数据库是如何实现的,而只用关心到数据库的连接。

访问数据库的时候,关于SQL的知识不是必要的,但是特定数据库支持的SQL命令仍可以通过ADO中的命令对象来执行。

SQL它是一个标准的数据库查询语言,用于操纵数据库;而ADO则是数据联接方式,就是通过什么方式或者说通过什么数据库组件来让你联接到数据库;

换句话说,ADO是让联接到数据库(建立通路),而SQL是在这个通路的基础上进行对数据的操作,SQL定义了如何对数据库进行操作(增减改查),ADO为这个操作提供了可能(Execute方法)。

其实ODBC本身也提供了对SQL语言的支持,用户也可以直接将SQL语句送给ODBC。

(6)odl和sql的关系扩展阅读:

结构化查询语言是高级的非过程化编程语言,允许用户在高层数据结构上工作。它不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,所以具有完全不同底层结构的不同数据库系统,可以使用相同的结构化查询语言作为数据输入与管理的接口。

结构化查询语言语句可以嵌套,这使它具有极大的灵活性和强大的功能。

SQL的核心部分相当于关系代数,但又具有关系代数所没有的许多特点,如聚集、数据库更新等。它是一个综合的、通用的、功能极强的关系数据库语言。

Ⅶ oracle和MY/SQL的两者关系

Oracle 和 MySQL 都是关系数据库产品,木有相互作用。

Oracle 和 PL/SQL 的关系:PL/SQL是Oracle中使用的,对标准数据库语言的扩展。

Ⅷ SQL与ODBC及ADO之间的关系是怎样的

这个SQL、ODBC、ADO说起来有些话长,这里我简单说一下。
1、SQL它是一个标准的数据库查询语言,用于操纵数据库;但ODBC、ADO则是数据联接方式,就是通过什么方式或者说通过什么数据库组件来让你联接到数据库; 换句话说,一个是让你联接到数据库(建立通路),另一个是让你对数据库进行具体的操作。

2、SQL是数据库操作语言,它的作用在于、也仅在于操作数据库,也就是说它的操作对像只是数据库对象。纯粹的SQL过程的代表那就是数据库的存储过程了,它所做的主要也就是数据处理;

3、而我们在编程时,数据库仅是一个数据存储的工具而已,其他还有很多的逻辑处理、界面交互、系统控制等等,这些都不是SQL的范围。
所以需要用其他高级语言来建立和控制程序的行为,在需要的时候通过ODB/ADO联接到数据库,然后用内嵌的SQL语言对数据库进行操作。
-------------------------------
我是原来一楼的。
对于问题补充中的内容,楼主理解非常准确!

还可以用上网方式来比方:ODBC/ADO就是不同的上网方式(拨号/ADSL/长宽),而SQL就是流览器来访问具体的网络资源。流览器提出对网页的请求具体的信息传输和处理依赖于网络通路建立方式和相应服务,不同的上网方式会对流览器结果产生不同影响(响应速率、数据包生成和传输过程、安全等等)。ODBC/ADO与SQL之间也正是这样相互影响的。

Ⅸ SQL 请问SQL高手,系统中的这几个数据库都是做什么用的

数据:计算机中用来描述事物的记录

数据模型:是一种对客观事物抽象化的表现形式。数据模型应该真实、易于理解、便于实现

建模:对客观事物加以抽象,提取主要特征,归纳成一个简单清晰的轮廓,使复杂问题变得易于处理

数据模型三要素:数据结构、数据操作、完整性约束
数据结构描述静态特征,按数据结构可以把数据模型分为层次模型、网状模型、关系模型
数据操作描述动态特征,数据操作主要分为更新(插入、删除、修改)、检索两大类,统称增、删、改、查
完整性约束确保数据的正确性、有效性、相容性

数据库:简称DB(database),是由数据库管理系统管理的数据的聚集

数据库管理系统:简称DBMS(DataBase Management System)是专门用于建立和管理数据库的一套软件,介于应用程序和操作系统之间。属于系统软件

数据库系统:简称DBS(DataBase System)。数据库、DBMS、应用程序和软件系统统称数据库系统

关系:关系就是一张二维表

关系模型:数据以关系的形式表示,就是以二维表的形式表示数据模型

属性:关系的标题栏中各列的名字

模式:关系的名称和关系的属性集

元组:二维表的所有行统称为元组,元组的各个分量对应于关系的各个属性。一个元组表示一个对象

域:关系的每个属性的取值范围

关系的实例:给定关系中元组的集合称为该关系的“实例”。一个给定的关系模式,可以有许多关系实例。

关系型数据库管理系统:简称RDBMS(Relationg DataBase Management System),采用关系数据模型的数据库管理系统。

数据库系统的体系结构的三层结构和两层映象:从数据库管理的角度出发,数据库系统的体系可分三层,外模式、模式、内模式。两层映象是,外模式/模式映象、模式/内模式映象

外模式:又称用户模式,相当于SQL中的视图(VIEW)模式,是数据库用户可以看见和使用的局部数据的逻辑结构和特征描述,是与某应用有关的数据的逻辑表示

模式:分为概念模式、逻辑模式,是所有数据库用户的公共数据视图,是数据库中全部数据的逻辑结构和特征的描述,一个数据库只有一个模式

外模式/模式映象:把局部逻辑结构描述与全局逻辑结构描述联系起来。一个模式可以与多个外模式对应联系。例如,SQL SERVER中一个关系模式上可以建立多个满足不同用户要求的视图VIEW。这种映象可以保证数据与应用程序之间的逻辑独立性,即改变模式,不影响外模式,则与外模式相关的应用程序无序修改

内模式:由称为存储模式,是数据库物理结构和存储方式的描述,是数据在数据库内部的表示方式。一个数据库只有一个内模式。内模式描述记录的存储方式、索引的组织方式、数据是否压缩、是否加密等,不涉及硬件设备。

模式/内模式映象:把全局逻辑结构描述与物理结构描述联系起来。一个模式只有一个内模式。这种映象保证了数据与程序之间的物理独立性,当内模式修改时,由于模式未变,所以无需修改程序。

DBMS的体系结构(组成):查询处理程序、存储管理程序、事务管理程序、客户/服务器程序体系结构

查询处理程序:负责查询处理,它的一个重要任务是“优化”查询。

事务管理程序:保证多个事务并发执行

存储管理程序:既管理磁盘上的数据文件又管理存放数据文件部分内容的内存数据缓冲区

客户/服务器程序体系结构:大多数DBMS程序采用这种程序体系结构,把整个DBMS程序系统划分为两部分,DBMS核心部分属于服务器程序,客户程序主要用于与用户相互配合并将查询或其他命令传送给服务器程序的查询接口。

数据库设计

数据库设计的步骤:需求分析、概念设计、逻辑设计、物理设计

需求分析和概念设计阶段的工作与具体数据库管理系统无关,这一阶段的工作独立于数据库管理系统

逻辑设计和物理设计阶段的共组与具体采用何种数据库管理系统相关。

需求分析阶段:应用领域的调查、定义信息与应用、定义操作任务、定义数据项、预测未来改变,结果产生相关文档

概念设计阶段:也称为建模

任务:数据库概念模式(模式)设计、事务设计

概念模式设计的工具:E/R图。对于面向对象的数据库则可采用面向对象定义语言ODL

E/R图:称为实体-联系模型

E/R图的组成:实体集(矩形)、属性(椭圆)、联系(菱形)

联系的类型:一对一、一对多、多对多。用线条和箭头表示不同的联系。箭头指向的一方代表“一”

键码属性的表示:下划线

联系中的角色:即一个实体集内部实体之间的联系

多向联系:多个实体集之间发生的一个联系

多向联系转化为双向联系的方法:将多向联系转换成实体集,然后在原来与之联系的实体集和新的实体集之间建立新的双向联系

E/R图中的子类的表示方法和继承:如果实体集B是实体集A的子类,则它们之间用一个标有isa的三角形和两根线条建立特殊的联系。三角形的尖端指向超类(父类),子类实体集上只需标出子类特有的属性,继承父类的所有属性。

ODL对象定义语言:是用面向对象的术语来说明数据库结构的一种推荐的标准语言,主要用途是书写面向对象数据库的设计

对象:是某种可研究,可观察的实体,例如:一个人、一门课程、一本书等等

类:具有相似特性的对象可以归为一类

ODL描述的三种特性:属性(Attribute)、联系(Relationship)、方法(Method)

ODL书写规则:

interface 类名1{

attribute 数据类型1 属性名1;
attribute 数据类型2 属性名2;
.
.
.
relationship [Set]<类名2> 联系名1
inverse 类名2::联系名2;
.
.
}

说明:
关键字interface、attribute、relationship、<set>、inverse
常用数据类型有string(字符串)、integer(整型)、float(浮点型)、enum(枚举型)
[]中的set为任选项,当类1与类2的联系是一对一时,不需要使用set,当类1与类2的联系是一对多时必须使用set
inverse表示在类2中联系名2所表示的联系与类1中联系名1所表示的联系是多对一的对应联系
ODL例一:用ODL描述制片公司与电影,假如制片公司部名称不重复。因为,一个制片公司可以制作多部影片,而一部影片只能由一个公司制作发行,所以制片公司与影片的关系是一对多的关系。

interface studio{
attribute string studioname;
attribute string address;
attribute string phone;

relationship set<movie> make
inverse movie::madeby;
}

interface movie{
attribute string movietitle;
attribute integer length;
attribute enum incolor ;
attribute integer year;

relationship set studio madeby
inverse studio::make;
}

ODL例二:用ODL描述学生与课程,一名学生可以选择多门课程来学习,一门课程可以被多名学生选修。

interface student{
attribute string sname;
attribute string address;
attribute enum gender ;
attribute integer age;

relationship set<course> choice
inverse course::choisedby;
}

interface course{
attribute string ctitle;
attribute integer credit;

relationship set<student> choisedby
inverse student::choice;
}

ODL例三:用ODL描述校长与学校的关系,一名校长只能管理一所学校,一所学校只能设一名校长。

interface chairman{
attribute string chname;
attribute enum gender ;
attribute integer age;
attribute string phone;

relationship set university manage
inverse university::leadby;
}

interface university{
attribute string unnmae;
attribute string addr;

relationship set chairman leadby
inverse chairman::manage;
}

ODL子类描述方法:自类继承父类的所有属性和联系。子类可以有自己的特殊属性和联系。子类中属性和联系的描述方法与上述例子相同。

interface 子类名:基类名

ODL子类描述例:硕士研究生类是学生的一个子类。每名硕士研究生有若干名导师,一名导师可以带多名硕士研究生。

interface student{
attribute string sname;
attribute string address;
attribute enum gender ;
attribute integer age;
}

interface master:student{
attribute string special;

relationship set<advisor> direct
inverse advisor::directedby;
}

interface advisor{
attribute string name;
attribute string address;
}

逻辑设计阶段:把概念设计阶段产生的数据库概念模式变换为数据库逻辑模式。数据库逻辑模式依赖于逻辑数据模型和数据库管理系统。目前做流行的数据库管理系统都是关系型逻辑数据模型。所以,本教程知讨论如何把概念模式转变为关系模型

逻辑设计阶段的步骤:

1.概念模式转变为关系模型
2.对关系模型进行规范化和优化
3.适应DBMS限制条件的修改
4.对性能、存储空间等的优化

1.概念模式转变为关系模型

E/R图转变为关系模型的方法:

1.一个实体集转变为一个关系模式,这个关系模式包含实体集所有的简单属性和复合属性的简单子属性。实体集的名称可以用作为关系模式的名称,用下划线来表示关系的键码
2.一个联系转变为一个关系模式,一般情况下用联系名作为关系名,用联系的实体集的键码和联系本身的属性作为此关系模式的属性集。

E/R图转变为关系模型实例:

实例一:一个班级只能有一个班长,而且必须有一个班长,E/R图如下:

学生与班级的联系是一对一的联系(1:1)。学生实体集的键码是学号。班级实体集的键码是班号。这个E/R图可以转变为如下的关系模型

学生(学号,姓名,性别,出生日期)
班级(班号,名称,地点)
班长(学号,班号,注册)

联系反映的是具有某学号的学生担任具有某班号班级的班长。这种转变方法是常用的方法。
如果想减少查询时使用连接操作的次数,提高查询效率,以上E/R图也可以转变为如下关系模型

学生(学号,姓名,性别,出生日期,班号)
班级(班号,名称,地点)

学生关系模式中的“班号”是外键码。这种关系模式中,由于学生关系中记录了所有学生的学号,但不是每个学生都担任班长(按教科书上的术语叫做不是全参与),因此不是每个元组的班号属性都有数据,即应该允许班号为空。否则,学生实体集必须是全参与,即每个学生都是班长。

实例二:一个影片公司可以制作多部影片,但是一部影片只能归一个制片公司所有。假如公司不重名,影片也不重名,则公司名称是制片公司实体集的键码,影片名是影片实体集的键码。

影片公司与影片的联系是1对多的联系(1:N)。这个E/R图可以转变为以下关系模型

影片公司(公司名称,地点)
影片(影片名,片长)
制作(公司名称,影片名)

同样,假如影片公司是全参与,即每个影片公司至少制作了一部电影,则可以转变为以下关系模型

影片公司(公司名称,地点,影片名)
影片(影片名,片长)

其中,影片公司关系中的影片名是外键码

实例三:学生与课程之间的联系是“选修”。一个学生可以选多门课程,一门课程可以被多名学生选修,所以它们之间的“选修”联系是多对多(N:M)

上述E/R图可以转变为以下关系模型

学生(学号,姓名)
课程(课程号,课程名)
选修(学号,课程号,成绩)

选修关系中的学号和课程号是外键码

2.对关系模型进行规范化和优化

为什麽要把关系模型规范化:为了有效地消除关系中存在的数据冗余和更新异常等现象

基本概念

函数依赖:如果关系R的两个元组在属性A1,A2,...An上一致,则它们的另一个属性B上也一致,那末,我们就说在关系R中属性B函数地依赖于属性A1,A2,...An或者说属性A1,A2,...An函数决定属性B。

关系的键码:

如果一个或多个属性的集合满足如下条件,则称该集合为关系R的键码(key):
1.这些属性函数决定该关系的所有其它属性。
2.的任何真子集都不能函数决定R的所有其它属性。

关系的超键码:包含键码的属性集称为超键码,是“键码的超集”的简称

函数依赖规则:分解/合并规则、传递规则、平凡依赖规则

平凡依赖:对于函数依赖A1,A2,...An->B,如果B是A中的某一个,我们称这种依赖是平凡依赖
非平凡依赖:对于函数依赖A1,A2,...An->B,如后B中至少有一个不在A中,我们称这种依赖是非平凡依赖
完全非平凡依赖:对于函数依赖A1,A2,...An->B,B中没有一个在A中,我们称这种依赖是完全非平凡依赖

主属性:键码所在的属性

非主属性:键码以外的属性

封闭集(闭包)对于给定的函数依赖集S,属性集A函数决定的属性集合就是属性集A在依赖集S下的封闭集

范式就是符合某一种级别的关系模式的集合。

规范化通过分解把属于低级范式的关系模式转换为几个属于高级范式的关系模式的集合,这一过程称为规范化

1范式(1NF),如果一个关系模式R的所有属性都是不可分割的基本数据项,则这个关系属于1NF

2范式(2NF),若关系模式R属于1NF,且每个非主属性都完全依赖于键码,则R属于2NF

3范式(3NF),若关系模式R属于1NF,且每个非主属性都不传递依赖于键码,则R属于3NF

BC范式(BCNF),若关系模式属于1NF,且R的每个非平凡依赖的决定因素都包含键码,则R属于BCNF

规范化分解原则:无损连接、保持依赖

无损连接:当对关系模式R进行分解时,R的元组将分别在相应属性集进行投影而产生新的关系,如果对新的关系进行自然连接得到的元组的集合与原关系完全一致,则称为无损连接

保持依赖:如果分解后的总的函数依赖集与原函数依赖集保持一致,则称为保持依赖。

模式分解的两个规则:公共属性共享、相关属性合一

公共属性共享:保留公共属性,进行自然连接是分解后的模式实现无损连接的必要条件

相关属性合一:把以函数依赖的形式联系在一起的相关属性放在一个模式中,从而使原有的函数依赖得以保持,这是分解后的模式实现保持依赖的充分条件

模式分解的三种方法

一、部分依赖归子集;完全依赖随键码——用于建立2NF

例:关系R(A,B,C,D,E,F,G)上存在函数依赖,A->BCD,E->F,AE->G,AE->BCD,AE->F

分析以上依赖可以看出,AE是键码(AE->BCD)。因为AE是键码,A是主属性,A->BCD,所以BCD是部分依赖于AE

根据部分依赖归子集的方法,因为A是AE的真子集,所以A与BCD归在一起构成一个关系模式。R1(A,B,C,D)

同理对于AE->F,有E->F所以AE->F是部分依赖,非主属性F所依赖的真子集是E,所以E和F可以归在一个关系模式中R2(E,F)

AE->G是完全函数依赖,完全依赖随键码,所以AEG归在一个关系模式中R3(A,E,G)

因此R(A,B,C,D,E,F,G)可以分解为符合2NF的关系模式如下:

R1(A,B,C,D)
R2(E,F)
R3(A,E,G)

二、基本依赖为基础,中间属性做桥梁——用于建立3NF

例:关系R(A,B,C,D,E)上存在函数依赖,AB->C,C->D,D->E

显然中间桥梁是C->D,他构成了传递依赖链,因此,R可以分解为R1(A,B,C),R2(C,D)。分解后在R1,R2中都不存在传递依赖。

三、找违例自成一体,舍其右全集归一;若发现仍有违例,再回首如法炮制——用于建立BCNF

BCNF违例:违背BC范式的函数依赖称为BC范式违例

例:关系R(A,B,C,D,E)的键码是AB,有函数依赖AB->CDE,ABC->E,C->D

分析上述三个函数依赖可以看出,C->D是BCNF违例。因为它的决定因素不包含键码。我们作如下分解

违例自成一体,即CD构成一个关系模式R1(C,D)

舍其右全集归一,即从R的属性中取掉C->D的右边的属性D,其左边的属性C与其他所有属性构成一个新的关系R2(A,B,C,E)

新的关系模式如下:

R1(C,D)
R2(A,B,C,E)

注意:以BCNF违例为基础进行模式分解,最终得到的属于BCNF的关系模式都能实现无损连接,但未必能保持函数依赖

逻辑设计例一:假如有关系模式R(A,B,C,D)和函数依赖集S=。
(1)找出所有BCNF违例。
(2)如果该关系模式不是BCNF,则将它分解为BCNF
(3)找出所有的违背3NF的依赖
(4)如果该关系不是3NF,则将它分解为3NF

步骤一:找出R在S上的所有非平凡依赖,首先计算封闭集

单属性封闭集:A+=A,B+=BCD,C+=C,D+=D
双属性封闭集:AB+=ABCD,AC+=AC,AD+=AD,BC+=BCD,BD+=BCD,CD+=CD
三属性封闭集:ABC+=ABCD,ABD+=ABCD,BCD+=BCD,ACD+=ACD
四属性封闭集:ABCD+=ABCD

步骤二:根据计算所得的封闭集,找出键码和超键码

键码:AB

超键码:ABC,ABD,ABCD

步骤三:找出所有的非平凡函数依赖

B->C,B->D,AB->C,AB->D,BC->D,BD->C,ABC->D,ABD->C
其中,AB->C,AB->D,ABC->D,ABD->C不是BCNF违例,因为前两个依赖的决定因素本身就是键码,而后两个依赖的决定因素包含键码。所以,B->C,B->D,BC->D,BD->C是BCNF违例,因为它们的决定因素都不包含键码。实际上可以看出R不是2NF,因为存在部分函数依赖:ABC->D,ABD->C,AB->C,AB->D,B->C,B->D

步骤四:进行BCNF规范。BCNF违例自成一体。从以上BCNF违例中选择B->C自成一体

R1(B,C)

舍其右全集归一,即舍去B->C的右边属性C,所以得到

R2(A,B,D)

但是在R2中还存在BCNF违例B->D,因此B->D自成一体,得到R21(B,D),舍其右全集归一得到R22(A,B)

最后得到的关系模式是:R1(B,C),R21(B,D),R22(A,B)

通过关系模式分解,把一个非2NF的关系模式归范成一个BCNF。代价是,在实际操作中增加了连接操作。

(3)B->C,B->D,B不是键码也不是超键码,而C,D都是键码以外的属性,即是非主属性。所以R不是3NF。

逻辑设计例二:有关系R(A,B,C,D)和函数依赖集S=
(1)找出所有BCNF违例。
(2)如果该关系模式不是BCNF,则将它分解为BCNF
(3)找出所有的违背3NF的依赖
(4)如果该关系不是3NF,则将它分解为3NF

步骤一:找出R在S上的所有非平凡依赖,首先计算封闭集

单属性封闭集:A+=ABCD,B+=ABCD,C+=ABCD,D+=ABCD
双属性封闭集:AB+=ABCD,AC+=ABCD,AD+=ABCD,BC+=ABCD,BD+=ABCD,CD+=ABCD
三属性封闭集:ABC+=ABCD,ABD+=ABCD,BCD+=ABCD,ACD+=ABCD
四属性封闭集:ABCD+=ABCD

步骤二:找出所有非平凡函数依赖

A->B,A->C,A->D,B->A,B->C,B->D,C->A,C->B,C->D,D->A,D->B,D->C
AB->C,AB->D,AC->B,AC->D,AD->B,AD->C,BC->A,BC->D,BD->A,BD->C,CD->A,CD->B
ABC->D,ABD->C,BCD->A,ACD->B

步骤三:找出键码和超键码

键码:A,B,C,D

超键码:AB,AC,AD,BC,BD,CD,ABC,ABD,BCD,ACD,ABCD

根据以上结果分析,R是3NF也是BCNF

3NF要求不存在每个非主属性对于键码的部分依赖或传递依赖

练习:对于
1.R(A,B,C,D)和函数依赖集S=
2.R(A,B,C,D,E)和函数依赖集S=
3.R(A,B,C,D,E)和函数依赖集S=
(1)找出所有BCNF违例。
(2)如果该关系模式不是BCNF,则将它分解为BCNF

物理设计阶段:任务是在数据库逻辑设计的基础上,为每个关系模式选择合适的存储结构和存取路径

物理设计阶段步骤:

(1)分析影响数据库物理设计的因素;
(2)为关系模?
请参考

Ⅹ SQL和MySQL有什么区别

mssql和mysql的区别
mssql 是微软的那个 SQL Server,运行于windows 2000,2003等平台

mysql 是个开源的数据库Server,可运行在windows平台、unix\\linux平台,其标准版是免费的,可以到www.mysql.com 看看

asp\\php只是一种解释语言,不一定mssql不能用php,也不一定mysql非得用php,只不过asp-mssql,php-mysql是一种常用的组合

SQL数据库完全手册_1

SQL是Structured Quevy Language(结构化查询语言)的缩写。SQL是专为数据库而建立的操作命令集,是一种功能齐全的数据库语言。在使用它时,只需要发出“做什么”的命令,“怎么做”是不用使用者考虑的。SQL功能强大、简单易学、使用方便,已经成为了数据库操作的基础,并且现在几乎所有的数据库均支持SQL。
##1 二、SQL数据库数据体系结构
SQL数据库的数据体系结构基本上是***结构,但使用术语与传统关系模型术语不同。在SQL中,关系模式(模式)称为“基本表”(base table);存储模式(内模式)称为“存储文件”(stored file);子模式(外模式)称为“视图”(view);元组称为“行”(row);属性称为“列”(column)。名称对称如^00100009a^:
##1 三、SQL语言的组成
在正式学习SQL语言之前,首先让我们对SQL语言有一个基本认识,介绍一下SQL语言的组成:
1.一个SQL数据库是表(Table)的集合,它由一个或多个SQL模式定义。
2.一个SQL表由行集构成,一行是列的序列(集合),每列与行对应一个数据项。
3.一个表或者是一个基本表或者是一个视图。基本表是实际存储在数据库的表,而视图是由若干基本表或其他视图构成的表的定义。
4.一个基本表可以跨一个或多个存储文件,一个存储文件也可存放一个或多个基本表。每个存储文件与外部存储上一个物理文件对应。
5.用户可以用SQL语句对视图和基本表进行查询等操作。在用户角度来看,视图和基本表是一样的,没有区别,都是关系(表格)。
6.SQL用户可以是应用程序,也可以是终端用户。SQL语句可嵌入在宿主语言的程序中使用,宿主语言有FORTRAN,COBOL,PASCAL,PL/I,C和Ada语言等。SQL用户也能作为独立的用户接口,供交互环境下的终端用户使用。
##1 四、对数据库进行操作
SQL包括了所有对数据库的操作,主要是由4个部分组成:
1.数据定义:这一部分又称为“SQL DDL”,定义数据库的逻辑结构,包括定义数据库、基本表、视图和索引4部分。
2.数据操纵:这一部分又称为“SQL DML”,其中包括数据查询和数据更新两大类操作,其中数据更新又包括插入、删除和更新三种操作。
3.数据控制:对用户访问数据的控制有基本表和视图的授权、完整性规则的描述,事务控制语句等。
4.嵌入式SQL语言的使用规定:规定SQL语句在宿主语言的程序中使用的规则。
下面我们将分别介绍:
##2 (一)数据定义
SQL数据定义功能包括定义数据库、基本表、索引和视图。
首先,让我们了解一下SQL所提供的基本数据类型:(如^00100009b^)
1.数据库的建立与删除
(1)建立数据库:数据库是一个包括了多个基本表的数据集,其语句格式为:
CREATE DATABASE <数据库名> 〔其它参数〕
其中,<数据库名>在系统中必须是唯一的,不能重复,不然将导致数据存取失误。〔其它参数〕因具体数据库实现系统不同而异。
例:要建立项目管理数据库(xmmanage),其语句应为:
CREATE DATABASE xmmanage
(2) 数据库的删除:将数据库及其全部内容从系统中删除。
其语句格式为:DROP DATABASE <数据库名>
例:删除项目管理数据库(xmmanage),其语句应为:
DROP DATABASE xmmanage
2.基本表的定义及变更
本身独立存在的表称为基本表,在SQL语言中一个关系唯一对应一个基本表。基本表的定义指建立基本关系模式,而变更则是指对数据库中已存在的基本表进行删除与修改。
(1)基本表的定义:基本表是非导出关系,其定义涉及表名、列名及数据类型等,其语句格式为:
CREATE TABLE〔<数据库名>.〕<表名>
(<列名> 数据类型 〔缺省值〕 〔NOT NULL / NULL〕
〔,<列名> 数据类型 〔缺省值〕 〔NOT NULL / NULL〕〕......
〔,UNIQUE (列名〔,列名〕......)〕
〔,PRIMARY KEY(列名)〕
〔,FOREIGN KEY(列名〔,列名〕......)REFERENCE <表名>(列名〔,列名〕......)〕
〔,CHECK(条件)〕 〔其它参数〕)
其中,〈数据库名〉.〕指出将新建立的表存放于该数据库中;
新建的表由两部分组成:其一为表和一组列名,其二是实际存放的数据(即可在定义表的同时,直接存放数据到表中);
列名为用户自定义的易于理解的名称,列名中不能使用空格;
数据类型为上面所介绍的几种标准数据类型;
〔NOT NULL/NULL〕指出该列是否允许存放空值,SQL语言支持空值的概念,所谓空值是“不知道”或“无意义”的值,值得注意的是数据“0”和空格都不是空值,系统一般默认允许为空值,所以当不允许为空值时,必须明确使用NOT NULL;
〔,UNIQUE〕将列按照其规定的顺序进行排列,如不指定排列顺序,则按列的定义顺序排列;
〔PRIMARY KEY〕用于指定表的主键(即关系中的主属性),实体完整性约束条件规定:主键必须是唯一的,非空的;
〔,FOREIGN KEY (列名〔,列名〕......) REFERENCE<表名>(列名〔,列名〕......)〕是用于指定外键参照完整性约束条件,FOREIGN KEY指定相关列为外键,其参照对象为另外一个表的指定列,即使用REFERENCE引入的外表中的列,当不指定外表列名时,系统将默认其列名与参照键的列名相同,要注意的是:使用外键时必须使用参照,另外数据的外键参照完整性约束条件规定:外键的值要么与相对应的主键相同,要么为空值(具体由实现系统不同而异)
〔,CHECK〕用于使用指定条件对存入表中的数据进行检查,以确定其合法性,提高数据的安全性。
例:要建立一个学生情况表(student)
CREATE TABLE student //创建基本表student
(st_class CHAR(8),// 定义列st_class班级,数据类型为8位定长字符串
st_no CHAR(10) NOT NULL,//定义列st_no学号,类型为10位定长字符串,非空
st_name CHAR(8) NOT NULL,//定义列st_name姓名,类型为8位定长字符串,非空
st_sex CHAR(2),//定义列st_sex性别,类型为2位定长字符串
st_age SMALLINT,//定义列st_age年龄,类型为短整型
PRIMARY KEY (st_no))//定义st_no学号为主键。
例:要建立课程设置表(subject)
CREATE TABLE subject//创建基本表subject
(su_no CHAR(4) NOT NULL,// 定义列su_no课号,类型为4位定长字符串,非空
su_subject CHAR(20) NOT NULL,// 定义列su_subject课程名,类型为20位定长字符串,非空
su_credit INTEGER,// 定义列su_credit学分,类型为长整数
su_period INTEGER,//定义列su_period学时,类型为长整数
su_preno CHAR(4),//定义列su_preno先修课号,类型为4位定长字符串
PRIMARY KEY(su_no))//定义su_no课号为主键。
例:要建立学生选课表(score)
CREATE TABLE score //创建基本表score
(st_no CHAR(10),//定义列st_no学号,类型为10位定长字符串
su_no CHAR(4),//定义列su_no课号,类型为4位定长字符串
sc_score INTEGER NULL,//定义列sc_score,类型为长整形,可以为空值
FOREIGN KEY (st_no) REFERENCE student,//从表student中引入参照外键st_no,以确保本表与表student的关联与同步
FOREIGN KEY (suno) REFERENCE subject)//从表subject中引入参照外键su_no,以确保本表与表subject的关联与同步
(2)基本表的删除:用以从数据库中删除一个基本表及其全部内容,其语句格式为:
DROP TABLE〔<数据库名>.〕表名
例如:将上面建立的表都删除
DROP TABLE student,subject,score
(3)基本表的修改:在基本表建立并使用一段时间后,可能需要根据实际要求对基本表的结构进行修改,即增加新的属性或删除属性。

增加属性的语句格式为:
ALTER TABLE 〔<数据库名>.〕表名 ADD
(<列名> 数据类型 〔缺省值〕 〔NOT NULL / NULL〕
〔,<列名> 数据类型〔缺省值〕〔NOT NULL / NULL〕〕......
〔,UNIQUE (列名〔,列名〕......)〕
〔,PRIMARY KEY(列名)〕
〔,FOREIGN KEY(列名〔,列名〕......) REFERENCE <表名>(列名〔,列名〕......)〕
〔,CHECK(条件)〕〔其它参数〕)
例如:在基本表student中加入列stborn出生日期,数据类型为DATE,且不能为空值
ALTER TABLE student ADD (stborn DATE NOT NULL)
删除属性的语句格式为:
ALTER TABLE 〔<数据库名>.〕表名 DROP
( <列名> 数据类型 〔缺省值〕〔NOT NULL / NULL〕
〔,<列名> 数据类型 〔缺省值〕〔NOT NULL / NULL〕〕......)
例如:将基本表student中的列st_age删除
ALTER TABLE student DROP (st_age)
3.视图定义与删除
在SQL中,视图是外模式一级数据结构的基本单位。它是从一个或几个基本表中导出的表,是从现有基本表中抽取若干子集组成用户的“专用表”。这种构造方式必须使用SQL中的SELECT语句来实现。在定义一个视图时,只是把其定义存放在系统的数据中,而并不直接存储视图对应的数据,直到用户使用视图时才去求得对应的数据。
(1)视图的定义:定义视图可以使用CREATE VIEW语句实现,其语句格式为:
CREATE VIEW 视图名 AS SELECT语句
从一个基本表中导出视图:
例:从基本表student中导出只包括女学生情况的视图
CREATE VIEW WOMANVIEW AS //创建一个视图WOMANVIEW
SELECT st_class,st_no,st_name,st_age //选择列st_class,st_no,st_name,st_age显示
FROM student //从基本表student引入
WHERE st_sex=‘女’//引入条件为性别为“女”,注意字符变量都使用单引号引用
从多个基本表中导出视图:
例如:从基本表student和score中导出只包括女学生且分数在60分以上的视图
CREATEVIEW WOMAN_SCORE AS //定义视图WOMANSCORE
SELECT student.st_class,student.st_no,student.st_name,student.st_age,score.sc_score //有选择性显示相关列
FROM student.score //从基本表student和score中引入
WHERE student.st_sex=‘女’AND score.sc_score>=60 AND student.st_no=score.st_no //选择条件:性别为“女” 且分数在60分以上。并使用st_no将两表联系起来。
以后如果进行这一视图的应用,则只需使用语句
SELECT * FROM WOMAN_SCORE //其中“*”为通配符,代表所有元素
(2)视图的删除:用于删除已不再使用的视图,其语句格式如下:
DROP VIEW 视图名
例:将上面建立的WOMAN_SCORE视图删除
DROP VIEW WOMAN_SCORE
4.索引的定义与删除
索引属于物理存储概念,而不是逻辑的概念。在SQL中抛弃了索引概念,直接使用主键概念。值得一提的是,有些关系DBMS同时包括索引机制和主键机制,这里我们推荐使用主键机制,因为它对系统资源占用较低且效率较高。
(1)索引的定义:索引是建立在基本表之上的,其语句格式为:
CREATE 〔UNIQUE〕 INDEX 索引名 ON
〔<数据库名>.〕表名(列名 〔ASC/DESC〕〔,列名 〔ASC/DESC〕〕......)
这里,保留字UNIQUE表示基本表中的索引值不允许重复,若缺省则表示索引值在表中允许重复;DESC表示按索引键降序排列,若缺省或ASC表示升序排列。
例:对基本表student中的st_no和st_age建立索引,分别为升序与降序,且索引值不允许重复
CREATE UNIQUE INDEX STINDEX ON//创建索引STINDEX
student(st_no ASC,st_age DESC)//对student中的st_no和st_age建立索引
(2)索引的删除:
DROP INDEX 索引名
例:删除上面建立的索引STINDEX
DROP INDEX STINDEX
##2 (二)数据查询
SQL是一种查询功能很强的语言,只要是数据库存在的数据,总能通过适当的方法将它从数据库中查找出来。SQL中的查询语句只有一个:SELECT,它可与其它语句配合完成所有的查询功能。SELECT语句的完整语法,可以有6个子句。完整的语法如下:
SELECT 目标表的列名或列表达式集合
FROM 基本表或(和)视图集合
〔WHERE条件表达式〕
〔GROUP BY列名集合
〔HAVING组条件表达式〕〕
〔ORDER BY列名〔集合〕…〕
整个语句的语义如下:从FROM子句中列出的表中,选择满足WHERE子句中给出的条件表达式的元组,然后按GROUPBY子句(分组子句)中指定列的值分组,再提取满足HAVING子句中组条件表达式的那些组,按SELECT子句给出的列名或列表达式求值输出。ORDER子句(排序子句)是对输出的目标表进行重新排序,并可附加说明ASC(升序)或DESC(降序)排列。