當前位置:首頁 » 操作系統 » 獲取資料庫結構

獲取資料庫結構

發布時間: 2023-05-23 12:17:34

1. 簡述資料庫的結構

資料庫結構是指在計算機的存儲設備上合理存放的相關聯的有結構的數據集合的結構。一個資料庫結構含有各種成分,包括資料庫、數據表、欄位等。

資料庫(Database)

Visual Basic中使用的資料庫是關系型資料庫(Relational Database)。一個資料庫由一個或一組數據表組成。每個資料庫都以文件的形式存放在磁碟上,即對應於一個物理文件。不同的資料庫,與物理文件對應的方式也不一樣。對於dBASE,FoxPro和Paradox格式的資料庫來說,一個數據表就是一個單獨的資料庫文件,而對於Microsoft Access、Btrieve格式的資料庫來說,一個資料庫文件可以含有多個數據表。

1、數據表(Table)

簡稱表,由一組數據記錄組成,資料庫中的數據是以表為單位進行組織的。一個表是一組相關的按行排列的數據;每個表中都含有相同類型的信息。

表實際上是一個二維表格,例如,一個班所有學生的考試成績,可以存放在一個表中,表中的每一行對應一個學生,這一行包括學生的學號,姓名及各門課程成績。

2、記錄(Record)

表中的每一行稱為一個記錄,它由若干個欄位組成。

3、欄位(Field)

也稱域。表中的每一列稱為一個欄位。每個欄位都有相應的描述信息,如數據類型、數據寬度等。

(1)獲取資料庫結構擴展閱讀:

資料庫結構的其他組成結構:

1、索引(Index)

為了提高訪問資料庫的效率,可以對資料庫使用索引。當資料庫較大時,為了查找指定的記錄,則使用索引和不使用索引的效率有很大差別。

索引實際上是一種特殊類型的表,其中含有關鍵欄位的值(由用戶定義)和指向實際記錄位置的指針,這些值和指針按照特定的順序(也由用戶定義)存儲,從而可以以較快的速度查找到所需要的數據記錄。

2、查詢(Query)

一條sql(結構化查詢語言)命令,用來從一個或多個表中獲取一組指定的記錄,或者對某個表執行指定的操作。當從資料庫中讀取數據時,往往希望讀出的數據符合某些條件,並且能按某個欄位排序。使用SQL,可以使這一操作容易實現而且更加有效。

SQL是非過程化語言(有人稱為第四代語言),在用它查找指定的記錄時,只需指出做什麼,不必說明如何做。每個語句可以看作是一個查詢(query),根據這個查詢,可以得到需要的查詢結果。

3、過濾器(Filter)

過濾器是資料庫的一個組成部分,它把索引和排序結合起來,用來設置條件,然後根據給定的條件輸出所需要的數據。

4、視圖(view)

數據的視圖指的是查找到(或者處理)的記錄數和顯示(或者進行處理)這些記錄的順序。在一般情況下,視圖由過濾器和索引控制。

2. Delphi開發工具中如何訪問資料庫結構[2]

獲取數據域和索引信息

在取得了數據表信息後 應使用TTable對象訪問該數據表的具體信息 對應函數如下

以下是引用片段 procereTDataSet GetFieldNames(List:TStrings); procere慧銷TTable GetIndexNames(List:TStrings);

GetFieldNames用來取得數據表中的各個域名 GetIndexNames用來取得數據表中的各個索引名

另外 可以進一步使用TDataset和TTable中的兩個屬性TDataSet FieldDefs Items[] 和 TTable IndexDefs Items[]來訪問具體的數據域信息和索引信息 它們分別是由TFieldDef和TIndexDef組成的數組

TFieldDef描述如下

TIndexDef描述如下

TFieldType定義如下

以下是引用片段 TFieldType=(ftUnknown ftString ftSmallint ftInteger ftWord ftBoolean ftFloat ftCurrency ftBCD ftDate ftTime ftDateTime ftBytes ftVarBytes ftAutoInc ftBlob ftMemo ftGraphic ftFmtMemo ftParadoxOle ftDBaseOle ftTypedBinary ftCursor);

