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

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

Chinaunix

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

db2數(shù)據(jù)庫(kù)對(duì)象之約束 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2008-09-17 22:10 |只看該作者 |倒序?yàn)g覽
約束是什么

約束是用來(lái)控制什么樣的值可以存儲(chǔ)在數(shù)據(jù)庫(kù)中的機(jī)制

法律是什么
法律是用來(lái)控制什么樣的行為可以發(fā)生在特定的社會(huì)環(huán)境中的機(jī)制

所以
凡是跟約束有關(guān)的
都是一種控制的思想
控制是為了規(guī)范和效率
否則
如果大家的行為都如同熱分子一樣的,那樣
就是標(biāo)準(zhǔn)的無(wú)序
Rdbms
可是關(guān)系型的核心思想
這個(gè)世界上沒有純粹的無(wú)序

約束屬于數(shù)據(jù)庫(kù)的商務(wù)邏輯的一部分

越豐富的商務(wù)邏輯代表著我們?cè)綇?fù)雜的社會(huì)流的關(guān)系,也就是越復(fù)雜的數(shù)據(jù)之間的關(guān)聯(lián)關(guān)系。

約束的種類
Unique
Referential
Check
Informational constraint

Unique 約束
就是唯一性的約束的意思
就是表明某個(gè)列的值必須是唯一的。不能有重復(fù)。
唯一性的約束可以通過create table的語(yǔ)句來(lái)達(dá)到。
唯一性約束有2個(gè)表現(xiàn)方式
1 指明是唯一的屬性
2 創(chuàng)建主鍵,也就是說, 主鍵=唯一性約束

一個(gè)表可以有多個(gè)唯一性約束,但是只能有一個(gè)主關(guān)鍵字
必須將唯一性約束的列都定義為not null,但是唯一性索引卻沒有這個(gè)必要,因?yàn)樗饕旧砭筒荒苁莕ull的。

創(chuàng)建唯一性約束
CREATE TABLE turen (
       eID   INT        NOT NULL PRIMARY KEY,
       name    CHAR(30)   ,
       dID  INT        NOT NULL UNIQUE
       )

增加唯一性約束
ALTER TABLE turen  ADD CONSTRAINT turen_pk PRIMARY KEY (empID)


Referential Constraints
參照約束
這種約束主要是約束了表與表之間的數(shù)據(jù)的一致性和合法性
這種約束主要是用主鍵,唯一性約束,外鍵配合使用來(lái)達(dá)到參照約束的作用。

參照約束實(shí)際就是表之間的一對(duì)多的模型關(guān)系。

我們打個(gè)比方
比如一個(gè)表是部門表,里面羅列了各個(gè)部門的信息
一個(gè)表示雇員表,里面是各個(gè)雇員的信息
那么
部門表和雇員表之間就必然存在各個(gè)關(guān)系
比如
一個(gè)部門可以用多個(gè)雇員,而一個(gè)雇員只能屬于一個(gè)部門,
那么這樣的關(guān)系我們?cè)撊绾魏?jiǎn)單表達(dá)呢?
這個(gè)時(shí)候db2就有了父表,子表,主鍵,外鍵的概念。
一般來(lái)說,
外鍵是建立在行數(shù)比較多的表上。
主鍵的特性是不能為空,必須唯一。
外鍵的特性是要么為空,要么存在主鍵之中。
在這個(gè)例子中,我們?cè)诓块T表中將部門id設(shè)置為主鍵,將雇員表的部門id設(shè)置為外鍵,那么,他們之間就會(huì)存在對(duì)應(yīng)的關(guān)系了。
這就是參照約束的典型案例。
參照約束主要是表現(xiàn)在對(duì)父表或者子表的數(shù)據(jù)的插入或者刪除的時(shí)候所引發(fā)的操作。
比如我在往子表中插入雇員信息的時(shí)候我們不能插入一個(gè)部門不存在的雇員信息
也就是說一個(gè)雇員不能為一個(gè)在公司里面不存在的部門工作。

我們先看這樣的一個(gè)創(chuàng)建參照約束的例子:

CREATE TABLE dept (
       dep_ID      INT           NOT NULL PRIMARY KEY,
       dept_Name    VARCHAR(30)   NOT NULL,
       emp_Name  CHAR(15)
       )

CREATE TABLE emp (
       emp_ID         INT           NOT NULL PRIMARY KEY,
      emp_name       VARCHAR(30)   NOT NULL,
       dept_no      INT           REFERENCES country,
       population      INT
       )

