㈠ 数据模型是什么
数据(data)是描述事物的符号记录。模型(Model)是现实世界的抽象。数据模型(Data Model)是数据特征的抽象,是数据库管理的教学形式框架。
数据模型所描述的内容包括三个部分:数据结构、数据操作、数据约束。
1)数据结构:数据模型中的数据结构主要描述数据的类型、内容、性质以及数据间的联系等。数据结构是数据模型的基础,数据操作和约束都建立在数据结构上。不同的数据结构具有不同的操作和约束。
2)数据操作:数据模型中数据操作主要描述在相应的数据结构上的操作类型和操作方式。
3)数据约束:数据模型中的数据约束主要描述数据结构内数据间的语法、词义联系、他们之间的制约和依存关系,以及数据动态变化的规则,以保证数据的正确、有效和相容。
数据模型按不同的应用层次分成三种类型:分别是概念数据模型、逻辑数据模型、物理数据模型。
1、概念数据模型(Conceptual Data Model):简称概念模型,是面向数据库用户的实现世界的模型,主要用来描述世界的概念化结构,它使数据库的设计人员在设计的初始阶段,摆脱计算机系统及DBMS的具体技术问题,集中精力分析数据以及数据之间的联系等,与具体的数据管理系统(Database Management System,简称DBMS)无关。概念数据模型必须换成逻辑数据模型,才能在DBMS中实现。
2、逻辑数据模型(Logical Data Model):简称数据模型,这是用户从数据库所看到的模型,是具体的DBMS所支持的数据模型,如网状数据模型(Network Data Model)、层次数据模型(Hierarchical Data Model)等等。此模型既要面向用户,又要面向系统,主要用于数据库管理系统(DBMS)的实现。
3、物理数据模型(Physical Data Model):简称物理模型,是面向计算机物理表示的模型,描述了数据在储存介质上的组织结构,它不但与具体的DBMS有关,而且还与操作系统和硬件有关。每一种逻辑数据模型在实现时都有起对应的物理数据模型。DBMS为了保证其独立性与可移植性,大部分物理数据模型的实现工作又系统自动完成,而设计者只设计索引、聚集等特殊结构。
在概念数据模型中最常用的是E-R模型、扩充的E-R模型、面向对象模型及谓词模型。在逻辑数据类型中最常用的是层次模型、网状模型、关系模型。
㈡ 什么是数据抽象,数据模型及数据模式它们之间的关系是什么
数据抽象:是将数据抽象化、逻辑化,是对数据的抽取过程。
数据模型:是对数据进行抽象化表示的工具,主要使用逻辑概念来表示数据。
数据模式:利用数据模型组织抽取的数据所得的结果,也即是数据抽象的结果
三者之间的关系:
数据抽取作为总的过程,利用数据模型,对现实具体系统的数据进行抽取,组织,使其具有结构化的特征,最终得到的结果,即是数据模式。
㈢ 抽象数据类型是什么
数据是描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别,并输入给计算机处理的符号集合。数据不仅仅包括整型、实型(浮点数)等数值类型,还包括字符及声音、图像、视频等非数值类型。是指对客观事件进行记录并可以鉴别的符号,是对客观事物的性质、状态以及相互关系等进行记载的物理符号或这些物理符号的组合。
对于字符数据类型,就需要进行非数值的处理。而声音、图像、视频等其实是可以通过编码的手段编程字符数据来处理的。
抽象数据类型不仅仅指哪些已经定义并实现的数据类型,还可以是计算机编程者在设计软件程序时自己定义的数据类型,比如我们编写关于计算机绘图或者地图类的软件系统,经常都会用到坐标。也就是说,总是有成对出现的x和y,在3D系统中还有z出现,既然这三个整型数字是始终在一起出现,我们就定义一个叫point的抽象数据类型,它有x、y、z三个整型变量,这样我们很方便地操作一个point数据变量就能知道这一点的坐标了。
抽象数据类型体现了程序设计中问题分解、抽象和信息隐藏的特性。
㈣ 什么是数据模型,包含哪几种类型 (数据库)
1)数据模型的分类:
最常用的数据模型是概念数据模型和结构数据模型:
①概念数据模型(信息模型):面向用户的,按照用户的观点进行建模,典型代表:E-R图
②结构数据模型:面向计算机系统的,用于DBMS的实现,典型代表有:层次模型,网状模型、关系模型,面向 对象模型
数据结构:主要描述数据的类型、内容、性质以及数据间的联系等,是目标类型的集合。目标类型是数据库的组成成分,一般可分为两类:数据类型、数据类型之间的联系。数据类型如DBTG(数据库任务组)网状模型中的记录型、数据项,关系模型中的关系、域等。
联系部分有DBTG网状模型中的系型等。数据结构是数据模型的基础,数据操作和约束都基本建立在数据结构上。不同的数据结构具有不同的操作和约束。
数据操作:数据模型中数据操作主要描述在相应的数据结构上的操作类型和操作方式。它是操作算符的集合,包括若干操作和推理规则,用以对目标类型的有效实例所组成的数据库进行操作。
数据约束:数据模型中的数据约束主要描述数据结构内数据间的语法、词义联系、他们之间的制约和依存关系,以及数据动态变化的规则,以保证数据的正确、有效和相容。它是完整性规则的集合,用以限定符合数据模型的数据库状态,以及状态的变化。
约束条件可以按不同的原则划分为数据值的约束和数据间联系的约束;静态约束和动态约束;实体约束和实体间的参照约束等。
㈤ 数据模型主要有4种,分别是什么
有三种。
1、层次模型
将数据组织成一对多关系的结构,用树形结构表示实体及实体间的联系。
2、网状模型
用连接指令或指针来确定数据间的网状连接关系,是具有多对多类型的数据组织方式 。
3、关系模型
以记录组或数据表的形式组织数据,以便于利用各种实体与属性之间的关系进行存储和变换,不分层也无指针,是建立空间数据和属性数据之间关系的一种非常有效的数据组织方法 。
(5)物理抽象是什么数据模型扩展阅读
层次模型
层次模型将数据组织成一对多关系的结构,层次结构采用关键字来访问其中每一层次的每一部分。
层次模型发展最早,它以树结构为基本结构,典型代表是IMS模型。
优点是存取方便且速度快;结构清晰,容易理解;数据修改和数据库扩展容易实现;检索关键属性十分方便。
㈥ 什么是抽象模型
抽象模型也称为物理模型,主要指科技工作者为一定的目的根据相似原理构造的模型,它不仅可以显示原型的外形或某些特征,而且可以用来进行模拟实验,间接地研究原型的某些规律,如波浪水箱中的舰艇模型用来模拟波浪冲击下舰艇的航行性能,风洞中的飞机模型用来试验飞机在气流中的空气动力学特征。 顺便给自己拉一下票吧,感觉专业的就赞一个吧!!!不能枉费我20分钟翻书时间给大家提供答案啊!!!!!!!!!!
㈦ 在三层数据模型中,对现实世界进行第一层抽象的模型,称为什么模型
第一层是概念模型。
1、概念模型(Conceptual Data Model),是一种面向用户、面向客观世界的模型,主要用来描述世界的概念化结构,它是数据库的设计人员在设计的初始阶段。
2、逻辑模型(Logical Data Model),是一种面向数据库系统的模型,是具体的DBMS所支持的数据模型。
3、物理模型(Physical Data Model),是一种面向计算机物理表示的模型,描述了数据在储存介质上的组织结构,它不但与具体的DBMS有关,而且还与操作系统和硬件有关。
㈧ 高中生物中什么是物理模型概念模型和数学模型
物理模型通常简称为模型,指可以模拟物理对象的较小或更大的复制品。
概念模型指一种或多或少的形式化描述,描述的内容包括建立软件组件时,所用到的算法、架构、假设与底层约束。通常对实际的简化描述,包括一定程度的抽象,显式或隐式地按照头脑中的确切使用方式进行构建。
数学模型指运用数理逻辑方法和数学语言建构的科学或工程模型。针对参照某种事物系统的特征或数量依存关系,采用数学语言,概括地或近似地表述出的一种数学结构,这种数学结构借助于数学符号刻划出来的某种系统的纯关系结构。
(8)物理抽象是什么数据模型扩展阅读
物理模型设计所做的工作是根据信息系统的容量,复杂度,项目资源以及数据仓库项目自身(当然,也可以是非数据仓库项目)的软件生命周期确定数据仓库系统的软硬件配置,数据仓库分层设计模式,数据的存储结构,确定索引策略,确定数据存放位置,确定存储分配等等。这部分应该是由项目经理和数据仓库架构师共同实施的。
概念模型用于信息世界的建模,是现实世界到信息世界的第一层抽象。为了把现实世界中的具体事物抽象、组织为某一数据库管理系统支持的数据模型,人们常常首先将现实世界抽象为信息世界,然后将信息世界转换为机器世界。
也就是说,首先把现实世界中的客观对象抽象为某一种信息结构,这种信息结构并不依赖于具体的计算机系统,不是某一个数据库管理系统(DBMS)支持的数据模型,而是概念级的模型,称为概念模型。
从广义理解,数学模型包括数学中的各种概念,各种公式和各种理论。因为它们都是由现实世界的原型抽象出来的,从这意义上讲,整个数学也可以说是一门关于数学模型的科学。从狭义理解,数学模型只指那些反映了特定问题或特定的具体事物系统的数学关系结构,这个意义上也可理解为联系一个系统中各变量间内的关系的数学表达。
㈨ 什么是抽象数据模型主要特点是什么
数据抽象
概念结构是对现实世界的一种抽象
从实际的人、物、事和概念中抽取所关心的共同特性,忽略非本质的细节
把这些特性用各种概念精确地加以描述
这些概念组成了某种模型
三种常用抽象
1. 分类(Classification)
定义某一类概念作为现实世界中一组对象的类型
这些对象具有某些共同的特性和行为
它抽象了对象值和型之间的“is member of”的语义
在E-R模型中,实体型就是这种抽象
2. 聚集(Aggregation)
定义某一类型的组成成分
它抽象了对象内部类型和成分之间“is part of”的语义
在E-R模型中若干属性的聚集组成了实体型,就是这种抽象
3. 概括(Generalization)
定义类型之间的一种子集联系
它抽象了类型之间的“is subset of”的语义
概括有一个很重要的性质:继承性。子类继承超类上定义的所有抽象。
注:原E-R模型不具有概括,本书对E-R模型作了扩充,允许定义超类实体型和子类实体型。
用双竖边的矩形框表示子类,
用直线加小圆圈表示超类-子类的联系
数据抽象的用途
对需求分析阶段收集到的数据进行分类、组织(聚集),形成
实体
实体的属性,标识实体的码
确定实体之间的联系类型(1:1,1:n,m:n)
/**************稀疏矩阵的抽象数据模型**************/
#include<iostream>
#include<cstdlib>
using namespace std;
/***Writed by Yecon***/
const int MaxTerms = 20; //三元组表smArray中三元组个数的最大值
template <class Type> class SparseMatrix; //稀疏矩阵的类声明
template <class Type> class Trituple
{
//三元组类
friend class SparseMatrix<Type>;
private:
int row,col;
Type value;
};
template <class Type> class SparseMatrix
{
int Rows, //行数
Cols, //列数
Terms; //非零元个数
Trituple<Type> smArray[MaxTerms]; //三元组表
public:
SparseMatrix(int MaxRows,int MaxCols); //构造函数
bool input_data(int row,int col,Type value); //输入数据
SparseMatrix<Type> Transpose(); //转置矩阵
SparseMatrix<Type> Add(SparseMatrix<Type> b); //矩阵求和
SparseMatrix<Type> Mul(SparseMatrix<Type> b); //矩阵求积
SparseMatrix<Type> EmptyMatrix(); //返回零矩阵
};
template <class Type> SparseMatrix<Type>::SparseMatrix(int MaxRows,int MaxCols)
{
Rows = MaxRows; //行数置零
Cols = MaxCols; //列数置零
Terms = 0; //非零元个数置零
}
template <class Type> bool SparseMatrix<Type>::input_data(int row,int col,Type value)
{
if(Terms == MaxTerms || row > Rows || col > Cols)return false;
if(Terms == 0)//若是第一个元素
{
//插入第一个元素
smArray[Terms].row = row;
smArray[Terms].col = col;
smArray[Terms].value = value;
Terms++;
return true;
}
if((row>smArray[Terms-1].row)||((row==smArray[Terms-1].row)&&(col>smArray[Terms-1].col)))//若是最后一个元素
{
//插入最后一个元素
smArray[Terms].row = row;
smArray[Terms].col = col;
smArray[Terms].value = value;
Terms++;
return true;
}
//若非第一个活最后一个元素
//计算应该插入的位置
int k = Terms - 1;
for(int i = Terms - 1;i >= 0;i--)//确定行
if(smArray[i].row >= row)k = i;
for(int j = k;smArray[j].row == row;j++)//确定列
if(smArray[j].col <= col)k = j;
for(int i = Terms -1;i >= k;i--)//为待插入的元素腾出地方
smArray[i + 1] = smArray[i];
smArray[k].col = col;
smArray[k].row = row;
smArray[k].value = value;
Terms++;
return true;
}
template <class Type> SparseMatrix<Type> SparseMatrix<Type>:: Transpose()
{
//求矩阵的转置
int * rowSize = new int[Cols]; //辅助数组,统计个列非零元素个数
int * rowStart = new int[Cols]; //辅助数组,预计转置后各行存放位置
SparseMatrix<Type> b(Cols,Rows);//存放转置结果
// b.Rows = Cols;b.Cols = Rows;b.Terms = Terms;
if(Terms > 0)
{
//统计矩阵b中第i行非零元素个数
for(int i = 0;i < Cols;i++)rowSize[i] = 0; //清零
for(int i = 0;i < Terms;i++)rowSize[smArray[i].col]++;//根据矩阵this中第i个非零元素的列号,将rowSize相当该列的计数加1
//计算矩阵b第i行非零元素的开始存放位置
rowStart[0] = 0;
for(int i = 1;i < Cols;i++) //rowStart[i] = 矩阵b的第i行的开始存放位置
rowStart[i] = rowStart[i - 1] + rowSize[i - 1];
for(int i = 0;i < Terms;i++)
{
//从this向b传送
int j = rowStart[smArray[i].col]; //j为第i个非零元素在b中应存放的位置
b.smArray[j].row = smArray[i].col;
b.smArray[j].col = smArray[i].row;
b.smArray[j].value = smArray[i].value;
rowStart[smArray[i].col]++; //矩阵b第i行非零元素的存放位置加1
}
}
delete []rowSize;
delete []rowStart;
return b;
}
template <class Type> SparseMatrix<Type> SparseMatrix<Type>::Mul(SparseMatrix<Type> b)
{
//矩阵求积
if(Cols != b.Rows)
{
//this矩阵列数与b矩阵行数不能
cout << "Incompatible matrix" << endl;
return EmptyMatrix();
}
if(Terms == MaxTerms || b.Terms == MaxTerms) //有一个矩阵的项数达到最大
{
cout << "One additional space in a or b needed" << endl;
return EmptyMatrix(); //空间不足,返回空矩阵
}
int * rowSize = new int[b.Rows]; //辅助数组,矩阵b各行非零元素个数
int *rowStart = new int[b.Rows + 1]; //辅助数组,矩阵b各行的三元组起始位置
Type *temp = new Type[b.Cols]; //临时数组,暂存每一行计算结果
SparseMatrix<Type> result(Rows,Cols); //结果矩阵的三元组表
for(int i = 0;i < b.Rows;i++) rowSize[i] = 0; //统计矩阵b中第i行非零元素个数
for(int i = 0;i < b.Terms;i++)rowSize[smArray[i].row]++;
rowStart[0] = 0; //计算矩阵b第i行非零元素的开始位置
for(int i = 1;i <= b.Rows;i++)rowStart[i] = rowStart[i - 1] + rowSize[i - 1];
int Current = 0,lastInResult = -1;//a.smArray扫描指针及result存放指针
while(Current < Terms)
{
//生成result的当前行temp
int RowA = smArray[Current].row; //当前行的行号
for(int i = 0;i < b.Cols;i++)temp[i] = 0; //temp初始化
while(Current < Terms && smArray[Current].row == RowA)
{
int ColA = smArray[Current].col; //矩阵A当前扫描到元素的列号
for(int i = rowStart[ColA];i < rowStart[ColA + 1];i++)
{
int ColB = b.smArray[i].col; //矩阵b中相乘元素的列号
//A的RowA行与b的ColB列相乘
temp[ColB] = temp[ColB] + smArray[Current].value * b.smArray[i].value;
}
Current++;
}
for(int i = 0;i < b.Cols;i++)
if(temp[i] != 0)
{
//将temp中的非零元素压缩到result中去
lastInResult++;
result.smArray[lastInResult].row = RowA;
result.smArray[lastInResult].col = i;
result.smArray[lastInResult].value = temp[i];
}
}
result.Rows = Rows;
result.Cols = b.Cols;
result.Terms = lastInResult + 1;
delete []rowSize;
delete []rowStart;
delete []temp;
return result;
}
template <class Type> SparseMatrix<Type> SparseMatrix<Type>::EmptyMatrix()
{
SparseMatrix<Type> Z(0,0);
return Z;
}
int testSparseMatrix()//main()
{
SparseMatrix<int> A(7,8);
A.input_data(0,6,15);
A.input_data(0,3,22);
A.input_data(4,0,91);
A.input_data(2,3,-6);
A.input_data(1,5,17);
A.input_data(5,2,28);
A.input_data(1,1,11);
A.input_data(3,5,39);
//test Transpose()
SparseMatrix<int> B(8,7);
B = A.Transpose();
//test Mul()
SparseMatrix<int> C(7,4);
C.input_data(2,3,5);
C.input_data(1,1,10);
C.input_data(5,2,2);
SparseMatrix<int> D(8,4);
D = B.Mul(C);
return 0;
}
㈩ 怎么理解抽象数据类型
数据结构:数据+结构
数据:数值型和非数值型
结构:逻辑结构和物理结构
以上是从字面上的理解所得。
抽象数据类型:在传统数值型数据类型外的数据类型,因此作为一种抽象来看待,这种抽象是人为的将现实世界客观存在的事物进行的一种抽象,抽象成一种数学模型的概念。比如线性表、树、图、集合。这四种都是非数值型的数据类型。也就是一种抽象。
数据结构就是研究非数值型的数据类型,这种数据类型可以通过用户来定义,借用高级程序设计语言中所提供的内容,比如结构struct,比如面向对象的类。