自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

對(duì)Oracle數(shù)據(jù)庫設(shè)計(jì)中字段的正確使用方案

數(shù)據(jù)庫 Oracle
本文主要介紹的是Oracle數(shù)據(jù)庫再設(shè)計(jì)中字段的使用方法,以及再實(shí)際操作中涉及到的常用的字段的幾種常見類型的介紹。

我們大家都了解Oracle數(shù)據(jù)庫有很多的優(yōu)點(diǎn),但是你如果對(duì)其使用不當(dāng)?shù)脑?,是不能展現(xiàn)出它的優(yōu)勢(shì),以下就本人在Oracle開發(fā)的過程中所積累的相關(guān)經(jīng)驗(yàn),以下的文章就是對(duì)相關(guān)內(nèi)容的描述。

一、 Oracle數(shù)據(jù)庫設(shè)計(jì)中字段的使用

 

在一些表的設(shè)計(jì)中,有一些常用的這段,已經(jīng)基本成為一個(gè)規(guī)范,在大型系統(tǒng)中,多可以看到這些字段的蹤影,當(dāng)然字段的名字可能有所不同。常用的字段分為以下幾類:

1.WHO字段

這類字段多用于記錄每行記錄的操作變更信息,比如是誰添加的這行記錄,誰做過修改等,詳細(xì)說明如下:

字段名稱

類型

 

說明

 

 

 

  1. LAST_UPDATE_DATE  
  2. DATE 

 

 

***修改日期

 

 

 

  1. LAST_UPDATED_BY  
  2. NUMBER(15) 

 

 

***修改人

 

 

 

  1. CREATION_DATE  
  2. DATE 

 

 

創(chuàng)建日期

 

 

 

  1. CREATED_BY  
  2. NUMBER(15) 

 

 

創(chuàng)建人

 

I.創(chuàng)建人

在任何一個(gè)系統(tǒng)中,一般都會(huì)有一個(gè)權(quán)限驗(yàn)證和登錄的過程,在登錄后,會(huì)在系統(tǒng)的內(nèi)存中記錄登錄人的信息,當(dāng)此人在對(duì)Oracle數(shù)據(jù)庫的某個(gè)表進(jìn)行添加操作的時(shí)候,會(huì)同時(shí)把這個(gè)操作人員的ID值寫入表中,供后期統(tǒng)計(jì)及審計(jì)

II.創(chuàng)建時(shí)間

與創(chuàng)建人的含義類似,在創(chuàng)建的同時(shí),寫入系統(tǒng)的當(dāng)前時(shí)間,這個(gè)字段的值一般取自于服務(wù)器而不是客戶端,比如在oracle中,可以直接使用SYSDATE作為這個(gè)字段的值

III.***修改人

一條記錄被創(chuàng)建后,同樣會(huì)有被修改的可能性,這里需要對(duì)修改的人進(jìn)行一個(gè)記錄,以便于后期審計(jì)。

但是這里要注意的是,這里只記錄***的修改信息,如果一條記錄經(jīng)過多次的修改,中間的修改將無跡可尋,如果需要記錄詳細(xì)修改信息,需要使用日志功能,已經(jīng)超出此字段的功效。

IV.***修改日期

與***修改人同時(shí)寫入記錄中,同理,也是記錄***一次修改的時(shí)間,中間的修改均被***一次覆蓋。

2. 狀態(tài)及有效期字段

在一些新聞?lì)惖膬?nèi)容中,經(jīng)常會(huì)涉及到一個(gè)時(shí)效性,即一條新聞可能只在某一個(gè)時(shí)間段內(nèi)是對(duì)外可見的,超過這個(gè)時(shí)間段則將不允許發(fā)布,還有就是有些時(shí)候如果發(fā)現(xiàn)某些內(nèi)容有問題,需要暫時(shí)對(duì)外屏蔽的時(shí)候,就可以用到狀態(tài)字段,詳細(xì)說明如下:

字段名稱

類型

 

說明

 

 

STATUS

 

NUMBER

 

狀態(tài)

 

 

START_DATE

 

DATE

 

有效開始日期

 

 

END_DATE

 

DATE

 

有效結(jié)束日期

 

I.狀態(tài)

這個(gè)字段一般用數(shù)值型表達(dá),0表示失效,1表示有效,當(dāng)然在使用的時(shí)候,可以把這兩個(gè)值進(jìn)行轉(zhuǎn)義,用“有效”和“失效”來顯示,不影響存儲(chǔ)方式。

失效不等于刪除,經(jīng)過失效的內(nèi)容,經(jīng)過管理程序的調(diào)整,把狀態(tài)變成有效后,還可以恢復(fù)正常使用。

II.有效開始日期

這個(gè)字段如果填有具體的值,只有當(dāng)時(shí)間超過這個(gè)時(shí)間后,信息才是有效的,在這個(gè)日期之前,信息將自動(dòng)按無效處理,特別需要注意的是,如果這個(gè)字段置空,應(yīng)該按跳過這個(gè)條件檢查來處理,這樣可以實(shí)現(xiàn)程序的靈活性。

III.有效結(jié)束日期

具體含義同上,只是超過此期,內(nèi)容將按失效處理。

3.邏輯刪除

在Oracle數(shù)據(jù)庫系統(tǒng)中處理的刪除的做法一般有兩種:物理刪除和邏輯刪除,所謂物理刪除,就是在數(shù)據(jù)庫中直接使用delete等命令,從數(shù)據(jù)庫里把數(shù)據(jù)真正的刪除,這種刪除從正常途徑將無法恢復(fù)數(shù)據(jù),雖然可以部分程度減小整體的數(shù)據(jù)量,但不利于審計(jì)跟蹤;邏輯刪除指的是對(duì)數(shù)據(jù)不做任何刪除處理,而是對(duì)記錄打個(gè)標(biāo)記,也就是在某個(gè)字段上賦值,表示此記錄已經(jīng)刪除。

邏輯刪除的處理邏輯只由應(yīng)用程序自己使用,因?yàn)閿?shù)據(jù)在Oracle數(shù)據(jù)庫中實(shí)際還是存在的。

所涉及字段如下:

字段名稱

類型

 

說明

 

 

DELETED

 

NUMBER

 

是否刪除

 

 

DELETE_DATE

 

DATE

 

刪除時(shí)間

 

 

DELETED_BY

 

NUMBER

 

刪除人

 

I. 刪除標(biāo)志

此字段有兩個(gè)取值,0表示正常,1表示已經(jīng)刪除。

打上刪除標(biāo)志后,所以的查詢語句必須同時(shí)在判斷條件的地方加上deleted=0的條件,否則會(huì)造成重大的失誤。

II. 刪除時(shí)間

與刪除標(biāo)志一起使用,表示刪除的時(shí)間,可以使用當(dāng)前服務(wù)器的時(shí)間,用sysdate來填充即可。

III. 刪除人

與***修改人類似,需要記錄刪除的具體操作人員

刪除與標(biāo)志位不同,采用標(biāo)志位的方式,雖然前端無法展示數(shù)據(jù),但是后臺(tái)管理人員人一樣可以通過管理程序來調(diào)整該狀態(tài),但是刪除標(biāo)志則不同,確認(rèn)刪除后,對(duì)整個(gè)應(yīng)該來講,這條記錄都應(yīng)該理解為不存在了。

4. 自增字段

所謂自增字段,是指隨著使用,它可以自動(dòng)增加的字段。

這種字段的值一般沒有明確的含義,只用于一個(gè)唯一標(biāo)識(shí),這個(gè)字段一般也會(huì)設(shè)置成主鍵。

如果應(yīng)用只針對(duì)Oracle,而不考慮數(shù)據(jù)庫無關(guān)性,那么sequence無非是***的一個(gè)選擇。對(duì)于以前用習(xí)慣MSSQL等其它數(shù)據(jù)庫的朋友來說,Oracle這種用法簡(jiǎn)直是太費(fèi)勁了,要花很大的功夫才能做好一個(gè)自增字段,但是正因?yàn)槿绱?,它也帶來了其它Oracle數(shù)據(jù)庫不能相比的優(yōu)點(diǎn),舉例來說。

一個(gè)訂單系統(tǒng),即有訂單頭,又有訂單行,一般是先插入訂單頭,再插入訂單行,對(duì)于MSSQL等數(shù)據(jù)庫的自增字段,只有插入后才知道具體的ID值是多少,那么寫入后,還要返查一下這個(gè)字段值再給訂單行使用;而對(duì)于oracle來說,只要先從sequence里取出一個(gè)值來,頭和行一起使用即可,最主要是的sequence的效果是非常高的,不需要擔(dān)心性能問題。

5. 彈性字段

在Oracle數(shù)據(jù)庫表結(jié)構(gòu)設(shè)計(jì)的時(shí)候,***多留出幾個(gè)備用的字段來,因?yàn)殡S著系統(tǒng)的使用,一般會(huì)有增加字段的需求。預(yù)留字段的好處是,只要需要的時(shí)候啟用即可,不需要進(jìn)行DDL操作,對(duì)數(shù)據(jù)庫后期維護(hù)的風(fēng)險(xiǎn)很低,并且一般的DDL操作,會(huì)造成級(jí)聯(lián)的VIEW/PACKAGE等程序失效,預(yù)留了彈性字段,則不會(huì)有這個(gè)問題。