TIndexOptions定義如下

以下是引用片段 TIndexOptions=setof(ixPrimary ixUnique ixDescending ixExpression ixCaseInsensitive);

它們的具體意義可以參見Delphi幫助

應用實例

使用下面的程序片段即可獲得指定資料庫中指定表的域定義和索引定義 ListBox ListBox 和 ListBox 為Form 中定義的三個列表框 用於顯示結果

以下是引用片段 Var Alias TableName:String Table :TTable Begin Alias:= fjs TableName:= d* //初始化 Session GetTableNames(Alias {別名} TableName {過濾器} True {是否顯示文件擴展名(對DBF) } False {是否顯示系統表} ListBox Items) If ListBox Items Count= then Begin MessageDlg( 資料庫 +Alias+ 中沒有數據表 +TableName mtError [mbOK] ) Exit End Table :=TTable Create(nil) Table DatabaseName :=Alias Table TableName := ListBox Items Strings[ ] {取得表中欄位名及索引名} Table Open if Table Active then begin Table GetFieldNames(ListBox Items) Table GetIndexNames(ListBox Items) end //… 此時結果在ListBox 和ListBox 中 // Table Destroy end

小結

通過上面討論和實例證明 利用Delphi語言開發資料庫軟體管理系統 關鍵技術都已得到解決

參考文獻

[ ] (李維 編著) 《DELPHI 高效資料庫程序設計》機械工業出版社

[ ] 郭旭等 著 《Delphi 應用開發指南》清華大學出版社

[ ] 大富翁 // delphibbs /

收稿日期 月 日 修改日期 月 日

作者簡介 於海生 男 年生於遼寧省丹東市 黑龍江大慶人 年畢業於遼寧化工大仿蘆學計算機科學與技術專業備碧帶 助理工程師 研究方向為鑽井計算機軟體開發與應用

lishixin/Article/program/Delphi/201311/8543

3. 如何查看資料庫結構

你買的資料庫?去你買資料庫的網站進入後台管理,然後進入資料庫管理就能看到

4. 如何通過SQL查詢獲得資料庫表結構

在菜單 Tools 下面有個 Object browser 將其打勾(如果已經打勾了就不用管了)之後缺慶在IDE的左邊有個Objects窗口,其中有一個樹型結構圖,在裡面找到Tables 展開就可以了看伏櫻握到所有的Table了默認顯示的表包括系統表和許可權允許范圍內的其他schema下的表,如果不想看到,只需將樹型圖上方頌凱的All objects(下拉選框)改為My objects 就只看自己的表了

5. 怎麼獲得資料庫表結構

