㈠ 數據模型是什麼
數據(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,比如面向對象的類。