當前位置:首頁 » 操作系統 » 資料庫設計實踐

資料庫設計實踐

發布時間: 2023-05-18 15:36:12

① 在系統實施中,資料庫設計的原則

1. 原始單據與實體之間的關系
可以是一對一、一對多、多對多的關系。在一般情況下,它們是一對一的關系:即一張原始單據對應且只對應一個實體。
在特殊情況下,它們可能是一對多或多對一的關系,即一張原始單證對應多個實體,或多張原始單證對應一個實體。
這里的實體可以理解為基本表。

〖例1〗:一份員工履歷資料,在人力資源信息系統中,就對應三個基本表:員工基本情況表、社會關系表、工作簡歷表。 這就是「一張原始單證對應多個實體」的典型例子。

2. 主鍵與外鍵
一般而言,一個實體不能既無主鍵又無外鍵。在E—R 圖中, 處於葉子部位的實體, 可以定義主鍵,也可以不定義主鍵 (因為它無子孫), 但必須要有外鍵(因為它有父親)。

主鍵與外鍵的設計,在全局資料庫的設計中,佔有重要地位。主鍵是實體的高度抽象,主鍵與外鍵的配對,表示實體之間的連接。

3. 基本表的性質
基本表與中間表、臨時表不同,因為它具有如下四個特性:
(1) 原子性。基本表中的欄位是不可再分解的。
(2) 原始性。基本表中的記錄是原始數據(基礎數據)的記錄。
(3) 演繹性。由基本表與代碼表中的數據,可以派生出所有的輸出數據。
(4) 穩定性。基本表的結構是相對穩定的,表中的記錄是要長期保存的。
理解基本表的性質後,在設計資料庫時,就能將基本表與中間表、臨時表區分開來。

4. 範式標准
基本表及其欄位之間的關系, 應盡量滿足第三範式。但是,滿足第三範式的資料庫設計,往往不是最好的設計。
為了提高資料庫的運行效率,常常需要降低範式標准:適當增加冗餘,達到以空間換時間的目的。

〖例2〗:有一張存放商品的基本表,如表1所示。「金額」這個欄位的存在,表明該表的設計不滿足第三範式, 因為「金額」可以由「單價」乘以「數量」得到,說明「金額」是冗餘欄位。但是,增加「金額」這個冗餘欄位, 可以提高查詢統計的速度,這就是以空間換時間的作法。 在Rose 2002中,規定列有兩種類型:數據列和計算列。「金額」這樣的列被稱為「計算列」,而「單價」和 「數量」這樣的列被稱為「數據列」。
5. 通俗地理解三個範式
通俗地理解三個範式,對於資料庫設計大有好處。在資料庫設計中,為了更好地應用三個範式,就必須通俗地理解
三個範式(通俗地理解是夠用的理解,並不是最科學最准確的理解):
第一範式:1NF是對屬性的原子性約束,要求屬性具有原子性,不可再分解;
第二範式:2NF是對記錄的惟一性約束,要求記錄有惟一標識,即實體的惟一性;
第三範式:3NF是對欄位冗餘性的約束,即任何欄位不能由其他欄位派生出來,它要求欄位沒有冗餘。

沒有冗餘的資料庫設計可以做到。但是,沒有冗餘的資料庫未必是最好的資料庫,有時為了提高運行效率,就必須降
低範式標准,適當保留冗餘數據。具體做法是:在概念數據模型設計時遵守第三範式,降低範式標準的工作放到物理
數據模型設計時考慮。降低範式就是增加欄位,允許冗餘。

6. 要善於識別與正確處理多對多的關系
若兩個實體之間存在多對多的關系,則應消除這種關系。消除的辦法是,在兩者之間增加第三個實體。這樣,原來一
個多對多的關系,現在變為兩個一對多的關系。要將原來兩個實體的屬性合理地分配到三個實體中去。這里的第三個
實體,實質上是一個較復雜的關系,它對應一張基本表。一般來講,資料庫設計工具不能識別多對多的關系,但能處
理多對多的關系。

〖例3〗:在「圖書館信息系統」中,「圖書」是一個實體,「讀者」也是一個實體。這兩個實體之間的關系,是一 個典型的多對多關系:一本圖書在不同時間可以被多個讀者借閱,一個讀者又可以借多本圖書。為此,要在二者之 間增加第三個實體,該實體取名為「借還書」,它的屬性為:借還時間、借還標志(0表示借書,1表示還書),另外, 它還應該有兩個外鍵(「圖書」的主鍵,「讀者」的主鍵),使它能與「圖書」和「讀者」連接。

7. 主鍵PK的取值方法
PK是供程序員使用的表間連接工具,可以是一無物理意義的數字串, 由程序自動加1來實現。也可以是有物理意義
的欄位名或欄位名的組合。不過前者比後者好。當PK是欄位名的組合時,建議欄位的個數不要太多,多了不但索引 佔用空間大,而且速度也慢。

8. 正確認識數據冗餘
主鍵與外鍵在多表中的重復出現, 不屬於數據冗餘,這個概念必須清楚,事實上有許多人還不清楚。非鍵欄位的重復出現, 才是數據冗餘!而且是一種低級冗餘,即重復性的冗餘。高級冗餘不是欄位的重復出現,而是欄位的派生出現。

〖例4〗:商品中的「單價、數量、金額」三個欄位,「金額」就是由「單價」乘以「數量」派生出來的,它就是冗餘,而且是一種高級冗餘。冗餘的目的是為了提高處理速度。只有低級冗餘才會增加數據的不一致性,因為同一數據,可 能從不同時間、地點、角色上多次錄入。因此,我們提倡高級冗餘(派生性冗餘),反對低級冗餘(重復性冗餘)。

9. E--R圖沒有標准答案
信息系統的E--R圖沒有標准答案,因為它的設計與畫法不是惟一的,只要它覆蓋了系統需求的業務范圍和功能內容,就是可行的。反之要修改E--R圖。盡管它沒有惟一的標准答案,並不意味著可以隨意設計。好的E—R圖的標準是: 結構清晰、關聯簡潔、實體個數適中、屬性分配合理、沒有低級冗餘。

10 . 視圖技術在資料庫設計中很有用
與基本表、代碼表、中間表不同,視圖是一種虛表,它依賴數據源的實表而存在。視圖是供程序員使用資料庫的 一個窗口,是基表數據綜合的一種形式, 是數據處理的一種方法,是用戶數據保密的一種手段。為了進行復雜處理、 提高運算速度和節省存儲空間, 視圖的定義深度一般不得超過三層。 若三層視圖仍不夠用, 則應在視圖上定義臨時表, 在臨時表上再定義視圖。這樣反復交迭定義, 視圖的深度就不受限制了。

對於某些與國家政治、經濟、技術、軍事和安全利益有關的信息系統,視圖的作用更加重要。這些系統的基本表完 成物理設計之後,立即在基本表上建立第一層視圖,這層視圖的個數和結構,與基本表的個數和結構是完全相同。 並且規定,所有的程序員,一律只准在視圖上操作。只有資料庫管理員,帶著多個人員共同掌握的「安全鑰匙」, 才能直接在基本表上操作。

11. 中間表、報表和臨時表
中間表是存放統計數據的表,它是為數據倉庫、輸出報表或查詢結果而設計的,有時它沒有主鍵與外鍵(數據倉 庫除外)。臨時表是程序員個人設計的,存放臨時記錄,為個人所用。基表和中間表由DBA維護,臨時表由程序員 自己用程序自動維護。

12. 完整性約束表現在三個方面
域的完整性:用Check來實現約束,在資料庫設計工具中,對欄位的取值范圍進行定義時,有一個Check按鈕,通 過它定義欄位的值城。
參照完整性:用PK、FK、表級觸發器來實現。
用戶定義完整性:它是一些業務規則,用存儲過程和觸發器來實現。

13. 防止資料庫設計打補丁的方法是「三少原則」
(1) 一個資料庫中表的個數越少越好。只有表的個數少了,才能說明系統的E--R圖少而精,去掉了重復的多餘的 實體,形成了對客觀世界的高度抽象,進行了系統的數據集成,防止了打補丁式的設計;

(2) 一個表中組合主鍵的欄位個數越少越好。因為主鍵的作用,一是建主鍵索引,二是做為子表的外鍵,所以組 合主鍵的欄位個數少了,不僅節省了運行時間,而且節省了索引存儲空間;