1,在注入時初始化這兩個模板。
/**
* 注入數據源, 該數據源在Spring配置文件中配置
* 在注入時初始化這兩個模板
* @param dataSource
* Method create author: yanwei
* Method create dateTime: 2011-11-2 下午03:43:13
* Method update author:
* Method update dateTime:
*/
@Resource
public void setDataSource(DataSource dataSource) {
this.dataSource = dataSource;
jdbcTemplate = new JdbcTemplate(dataSource);
simpleJdbcTemplate = new SimpleJdbcTemplate(dataSource);
}
2,獲取表結構信息。
1 /**
2 * 獲取表結構信息
3 * @param tableName 表名
4 * @return
5 * @throws Exception
6 * Method create author: yanwei
7 * Method create dateTime: 2011-12-21 下午01:01:17
8 * Method update author:
9 * Method update dateTime:
10 */
11 public List<DsClientColumnInfo> getDsTableColumnInfo(String tableName) throws DataAccessFailureException{
12
13 ResultSet resultSet = null;
14 Connection connection = null;
15 java.util.List<DsClientColumnInfo> clientTableInfos = new ArrayList<DsClientColumnInfo>();
16 try {
17 connection = this.jdbcTemplate.getDataSource().getConnection();
18 //獲得列的信息
19 resultSet = connection.getMetaData().getColumns(null, null, tableName, null);
20 while (resultSet.next()) {
21 //獲得欄位名稱
22 String name = resultSet.getString("COLUMN_NAME");
23 //獲得欄位類型名稱
24 String type = resultSet.getString("TYPE_NAME");
25 //獲得欄位大小
26 int size = resultSet.getInt("COLUMN_SIZE");
27 //獲得欄位備注
28 String remark = resultSet.getString("REMARKS");
29 DsClientColumnInfo info = new DsClientColumnInfo(null, null, null, name, remark, size, type, "false");
30 clientTableInfos.add(info);
31 }
32
33 //獲得主鍵的信息
34 resultSet = connection.getMetaData().getPrimaryKeys(null, null, tableName);
35 while(resultSet.next()){
36 String primaryKey = resultSet.getString("COLUMN_NAME");
37 //設置是否為主鍵
38 for (DsClientColumnInfo dsClientColumnInfo : clientTableInfos) {
39 if(primaryKey != null && primaryKey.equals(dsClientColumnInfo.getClientColumnCode()))
40 dsClientColumnInfo.setIsParmaryKey("true");
41 else
42 dsClientColumnInfo.setIsParmaryKey("false");
43 }
44 }
45
46 //獲得外鍵信息
47 resultSet = connection.getMetaData().getImportedKeys(null, null, tableName);
48 while(resultSet.next()){
49 String exportedKey = resultSet.getString("FKCOLUMN_NAME");
50 //設置是否是外鍵
51 for (DsClientColumnInfo dsClientColumnInfo : clientTableInfos) {
52 if(exportedKey != null && exportedKey.equals(dsClientColumnInfo.getClientColumnCode()))
53 dsClientColumnInfo.setIsImportedKey("true");
54 else
55 dsClientColumnInfo.setIsImportedKey("false");
56 }
57 }
58
59
60 } catch (Exception e) {
61 e.printStackTrace();
62 throw new RuntimeException("獲取欄位信息的時候失敗,請將問題反映到維護人員。" + e.getMessage(), e);
63 } finally{
64 if(resultSet != null)
65 try {
66 resultSet.close();
67 } catch (SQLException e) {
68 e.printStackTrace();
69 throw new DataAccessFailureException("關閉結果集resultSet失敗。",e);
70 }finally{
71 if(connection != null)
72 try {
73 connection.close();
74 } catch (SQLException e) {
75 e.printStackTrace();
76 throw new DataAccessFailureException("關閉連接connection失敗。",e);
77 }
78 }
79 }
80
81 Set set = new HashSet();
82 set.addAll(clientTableInfos);
83 clientTableInfos.clear();
84 clientTableInfos.addAll(set);
85 return clientTableInfos;
86 }
3,獲得資料庫中所有的表。
1 /**
2 * 獲得資料庫中所有的表
3 * @return
4 * Method create author: yanwei
5 * Method create dateTime: 2012-1-5 上午11:23:54
6 * Method update author:
7 * Method update dateTime:
8 * @throws SQLException
9 */
10 public Map<String, String> getDatabaseTables() throws DataAccessFailureException{
11 ResultSet resultSet = null;
12 Connection connection = null;
13 Map<String, String> map = new HashMap<String, String>();
14 try {
15 String[] types = {"TABLE"};
16 connection = this.jdbcTemplate.getDataSource().getConnection();
17 String databaseName = SynXmlAnalysis.getElementValueByName(DATABASE_NAME);
18 resultSet = connection.getMetaData().getTables(null, databaseName, null, types);
19 while(resultSet.next()){
20 String tableName = resultSet.getString("TABLE_NAME");
21 String remark = resultSet.getString("REMARKS");
22 map.put(tableName, remark);
23 }
24 } catch (SQLException e) {
25 e.printStackTrace();
26 throw new DataAccessFailureException(e);
27 }catch (Exception e) {
28 e.printStackTrace();
29 }finally{
30 if(resultSet != null)
31 try {
32 resultSet.close();
33 } catch (SQLException e) {
34 e.printStackTrace();
35 throw new DataAccessFailureException("關閉結果集resultSet失敗。",e);
36 }finally{
37 if(connection != null)
38 try {
39 connection.close();
40 } catch (SQLException e) {
41 e.printStackTrace();
42 throw new DataAccessFailureException("關閉連接connection失敗。",e);
43 }
44 }
45
46 }
47 return map;
48 }

