时间:2022-12-26 06:30:01 | 来源:信息时代
时间:2022-12-26 06:30:01 来源:信息时代
函数数据模型 : 将数据中的实体、属性和联系看作为函数的一种模型,又称函数模型。
函数模型的概念最初是由E. H. Sibley和L.Kershberg于1977年引入的。主要工作是探讨如何利用函数方法作为一种工具来对传统数据模型的数据结构进行建模。1979年,P.Buneman和R.E.Frankel提出了一种函数查询语言FQL,引入了有关函数模型的许多记号,这些记号是基于函数程序设计语言FP的记号。函数模型的典型代表是DAPLEX。这是由美国计算机公司的D.W. Shipman于20世纪70年代末提出的一个被广泛使用的函数模型。
目前已开发了许多用于研究的基于函数模型的数据库系统如P/FDM、Hydra等。近年来,函数模型的思想已应用到面向对象数据库、空间数据库、工程数据库、不完全信息数据库、生物信息数据库等的研究中。
在传统数据库系统中,过程、数据结构和实际内容通常是分离的。因此,传统DBMS可以按照当前数据库模式提供用户存储、修改或查询数据。应特别注意的是,当数据被存储在数据库时,DBMS可以查询数据,且作为独立应用程序的附加过程可以应用这些数据。相反,函数模型提供了既对数据又对过程进行操纵的一种统一途径。函数模型的主要思想是一个信息系统的所有分量都按照函数进行定义。例如,函数模型定义数据对象、属性和联系作为数据库函数。进一步,函数数据操纵语言是许多可应用于数据库函数的数据操纵函数。最后,提供给用户一种称作λ演算的特殊机制用于定义自己的函数,这些函数可以与数据库及数据操纵函数进行无缝连接。
1.数据库函数
按照函数模型的术语,数据对象称作数据库实体或简称实体。所有的实体必须说明为无参的特殊函数。例如,有处理三个实体Student、Course和SC的数据库模式,其中SC中的每个实体描述一个学生选修一门课程的成绩,函数定义如下:
STUDENT( )→ENTITY
COURSE( )→ENTITY
SC( )→ENTITY
函数模型定义一个数据库模式作为一组数据库函数。例如:
/*Definitions of entities*/
STUDENT( )→ENTITY
COURSE( )→ENTITY
SC( )→ENTITY
/*Definition of attributes*/
S#(STUDENT)→INTEGER
SNAME(STUDENT)→STRING
SAGE(STUDENT)→INTEGER
SSEX(STUDENT)→STRING
SDEPT(STUDENT)→STRING
C#(COURSE)→INTEGER
CNAME(COURSE)→STRING
CPNO(COURSE)→INTEGER
GRADE(SC)→INTEGER
/*Definition of relationships*/
SSC(SC)→STUDENT
CSC(SC)→COURSE
在函数模型中,每个函数f(x)→y的逆函数也是
可用的。例如,逆函数INV_S#(integer)→STUDENT将属性S#的值映射到实体Student的内部键。类似地,逆函数INV_SNAME(STRING)→STUDENT转换属性SNAME的一个值到实体Student对应的一个内部键。此外,也存在描述实体间联系的逆函数。例如,逆函数INV_SSC(STUDENT)_SC转换实体Student的一个内部键到实体SC对应的一个内部键。
函数模型支持单值和多值函数。前面给出的所有函数都是单值函数,因为它们仅产生单值作为结果。多值函数产生结果属于一个所谓的大容量(bulk)数据类型。在函数模型中可用的大容量(bulk)数据类型仅有列表(list)。因此,多值函数在函数模型里用列表值函数表示。例如,逆函数 INV_CSC(COURSE)→C是列表值函数,返回选修某门课程的选课列表值。因此,函数数据库系统由下列两个分量组成:
(1) 由数据库管理员(DBA)定义的函数(函数数据库模式)。
(2) 定义作为一个集合偶对([Parameter]→[Resultant Value])的数据库函数的当前状态。
2. 函数模型中的查询
在函数模型中的查询也用函数进行定义。这样一个用户定义函数称为查询函数或数据操纵函数。在最简单的情形,为了建立查询可以仅用数据库函数。例如,假定一个数据库由两个外部数据库函数定义:
SDEPT(STUDENT)→STRING
SNAME(STUDENT)→STRING
查询计算机科学系(CS)学生的姓名,可以用下面的复合函数定义:
SNAME(INV_SDEPT("CS"))→STRING
3.数据操纵函数
通常,数据库函数不能充分实现或多或少的复杂查询。函数DBMS支持许多预定义数据操纵函数(DM函数),这样的函数可以应用于同样的数据类型。这样的数据操纵函数通常称为函数程序设计语言。因此,我们可以说函数模型借助定义在当前数据库模式的数据库函数扩充了可用在特定函数程序设计语言中的函数。用一种称为λ演算的特殊机制可以定义作为已有函数组合的新的、专用函数。
4. 递归函数
函数模型最强大的机制是函数的递归定义。例如,一个零件可由其他零件组成,数据库模式可定义为下列数据库函数的集合:
PART( )→ENTITY
USES(PART)→PART
关键词:数据,模型,函数