(3) 一個表中的欄位個數越少越好。只有欄位的個數少了,才能說明在系統中不存在數據重復,且很少有數據冗 余,更重要的是督促讀者學會「列變行」,這樣就防止了將子表中的欄位拉入到主表中去,在主表中留下許 多空餘的欄位。所謂「列變行」,就是將主表中的一部分內容拉出去,另外單獨建一個子表。這個方法很簡 單,有的人就是不習慣、不採納、不執行。 資料庫設計的實用原則是:在數據冗餘和處理速度之間找到合適的平衡點。「三少」是一個整體概念,綜合觀點, 不能孤立某一個原則。該原則是相對的,不是絕對的。「三多」原則肯定是錯誤的。試想:若覆蓋系統同樣的功 能,一百個實體(共一千個屬性) 的E--R圖,肯定比二百個實體(共二千個屬性) 的E--R圖,要好得多。 提倡「三少」原則,是叫讀者學會利用資料庫設計技術進行系統的數據集成。數據集成的步驟是將文件系統集成 為應用資料庫,將應用資料庫集成為主題資料庫,將主題資料庫集成為全局綜合資料庫。集成的程度越高,數據 共享性就越強,信息孤島現象就越少,整個企業信息系統的全局E—R圖中實體的個數、主鍵的個數、屬性的個數就會越少。

提倡「三少」原則的目的,是防止讀者利用打補丁技術,不斷地對資料庫進行增刪改,使企業資料庫變成了隨意設計資料庫表的「垃圾堆」,或資料庫表的「大雜院」,最後造成資料庫中的基本表、代碼表、中間表、臨時表雜亂無章,不計其數,導致企事業單位的信息系統無法維護而癱瘓。 「三多」原則任何人都可以做到,該原則是「打補丁方法」設計資料庫的歪理學說。「三少」原則是少而精的 原則,它要求有較高的資料庫設計技巧與藝術,不是任何人都能做到的,因為該原則是杜絕用「打補丁方法」
設計資料庫的理論依據。

14. 提高資料庫運行效率的辦法
在給定的系統硬體和系統軟體條件下,提高資料庫系統的運行效率的辦法是:
(1) 在資料庫物理設計時,降低範式,增加冗餘, 少用觸發器, 多用存儲過程。
(2) 當計算非常復雜、而且記錄條數非常巨大時(例如一千萬條),復雜計算要先在資料庫外面,以文件系統方 式用C++語言計算處理完成之後,最後才入庫追加到表中去。這是電信計費系統設計的經驗。
(3) 發現某個表的記錄太多,例如超過一千萬條,則要對該表進行水平分割。水平分割的做法是,以該表主鍵 PK的某個值為界線,將該表的記錄水平分割為兩個表。若發現某個表的欄位太多,例如超過八十個,則垂直分割該表,將原來的一個表分解為兩個表。
(4) 對資料庫管理系統DBMS進行系統優化,即優化各種系統參數,如緩沖區個數。
(5) 在使用面向數據的sql語言進行程序設計時,盡量採取優化演算法
總之,要提高資料庫的運行效率,必須從資料庫系統級優化、資料庫設計級優化、程序實現級優化,這三個層次上同時下功夫。

上述十四個技巧,是許多人在大量的資料庫分析與設計實踐中,逐步總結出來的。對於這些經驗的運用,讀者不能生幫硬套,死記硬背,而要消化理解,實事求是,靈活掌握。並逐步做到:在應用中發展,在發展中應用。

② 論文資料庫設計怎麼寫

論文資料庫設計需要按照以下數據內容按順序排列即可。鏈迅

1、學院數據實體:學院名稱、負責人、辦公電話、學院編號。

2、學生數據實體:學號、密碼、姓名、性別、民族、籍貫、出生日期、身份證號、聯系電話、Email、備注、學院編號、所在班級、角色名稱、論文編號。

3、教師數據實體:教師編號、密碼、學院編號、所在科室、發布選題、教育程度、職稱、姓名、性別、政治面貌、聯系電話、Email、角色名稱、備注。

4、角色數據實體:角色名稱、許可權名稱。許可權數據實體:許可權名稱、角色名稱。以上的實體都是基本的數據實體。

由於操作模塊的名稱對應該許可權,在程序初始化時這些數據都應該添加,教師論文管理系統的目的進行論文管理,因此還要包括如下的幾個數據實體:

1、論文數據實體:論文編號、學院、作者、刊物名稱、論文題目、收錄情況、教師編號、學號、影響力、影響因子、引用次數、備注。

2、評審數據實體:教師編號、學號、論文編號、論文題目、評審意見、總分。

將數據概念結構設計轉化為SQLSERVER2005資料庫系統所支持的實際資料庫模型,就是資料庫的邏輯結構。輪喚培在實體以及實體之間的關系基礎上,形成資料庫中的表格以臘唯及各個表格之間的關系。

(2)資料庫設計實踐擴展閱讀:

論文資料庫設計注意事項:

1、標題。標題應鮮明、准確、精練地直接概括所進行的研究實踐的主要內容和結果,正標題一般不超過20個字,如需有副標題,副標題一般不超過28個字。

2、內容提要。在主體內容前用200-500字扼要介紹論文的主要內容、採用的方法和得出的主要結論。

3、關鍵詞。按照與論文內容緊密程度,另行依次列出3-5個關鍵詞。

4、英文翻譯內容。中文的標題、作者姓名、指導教師姓名、內容提要、關鍵詞應翻譯成英文。

③ 資料庫原理設計心得體會

這段時間的設計與製作,給了你怎樣的一些心得體會呢?那麼記錄下來吧!下面是由我為大家整理的「資料庫原理設計心得體會」,僅供參考,歡迎大家閱讀。

資料庫原理設計心得體會(一)

在我看來,資料庫課程設計主要的目標是利用課程中學到的資料庫知識和技術較好的開發設計出資料庫應用系統,去解決各行各業信息化處理的要求。通過這次的課程設計,可以鞏固我們對資料庫基本原理和基礎理論的理解,掌握資料庫應用系統設計開發的基本方法,進一步提高我們綜合運用所學知識的能力。

當我們這組決定做大學生就業咨詢系統時,我們並沒有著手寫程序。而是大家一起商量這個系統概述、系統目標、系統需求、業務流程分析、數據流程分析和數據詞典。當這些都准備好了之後,我們進行模塊的分工。每個人都有自己的模塊設計,而且寫出來的代碼要求可以實現相應模塊的功能,得到理想的效果。當每個人都把自己的分工做好了,最後會由一個人把這些全部組合搭建在一起。我們使用的是Html和php相互嵌套使用,當一個系統做好了之後,我會好好地把程序都看一遍,理會其中的奧秘。

我所負責的是資料庫的備份和還原還有一些界面的實現。還記得自己剛接觸html的時候,覺得很感興趣,所以有一段時間幾乎到了痴迷的程度。然而Php是我剛接觸不久的一種編程語言。不過覺得它的功能真的很強大,可以開發出很多大型的系統。但是在做備份和還原的時候,要考慮的東西還是很多的。當我遇到錯誤的時候,感到很受打擊。值得欣慰的是,在同學的幫助和大量參考書的查閱下,我把自己的模塊做好了。這就是我收獲最大的地方。而且,我明白了遇到困難永不放棄的重要性,我知道了團隊合作的重要性,我領悟了只有堅持不懈才會取得勝利。

知識的獲得是無止境的,只要你想學,只要你行動,沒有什麼會難倒我們的。回首這一個多星期的課程設計,我很欣慰。因為我有了動力,有了勇氣。謝謝老師對我們的不懈幫助,謝謝學校給了我們這一次實踐的機會,也謝謝組員們的關懷。這些美好的回憶美好的東西將永遠伴隨著我。

資料庫原理設計心得體會(二)

兩個星期的時間非常快就過去了,這兩個星期不敢說自己有多大的進步,獲得了多少知識,但起碼是了解了項目開發的部分過程。雖說上過資料庫上過管理信息系統等相關的課程,但是沒有親身經歷過相關的設計工作細節。這次實習證實提供了一個很好的機會。

通過這次課程設計發現這其中需要的很多知識我們沒有接觸過,去圖書館查資料的時候發現鍵歲我們前邊所學到的僅僅是皮毛,還有很多需要我們掌握的東西我們根本不知道。同時也發現有很多已經學過的東西我們沒有理解到位,不能靈活運用於實際,不能很好的用來解決問題,這就需要我們不斷的大量的實踐,通過不斷的自學,不斷地發現問題,思考問題,進而解決問題。在這個過程中我們將深刻理解所學知識,同時也可以學到不少很實用的東西。

從各種文檔的閱讀到開始的需求分析、概念結構設計、邏輯裂旦結構設計、物理結構設計。親身體驗了一回系統的設計開發過稿源睜程。很多東西書上寫的很清楚,貌似看著也很簡單,思路非常清晰。但真正需要自己想辦法去設計一個系統的時候才發現其中的難度。經常做到後面突然就發現自己一開始的設計有問題,然後又回去翻工,在各種反復中不斷完善自己的想法。

我想有這樣的問題不止我一個,事後想想是一開始著手做的時候下手過於輕快,或者說是根本不了解自己要做的這個系統是給誰用的。因為沒有事先做過仔細的用戶調查,不知道整個業務的流程,也不知道用戶需要什麼功能就忙著開發,這是作為設計開發人員需要特別警惕避免的,不然會給後來的工作帶來很大的麻煩,甚至可能會需要全盤推倒重來。所以以後的課程設計要特別注意這一塊的設計。

按照要求,我們做的是機票預訂系統。說實話,我對這個是一無所知的,沒有訂過機票,也不知道航空公司是怎麼一個流程。盲目開始設計的下場我已經嘗過了,結果就是出來一個四不像的設計方案,沒有什麼實際用處。沒有前期的調查,僅從指導書上那幾條要求著手是不夠的。

在需求分析過程中,我們通過上網查資料,去圖書館查閱相關資料,結合我們的生活經驗,根據可行性研究的結果和客戶的要求,分析現有情況及問題,採用client/server結構,將機票預定系統劃分為兩個子系統:客戶端子系統,伺服器端子系統。在兩周的時間里,不斷地對程序及各模塊進行修改、編譯、調試、運行,其間遇到很多問題:由於忘記了一些java語言的規范使得在調試過程中一些錯誤沒有發現,通過這次課程設計,我對調試掌握得更加熟練了,意識到了程序語言的規范性以及我們在編程時要有嚴謹的態度,同時在寫程序時如有一定量的注釋,既增加了程序的可讀性,也可以使自己在讀程序時更容易。

我們學習並應用了sql語言,對資料庫的創建、修改、刪除方法有了一定的了解,通過導入表和刪除表、更改表學會了對於表的一些操作,為了建立一個關系資料庫信息管理系統,必須得經過系統調研、需求分析、概念設計、邏輯設計、物理設計、系統調試、維護以及系統評價的一般過程,為畢業設計打下基礎。

很多事情不是想像中的那麼簡單的,它涉及到的各種實體、屬性、數據流程、數據處理等等。很多時候感覺後面的設計根本無法繼續,感覺像是被前面做的各種圖限制了。在做關系模型轉換的時候碰到有些實體即可以認為是實體又可以作為屬性,為了避免冗餘,盡量按照屬性處理了。

物理結構設計基本沒有碰到問題,這一塊和安全性、完整性不覺就會在物理結構設計中添加一些安全設置:主鍵約束、check約束、default定義等。最後才做索引的部分,對一些比較經常使用搜索的列,外鍵上建立索引,這樣可以明顯加快檢索的速度,最後別忘記重要的安全性設置,限制用戶訪問許可權,新建用戶並和資料庫用戶做相應的映射。

不管做什麼,我們都要相信自己,不能畏懼,不能怕遇到困難,什麼都需要去嘗試,有些你開始認為很難的事在你嘗試之後你可能會發現原來她並沒有你以前覺得的那樣,自己也是可以的。如果沒有自信,沒有目標,沒有信心就不可能把事情做好,當其他人都在迷茫的時候,自己一定要堅信目標,大學畢業出去即面臨找工作,從學習這個專業,到以後從事這方面的工作都需要不斷地去學習去實踐,這次實踐可以給我們敲一個警鍾,我們面臨畢業,面臨擇業,需要這些實踐經驗,在困難面前要勇於嘗試,這是這次課程設計給我的最大感想!

以上基本是這次實習的體會了,設計進行的非常艱難,編碼非常不容易,才發現做一個項目最重要的不在於如何實現,而是實現之前的需求分析和模塊設計。創新很難,有些流行的系統其實現並不難,難的在於對市場的分析和准確定位。設計,是一個任重道遠的過程。

資料庫原理設計心得體會(三)

資料庫課程設計大賽塵囂漸漸遠去,懷著對這次大賽些許不舍,懷著對當初課程設計開始時候豪情萬丈決心留戀,懷著通過這次課程設計積累信心與鬥志,我開始寫這篇文章,為自己足跡留下哪怕是微不足道但是對自己彌足珍貴痕跡並期望與大家共勉。

首先,讓我記憶追溯到大二暑假,在老大指引下(老大勸我學ASP(ASP培訓)net),我接觸到microsoft公司net產品。那個時候我已經學過vc和asp,因為windows程序設計實驗課關系,接觸過VB(VB培訓),但是沒有專門去學他,因為習慣了c++裡面class,int,覺得vbsub,var看著就不是很順心。我是一個好奇心很強人,突然看到了一個號稱「。net是用於創建下一代應用程序理想而又現實開發工具」,而且主推c#語言,由於對c語言一貫好感,我幾乎是立刻對他產生了興趣。我就開始了對c#學習,任何語言都不是孤立存在,所以數據交互是很重要,暑假時候我把我們這學期課本資料庫系統概論看了一遍。我記得以前用c語言編程時候,數據是在內存中申請空間,譬如使用數組等等。很耗費內存空間。這個時候就是資料庫站出來時候啦,於是我又裝上了sql server2000,以前學asp時候用是access,那個時候只是照著人家做,理論是什麼也不是很清楚。

開發時候我想過用什麼架構,c/s模式?模式有很多,怎麼選擇?我就上網搜索現在最流行架構是什麼。結果搜到了mvc架構,就是你啦。我決定用這個架構,不會,沒關系,咱學。just do it!前期工作準備好後,那麼我就得把我暑假學net加以實踐。這個時候我更加深入了解了利用ado、net操縱資料庫知識。並且對資料庫裡面存儲過程有了比較深入了解。經過大概2個多星期奮斗,我完成了我資料庫課程設計——基於net數據集圖書館管理系統。並最後非常榮幸獲得了大賽一等獎以及以及新技術應用獎。

與其臨淵羨魚,不如退而結網。這次資料庫課程設計給我最大印象就是如果自己有了興趣,就動手去做,困難在你勇氣和毅力下是抬不了頭。從做這個資料庫開始無論遇到什麼困難,我都沒有一絲放棄念頭。出於對知識渴望,出於對新技術好奇,出於對一切未知求知。我完成了這次資料庫課程設計,不過這只是我學習路上驛站,未來十年net核心技術就是xml[至少微軟是這么宣傳],我會繼續學習它,包括jave公司j2ee我也很想試試,語言本來就是相通,just do it!語言並不重要畢竟它僅僅是工具,用好一個工具並不是一件值得為外人道事情,主要是了解學習思想。古語說好:學無止境啊。

實際上從學習經歷來看,我們接觸知識體系都是屬於比較老或比較傳統,與現在發展迅速IT行業相比很多情況已不再適用,尤其是當開源模式逐漸走近開發者後更是如此。雖然是一個資料庫課程設計,由於本人在選擇項目時候是本著對自己有實際應用價值角度考慮,所以其中也涉及到一些資料庫以外設計。總而言之,這次資料庫設計心得體會不能用語言完全表達。

④ 求一篇基於web的資料庫設計社會實踐調查報告

《基於web的資料庫設計實踐》
The Database Design Based On WEB Used In Remote Concurrent Design

Abstract: the paper analyses the database characteristics used in the remote concurrent proct design system based on Internet, deeply researches the database structure, interface and the method of the data safety.

Keywords: Internet, remote concurrent design, database based on Web

近年來,隨著Web技術的蓬勃發展,人們已不滿足於只在瀏覽器上獲取靜態的信息,想要通過它發表意見、查詢數據。隨著電子商務的普及人們開始參與一些網路商務活動,這就迫切需要實現Web與資料庫的互連[1]。產品異地並行設計對數據的要求有一定的特殊性,主要有(1)產品數據多種多樣。產品設計,特別是機械產品設計常常是大型而又復雜,在異地通過不同的設計小組,按不同的分工設計同一產品,所要管理和通訊的數據類型隨著分工的不同而有不同的表現形式,如常規的數字組成的數據集,以圖形、圖象形式表達的產品模型數據,以文字形式描述設計的文檔,還有圖表、公式等形式,復雜多樣。(2)產品數據交換頻繁,流量大。產品設計是一個協同工作的創造性集體智慧凝聚的過程,要使設計順利進行,分布在異地的不同設計小組之間就要經常性地進行數據交換,並且有些形式表達的產品數據是較大的文件。(3)產品數據的一致性要求高。分工合作的不同設計小組之間的設計任務是彼此關聯,互相依賴的。如果其中一個數據改變了,相關聯的數據必須跟著改變,在Web資料庫設計時必須考慮數據的一致性問題。(4)產品數據的並發性訪問頻繁。由於異地產品設計的特殊屬性,數據的並發性訪問非常頻繁。所以,進行基於Internet的產品異地並行設計的Web資料庫設計與一般的電子商務不同,要充分考慮以上屬性。本文結合我們近期開發的機械產品異地並行設計系統(RCDS, Remote Concurrent Design System),綜合比較了多種當今流行的網路數據存取技術,設計出可靠安全的資料庫系統。

1 Web資料庫連接方案

1.1資料庫連接方案選擇

RDO、DAO和ADO是比較常見的Web資料庫訪問技術。

DAO (Data Access Objects) 數據訪問對象是第一個面向對象的介面,它含有 Microsoft Jet 資料庫引擎(由 Microsoft Access 所使用),並允許 Visual Basic 開發者通過 ODBC 象連接到其他資料庫一樣,直接訪問到 Access 表。DAO 最適用於單系統應用程序或小范圍本地分布使用,對大范圍的異地並行設計顯得功能不夠強大。

RDO (Remote Data Objects) 遠程數據對象是一個到 ODBC 的、面向對象的數據訪問介面,它同易於使用的 DAO style組合在一起,提供了一個介面,形式上展示出所有 ODBC 的底層功能和靈活性。RDO 在訪問 Jet 或 ISAM 資料庫方面有一定的限制,而且它只能通過現存的 ODBC 驅動程序來訪問關系資料庫。但是,RDO 已被證明是許多 SQL Server、Oracle

以及其他大型關系資料庫開發者經常選用的最佳介面。RDO 提供了用來訪問存儲過程和復雜結果集的更多和更復雜的對象、屬性,以及方法。對異地並行設計Web資料庫來說也不是十分理想。

ADO(ActiveX Data Objects)為ActiveX組件中資料庫訪問組件,ASP就是通過它實現對資料庫的訪問。ADO 是 DAO、RDO 的後繼產物。ADO 2.0在功能上與 RDO 更相似,而且一般來說,在這兩種模型之間有一種相似的映射關系。ADO 「擴展」了 DAO 和 RDO 所使用的對象模型,這意味著它包含較少的對象、更多的屬性、方法(和參數),以及事件。例如,ADO 沒有與 rdoEngine 和 rdoEnvironment 對象相等同的對象,可以包含 ODBC 驅動程序管理器和 hEnv 介面。盡管事實上介面可能是通過 ODBC OLE DB 服務提供程序實現的,但目前也不能從 ADO 中創建 ODBC 數據源。ADO 是為 Microsoft最新和最強大的數據訪問範例 OLE DB 而設計的,是一個便於使用的應用程序層介面。OLE DB 為任何數據源提供了高性能的訪問,這些數據源包括關系和非關系資料庫、電子郵件和文件系統、文本和圖形、自定義業務對象等等。ADO 在關鍵的 Internet 方案中使用最少的網路流量,並且在前端和數據源之間使用最少的層數,所有這些都是為了提供輕量、高性能的介面。同時 ADO 使用了與 DAO和 RDO相似的約定和特性,簡化的語義使它更易於學習。

ADO最早是在IIS中引入的,主要用於ASP,用ADO可以使伺服器端的腳本通過ODBC存取和操縱資料庫伺服器的數據。使用ADO的對象可以建立和管理資料庫的連接,從資料庫伺服器請求和獲取數據,執行更新、刪除、添加數據、獲取ODBC的錯誤信息等。ADO是ASP方案中最具吸引力的資料庫連接控制項,它為用戶提供了連接任何兼容ODBC的資料庫以及創建全功能資料庫應用程序的能力。

ADO具有簡單易用、高速、佔用資源少等的優點。不同於DAO和RDO,ADO有著更高的執行效率。ADO 對象模型如圖1a所示。每個 Connection、Command、Recordset 和 Field 對象都有 Properties 集合,如圖1b所示。

a) b)

圖1 ADO對象模型及屬性

應該說,ADO是微軟的下一代資料庫連接技術,用來全面取代RDO和DAO的數據訪問工具。從發展趨勢來看,ADO今後將逐步替代老的DAO特別是RDO數據訪問介面,成為新的遠程數據訪問方法。所以,選擇ADO作為產品異地並行設計的Web資料庫介面技術是合適的。

1.2 ADO應用分析

ADO 並不是自動和現存的數據訪問應用程序代碼兼容的。當 ADO 封裝 DAO 和 RDO 的功能性的時候,必須將許多語言要素轉換為 ADO 語法。在某些情況下,這將意味著要對現存代碼的某些功能做一個簡單轉換。在其他情況下,最佳的做法可能是用 ADO 的新功能重寫該應用程序。

包含在 DAO 和 RDO 模型中的許多功能被合並為單個對象,這樣就生成了一個簡單得多的對象模型。然而,由於這個原因,起初可能會覺得找到合適的 ADO 對象、集合、屬性、方法,或事件非常困難。與 DAO 和 RDO不同的是,盡管 ADO 對象是分層結構的,但在分層結構范圍之外也是可以創建的。同時,也應當注意,ADO 當前並不支持 DAO 的所有功能。ADO 主要包括 RDO 風格的功能性,以便和 OLE DB 數據源交互,另外還包括遠程和 DHTML 技術。

一般說來,在 ADO 的演化過程中,馬上把大多數 DAO 應用程序(except possibly是那些使用 ODBCDirect 的應用程序)移植到 ADO 上為時太早,因為當前的 ADO 並不支持數據定義 (DDL)、用戶、組等等。不過,如果只將 DAO 用於客戶—伺服器應用程序,並不依賴於 Jet 資料庫引擎或不使用 DDL,那麼就可能移植到 ADO。最終,Microsoft 將提供一個 ADO DDL 組件來幫助進行 DAO 到 ADO 的移植,並為 OLE DB 供應商提供一般的 DDL 支持。

在ASP中使用ADO技術來訪問Web資料庫,其應用前景是無可估量的。原理圖如下:

圖2 ADO在ASP程序中的應用

2 Web資料庫管理系統

常見的資料庫類型有面向對象的資料庫(OODB)和關系型資料庫。OODB對主流資料庫應用開發來說是相當新穎的,使用OODB使應用程序中的數據對象與現實世界中的對象一一對應,面向對象資料庫擴充了對象模型。一個常用的對象模型是由對象資料庫管理組(ODMG)開發出來,具有比傳統的關系資料庫更優越的性能,但畢竟在目前還是一種探索階段,暫時還未有相應的技術普及。

關系資料庫已經是資料庫體系的世界標准。當開發一個數據驅動應用程序時,大多數情況下用戶需要訪問網路(如Internet、Intranet等)上的數據信息,就RCDS就是建立在網路的信息通訊之上,是完全的客戶機/伺服器應用程序。

SQL Server是一個可縮放、高性能的關系型資料庫管理系統(RDBMS),它的設計是為了滿足分布式客戶/伺服器計算的需要,允許客戶應用程序使用幾個特定的工具和技術控制從伺服器檢索的數據。這些包括觸發器、存儲過程和規則的選項。因此,系統採用MS SQL Server7.0作為後台資料庫。

3 Web資料庫結構

數據模型通常有層次模型、網狀模型、關系模型及OO(面向對象)模型等。其中關系模型是建立在數學概念基礎之上的一種模型,由若干個關系框架組成的集合,它也是到目前為止最為成熟的一種資料庫類型。本文RCDS採用MS SQL Server作為後台資料庫,根據資料庫工具和資料庫特點,開發出一套可靠健壯的數據存儲方案。

整個資料庫共有AdminData、ChatNames、DesignUnits、Message、OnlineUnits、Procts、RqtTasks、RqtTaskUnits、RqtDesignUnits、ShareData、Tasks、TaskUnits和UploadFiles等表格。在建立數據模型的時候首先考慮是要避免重復數據,也就是建立規范化資料庫。規范化資料庫可以通過被稱為範式水平的指標來衡量,級別有第一範式、第二範式和第三範式,通常第三範式就是要達到的目標,因為它提供了數據冗餘和開發簡易性之間的最好折衷。

RCDS資料庫正是按照第三範式標准來設計的,它保證了模型的精簡和表格的緊湊性。而第三範式標准也最大發揮了關系資料庫的優勢,圖3是部分表格的視圖鏈接情況。

圖3 關系表格視圖

4.1 並發控制的處理

在多個用戶同時訪問一個資料庫時就產生並發問題,特別是在其中一些用戶對資料庫有添加或刪除修改等操作時,那麼其他所獲得的數據可能是一塌糊塗,甚至造成整個數據訪問的沖突、終止,從而使系統發生混亂以至崩潰。RCDS採用的解決辦法是鎖定技術,總體上分為共享鎖定和排它鎖定兩種類型(如圖4)。前者是指同時有幾個過程共享一個鎖定,比如一個用戶(或客戶)正在讀取一個數據,雖然在這之前他已經對該數據設置了鎖(LOCK),但其他用戶同樣可以(也只能是)讀取它。而排他鎖定一般應用於對數據進行修改或更新(包括添加刪除等)操作,即是用戶在修改一個數據之前設置了鎖定,在一定的時間里其他用戶是不能訪問到該數據的,只有等待鎖定解除(UNLOCK)才能進行訪問到它,當然在計算機處理的時候,其他的用戶一般是感覺不到有這個等待時間的。通過這樣的處理,就保證了數據的一致性。

a) 共享鎖定

b) 排它鎖定

圖4 安全鎖定類型

在ADO進行資料庫操作時,它的鎖定類型相對來說復雜一些。打開記錄集時,可以指定鎖定類型。鎖定類型決定了當不止一個用戶同時試圖改變一個記錄時,資料庫應如何處理。ADO中的鎖定主要有以下四種類型:

l AdLockReadOnly 指定你不能修改記錄集中的記錄

l AdLockPessimistic 指定在編輯一個記錄時,立即鎖定它

l AdLockOptimstic 指定只有調用記錄集的Update方法時,才鎖定記錄

l AdLockBatchOptimstic 指定記錄只能成批地更新

在預設情況下,記錄集使用只讀鎖定。要指定不同的鎖定類型,可以在打開記錄集時包含這些鎖定常量之一。部分代碼如下:

… …

Set MyConn=Sever.CreateObject(「ADODB.Connection」)

//定義資料庫連接MyConn

Set RS=Sever.CreateObject(「ADODB.RecordSet」)

//定義返回數據記錄集

MyConn.Open 「ByktDB.dsn」//建立應用程序與數據源的連接

RS.Open 「SELECT * FROM Mytable」, MyConn, adOpenDynamic, adLockPessimistic

//進行資料庫操作,並且設置鎖定

RS.Close

MyConn.Close

… …

4.2產品數據一致性處理

數據的安全因素除了前面所提到的並行控制之外,還要考慮事務處理。網路資料庫有其不同的地方,例如:假設某個時間有一個設計人員在你的站點上索取一些設計信息,有關的設計信息存儲在兩個表中。一個表用來保存該設計者的信息,另一個表包含了要索取的設計信息。該設計人員的信息已經輸入了第一個表中。但是,就在這時,發生了意外情況,一道閃電擊中了你的伺服器,使第二個表沒有被更新。在這種情況下,一個健壯的系統就必須保證最後的結果是兩個表都沒有被更新過。這時候事務處理就發揮了重要的功效。

使用事務處理,你可以防止第二個表沒有被更新而第一個表被更新的情況出現:當一組語句構成一個事務處理時,如果一個語句沒有執行成功,則所有的語句都不成功。不管是針對多個表,還是進行表內多個記錄的操作,它們所需要的安全保證是一樣的。事務處理的實現代碼如下:

… …

Set MyConn=Sever.CreateObject(「ADODB.Connection」)

MyConn.Open 「ByktDB.dsn」

MyConn.BeginTrans //事務處理開始

MyConn.Execute 「INSERT DataTable(Num) Values(『3628』)」

MyConn.Execute 「INSERT Shipping (Address) VALUES(『Paris,France』)」

MyConn.CommitTrans //事務處理結束

MyConn.Close

… …

在上面這段代碼中,用BeginTrans方法和CommitTrans方法來標記事務處理的開始和結束。在BeginTrans方法被調用之後,CommitTRans方法被調用之前,不管出現什麼錯誤,兩個表都不會被更新,在這個過程中所有處理的數據都保持了完全可靠的一致性。

⑤ 資料庫課程設計實例

資料庫課程設計

題目:小型超市管理系統
1、項目計劃
1.1系統開發目的
(1)大大提高超市的運作效率;
(2)通過全面的信息採集和處理,輔助提高超市的決策水平;
(3)使用本系統,可以迅速提升超市的管理水平,為降低經營成本, 提高效益,增強超市擴張力, 提供有效的技術保障。
1.2背景說明
21世紀,超市的競爭也進入到了一個全新的領域,競爭已不再是規模的競爭,而是技術的競爭、管理的競爭、人才的競爭。技術的提升和管理的升級是超市業的競爭核心。零售領域目前呈多元發展趨勢,多種業態:超市、倉儲店、便利店、特許加盟店、專賣店、貨倉等相互並存。如何在激烈的競爭中擴大銷售額、降低經營成本、擴大經營規模,成為超市營業者努力追求的目標。
1.3項目確立
針對超市的特點,為了幫助超市解決現在面臨的問題,提高小型超市的競爭力,我們將開發以下系統:前台POS銷售系統、後台管理系統,其中這兩個子系統又包含其它一些子功能。
1.4應用范圍
本系統適應於各種小型的超市。
1.5 定義
(1)商品條形碼:每種商品具有唯一的條形碼,對於某些價格一樣的商品,可以使用自定義條形碼。
(2)交易清單:包括交易的流水賬號、每類商品的商品名、數量、該類商品的總金額、交易的時間、負責本次收銀的員工號。
(3)商品積壓:在一定時期內,遠無法完成銷售計劃的商品會造成積壓。
(4)促銷:在一定時期內,某些商品會按低於原價的促銷價格銷售。
庫存告警提示:當商品的庫存數量低於庫存報警數量時發出提示。
(5)盤點:計算出庫存、銷售額、盈利等經營指標。
1.6 參考資料
《資料庫原理及設計》 陶宏才編 清華大學出版社
《SQL Server 2000 實用教程》范立南編 清華大學出版社
《SQL Server 2000 編程員指南》李香敏編 北京希望電子出版社
《輕松搞定 SQL Server 2000 程序設計》Rebecca M.Riordan編
《軟體工程規范》Watts S.Humphrey編 清華大學出版社
《軟體工程理論與實踐》 Shari Lawrence Pfleeger編 清華大學出版社
《軟體需求分析》 Swapna Kishore編 機械工業出版社
《軟體工程思想》 林銳編

2、邏輯分析與詳細分析
2.1系統功能
(1)、零售前台(POS)管理系統,本系統必須具有以下功能:
 商品錄入:根據超巿業務特點制定相關功能,可以通過輸入唯一編號、掃描條形碼、商品名稱等來實現精確或模糊的商品掃描錄入。該掃描錄入方法可以充分保證各種電腦操作水平層次的人員均能准確快速地進行商品掃描錄入。
 收銀業務:通過掃描條形碼或者直接輸入商品名稱(對於同類多件商品採用一次錄入加數量的方式)自動計算本次交易的總金額。在顧客付款後,自動計算找零,同時列印交易清單(包括交易的流水賬號、每類商品的商品名、數量、該類商品的總金額、交易的時間、負責本次收銀的員工號)。如果顧客是本店會員並持有本人會員卡,則在交易前先掃描會員卡,並對所購物品全部實行95折優惠,並將所購物品的總金額累計到該會員的總消費金額中。 會員卡的有效期限為一年,滿一年未續卡者,該會員卡將被注銷。
 安全性:OS登陸、退出、換班與操作鎖定等許可權驗證保護;斷電自動保護最大限度防止意外及惡意非法操作。
 獨立作業:有的斷網收銀即在網路伺服器斷開或網路不通的情況下,收銀機仍能正常作業
(2)、後台管理系統,本系統必須具備以下功能
 進貨管理: 根據銷售情況及庫存情況,自動制定進貨計劃(亦可手工制定修改),可以避免盲目進貨造成商品積壓。 按計劃單有選擇性地進行自動入庫登記。 綜合查詢列印計劃進貨與入庫記錄及金額。
 銷售管理: 商品正常銷售、促銷與限量、限期及禁止銷售控制。 綜合查詢各種銷售明細記錄、各地收銀員收銀記錄以及交結賬情況等。 按多種方式統計生成銷售排行榜,靈活察看和列印商品銷售日、月、年報表。
 庫存管理: 綜合查詢庫存明細記錄。 庫存狀態自動告警提示。如庫存過剩、少貨、缺貨等。軟體為您預警,避免庫存商品積壓損失和缺貨。 庫存自動盤點計算。
 人員管理: 員工、會員、供貨商、廠商等基本信息登記管理。 員工操作許可權管理。 客戶銷售許可權管理。

(3)系統結構
系統總體結構

模塊子系統結構

功能描述:商品錄入子系統要求能快速錄入商品,因此必須支持條形碼掃描。

功能描述:收銀業務子系統能計算交易總額,列印交易清單,並根據會員卡打折。

功能描述:進貨管理子系統可以根據庫存自動指定進貨計劃,進貨時自動等級,以及提供查詢和列印計劃進貨與入庫記錄的功能。

功能描述:銷售管理子系統可以控制某商品是否允許銷售,查詢每種商品的銷售情況並產生年、月、日報表,同時可以生成銷售排行榜。

功能描述:庫存管理子系統提供查詢庫存明細記錄的基本功能,並根據庫存的狀態報警,以及自動盤點計算。

功能描述:人員管理子系統提供基本信息登記管理,員工操作許可權管理,客戶銷售許可權管理的功能。
2.2、流程圖
前台管理系統

頂層DFD圖

第0層DFD圖

第1層DFD圖

2.3、戶類型與職能
(1)、員工(營業員):
 通過商品條形碼掃描輸入商品到購買清單
 操作軟體計算交易總金額
 操作軟體輸出交易清單
 對會員進行會員卡掃描以便打折
(2)、:超市經理
 操作軟體錄入商品,供貨商,廠商
 操作軟體制定進貨計劃
 查詢列印計劃進貨與入庫記錄
 操作軟體控制商品銷售與否
 查詢列印銷售情況
 操作軟體生成銷售排行榜
 查詢庫存明細記錄
 根據軟體發出的庫存告警進行入貨
 操作軟體進行盤點計算
(3)、總經理:
 基本信息登記管理
 員工操作許可權管理
 客戶銷售許可權管理
2.4、統開發步驟
 確定參與者和相關的用況
 為每個用況設計過程
 建立順序圖,確定每個腳本中對象的協作
 創建類,確定腳本中的對象
 設計, 編碼, 測試, 集成類
 為過程編寫系統測試案例
 運行測試案例,檢驗系統
2.5、系統環境需求
 系統模式

本系統採用C/S模式作為開發模式
 硬體環境
伺服器端:
高性能的計算機一台,
普通的雙絞線作為連接。
客戶端: 普通的計算機或者工作站,
普通的雙絞線作為連接。
 軟體環境
伺服器端:安裝SQL Server 2000的伺服器版本,
安裝windows 2000伺服器版本,
配置了諾頓等必須的防毒軟體。
客戶端: 安裝SQL Server2000的伺服器版本,
安裝了VB等可視化開發工具軟體,
安裝windows2000伺服器版本。

2.6、系統安全問題
信息系統盡管功能強大,技術先進,但由於受到自身體系結構,設計思路以及運行機制等限制,也隱含許多不安全因素。常見因素有:數據的輸入,輸出,存取與備份,源程序以及應用軟體,資料庫,操作系統等漏洞或缺陷,硬體,通信部分的漏洞,企業內部人員的因素,病毒,「黑客」等因素。因此,為使本系統能夠真正安全,可靠,穩定地工作,必須考慮如下問題:為保證安全,不致使系統遭到意外事故的損害,系統因該能防止火,盜或其他形式的人為破壞。
 系統要能重建
 系統應該是可審查的
 系統應能進行有效控制,抗干擾能力強
 系統使用者的使用許可權是可識別的
3、基於UML的建模
3.1語義規則
用例模型(use cases view)(用例視圖)的基本組成部件是用例(use case)、角色(actor)和系統(system)。用例用於描述系統的功能,也就是從外部用戶的角度觀察,系統應支持哪些功能,幫助分析人員理解系統的行為,它是對系統功能的宏觀描述,一個完整的系統中通常包含若干個用例,每個用例具體說明應完成的功能,代表系統的所有基本功能(集)。角色是與系統進行交互的外部實體,它可以是系統用戶,也可以是其它系統或硬體設備,總之,凡是需要與系統交互的任何東西都可以稱作角色。系統的邊界線以內的區域(即用例的活動區域)則抽象表示系統能夠實現的所有基本功能。在一個基本功能(集)已經實現的系統中,系統運轉的大致過程是:外部角色先初始化用例,然後用例執行其所代表的功能,執行完後用例便給角色返回一些值,這個值可以是角色需要的來自系統中的任何東西。
UML:是一種標準的圖形化建模語言,它是面向對象分析與設計的一種標准表示;它不是一種可視化的程序設計語言而是一種可視化的建模語言;不是工具或知識庫的規格說明而是一種建模語言規格說明是一種表示的標准;不是過程也不是方法但允許任何一種過程和方法使用它。

用例(use case):

參與者(actor):

3.2、UML模型
3.21、系統UML模型

3.22、子系統UML模型
(1)零售前台(POS)管理系統用例視圖

(2)後台管理系統用例視圖

3.3、系統實現圖

4、超市銷售系統概念設計文檔
(1)、系統ER圖

(2)、系統ER圖說明
1) 商店中的所有用戶(員工)可以銷售多種商品,每種商品可由不同用戶(員工)銷售;
2) 每個顧客可以購買多種商品,不同商品可由不同顧客購買;
3) 每個供貨商可以供應多種不同商品,每種商品可由多個供應商供應。
(3)、視圖設計
1) 交易視圖(v_Dealing)——用於查詢交易情況的視圖;
2) 計劃進貨視圖(v_PlanStock)——用於查詢進貨計劃的視圖;
3) 銷售視圖(v_Sale)——用於查詢銷售明細記錄的視圖;
4) 入庫視圖(v_Stock)——用於查詢入庫情況的視圖。
5、邏輯設計文檔
(1)、系統關系模型
a) 商品信息表(商品編號,商品名稱,價格,條形碼,促銷價格,促銷起日期,促銷止日期,允許打折,庫存數量,庫存報警數量,計劃進貨數,允許銷售,廠商編號,供貨商編號)
b) 用戶表(用戶編號,用戶名稱,用戶密碼,用戶類型)
c) 會員表(會員編號,會員卡號,累積消費金額,注冊日期)
d) 銷售表(銷售編號,商品編號,銷售數量,銷售金額,銷售日期)
e) 交易表(交易編號,用戶名稱,交易金額,會員卡號,交易日期)
f) 進貨入庫表(入庫編號,入庫商品編號,入庫數量,單額,總額,入庫日期,計劃進貨日期,入庫狀態)
g) 供貨商表(供貨商編號,供貨商名稱,供貨商地址,供貨商電話)
h) 廠商表(廠商編號,廠商名稱,廠商地址,廠商電話)

(2)、系統資料庫表結構
資料庫表索引
表名 中文名
MerchInfo 商品信息表
User 用戶表
Menber 會員表
Sale 銷售表
Dealing 交易表
Stock 進貨入庫表
Provide 供貨商表
Factory 廠商表

商品信息表(MerchInfo)
欄位名 欄位類型 長度 主/外鍵 欄位值約束 對應中文名
MerchID int 4 P Not null 商品編號
MerchName Varchar 50 Not null 商品名稱
MerchPrice Money 4 Not null 價格
MerchNum Int 4 Not null 庫存數量
CautionNum Int 4 Not null 庫存報警數量
PlanNum Int 4 null 計劃進貨數
BarCode Varchar 50 Not null 條形碼
SalesProPrice Money 4 促銷價格
SalesProDateS Datetime 8 促銷起日期
SalesProDateE Datetime 8 促銷止日期
AllowAbate Int 4 Not null 允許打折
AllowSale Int 4 Not null 允許銷售
FactoryID Varchar 10 F Not null 廠商編號
ProvideID Varchar 10 F Not null 供貨商編號

用戶表(User)
欄位名 欄位類型 長度 主/外鍵 欄位值約束 對應中文名
UserID varchar 10 P Not null 用戶編號
UserName Varchar 25 Not null 用戶名稱
UserPW Varchar 50 Not null 用戶密碼
UserStyle Int 4 Not null 用戶類型

會員表(Menber)
欄位名 欄位類型 長度 主/外鍵 欄位值約束 對應中文名
MemberID Varchar 10 P Not null 會員編號
MemberCard Varchar 20 Not null 會員卡號
TotalCost Money 4 Not null 累積消費金額
RegDate Datetime 8 Not null 注冊日期

銷售表(Sale)
欄位名 欄位類型 長度 主/外鍵 欄位值約束 對應中文名
SaleID Varchar 10 P Not null 銷售編號
MerChID Varchar 10 F Not null 商品編號
SaleDate Datetime 8 Not null 銷售日期
SaleNum Int 4 Not null 銷售數量
SalePrice Money 4 Not null 銷售單額

交易表(Dealing)
欄位名 欄位類型 長度 主/外鍵 欄位值約束 對應中文名
DealingID Varchar 10 P Not null 交易編號
DealingPrice Money 4 Not null 交易金額
DealingDate Money 4 Not null 交易日期
MemberID Varchar 10 會員卡號
UserName Varchar 10 F Not null 用戶名稱

入庫紀錄表(Stock)
欄位名 欄位類型 長度 主/外鍵 欄位值約束 對應中文名
StockID Varchar 10 P Not null 入庫編號
MerchID Varchar 10 F Not null 入庫商品編號
MerchNum Int 4 Not null 入庫數量
MerchPrice Money 4 Not null 單額
TotalPrice Money 4 Not null 總額
StockDate Datetime 8 Datetime 入庫日期
PlanDate Datetime 8 Datetime 計劃進貨日期
StockState Int 4 Not null 入庫狀態

供貨商表(Provide)
欄位名 欄位類型 長度 主/外鍵 欄位值約束 對應中文名
ProvideID varchar 10 P Not null 供貨商編號
ProvideName Varchar 50 Not null 供貨商名稱
ProvideAddress Varchar 250 供貨商地址
ProvidePhone Varchar 25 供貨商電話

廠商表(Provide)
欄位名 欄位類型 長度 主/外鍵 欄位值約束 對應中文名
FactoryID varchar 10 P Not null 廠商編號
FactoryName Varchar 50 Not null 廠商名稱
FactoryAddress Varchar 250 廠商地址
FactoryPhone Varchar 25 廠商電話
6、物理設計文檔
/*----------創建資料庫----------*/
create database SuperMarketdb
on primary
(
name=SuperMarketdb,
filename='C:\Program Files\Microsoft SQL Server\MSSQL\Data\SuperMarketdb.mdf',
size=100MB,
maxsize=200MB,
filegrowth=20MB
)
log on
(
name=SuperMarketlog,
filename='C:\Program Files\Microsoft SQL Server\MSSQL\Data\SuperMarketdb.ldf',
size=60MB,
maxsize=200MB,
filegrowth=20MB
)
go

/*----------創建基本表----------*/
use [SuperMarketdb]
go
/*創建交易表*/
CREATE TABLE Dealing (
DealingID int identity(1,1) Primary key ,
DealingDate datetime NOT NULL ,
DealingPrice money NOT NULL ,
UserName varchar(25) NULL ,
MemberCard varchar(20) NULL
)
GO
/*創建廠商表*/
CREATE TABLE Factory (
FactoryID varchar(10) Primary key ,
FactoryName varchar(50) NOT NULL ,
FactoryAddress varchar(250) NULL ,
FactoryPhone varchar(50) NULL
)
GO
/*創建會員表*/
CREATE TABLE Member (
MemberID varchar(10) Primary key ,
MemberCard varchar(20) NOT NULL ,
TotalCost money NOT NULL ,
RegDate datetime NOT NULL
)
GO
/*創建商品信息表*/
CREATE TABLE MerchInfo (
MerchID int identity(1,1) Primary key ,
MerchName varchar(50) Unique NOT NULL ,
MerchPrice money NOT NULL ,
MerchNum int NOT NULL ,
CautionNum int NOT NULL ,
PlanNum int NOT NULL ,
BarCode varchar(20) Unique NOT NULL ,
SalesProPrice money NULL ,
SalesProDateS datetime NULL ,
SalesProDateE datetime NULL ,
AllowAbate int NOT NULL ,
AllowSale int NOT NULL ,
FactoryID int NOT NULL ,
ProvideID int NOT NULL
)
GO
/*創建供應商表*/
CREATE TABLE Provide (
ProvideID varchar(10) Primary key ,
ProvideName varchar(50) NOT NULL ,
ProvideAddress varchar(250) NULL ,
ProvidePhone varchar(25) NULL
)
GO
/*創建銷售表*/
CREATE TABLE Sale (
SaleID int identity(1,1) Primary key ,
MerChID int NOT NULL ,
SaleDate datetime NOT NULL ,
SaleNum int NOT NULL,
SalePrice money NOT NULL
)
GO
/*創建入庫表*/
CREATE TABLE Stock (
StockID int identity(1,1) Primary key ,
MerchID int NOT NULL ,
MerchNum int NOT NULL ,
MerchPrice money NULL ,
TotalPrice money NULL ,
PlanDate datetime NULL ,
StockDate datetime NULL,
StockState int NOT NULL
)
GO
/*創建用戶表*/
CREATE TABLE User (
UserID varchar(10) Primary key ,
UserName varchar(25) NOT NULL ,
UserPW varchar(50) NOT NULL ,
UserStyle int NOT NULL ,
)
GO

/*----------創建表間約束----------*/
/*商品信息表中廠商編號、供應商編號分別與廠商表、供應商表之間的外鍵約束*/
ALTER TABLE MerchInfo ADD
CONSTRAINT [FK_MerchInfo_Factory] FOREIGN KEY
(
[FactoryID]
) REFERENCES Factory (
[FactoryID]
),
CONSTRAINT [FK_MerchInfo_Provide] FOREIGN KEY
(
[ProvideID]
) REFERENCES Provide (
[ProvideID]
)
GO
/*銷售表中商品編號與商品信息表之間的外鍵約束*/
ALTER TABLE Sale ADD
CONSTRAINT [FK_Sale_MerchInfo] FOREIGN KEY
(
[MerChID]
) REFERENCES MerchInfo (
[MerchID]
) ON DELETE CASCADE
GO
/*入庫表中商品編號與商品信息表之間的外鍵約束*/
ALTER TABLE Stock ADD
CONSTRAINT [FK_Stock_MerchInfo] FOREIGN KEY
(
[MerchID]
) REFERENCES MerchInfo (
[MerchID]
) ON DELETE CASCADE
GO

/*----------創建索引----------*/
/*在交易表上建立一個以交易編號、交易日期為索引項的非聚集索引*/
CREATE nonclustered INDEX IX_Dealing ON Dealing(DealingID, DealingDate)
GO
/*在商品信息表上建立一個以商品編號為索引項的非聚集索引*/
CREATE nonclustered INDEX IX_MerchInfo ON MerchInfo(MerchID)
GO
/*在銷售表上建立一個以銷售編號、銷售日期為索引項的非聚集索引*/
CREATE nonclustered INDEX IX_Sale ON Sale(SaleID, SaleDate)
GO
/*在入庫表上建立一個以入庫編號、入庫日期、商品編號為索引項的非聚集索引*/
CREATE nonclustered INDEX IX_Stock ON Stock(StockID, StockDate, MerchID)
GO

/*----------創建視圖----------*/
/*創建用於查詢交易情況的視圖*/
CREATE VIEW v_Dealing
AS
SELECT DealingDate as 交易日期,
UserName as 員工名稱,
MemberCard as 會員卡號,
DealingPrice as 交易金額
FROM Dealing
GO
/*創建用於查詢進貨計劃的視圖*/
CREATE VIEW v_PlanStock
AS
SELECT Stock.StockID as SID,
MerchInfo.MerchName as 商品名稱,
MerchInfo.BarCode as 條形碼,
Factory.FactoryName as 廠商,
Provide.ProvideName as 供貨商,
Stock.MerchNum as 計劃進貨數量,
Stock.PlanDate as 計劃進貨日期
FROM Stock,MerchInfo,Provide,Factory
Where Stock.MerchID = MerchInfo.MerchID
and Provide.ProvideID=MerchInfo.ProvideID
and Factory.FactoryID=MerchInfo.FactoryID
and Stock.StockState=0
GO
/*創建用於查詢銷售明細記錄的視圖*/
CREATE VIEW v_Sale
AS
SELECT MerchInfo.MerchName as 商品名稱,
MerchInfo.BarCode as 條形碼,
MerchInfo.MerchPrice as 商品價格,
Sale.SalePrice as 銷售價格,
Sale.SaleNum as 銷售數量,
Sale.SaleDate as 銷售日期
FROM Sale INNER JOIN
MerchInfo ON Sale.MerChID = MerchInfo.MerchID
GO
/*創建用於查詢入庫情況的視圖*/
CREATE VIEW v_Stock
AS
SELECT MerchInfo.MerchName as 商品名稱,
MerchInfo.BarCode as 條形碼,
Factory.FactoryName as 廠商,
Provide.ProvideName as 供貨商,
Stock.MerchPrice as 入庫價格,
Stock.MerchNum as 入庫數量,
Stock.TotalPrice as 入庫總額,
Stock.StockDate as 入庫日期
FROM Stock,MerchInfo,Provide,Factory
Where Stock.MerchID = MerchInfo.MerchID
and Provide.ProvideID=MerchInfo.ProvideID
and Factory.FactoryID=MerchInfo.FactoryID
and Stock.StockState=1
GO

7、小結
和傳統管理模式相比較,使用本系統,毫無疑問會大大提高超市的運作效率,輔助提高超市的決策水平,管理水平,為降低經營成本, 提高效益,減少差錯,節省人力,減少顧客購物時間,增加客流量,提高顧客滿意度,增強超市擴張能力, 提供有效的技術保障。
由於開發者能力有限,加上時間倉促,本系統難免會出現一些不足之處,例如:
 本系統只適合小型超市使用,不能適合中大型超市使用;
 超市管理系統涉及范圍寬,要解決的問題多,功能復雜,實現困難,但由於限於時間,本系統只能做出其中的一部分功能;
對於以上出現的問題,我們深表歉意,如發現還有其它問題,希望老師批評指正。

⑥ 資料庫課程設計心得體會範文

通過資料庫課程設計的完成,我們從中獲得了不少的感慨,通過對所學知識的體會,能夠明顯感覺到自己比以往進步了不少。以下是由我為大家整理的「資料庫課程設計心得體會範文」,僅供參考,歡迎大家閱讀。

資料庫課程設計心得體會範文(一)

在我看來,資料庫課程設計主要的目標是利用課程中學到的資料庫知識和技術較好的開發設計出資料庫應用系統,去解決各行各業信息化處理的要求。通過這次的課程設計,可以鞏固我們對資料庫基本原理和基礎理論的理解,掌握資料庫應用系統設計開發的基本方法,進一步提高我們綜合運用所學知識的能力。

當搏棚我們這組決定做大學生就業咨詢系統時,我們並沒有著手寫程序。而是大家一起商量這個系統概述、系統目標、系統需求、業務流程分析、數據流程分析和數據詞典。當這些都准備好了之後,我們進行模塊的分工。每個人都有自己的模塊設計,而且寫出來的代碼要求可以實現相應模塊的功能,得到理想的效果。當每個人都把自己的分工做好了,最後會由一個人把這些全部組合搭建在一起。我們使用的是html和php相互嵌套使用,當一個系統做好了之後,我會好好地把程序都看一遍,理會其中的奧秘。

我所負責的是資料庫的備份和還原還有一些界面的實現。還記得自己剛接觸html的時候,覺得很感興趣,所以有一段時間幾乎到了痴迷的程度。然而php是我剛接觸不久的一種編程語言。不過覺得它的功能真的很強大,可以開發出很多大型的系統。但是在做備份和還原的時候,要考慮的東西還是很多的。當我遇到錯誤的時候,感到很受打擊。值得欣慰的是,在同學的幫助和大量參考書的查閱下,我把自己的模塊做好了。這就是我收獲最大的地方。而且,我明白了遇到困難永不放棄的重要性,我知道了團隊合作的重要性,我領悟了只有堅持不懈才會取得勝利。

知識的獲得是無止境的,只要你想基渣則學,只要你行動,沒有什麼會難倒我們的。回首這一個多星期的課程設計,我很欣慰。因為我有了動力,有了勇氣。謝謝老師對我們的不懈幫助,謝謝學校給了我們這一次實踐的機會,也謝謝組員們的關懷。這些美好的回憶美好的東西將永遠伴隨著我。

資料庫課程設計心得體會範文(二)

本次課程設計,使我對《數據結構》這門課程有了更深入理解。《數據結構》是一門實踐性較強課程,為了學好這門課程,必須在掌握理論知識同時,加強上機實踐。

我課程設計題目是線索二叉樹運算。剛開始做這個程序時候,感到完全無從下手,甚至讓我覺得完成這次程序設計根本就是不可能,於是開始查閱各種資料以及參考文獻,之後便開始著手寫程序,寫完運行時有很多問題。特別是實現線索二叉樹刪除運算時很多情況沒有考慮周全,經常運行出現錯誤,但通過同學間幫助最終基本解決問題。

在本課程設計中,我明白了理論與實際應用相結合重要性,並提高了自己組織數據及編寫大型程序能力。培養了基本、良好程序設計技能以及合作能力。這次課程設計同樣提高了我綜合運用所學知識能力。並對VC有了更深入了解。《數據結構》是一門實踐性很強課程,上機實習是對學生全面綜合素質進行訓練一種最基本方法,是與課梁衡堂聽講、自學和練習相輔相成、必不可少一個教學環節。

上機實習一方面能使書本上知識變「活」,起到深化理解和靈活掌握教學內容目;另一方面,上機實習是對學生軟體設計綜合能力訓練,包括問題分析,總體結構設計,程序設計基本技能和技巧訓練。此外,還有更重要一點是:機器是比任何教師更嚴厲檢查者。因此,在「數據結構」學習過程中,必須嚴格按照老師要求,主動地、積極地、認真地做好每一個實驗,以不斷提高自己編程能力與專業素質。

通過這段時間課程設計,我認識到數據結構是一門比較難課程。需要多花時間上機練習。這次程序訓練培養了我實際分析問題、編程和動手能力,使我掌握了程序設計基本技能,提高了我適應實際,實踐編程能力。總來說,這次課程設計讓我獲益匪淺,對數據結構也有了進一步理解和認識。

資料庫課程設計心得體會範文(三)

一周的課程設計結束了,在這次的課程設計中不僅檢驗了我所學習的知識,也培養了我如何去把握一件事情,如何去做一件事情,又如何完成一件事情的方法和技巧。在設計過程中,和同學們相互探討,相互學習,相互監督。我學會了運籌帷幄,學會了寬容,學會了理解,也學會了做人與處世,這次課程設計對我來說受益良多。

課程設計是我們專業課程知識綜合應用的實踐訓練,著是我們邁向社會,從事職業工作前一個必不少的過程。「千里之行始於足下」,通過這次課程設計,我深深體會到這句千古名言的真正含義。我今天認真的進行課程設計,學會腳踏實地邁開這一步,就是為明天能穩健地在社會大潮中奔跑打下堅實的基礎。我這次設計的科目是數據結。

數據結構,是一門研究非數值計算的程序設計問題中計算機的操作對象(數據元素)以及它們之間的關系和運算等的學科,而且確保經過這些運算後所得到的新結構仍然是原來的結構類型。「數據結構」在計算機科學中是一門綜合性的專業基礎課。數據結構是介於數學、計算機硬體和計算機軟體三者之間的一門核心課程。數據結構這一門課的內容不僅是一般程序設計(特別是非數值性程序設計)的基礎,而且是設計和實現編譯程序、操作系統、資料庫系統及其他系統程序的重要基礎。通過這次模具設計,我在多方面都有所提高。

在界面設置中使用函數調用while。其中文本顯示顏色和背景顏色都可以任意按照自己的喜好,任意改變,但改變的時候必須採用標准英文大寫,同時在製作顯示菜單的窗口,大小根據菜單條數設計。最後採用printf輸出程序設計界面。

這次的程序軟體基本上運行成功,可以簡單的建立鏈式循環鏈表,並進行輸出,及循環語句的運用和選擇語句的控制。由於時間和知識上的限制,使得程序規模相對較小,即功能還不很全面,應用也不很普遍。原來C語言可是涉及很多知識,而不是枯燥無聊的簡單的代碼部分而已,利用C語言方面的知識,我們可以設計出更完善的軟體。

通過這次的課程設計,更是讓我深刻認識到自己在學習中的不足,同時也找到了克服這些不足的方法,這也是一筆很大的資源。在以後的時間中,我們應該利用更多的時間去上機實驗,加強自學的能力,多編寫程序,相信不久後我們的編程能力都會有很大的提高能設計出更多的更有創新的作品。

⑦ 資料庫表單設計實驗目的及意義

資料庫表單設計實驗目的及意義是為了配合資料庫原理及應用開發而設置的,是計算機科學與技術、網路工程、信息安全、物聯網工程、軟體工程等專業集中實踐的教學環節,是將關系資料庫理論知識轉化為解決實際問題能力的重要環節。資料庫系統課程設計目的在於加深對關系資料庫理論知識的理解,通過使用具體的 DBMS,掌握一種實際的資料庫管理系統並掌握其操作技術,熟練掌握使用資料庫前端開發工具(如 VB、 C++、 Java、 Delphi、 PowerBuilder等),進一步提高同學們運用資料庫技術解決實際問題的能力。

熱點內容
汽修汽配源碼 發布:2025-05-14 20:08:53 瀏覽:742
蜜蜂編程官網 發布:2025-05-14 19:59:28 瀏覽:57
優酷怎麼給視頻加密 發布:2025-05-14 19:31:34 瀏覽:635
夢三國2副本腳本 發布:2025-05-14 19:29:58 瀏覽:860
phpxmlhttp 發布:2025-05-14 19:29:58 瀏覽:434
Pua腳本 發布:2025-05-14 19:24:56 瀏覽:449
蘋果像素低為什麼比安卓好 發布:2025-05-14 19:13:23 瀏覽:461
安卓機微信怎麼設置紅包提醒 發布:2025-05-14 19:00:15 瀏覽:272
androidsystem許可權設置 發布:2025-05-14 18:56:02 瀏覽:971
mq腳本 發布:2025-05-14 18:45:37 瀏覽:25