在第二個(gè)表中
dept_no這里,db2會(huì)自動(dòng)去將第一個(gè)表的主鍵和這個(gè)列建立主鍵和外鍵的關(guān)系。我們無(wú)需去指定特定的主鍵。

我們也可以在表創(chuàng)建好了之后通過這樣語(yǔ)句來(lái)添加參照約束
ALTER TABLE emp ADD FOREIGN KEY (emp_no) REFERENCES dept (dept_ID)

在對(duì)父表的數(shù)據(jù)的刪除上面
主要有4中子表的行為模式我們可以設(shè)置
Restrict
Noaction
Set null
Cascade

我們還是剛才的例子來(lái)說明這四種模式的特點(diǎn)。

Cascade
如果我們?cè)赿ept父表上面刪除a部,cascade就是將子表中的所有a部門的所在的行刪除。
這就是所謂的我們現(xiàn)實(shí)社會(huì)里面的部門取消,人員解散。

Set null
如果我們?cè)赿ept父表上面刪除a部,set null,就是說子表中所有的a部門的數(shù)據(jù)行中的部門值被設(shè)置為null
這就是所謂的我們現(xiàn)實(shí)社會(huì)里面的部門取消,人員等待再分配

Restrict和noaction
的特點(diǎn)基本一致
如果我們?cè)赿ept父表上面刪除a部,Restrict就是說只要子表中的a部門下面還有雇員,那么父表的中相應(yīng)的數(shù)據(jù)將被限制,無(wú)法被刪除。
這就是所謂的我們?nèi)嗣窠夥跑姷娜嗽陉嚨卦诘囊馑肌?br /> 如果用戶一定要如此刪除的話
就需要先去子表中將相應(yīng)的數(shù)據(jù)行刪除,然后才能在父表中刪除數(shù)據(jù)。


Check constraint
檢查約束實(shí)際就是對(duì)特定的表而言的。
也就是將特定表的特定的列的數(shù)據(jù)進(jìn)行數(shù)據(jù)范圍規(guī)定和限定
每次我們數(shù)據(jù)處理的時(shí)候
都需要對(duì)該列的數(shù)據(jù)進(jìn)行檢查

這樣的約束可以在創(chuàng)建表的時(shí)候來(lái)創(chuàng)建
比如
CREATE TABLE turen (
       ID     INT           NOT NULL PRIMARY KEY,
       name           VARCHAR(30)   NOT NULL,
       sex            CHAR(1)       NOT NULL
       CONSTRAINT sex_check_const CHECK (sex in ('M ', 'F '))
       )

也可以通過alter table 的方式來(lái)添加Check constraint
ALTER TABLE turen
      ADD CONSTRAINT sex_check_const CHECK (sex in ('M ', 'F '))

大家可以看見了
就是對(duì)sex_check_const進(jìn)行限制
性別就是雌或者雄
不能有其他的


Informational constraint
信息約束
在db2v8以前
一旦約束創(chuàng)建了
那么這些約束就是每次都是必須作用。
在db2v8以后
這種情況發(fā)生了變化
主要是出來(lái)了一些巨無(wú)霸的應(yīng)用軟件

Sap
People soft
Siebel
等等
他們這些軟件自己就直接在代碼里面就直接將各種約束寫在了code之中。
所以
如果這個(gè)時(shí)候db2中,將約束機(jī)制停止的話,那么db2的工作效率無(wú)疑會(huì)有所提高。
這個(gè)時(shí)候,就是Informational constraint的意義了。

Informational constraint
有四種模式

ENFORCED
就是默認(rèn)值
每次必用,始終運(yùn)行

NOT ENFORCED
Db2停止自己的約束的運(yùn)轉(zhuǎn)和檢查

ENABLE QUERY OPTIMIZATION
將約束的因素考慮進(jìn)優(yōu)化器的計(jì)算

DISABLE QUERY OPTIMIZATION
不計(jì)算約束的優(yōu)化器的因素的計(jì)算

創(chuàng)建Informational constraint

CREATE TABLE turen (
       ID     INT           NOT NULL PRIMARY KEY,
       name           VARCHAR(30)   NOT NULL,
       sex            CHAR(1)       NOT NULL
       CONSTRAINT sex_check_const CHECK (sex in ('M ', 'F '))
       NOT ENFORCED
       )


原文鏈接:  http://www.ituren.org.cn/html/jishusuibi/200809/17-128.html
您需要登錄后才可以回帖 登錄 | 注冊(cè)

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

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP