摘要:本文重點(diǎn)闡述如何運(yùn)用技術(shù)手段通過關(guān)系型數(shù)據(jù)庫管理系統(tǒng)進(jìn)行數(shù)據(jù)庫表格的創(chuàng)建及數(shù)據(jù)維護(hù)。
關(guān)鍵詞:關(guān)系型數(shù)據(jù)庫管理系統(tǒng);數(shù)據(jù)庫;表;技術(shù)
關(guān)系型的數(shù)據(jù)庫管理系統(tǒng)在各種不同的業(yè)務(wù)應(yīng)用系統(tǒng)中得到了廣泛的運(yùn)用,它不僅提供了大量數(shù)據(jù)的存儲及檢索功能,還提供了數(shù)據(jù)的安全與管理功能。在進(jìn)行業(yè)務(wù)系統(tǒng)的數(shù)據(jù)庫設(shè)計(jì)時(shí),一般都要從數(shù)據(jù)庫的概念設(shè)計(jì)開始,然后進(jìn)行數(shù)據(jù)庫的邏輯設(shè)計(jì),最后進(jìn)行數(shù)據(jù)庫的物理設(shè)計(jì)三個(gè)步驟。本文僅探討如何通過不同的技術(shù)手段進(jìn)行有效的數(shù)據(jù)庫表格的物理設(shè)計(jì),從而提高數(shù)據(jù)庫數(shù)據(jù)的完整性及有效性。
一、數(shù)據(jù)庫表格創(chuàng)建的依據(jù)
在系統(tǒng)的設(shè)計(jì)中,有一部分是數(shù)據(jù)庫設(shè)計(jì),數(shù)據(jù)庫的設(shè)計(jì)通常分為概念設(shè)計(jì)、邏輯設(shè)計(jì)和物理設(shè)計(jì)三個(gè)部分,每個(gè)步驟需要循序漸進(jìn),根據(jù)項(xiàng)目分析做好概念設(shè)計(jì)后,才能根據(jù)概念設(shè)計(jì)進(jìn)行邏輯設(shè)計(jì),而物理設(shè)計(jì)則是根據(jù)邏輯設(shè)計(jì)的結(jié)果進(jìn)行。數(shù)據(jù)庫表格主要作用是用來進(jìn)行數(shù)據(jù)存儲的,屬于數(shù)據(jù)庫設(shè)計(jì)的一部分內(nèi)容,數(shù)據(jù)庫表格創(chuàng)建屬于物理設(shè)計(jì)階段的工作,因此表格的創(chuàng)建需要根據(jù)邏輯設(shè)計(jì)展開。在進(jìn)行數(shù)據(jù)庫物理設(shè)計(jì)時(shí),需要在邏輯設(shè)計(jì)的基礎(chǔ)之上充分考慮不同類型的數(shù)據(jù)庫,如:Oracle和SQL Server它們在表示表格中列的數(shù)據(jù)類型就存在差異,它們數(shù)據(jù)存儲設(shè)計(jì)也不一樣。
二、數(shù)據(jù)庫表格創(chuàng)建的技術(shù)要點(diǎn)
(一)屬性的原子性
在創(chuàng)建數(shù)據(jù)庫表時(shí),需要根據(jù)邏輯設(shè)計(jì)中的每個(gè)實(shí)體建立,這些實(shí)體需要確定含有哪些屬性,屬性對應(yīng)數(shù)據(jù)庫表中的列,每個(gè)屬性的劃分建議是原子性,即屬性最小化,不可再分解;屬性的多少建議與項(xiàng)目實(shí)用性關(guān)聯(lián)綜合考慮。另外,屬性不可以亂分,例如不能將屬于A實(shí)體的屬性劃分給B,將B的屬性劃分給A或其他。
(二)數(shù)據(jù)類型約束
在創(chuàng)建數(shù)據(jù)表對應(yīng)E-R圖中的實(shí)體,表中的列對應(yīng)實(shí)體中的屬性,在建立數(shù)據(jù)庫表時(shí),需要確定屬性對應(yīng)的列的數(shù)據(jù)類型,如果數(shù)據(jù)類型選擇錯(cuò)誤,會導(dǎo)致意想不到的后果。例如:員工實(shí)體中,存在屬性工號,在設(shè)置的工號屬性列選擇的數(shù)據(jù)類型建議使用varchar(10),如果用戶建表時(shí)采用int類型,結(jié)果將無法達(dá)到用戶想要的結(jié)果。假定張三的工號為004,如果是varchar類型,數(shù)據(jù)按照用戶要求進(jìn)行,如果采用int類型存儲,結(jié)果數(shù)據(jù)只能以4的形式存在,顯然這不是用戶想看到的結(jié)果。
自定義的數(shù)據(jù)類型也是維護(hù)數(shù)據(jù)完整性的一個(gè)手段,例如在員工表中,有性別屬性列,可以采用nchar(1)來存儲,用戶可以輸入性別男或女的值,但是卻無法控制輸入男或女之外的值,如果是之外的值,顯然不符合客觀事實(shí)要求。針對這種問題,用戶可以采用自定義性別數(shù)據(jù)類型,確保用戶只能輸入性別男和女,先定義一種規(guī)則:
create rule sexRule as @value in (‘男, ‘女)
定義完規(guī)則后,創(chuàng)建性別數(shù)據(jù)類型:
create type sex from nchar(1)
將創(chuàng)建好的數(shù)據(jù)類型sex與定義好的sexRule規(guī)則進(jìn)行綁定,然后將性別一列設(shè)置成數(shù)據(jù)類型為sex,這樣將確保性別列的數(shù)據(jù)正確有效,只能是“男”或者“女”中的任何一個(gè)值。
(三)Check條件約束
在數(shù)據(jù)的有效性控制方面,光靠數(shù)據(jù)類型約束控件是不夠的,例如,如果有學(xué)生信息表中存在入學(xué)年齡一列,在數(shù)據(jù)類型的選擇是整型,可是年齡不能是任何整數(shù),不能太大,也不太小,必須是一個(gè)有效的范圍,例如:17-30年齡范圍內(nèi),要做到這點(diǎn),使用check約束條件可以實(shí)現(xiàn),在年齡列設(shè)置check約束,輸入SQL代碼:
([NianLing]>=(17) AND [NianLing]<=(30))
設(shè)置完成后,年齡的約束會自動應(yīng)用,您只要在輸入年齡列數(shù)據(jù)時(shí),數(shù)據(jù)只能在17-30之間,包含17和30。
(四)主鍵技術(shù)
主鍵(primary key) 是表中的一個(gè)或多個(gè)字段,它的值用于唯一地標(biāo)識表中的某一條記錄。也就是說,在一張表格記錄中,每行記錄的數(shù)據(jù)如果出現(xiàn)重復(fù),只要存在一列數(shù)據(jù)的不同,這是用來實(shí)體之間不同的唯一標(biāo)識。例如在學(xué)生表中,“學(xué)號”可以是主鍵,姓名可以一樣,但“學(xué)號”不一樣;在教師表中,教師的“工號”可以是主鍵。在創(chuàng)建數(shù)據(jù)庫表時(shí),建議每張表至少設(shè)置一個(gè)主鍵。
(五)參照完整性
數(shù)據(jù)庫設(shè)計(jì)中,為了數(shù)據(jù)的完整有效,且減低數(shù)據(jù)的冗余度,一般要求做到實(shí)體的完整性、用戶定義的完整性和參照的完整性。例如有班級和學(xué)生兩張表,學(xué)生表中,存在“班級”列,該列如果存班級的名稱,在數(shù)據(jù)管理中會出現(xiàn)難以預(yù)料的嚴(yán)重后果,例如庫中有幾萬名學(xué)生,出現(xiàn)某個(gè)的班級信息錯(cuò)誤,這時(shí)需要對這些記錄進(jìn)行修改,一是工作量大,二是容易出現(xiàn)錯(cuò)誤。為了解決類似于這樣的問題,建議將班級表與學(xué)生表中的“班級”列進(jìn)行關(guān)聯(lián),在學(xué)生表中的“班級”列中存放班級表的主鍵值,這樣在設(shè)計(jì)要求將班級表中的班級“編號”列主鍵作為學(xué)生表“班級”列的外鍵(外鍵:某表的主鍵作為其他表的列),學(xué)生表“班級”列的數(shù)據(jù)類型、長度要求和班級表中的“編號”列的數(shù)據(jù)類型、長度一致。例如前面提到的學(xué)生表班級名稱錯(cuò)誤,只需要修改班級表中的班級“名稱”列即可,無需修改學(xué)生表中的“班級”列信息,這樣維護(hù)的數(shù)據(jù)量大大減少,且容易控制,如果需要查看學(xué)生表中的完整班級信息,只需要參照班級表即可。在關(guān)聯(lián)的表格中建立主外鍵就是參照完整性的技術(shù)應(yīng)用體現(xiàn)。
作者簡介:王平華,江西波陽,江西現(xiàn)代職業(yè)技術(shù)學(xué)院研究生,研究方向:軟件工程。