6. 如何獲得資料庫中表的結構

list 表名
得到每一個表的詳細信息欄位名,欄位屬性(類型,文字長度,備注)
describe 表名
具體的表名

7. 如何從mysql資料庫中獲取一個表的表結構

列出表(列)結構:
mysql< DESCRIBE tableName;
mysql< DESCRIBE tableName columnName;
mysql< DESC tableName;
mysql< SHOW COLUMNS FROM tableName;
% mysqlshow dbName tableName!

8. 如何通過JDBC取得資料庫表結構信息

JDBC中有個ResultSetMetaData類就是用來獲取數據表結構信息的。
...
ResultSet rs = ....
ResultSetMetaData rsmd = rs.getMetaData();

//ResultSetMetaData中有如下方法:

getColumnCount(); 返回 ResultSet 中的列數。
getColumnName(int); 返回列序號為 int 的列名。
getColumnLabel(int); 返回此列暗含的標簽。
isCurrency(int); 如果此列包含帶有貨幣單位的一個數字,則返回 true。
isReadOnly(int); 如果此列為只讀,則返回 true。
isAutoIncrement(int); 如果此列自動遞增,則返回 true。這類列通常為鍵,而且始終是只讀的。
getColumnType(int); 返回此列的 SQL 數據類型。這些數據類型包括

9. 資料庫結構

新一輪油氣資源評價資料庫是建立在國家層面上的資料庫,資料庫設計首先立足於國家能源政策和戰略制定的宏觀要求,還要結合油氣資源評價的工作特徵和各個評價項目及資源的具體情況。使用當前最流行和最成熟的資料庫技術進行資料庫的總體結構設計。

資料庫的設計以《石油工業資料庫設計規范》為指導標准,以《石油勘探開發數據》為設計基礎,借鑒前人的優秀設計理念和思路,參考國內外優秀的資源評價資料庫和油氣資源資料庫的設計技術優勢,結合本輪資源評價的具體特點,按照面向對象的設計和面向過程的設計相結合的設計方法,進行資料庫的數據劃分設計。

油氣資源評價資料庫要滿足新一輪全國油氣資源評價工作的常規油氣資源評價、煤層氣資源評價、油砂資源評價、油頁岩資源評價四個油氣資源評價的數據需求。進行資料庫具體數據內容設計。

並且,資料庫的設計要為油氣資源評價的快速、動態評價和遠程評價工作的需求保留足夠數據擴展介面,資料庫具有良好開放性、兼容性和可擴充性。

(一)數據劃分

資料庫內存放的數據將支持資源評價的整個過程。為了能更好地管理庫中數據,需要對整個過程中將用到的數據進行分類管理。具體分類方式如下(圖4-11):

圖4-11 數據分類示意圖

1.按照應用類型劃分

按照數據在資源評價過程中的應用類型劃分,可以劃分為基礎數據、參數數據和評價結果數據。

基礎數據是指從勘探生產活動及認識中直接獲取的原始數據,這些數據一般沒有經過復雜的處理和計算過程。如分析化驗數據、鑽井地質數據、盆地基礎數據等。這些數據是整個評價工作的基礎。

參數數據是指在評價過程中各種評價方法和軟體直接使用的參數數據。

評價結果數據是指資源評價中產生的各種評價結果數據,如資源量結果數據、地質評價結果數據等。

2.按照評價對象劃分

本次評價共分為大區、評價單元、計算單元三個層次,在研究中又使用了盆地、一級構造單元,在評價對象總體考慮中按照評價對象將數據劃分為大區、評價單元、計算單元等類型。

3.按照獲取方式劃分

按照獲取方式可以將數據分為直接獲取、研究獲取、間接獲取幾類。

4.按照存儲類型劃分

按照存儲類型可以將數據劃分為結構化數據和非結構化數據。

結構化數據是指能夠用現有的關系資料庫系統直接管理的數據,進一步又可以分為定量數據和定性數據兩類。

非結構化數據是指不能用現有的關系資料庫系統直接管理和操作的數據,它必須藉助於另外的工具管理和操作。如圖件數據、文檔數據等。

