小新的技术天地

Make It Works !

博客园 首页 新随笔 联系 订阅 管理
学校对学生进行信息化管理,自然少不了数据库帮忙。现在有以下两种数据库:
Relational Student Enrollment Database
 

students

 

sid

lname

fname

class

telephone

1

Jones

Allan

2

555-1234

2

Smith

John

3

555-4321

3

Brown

Harry

2

555-1122

5

White

Edward

3

555-3344

 

courses

cno

cname

croom

time

101

French I

2-104

MW2

102

French II

2-113

MW3

105

French III

3-105

MW2

108

Calculus

2-113

MW4

 

enrollment

sid

cno

major

1

101

No

1

108

Yes

2

105

No

3

101

Yes

3

108

No

5

102

No

5

105

No



这种就是一般的关系型数据库(Relation Database)

另一种:
 

Object-Relational Database Example

 

students

sid

name

class

telephone

enrollment

 

lname

fname

 

 

cno

major

1

Jones

Allan

2

555-1234

101

No

108

Yes

2

Smith

John

3

555-4321

105

No

3

Brown

Harry

2

555-1122

101

Yes

108

No

4

White

Edward

3

555-3344

102

No

105

No

 

courses

cno

cname

croom

time

101

French I

2-104

MW2

102

French II

2-113

MW3

105

French III

3-105

MW2


这就是面向对象的关系型数据库(Object-Relational Database0


发现有什么相同点和不同点了吗?其实很容易看出,这两个数据库的资料是一样的,只是结构有一些不一样,后者把students表和enrollment表合并了。为什么会有这样的不同呢?
其实是由于关系型数据库(Relation Database)有First Normal Form Rule:在关系型数据库中,标的一列只能保存单一的,非结构化的值。
这个非结构化又要怎么理解呢?就是我们不能像C语言的结构,C#的类那样创建一个表(比如说name列不能有两个部分name.lname和name.fname)
那么我非要结构化会怎么样呢?那就变成了我们的面向对象的关系型数据库(Object-Relational Database)。看一下面向对象的关系型数据库的students表不就把我们刚才rule甩在一边了嘛:)

那既然有了这两种数据库模型,我们的SQL语言能不能处理两种呢?其实我们的标准SQL,Core SQL-99,并不被所有数据库产品所采用,不过我们大多数数据库产品都支持了一种基本SQL语法,但是高级的SQL语法却未被广泛采用。怎么跑题了,不好意思,这还没跟我们的面向对象的关系型数据库挂上钩呢,处理这种数据库的SQL其实叫做ORSQL,但是各种不同产品(ORACLE,DB2等)对ORSQL这种SQL的延伸都有不同的语法(汗~,那要用不同的数据库,不是很辛苦)。

写个例子吧:
对于前者
SQL:insert into students values (6,Freen,John,1,555-1133);
对于后者:
SQL:insert into students values(6,Green,John,1,555-1133,set(row(101,'No'),row(108,'Yes')));

困了,先写这些把。

posted on 2004-11-09 00:30  小新0574  阅读(2537)  评论(0编辑  收藏  举报