亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 2860 | 回復(fù): 0
打印 上一主題 下一主題

數(shù)據(jù)庫對象的淺議 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2008-09-15 22:25 |只看該作者 |倒序?yàn)g覽
Db2究竟是什么
或者軟件產(chǎn)品究竟是什么

其實(shí)更多的時(shí)候我們需要的是主動思考
比如
我從何處來
我是誰
我為什么是我
自我的意識是否真的隨身體的死亡而結(jié)束?

這不是玩笑
最起碼這是我經(jīng)常思考的事情

那么我們該如何掌握db2呢
很簡單

第一,
是產(chǎn)品本身的功能的組成
比如容器,表空間,日志,緩沖池等等。

第二
就是產(chǎn)品的外延功用
也就是說第一是我們?nèi)绾蝸砉芾懋a(chǎn)品
管理的目的就是產(chǎn)品必須提供給我們服務(wù)來達(dá)到我們的特定的需求目的
那么數(shù)據(jù)庫的外延的功用就是將社會的活動的社會流變成數(shù)據(jù)庫內(nèi)部的邏輯流。
邏輯流的實(shí)現(xiàn)就是以我們今天要說的數(shù)據(jù)庫的對象為基礎(chǔ)的。


數(shù)據(jù)庫的對象
表空間

緩沖池
視圖
觸發(fā)
存過
程序包
序列
等等

記住”等等”不是數(shù)據(jù)庫的對象,只是表達(dá) etc. 的意思。

1 數(shù)據(jù)庫
數(shù)據(jù)庫是以下的概念的邏輯組成
表空間

緩沖池
視圖
觸發(fā)
存過
程序包
序列

數(shù)據(jù)庫分區(qū)
我們知道分區(qū)完全是為了巨型表的處理的需要而創(chuàng)造了分區(qū)的概念來充分將一個邏輯數(shù)據(jù)庫分在>1個的物理機(jī)器上面,以充分利用各個機(jī)器的資源來服務(wù)某個特定的表的需要
以上就是數(shù)據(jù)分區(qū)的根本目的
就是 眾人拾柴火焰高。
現(xiàn)在的那個可以導(dǎo)致黑洞的歐洲粒子加速器的數(shù)據(jù)就是在全球處理,舉全球之力來處理,
因?yàn)閿?shù)據(jù)實(shí)在是海量了。
當(dāng)然我們也可以一個物理機(jī)器上面來創(chuàng)建數(shù)據(jù)庫分區(qū)。


數(shù)據(jù)庫節(jié)點(diǎn)文件
分區(qū)的數(shù)據(jù)庫如何知道啥分區(qū)在啥機(jī)器上面?
所有的活動都是這樣
總會有個司令部,這就是分區(qū)數(shù)據(jù)庫中的IBMCATGROUP
他主要的任務(wù)就是管理協(xié)調(diào)所有的分區(qū)
數(shù)據(jù)庫節(jié)點(diǎn)文件
就是擺在他桌子上面的作戰(zhàn)圖紙,
記錄了每個分區(qū)的所在。
這個文件一般是由 5 列。
但是我們一般只是用到 3 列。
1 分區(qū)號  2 主機(jī)名稱  3 邏輯端口

邏輯端口實(shí)際就是數(shù)據(jù)庫分區(qū)在創(chuàng)建的時(shí)候db2自動為之分配的一個db2內(nèi)部fmp進(jìn)程通訊的邏輯地址。

數(shù)據(jù)庫分區(qū)可以用add dbpartitionnum的命令

刪除數(shù)據(jù)庫分區(qū)可以用drop dbpartitionnum的命令

分區(qū)組
顧名思義
分區(qū)組就是n個分區(qū)的組合而成的概念
分區(qū)組的目的就是對分區(qū)的靈活的組合,
因?yàn)橐苍S在我們的環(huán)境中,每個參與分區(qū)的機(jī)器的資源條件不一樣。
所以,我們在負(fù)荷的分配上面就不能搞大鍋飯和大平均了。
我們再想
表是存在于表空間的。
分區(qū)數(shù)據(jù)庫對巨型表的處理主要是利用表空間的跨分區(qū)的存在來實(shí)現(xiàn)的。
而表空間的建立可以這樣的