庫中數據類型的劃分共分六個層次逐次劃分,包括:數據存儲類型→資源類型→評價對象→應用→獲取方式→數據特徵。

對於結構化存儲的數據在應用層分為三類:基礎數據、中間數據和結果數據,基礎數據中包含用於類比的基礎數據、用於統計分析的基礎數據和直接用於公式運算的基礎數據;結構化存儲的數據在獲取方式上可以繼續劃分,其中,用於公式運算的數據可以細化為專家直接錄入、由地質類比獲取、通過生產過程獲取、通過地質研究過程獲取及其他方式。中間數據可以從以下方式獲取:標准、統計、類比、參數的關聯。結果數據的獲取有兩種方式:公式運算結果和通過鑽井、地質、綜合研究等提交的文字報告。

對於非結構化存儲的數據在應用層分為兩類:圖形數據和文檔數據。

圖形數據在獲取方式上可以繼續劃分成四種方式:通過工程測量數據獲取(如地理圖件、井位坐標數據等)、通過地質研究過程獲取(如沉積相圖、構造區劃圖等)、由綜合研究獲取(如綜合評價圖等)、其他方式。

圖形數據在表現方式上又可以進一步分為有坐標意義的圖形(如構造單元劃分圖、地理圖、井點陣圖等)、數值圖(如產烴率曲線圖、酐洛根熱降解圖等)和無坐標含義圖(如剖面圖)等。

文檔數據是指評價過程中產生的各種報告、項目運行記錄等。

(二)資料庫結構

從業務需求上,根據數據用途、數據類型和數據來源,可將本次的油氣資源評價資料庫分為三級:基礎庫、參數庫、成果庫(圖4-12)。其結構如下:

圖4-12 資料庫結構示意圖

1.基礎庫

基礎庫是油氣資源評價工作的最基礎的原始數據,有實測數據(物探數據、測井數據、鑽井數據、開發數據等)、實驗數據和經驗數據等。

確定基礎數據實際上是一項涉及油田勘探、開發等領域的多學科的復雜工作,是油氣資源評價工作的研究過程和研究成果在資料庫中的具體表現方式。在設計資料庫的過程中,需要與參數研究專家經過多次反復,才能最終確定基礎資料庫,確保基礎資料庫能滿足目前所有評價工作中計算的需要。

2.參數庫

參數庫用於存儲油氣資源評價工作所用到的參數數據,評價軟體,直接從參數庫中提取參數數據,用於計算。參數數據由基礎數據匯總而來,也可以由專家根據經驗直接得到。

本次評價中所涉及的參數大致可以分為以下幾類:①直接應用的參數;②通過標准或類比借用的參數;③通過研究過程或復雜的預處理得到的參數。

3.成果庫

成果庫用於存儲資源評價結果,包括各種計算結果、各種文檔、電子表格、圖片、圖冊等數據。

資料庫的體系結構採用分布式多層資料庫結構,包括三個組成部分:應用服務層、應用邏輯層和數據服務層。

資料庫體系結構如圖4-13所示。

圖4-13 體系結構結構圖

(1)應用服務層:應用服務層包含復雜的事務處理邏輯,應用服務層主要由中間件組件構成。中間件是位於上層應用和下層服務之間的一個軟體層,提供更簡單、可靠和增值服務。並且能夠實現跨庫檢索的關鍵技術。它能夠使應用軟體相對獨立於計算機硬體和操作系統平台,把分散的資料庫系統有機地組合在一起,為應用軟體系統的集成提供技術基礎,中間件具有標准程序介面和協議,可以實現不同硬體和操作系統平台上的數據共享和應用互操作。而在具體實現上,中間件是一個用API定義的分布式軟體管理框架,具有潛在的通信能力和良好的可擴展性能。中間件包含系統功能處理邏輯,位於應用伺服器端。它的任務是接受用戶的請求,以特定的方式向應用伺服器提出數據處理申請,通過執行相應的擴展應用程序與應用服務層進行連接,當得到應用伺服器返回的處理結果後提交給應用伺服器,再由應用伺服器傳送回客戶端。根據國內各大石油公司具體的需求開發相應的地質、油藏、生產等應用軟體功能程序模塊和各種演算法模塊。

