計(jì)算機(jī)專業(yè)課程論文范文
在計(jì)算機(jī)日益普及的今天,對(duì)個(gè)人而言若采用一套行之有效的餐飲管理系統(tǒng)來(lái)管理自己的酒店,會(huì)方便許多。下面是學(xué)習(xí)啦小編給大家推薦的計(jì)算機(jī)專業(yè)課程論文范文,希望大家喜歡!
計(jì)算機(jī)專業(yè)課程論文范文篇一
《餐飲管理系統(tǒng)中數(shù)據(jù)完整性的設(shè)計(jì)》
摘 要:以餐飲管理系統(tǒng)數(shù)據(jù)庫(kù)中部分表為例,詳細(xì)介紹個(gè)人對(duì)數(shù)據(jù)完整性設(shè)計(jì)思路和設(shè)計(jì)方法,通過(guò)實(shí)例闡述數(shù)據(jù)完整性在實(shí)踐中的應(yīng)用,并給出基于SQLSERVERDE語(yǔ)言的描述。
關(guān)鍵詞:數(shù)據(jù)庫(kù);數(shù)據(jù)完整性;約束;觸發(fā)器
數(shù)據(jù)庫(kù)的創(chuàng)建是一件非常容易的事情,但是設(shè)計(jì)一個(gè)嚴(yán)謹(jǐn)、安全、可靠的數(shù)據(jù)庫(kù)就不那么容易了,它需要你有扎實(shí)的理論知識(shí)做基礎(chǔ),還需要具備一定的分析問(wèn)題解決問(wèn)題的能力。數(shù)據(jù)庫(kù)的設(shè)計(jì)經(jīng)過(guò)需求分析、數(shù)據(jù)庫(kù)概念機(jī)構(gòu)設(shè)計(jì)、邏輯結(jié)構(gòu)設(shè)計(jì)之后我們就應(yīng)考慮數(shù)據(jù)完整性的設(shè)計(jì)了。數(shù)據(jù)完整性是最大限度的保證數(shù)據(jù)的正確性、可靠性、一致性。數(shù)據(jù)完整性包含三個(gè)方面的內(nèi)容即實(shí)體完整性、參照完整性(引用完整性)和用戶自定義完整性(域完整性)。
下面以餐飲管理系統(tǒng)部分可以實(shí)現(xiàn)點(diǎn)菜和結(jié)賬的表為例闡述以上完整性的設(shè)計(jì)。餐飲管理涉及的表的關(guān)系模式為:桌臺(tái)表zt(桌號(hào)zh,桌名zm,容納人數(shù)rnrs,狀態(tài)zt,類型lx),菜單表cd(菜品編號(hào)cpbh,菜品名稱cpmc,規(guī)格gg,類別lb,單價(jià)dj,成本價(jià)cbj),訂單表dd(訂單編號(hào)ddbh,訂單日期ddrq,桌號(hào)zh,消費(fèi)金額xfje),點(diǎn)菜表dc(訂單編號(hào)ddbh,菜品編號(hào)cpbh,數(shù)量sl)。以上四個(gè)表的定義如下:
Create table zt (zh char(4) primary key ,zm char(8) unique, rnrs int check (rnrs>=0),zt bit,lx char(8) check (lx='大廳' or lx='包廂' lx='vip'))
Create table cd(cpbh char(5) primary key, cpmc char(12),gg char(10),lb char(8),dj numeric(6,1) check(dj>=0),cbj numeric(6,1) check(cbj>=0))
Create table dd (ddbh char(10) primary key,ddrq datetime,zh char(4) foreign key references zt(zh), xfje numeric(10,1))
Create table dc (ddbh char(10) foreign key references dd(ddbh),cpbh char(5) foreign key references cd(cpbh),sl int check(sl>=0) default 1,primary key(ddbh,cpbh))
1 實(shí)體完整性(表完整性)
實(shí)體完整性又叫做表完整性,是對(duì)表中主鍵的約束。實(shí)體完整性的規(guī)則要求:在任何關(guān)系的任何一個(gè)元組中,主鍵的值不能為空值、也不能取重復(fù)的值。建立實(shí)體完整性的目的是用于保證數(shù)據(jù)庫(kù)表中的每一個(gè)元組都是惟一的。是否可以改變主鍵值或刪除一整行,取決于主鍵和其他表之間要求的完整性級(jí)別。實(shí)體完整性的定義比較簡(jiǎn)單。實(shí)現(xiàn)“實(shí)體完整性”的方法有primary key約束、unique約束、標(biāo)識(shí)列、惟一索引。在此對(duì)桌臺(tái)表zt中的桌號(hào)zh、菜單表cd表中的菜品編號(hào)cpbh以及訂單表dd中的訂單編號(hào)ddbh定義了primary key約束。在定義的時(shí)候一定要注意,一張完整的表定義只能有一個(gè)主鍵(PRIMARY KEY),但是可以沒(méi)有UNIQUE約束。
2 參照完整性規(guī)則(引用完整性規(guī)則)
現(xiàn)實(shí)世界中的實(shí)體之間存在某種聯(lián)系。在關(guān)系模型中實(shí)體及實(shí)體間的聯(lián)系都是用關(guān)系來(lái)描述的,這樣就自然存在著關(guān)系與關(guān)系間的引用。通過(guò)在同一個(gè)數(shù)據(jù)庫(kù)的兩個(gè)表中進(jìn)行主鍵約束和外鍵約束來(lái)實(shí)現(xiàn),參照的列和被參照的列的必須具有相同的屬性。
參照完整性規(guī)則規(guī)則要求:“不引用不存在的實(shí)體”。即:不允許在一個(gè)關(guān)系中引用另一個(gè)關(guān)系中不存在的元組。其目的用于確保相關(guān)聯(lián)的表間的數(shù)據(jù)保持一致。參照完整性是對(duì)外鍵的約束,要求外鍵的取值只能為兩種情況:若取非空值,則它必須是主表中存在的值。要么取空值(null)。設(shè)置了參照完整性禁止在從表中插入包含主表中不存在的關(guān)鍵字的數(shù)據(jù)行;禁止刪除在從表中的有對(duì)應(yīng)記錄的主表記錄。
在如上四個(gè)表中對(duì)訂單表dd的桌號(hào)zh、點(diǎn)菜表對(duì)此dc的訂單編號(hào)ddbh及菜品編號(hào)cpbh分別設(shè)置了外鍵。另外外鍵的設(shè)計(jì)也可由觸發(fā)器或編程語(yǔ)言來(lái)設(shè)定。以訂單表dd為例觸發(fā)器設(shè)置方法如下:
CREATE TRIGGER insert_xs ON dd
AFTER INSERT
AS
IF EXISTS
(SELECT * FROM INSERTED
WHERE zh IN (SELECT zh FROM zt))
PRINT '添加成功!’
ELSE
BEGIN
PRINT '桌號(hào)與存在的桌號(hào)不符!’
ROLLBACK TRANSACTION
END
同樣可以對(duì)點(diǎn)菜表設(shè)置一個(gè)觸發(fā)器要求dc的訂單編號(hào)ddbh及菜品編號(hào)cpbh也具有參照性。參照完整性是用來(lái)維護(hù)相關(guān)數(shù)據(jù)表之間數(shù)據(jù)一致性的手段,通過(guò)實(shí)現(xiàn)引用完整性,可以避免因一個(gè)數(shù)據(jù)表的記錄改變而使另一個(gè)數(shù)據(jù)表內(nèi)的數(shù)據(jù)變成無(wú)效的值。
3 域完整性
域完整性也稱為列完整性或用戶定義的完整性,用于限制用戶向列中輸入的內(nèi)容。域完整性規(guī)則要求由用戶根據(jù)實(shí)際情況,定義表中屬性的取值范圍。其目的用于保證給定字段中數(shù)據(jù)的有效性,即保證數(shù)據(jù)的取值在有效的范圍內(nèi)。
設(shè)置域完整性的方法是限制列的數(shù)據(jù)類型、精度、范圍、格式和長(zhǎng)度等??梢酝ㄟ^(guò)指定數(shù)據(jù)類型、CHECK約束、DEFAULT約束、NOT NULL約束和創(chuàng)建規(guī)則、默認(rèn)值等數(shù)據(jù)庫(kù)對(duì)象來(lái)實(shí)施。
數(shù)據(jù)庫(kù)中存儲(chǔ)的數(shù)據(jù)多種多樣,為每一列指定一個(gè)準(zhǔn)確的數(shù)據(jù)類型是設(shè)計(jì)表的第一步,列的數(shù)據(jù)類型規(guī)定了列上允許的數(shù)據(jù)值。當(dāng)添加或修改數(shù)據(jù)時(shí),其類型必須要符合建表時(shí)所指定的數(shù)據(jù)類型。這種方式為數(shù)據(jù)庫(kù)中的數(shù)據(jù)完整性提供了最基本的保障。
約束是SQL Server提供的自動(dòng)保持?jǐn)?shù)據(jù)完整性的一種方法,是獨(dú)立于表結(jié)構(gòu)的。規(guī)則是實(shí)現(xiàn)域完整性的方法之一,用來(lái)驗(yàn)證一個(gè)數(shù)據(jù)庫(kù)中的數(shù)據(jù)是否處于一個(gè)指定的值域范圍內(nèi),是否與特定的格式相匹配。當(dāng)數(shù)據(jù)庫(kù)中的數(shù)據(jù)值被更新或插入時(shí),就要檢查新值是否遵循規(guī)則。如果不符合規(guī)則就拒絕執(zhí)行更新或插入操作。
在餐飲系統(tǒng)相關(guān)表中我們對(duì)相應(yīng)的列設(shè)置了數(shù)據(jù)類型及長(zhǎng)度度限制,并對(duì)菜單表cd的單價(jià)dj設(shè)置了check(dj>=0)的約束,對(duì)點(diǎn)菜表dc的數(shù)量sl列(sl int check(sl>=0) default 1)設(shè)置了check約束和默認(rèn)值的約束。當(dāng)然對(duì)于以上約束我們都可通過(guò)定義規(guī)則的方法實(shí)現(xiàn)。如:
用create rule dyl as@x>=0來(lái)定義一個(gè)大于零的約束,然后用sp_bindrule dyl,'cd.dj‘語(yǔ)句和sp_bindrule dyl,'dc.sl'語(yǔ)句將其綁定到菜單表cd的單價(jià)dj列及點(diǎn)菜表dc的數(shù)量sl列上。
對(duì)于菜品編號(hào)cpbh我們規(guī)定菜類必須以類別的代表字母作為第一個(gè)字符,小分類的代表字母為第二個(gè)字符后面跟3位數(shù)字來(lái)表示。如CL001表示青菜類、LN001可表示奶類飲料。
為了實(shí)現(xiàn)上述編碼我們用規(guī)則來(lái)實(shí)現(xiàn)如下:
Create rule cpbm as
@BM like 'C[LQRT][0-9][0-9][0-9]'
Or @BM like 'J[PBNM][0-9][0-9][0-9]'
Or @BM like 'Y[CNGT][0-9][0-9][0-9]'
Or @BM like 'z[fm][0-9][0-9][0-9]'
sp_bindrule cpbm, 'cd.cpbh'
4 觸發(fā)器實(shí)現(xiàn)數(shù)據(jù)完整性
當(dāng)用戶對(duì)數(shù)據(jù)的完整性要求更為特殊,更為復(fù)雜,以上3種完整性就無(wú)法滿足用戶的要求。在這種情況下,用戶需要自己定義所需的完整性。實(shí)現(xiàn)自定義完整性的重要方法是創(chuàng)建觸發(fā)器。觸發(fā)器是一種數(shù)據(jù)庫(kù)對(duì)象。是一種表或視圖執(zhí)行insert、delete、update操作時(shí),被系統(tǒng)自動(dòng)執(zhí)行的特殊的存儲(chǔ)過(guò)程。創(chuàng)建觸發(fā)器的目的是對(duì)表實(shí)現(xiàn)復(fù)雜的數(shù)據(jù)完整性約束,以防止不正確的操作。它與數(shù)據(jù)庫(kù)中的某個(gè)表的數(shù)據(jù)修改操作相關(guān)聯(lián),修改操作可以是INSERT、UPDATE、和DELETE這3種操作中其中一種或幾種。當(dāng)用戶對(duì)相關(guān)表執(zhí)行觸發(fā)器相關(guān)的修改操作時(shí)觸發(fā)器自動(dòng)執(zhí)行。常用于數(shù)據(jù)的參照完整性限制及級(jí)聯(lián)刪除、級(jí)聯(lián)更新等操作的設(shè)置。以級(jí)聯(lián)更新為例,分析當(dāng)菜單表中的菜品編號(hào)修改時(shí),點(diǎn)菜表中的菜品編號(hào)同時(shí)更新這樣的操作用觸發(fā)器如何實(shí)現(xiàn):
create trigger upd on cd after update
as
declare @jbh char(5),@xbh char(5)
select @jbh=deleted.cpbh, @xbh= inserted.cpbh
from deleted,inserted where deleted.cpbh=inserted.cpbh
print '準(zhǔn)備級(jí)聯(lián)更新點(diǎn)菜表中的菜品編號(hào)信息….'
update dc set cpbh=@xbh where cpbh=@jbh
print '已經(jīng)級(jí)聯(lián)更新了點(diǎn)菜表原菜品編號(hào)為'+ @jbh +'的信息'
5 應(yīng)用接口編程
應(yīng)用接口編程對(duì)數(shù)據(jù)庫(kù)應(yīng)用設(shè)計(jì)來(lái)說(shuō)是負(fù)擔(dān)最重的方法,但同時(shí)又是最基本、最靈活的方法。不論數(shù)據(jù)庫(kù)管理系統(tǒng)提供了多么豐富的完整性的約束手段,利用編程接口保證數(shù)據(jù)完整性仍是所有數(shù)據(jù)庫(kù)應(yīng)用設(shè)計(jì)者必須掌握的關(guān)鍵技術(shù)之一。
6 總結(jié)
保證數(shù)據(jù)庫(kù)的數(shù)據(jù)完整性,在數(shù)據(jù)庫(kù)管理系統(tǒng)中是十分重要的。合理地使用SQL Server為數(shù)據(jù)完整性提供的各項(xiàng)措施,對(duì)數(shù)據(jù)進(jìn)行所需的約束限制,可以有效降低數(shù)據(jù)庫(kù)在使用過(guò)程中可能出現(xiàn)的錯(cuò)誤,提高數(shù)據(jù)庫(kù)系統(tǒng)的可用性,減少處理數(shù)據(jù)錯(cuò)誤所耗的費(fèi)用。
參考文獻(xiàn):
[1]陳偉,Sql Server2005應(yīng)用系統(tǒng)開(kāi)發(fā)教程[M].北京:清華大學(xué)出版社.
[2]Andrew J.Brust Stephen Forte著,精通SQLServer 2005程序設(shè)計(jì),賈洪峰譯,清華大學(xué)出版社,2007.
[3]薩師煊、王珊,數(shù)據(jù)庫(kù)系統(tǒng)概論(第三版)[M].北京:高等教育出版社,2004.
作者簡(jiǎn)介:
白楊(1978-),女,蒙古族,河北省香河縣人,學(xué)位碩士,講師,研究方向:數(shù)據(jù)庫(kù)。
點(diǎn)擊下頁(yè)還有更多>>>計(jì)算機(jī)專業(yè)課程論文范文