所以
我們現(xiàn)在就可以集中注意力規(guī)劃好我們的分區(qū)組就可以了。

當(dāng)然,我們還可以將寶貴的內(nèi)存資源分配到不同的分區(qū)上面。
否則的話,假設(shè)我們創(chuàng)建了一個緩沖池是1M,那么每個分區(qū)就會自動創(chuàng)建一個緩沖池是1M。
這明顯不夠合理和科學(xué),也違背我們目前以人為本的社會精神。

Db2的數(shù)據(jù)庫中默認(rèn)有3個分區(qū)組,分別是:

IBMCATGROUP
是數(shù)據(jù)庫編目信息的所在,當(dāng)然也是db2的syscatspace表空間的所在,就是大本營的概念。

IBMTEMPGROUP
就是系統(tǒng)的臨時(shí)表空間的所在,每個庫只能有一個如此的分區(qū)組。

IBMDEFAULTGROUP
就是USERSPACE1表空間的所在,就是默認(rèn)用戶表的創(chuàng)建所在,如果你在創(chuàng)建表的時(shí)候不指定表空間的話。

表空間

表空間實(shí)在說的太多了,我們就不多說了。

根據(jù)表空間其中存放數(shù)據(jù)的種類,表空間可以分為3類。

常規(guī)表空間
就是存放除了臨時(shí)數(shù)據(jù)以外的數(shù)據(jù)的表空間,是我們創(chuàng)建表空間的時(shí)候默認(rèn)類型。

大表空間
就是用來存放LONG VARCHAR, LONG VARGRAPHIC或者其他的大對象的數(shù)據(jù)的表空間,但是對大對象的處理實(shí)在是很影響性能,因?yàn)榇髮ο蟮奶幚矶际侵苯拥膇o的讀寫,因此,性能的低下可想而知。所以,建議大家不要把大對象作為關(guān)系型的數(shù)據(jù)來處理,在具體程序的設(shè)計(jì)方面當(dāng)然還是有很多的辦法來變化。

臨時(shí)表空間
顧名思義
這個表空間就是放置臨時(shí)數(shù)據(jù)的。
臨時(shí)表空間還繼續(xù)分,分成
系統(tǒng)臨時(shí)表空間

用戶臨時(shí)表空間

系統(tǒng)臨時(shí)表空間
當(dāng)db2內(nèi)部來處理sql語句的排序操作的時(shí)候,比如order,group,join等等的時(shí)候,這樣的數(shù)據(jù)都是需要在系統(tǒng)臨時(shí)表空間里面來進(jìn)行處理。
所以
你們平時(shí)可以注意一下,當(dāng)一個排序的操作的表比較大的時(shí)候,這樣的數(shù)據(jù)大小就會超過相應(yīng)的排序堆的大小,你們可以抓一下TEMPSPACE1的snap,就會發(fā)現(xiàn)很不少的數(shù)據(jù)的異步讀寫,這就說明相應(yīng)的數(shù)據(jù)就是默認(rèn)從內(nèi)存到系統(tǒng)臨時(shí)表空間中來處理了。

用戶臨時(shí)表空間
這個表空間就不是為排序的數(shù)據(jù)來存放的,而是當(dāng)用戶自己在程序中發(fā)布這樣的sql命令的時(shí)候,
DECLARE GLOBAL TEMPORARY TABLE
這樣
這個臨時(shí)表就是創(chuàng)建在用戶臨時(shí)表空間中。

當(dāng)然,索引是可以放置在大對象或者常規(guī)表空間中。

Schema
中文有人叫 模式
其實(shí)這個翻譯并不太準(zhǔn)確
我們姑且還是稱之為  schema
為什么會有schema?
我們看sap的一個數(shù)據(jù)庫,大概有近10w張表,
這是一個很大的數(shù)量。
這么多的表,我們想想,肯定會有很多是性質(zhì)類似的表,那么我們?nèi)绾蝸斫缍ê蛥^(qū)分才能做到遴選的高效率。
大家都知道,恰當(dāng)?shù)男畔⒉攀怯袃r(jià)值的信息。
過多的信息其實(shí)就是垃圾。
所以
為了便于管理數(shù)據(jù)庫對象,就創(chuàng)建了 schema 這個概念。
當(dāng)一個數(shù)據(jù)庫創(chuàng)建之后
默認(rèn)的模式有:
Syscat
Sysibm
Systools
Sysstat
這些都是db2自己創(chuàng)建的db2系統(tǒng)所使用的模式,每種模式都有自己的含義,比如說
Syscat 都是表示 這個模式之下的表都是關(guān)于編目信息的表。
Sysibm 就是表示這個模式之下的表都是關(guān)于db2系統(tǒng)信息的表
Sysstat   就是表示 這個模式之下的表都是跟統(tǒng)計(jì)信息參數(shù)有關(guān)的表