(2)應用邏輯層:邏輯數據層是擴展數據服務層邏輯處理層,針對當前的底層資料庫的數據結構,根據具體的需求,應用各種資料庫技術,包括臨時表、視圖、存儲過程、游標、復制和快照等技術手段從底層資料庫中提取相關的數據,構建面向具體應用的邏輯資料庫或者形成一個虛擬的資料庫平台。邏輯數據層包含底層資料庫的部分或全部數據處理邏輯,並處理來自應用服務層的數據請求和訪問,將處理結果返回給邏輯數據層。

形成一個虛擬的資料庫平台我們可以應用資料庫系統中的多個技術來實現。如果系統中的一個節點中的場地或分片數據能夠滿足當前虛擬資料庫,可以在應用服務層中使用大量的查詢,生成一個以數據集結果為主的虛擬資料庫平台,並且由數據集附帶部分資料庫的管理應用策略。或者對節點上的資料庫進行復制方法進行虛擬資料庫的建立。對與需要對多個節點上的資料庫進行綜合篩選,則要對各個節點上的資料庫進行復制,合並各個復制形成一個應用邏輯層,從而建立一個虛擬數據平台。

(3)數據服務層:即資料庫伺服器層,其中包含系統的數據處理邏輯,位於不同的操作系統平台上,不同資料庫平台(異構資料庫),具體完成數據的存儲、數據的完整性約束。也可以直接處理來自應用服務層的數據請求和訪問,將處理結果返回給邏輯數據層或根據邏輯數據層通過提交的請求,返回數據信息和數據處理邏輯方法。

(三)數據建設標准

1.評價數據標准

系統資料庫中的數據格式、大小、類型遵從國家及行業標准,參考的標准如表4-23。

表4-23 資料庫設計參考標准

續表

系統中數據的格式及單位參考《常規油氣資源評價實施方案》、《煤層氣資源評價實施方案》、《油砂資源評價實施方案》、《油頁岩資源評價實施方案》及數據字典。

2.圖形圖件標准

對於地質研究來說,地質類圖件是比較重要的。各種地質評價圖形遵循以下標准(表4-24)。

表4-24 系統圖形遵循的相關標准

系統對圖形的要求為必須為帶有地理坐標意義的、滿足上述標准體系要求的矢量圖形,且採用統一的地理底圖。圖形格式採用:MapGIS圖形交換格式、GeoInfo圖形格式、ArcInfo圖形交換格式、MapInfo圖形交換格式和GeoMap圖形交換格式。

圖件的比例尺要求:

全國性圖件:1∶400萬或1:600萬

大區圖件:1:200萬

盆地圖件:1:40萬或1:50萬

評價單元圖件:1:10萬或1:20萬

圖件的內容要求符合《常規油氣資源評價實施方案》、《煤層氣資源評價實施方案》、《油砂資源評價實施方案》和《油頁岩資源評價實施方案》的規定。

(四)數據內容

資料庫中存儲的數據包括常規油氣相關數據、煤層氣相關數據、油砂相關數據和油頁岩相關數據;還有可采系數研究涉及的數據,包括研究所需基礎數據和研究成果數據;以及趨勢預測相關數據。

熱點內容
房車配置怎麼選擇 發布:2025-04-22 16:22:14 瀏覽:491
編程貓gb 發布:2025-04-22 16:22:13 瀏覽:630
密碼加密php 發布:2025-04-22 16:07:09 瀏覽:582
imac存儲空間為什麼這么小 發布:2025-04-22 15:45:30 瀏覽:223
上傳時速是0 發布:2025-04-22 15:37:49 瀏覽:568
0基礎的編程 發布:2025-04-22 15:37:09 瀏覽:205
vnc怎麼查伺服器ip 發布:2025-04-22 15:29:20 瀏覽:158
百度雲ftp伺服器 發布:2025-04-22 15:17:50 瀏覽:656
平板哪個配置最高 發布:2025-04-22 15:16:20 瀏覽:830
天工編程 發布:2025-04-22 15:08:36 瀏覽:381