預(yù)留的字段也可以按類型分成三種:字符串型,數(shù)值型及日期型,可以每個(gè)類型預(yù)留10個(gè),或根據(jù)需要來決定,可以采用如下的樣式:

 

  1. NUMBER_ATTRIBUTE1  
  2. STRING_ATTRIBUTE1  
  3. DATE_ATTRIBUTE1  

 

彈性字段如果不啟用,會(huì)不會(huì)占用過多的存儲(chǔ)空間呢,答案是否定的,因?yàn)樵谶@種大型Oracle數(shù)據(jù)庫的結(jié)構(gòu)中,只有一個(gè)字段真正被用到的時(shí)候,才會(huì)去占用實(shí)際的空間,否則它只是一個(gè)“說明”,并不占用實(shí)際的空間,所以不會(huì)造成空間浪費(fèi)。

6. 拆分字段

這并不是一個(gè)字段的類型,而是指在表設(shè)計(jì)的時(shí)候,可以適當(dāng)?shù)陌岩粋€(gè)大表拆成不同的小表來存儲(chǔ),比如用戶表,可以包括登錄名,密碼,姓名,生日,等一系列的字段,在某些情況下,包括的會(huì)員屬性可能達(dá)到上百個(gè)之多。

在數(shù)據(jù)量小的時(shí)候,無論怎么樣的存儲(chǔ),都不會(huì)有性能問題,但是當(dāng)數(shù)據(jù)量比較大的時(shí)候,就必須考慮性能問題。如果索引比較合理,不管數(shù)據(jù)量多大,一般查詢速度都不會(huì)太慢,但是當(dāng)某些特別情況,不能使用索引的時(shí)候,就會(huì)產(chǎn)生FTS(所謂的全表掃描),那么掃描一個(gè)小表和掃描一個(gè)大表所占的時(shí)間就完全不一樣了,所以建議比較大的表分開存儲(chǔ),把常用的幾個(gè)字段單獨(dú)提取出來,這樣即便全表掃描,也能比較好的控制效率。

在使用的時(shí)候,只要主表和子表都有索引,把它們聯(lián)合起來查詢,和一個(gè)真正的大表的效果基本上是一樣的,雖然性能肯定比一個(gè)真實(shí)的大表慢一點(diǎn),但是和另一方面的性能提升比較起來,是值得的。目前有些大的系統(tǒng)采用這種拆分方式

【編輯推薦】

  1. 用Oracle屏蔽英文來提示信息的正確方法
  2. Oracle細(xì)粒度如何進(jìn)行訪問
  3. Oracle數(shù)據(jù)庫的異構(gòu)服務(wù)原理描述
  4. Oracle使用hints的調(diào)整機(jī)制實(shí)操
  5. 在Oracle數(shù)據(jù)庫中使用PL操作COM對(duì)象
責(zé)任編輯:佚名 來源: 博客園
相關(guān)推薦

2010-05-05 14:13:52

Oracle數(shù)據(jù)

2010-04-23 14:32:01

Oracle數(shù)據(jù)庫

2010-04-26 18:32:48

Oracle數(shù)據(jù)庫

2010-06-01 09:22:35

MySQL數(shù)據(jù)庫

2010-04-29 10:56:46

Oracle數(shù)據(jù)庫

2010-05-07 13:28:43

Oracle數(shù)據(jù)庫

2010-03-31 19:34:03

Oracle數(shù)據(jù)庫

2010-04-22 15:53:06

Oracle數(shù)據(jù)庫

2010-04-13 10:32:40

Oracle數(shù)據(jù)庫編程

2010-04-19 13:59:17

Oracle 數(shù)據(jù)庫

2010-05-05 10:19:19

Oracle數(shù)據(jù)導(dǎo)

2010-04-29 11:53:42

Oracle數(shù)據(jù)庫

2011-08-10 15:38:12

ConstraintOracle

2011-05-26 14:18:49

Oracle數(shù)據(jù)庫字段屬性

2010-05-04 11:02:44

Oracle數(shù)據(jù)庫

2011-08-18 18:34:00

Oracle數(shù)據(jù)庫創(chuàng)建自增字段

2010-05-26 11:21:00

MySQL數(shù)據(jù)庫操作

2010-04-12 15:53:09

Oracle

2009-05-13 10:28:30

OracleDUAL數(shù)據(jù)庫

2010-04-14 13:14:46

Oracle數(shù)據(jù)庫
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)