明白了嗎,可以偷窺到一點(diǎn)感覺了吧

我們現(xiàn)在可以歸納
Schema
就是數(shù)據(jù)庫對象的高級界定符,用來對數(shù)據(jù)庫對象按照功能性質(zhì)進(jìn)行邏輯分組,從而實(shí)行一定的高效的管理性。

同時(shí),
Schema的另外的作用就是對數(shù)據(jù)庫的對象按照組進(jìn)行權(quán)限管理,
比如
一個單位內(nèi)部
擁有人力資源組的表的權(quán)限的用戶就不能去訪問銷售信息組的表的內(nèi)容。
這是一個重要的作用。
提供了一種基于組的表的權(quán)限的控制和分配。

模式和用戶沒有關(guān)系。

但是我們在創(chuàng)建表的時(shí)候如果不特別指定schema,那么db2就會以當(dāng)前連接的用戶名稱來為這個表創(chuàng)建一個模式。
很多時(shí)候,我們就會混淆,以為用戶id和shcema之間有啥曖昧關(guān)系。
其實(shí)他們之間是清白的。

但是我們?nèi)绻l(fā)布這樣的語句:

Create table a.b
這樣,db2就既創(chuàng)建了表b,又創(chuàng)建了模式a。

當(dāng)然我們自然可以用這樣的語句來專門創(chuàng)建模式a
Create schema a

在db2中,很多數(shù)據(jù)庫對象的創(chuàng)建都有很多的顯式的或者隱式的方法。
說的具體了,就是糊涂。
所以我們只要知道一個通用方法原則就可以了,剩下的就是具體查資料了。

Schema和index一樣,只能干掉,不能修改。
要想修改就得干掉然后按照你的意思來重建。


數(shù)據(jù)類型



數(shù)據(jù)類型其實(shí)只要了解就可以了。
因?yàn)橹饕歉_發(fā)有關(guān)的。
下一步我就是想寫關(guān)于開發(fā)的系列文章,屆時(shí)再仔細(xì)介紹吧。

Numeric
數(shù)值型的數(shù)據(jù)類型可以分為以下的幾種:
•        Small integer (SMALLINT)
•        Integer (INT or INTEGER)
•        Big integer (BIGINT)
•        DECIMAL/NUMERIC
•        REAL/FLOAT
•        DOUBLE/FLOAT

SMALLINT是占用空間最少的類型,數(shù)值范圍:  32768 – 32767
SMALLINT是數(shù)值的左5位。
占據(jù)存儲空間 2個字節(jié)。


INTEGER
存儲空間是SMALLINT的2倍,
數(shù)值范圍: 2,147,483,648 --  2,147,483,647
是數(shù)值的左10位
占據(jù)存儲空間 4個字節(jié)

BIGINT
支持64bit的整數(shù)值
數(shù)值范圍: 9,223,372,036,854,775,808  --  9,223,372,036,854,775,807
占據(jù)存儲空間 8 個字節(jié)

String

這個流字串包括:
•        Character (CHAR)
•        Variable character (VARCHAR)
•        Long variable character (LONG VARCHAR)
•        Character large object (CLOB)
•        GRAPHIC
•        VARGRAPHIC
•        LONG VARGRAPHIC
•        Double-byte character large object (DBCLOB)


CHAR, 就是定長的字段, 假如我們設(shè)定的字段的長度是5,那么也假如我們輸入的長度一個字段的長度是3,那么db2就會在字段的末尾添加2個空格,來湊足5個字節(jié)的長度。
定長就是節(jié)省db2的sql的處理效率,但是作為缺點(diǎn)就是會浪費(fèi)那么一點(diǎn)點(diǎn)的存儲空間,但是在我們國內(nèi)的系統(tǒng)中,浪費(fèi)確實(shí)一個不去考慮的事情,浪費(fèi)在某種程度上面就是一種刺激信息化的投資,這就是某種潛現(xiàn)實(shí)。
CHAR最大長度是254字節(jié),如果不指定,就是1字節(jié)。

VARCHAR
就是變長字符串的意思,
作為對比,節(jié)省空間,但是處理的成本必然有一定程度的上升,它的最大長度是表所在表空間的pagesize的大小。
VARCHAR
最根本的核心就是字段輸入的多大就保存多大,不會追加空格來湊數(shù),只要你不超過長度的硬限制。

在字符串的概念的字段的數(shù)據(jù)字段的存取范圍上面,目前db2的存儲的上限是32672

如果我們需要存儲的數(shù)據(jù)超過了這個杠杠,
那么我們可以這樣
作為xml,作為視音頻,作為圖片等等
這就是所謂的lob的范圍
大小是  32k-2gb

Lob分為3類
•        Binary large object (BLOB)
•        Single-byte character large object (CLOB)
•        Double-byte character large object (DBCLOB)
Blob
就是二進(jìn)制格式的變長的數(shù)據(jù)格式,特別適合在數(shù)據(jù)庫中存儲音視頻。但是這樣的blob卻是不能進(jìn)行sort操作的。

Clob
就是單字節(jié)的變長數(shù)據(jù)格式
說白了
就是存放英文的書的。

Dbclob
就是雙字節(jié)的變長的數(shù)據(jù)格式
就是我們和我們周邊幾個國家的文字的
比如中,日,韓等等


UDT
用戶自定義類型
Db2自己已經(jīng)內(nèi)置了很多的數(shù)據(jù)類型,但是并不能滿足我們變化的復(fù)雜的數(shù)據(jù)表達(dá)的需要
所以,db2不知道我們還需要什么樣的數(shù)據(jù)類型
所以
它直接提供了一個方法和手段給我們
于是我們可以自己創(chuàng)建我們需要的各個數(shù)據(jù)類型
雖然
費(fèi)事一點(diǎn)
但是中國不是有個老話說的好嗎:   求人不如求己。

CREATE DISTINCT TYPE
是這個創(chuàng)建的語句。

DROP DISTINCT TYPE
是用戶自定義類型的刪除語句。



表就是數(shù)據(jù)庫將我們實(shí)際的社會流轉(zhuǎn)變成我們在我們信息流之間進(jìn)行流轉(zhuǎn)的重要的手段。
表表示著我們社會流的一組對象的集合。
列代表的是這些對象的共同點(diǎn)的屬性
行是代表著這些對象中的每個的個體。

Db2中的表分為:

System catalog tables
User tables
System temporary tables
user temporary tables


System catalog tables
我們在創(chuàng)建了數(shù)據(jù)庫之后,db2會自動創(chuàng)建了syscatspace,其中就是放置db2自動生成的各個catalog tables.
這些就是oracle的數(shù)據(jù)字典
這些表存儲數(shù)據(jù)庫各個對象的各個屬性
比如:
所有的表空間,表,索引,緩沖池
所有的約束
所有的權(quán)限
等等一網(wǎng)打盡所有的對象信息
只有你想不到的,沒有其中網(wǎng)不到的。

在萬不得已的情況之下,請不要去更改其中的信息
否則
會嚴(yán)重影響db2查詢優(yōu)化器的數(shù)據(jù)的查詢路徑。

User tables
就是我們自己創(chuàng)建的各個表。
表的處理

Create table
Drop table
Alter table

如果我們想創(chuàng)建一個表a需要和b一樣
我們可以如此
Create table a like b

也可以用sql的方式來達(dá)到這一目的
Create table a as (select * from b ) definition only
definition only的意思就是只是放置表結(jié)構(gòu),但是不放置數(shù)據(jù)。

我們可以用Alter table來增加列
但是db2不允許我們用Alter table來刪除列

我們用2個選擇
1
創(chuàng)建視圖,邏輯上減少一個列,將我們真正的表隱藏起來

2
刪除這個表,重建這個表,當(dāng)然,這個似乎有點(diǎn)類似于說了等于沒說。

表  - Default Values
這個意思是說如果一個列如此定義,那么我們在insert值得時(shí)候,如果我們不針對這個列有值得時(shí)候,那么db2會自動將這個值設(shè)置為Default Values的值。

舉例來說

假如我們一個地級市要登記本行政范圍之內(nèi)的企業(yè)登記
那么我們可以知道
其實(shí)大部分的企業(yè)肯定是在這個地級市的市區(qū)范圍,當(dāng)然,下面還有縣級市,但是這樣一比較,縣級市的數(shù)量就比較少了
我們可以將城市的Default Values值設(shè)置為這個地級市名字
那么
我們的insert語句就比較簡單
程序的效率就會有所提高。


CREATE TABLE company (
       companyID       INTEGER,
       companyName     VARCHAR(30),
       city            VARCHAR(20) DEFAULT '揚(yáng)州'
       )



表 - Identity Columns

這個其實(shí)就是序列的問題
我們在一個表里面喜歡對每個個體加一個數(shù)值的號
這樣
我們在以后的檢索,統(tǒng)計(jì)或者和其他的程序的利用的時(shí)候都更為簡便。
當(dāng)然
這個序列是針對插入的值而言的。

Db2對于這樣的事情有2種處理方式。

1
Generated always
這樣的序列號只能有db2去增加,應(yīng)用程序不能自己去處理。

2
Generated by default:
這個意思就是補(bǔ)充上面的
為我們?nèi)f一想要自己的程序想要處理一下其中的序列的號提供了手段
也就是說我們可以為這個列顯式地加個默認(rèn)值。
如果我們的程序不顯式地去加值的話,
那么db2就會根據(jù)默認(rèn)值加一條
如果
我們的程序顯式地指定了
那么db2就會在旁邊歇著,這個列插入的值就是我們指定的。
這種方式有了一定的方便之處
但是列的序號的唯一性無法保證。

舉例開始

CREATE TABLE turen (
       turenno   INTEGER GENERATED ALWAYS AS
                           IDENTITY (START WITH 200 INCREMENT BY 1),
       description VARCHAR(50) )
這樣的表
大家看
turenno   這個列是自動產(chǎn)生序號,程序無法干預(yù),起始值=200
增量是1
然后我們試著插入

INSERT INTO turen VALUES (DEFAULT,'hhah');        --->inserts 200,
INSERT INTO turen (description) VALUES ('bbbb');   --->inserts 201,
INSERT INTO turen VALUES (300,'cccc');              --->error SQL0798N
COMMIT;

INSERT INTO turen (description) VALUES ('dddd');  --->inserts 202,
ROLLBACK;

INSERT INTO turen (description) VALUES ('fffff');    --->inserts 203,
COMMIT;

看看結(jié)果
turenNO   DESCRIPTION
----------- ------------
        200 hhah
        201 bbbb
        203 fffff
沒錯吧
插300的時(shí)候明顯違反規(guī)則
202的時(shí)候被取消了
所以。。。。。。

我們再看另外的例子

CREATE TABLE turen (
       turenno   INTEGER GENERATED BY DEFAULT AS
                           IDENTITY (START WITH 200 INCREMENT BY 1),
       description VARCHAR(50) )
這個就是說這個列可以由我們的程序來處理

起始值=200
增量=1

我們試著插入

INSERT INTO turen VALUES (DEFAULT,'aa');        --->inserts 200,aa
INSERT INTO turen (description) VALUES ('bb');   --->inserts 201,bb
INSERT INTO turen VALUES (300,'cc');              --->inserts 300,cc
INSERT INTO turen VALUES (201,'dd');            --->inserts 201,dd
COMMIT;
INSERT INTO turen (description) VALUES ('ee');  --->inserts 202,ee
ROLLBACK;
INSERT INTO turen (description) VALUES ('ff');     --->inserts 203,ff
COMMIT;

看看結(jié)果現(xiàn)在

turenNO   DESCRIPTION
----------- ---------------------
        200 aa
        201 bb
        300 cc
        201 dd
        203 ff


只有ee的數(shù)據(jù)被取消了
其他的,sql指定值得都進(jìn)去了
不指定的
那么就是db2自己根據(jù)順序產(chǎn)生的
所以
我們看到了這樣的結(jié)果。

原文鏈接: http://www.ituren.org.cn/html/jishusuibi/200809/15-127.html

[ 本帖最后由 itubie 于 2008-9-17 13:11 編輯 ]
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP