面向對象數據庫設計與應用 01 - 數據庫建模


一、實驗目的

  1. 掌握在面向對象數據庫設計過程中數據庫設計文檔的設計技巧和撰寫方法,熟悉把握面向對象數據庫設計的具體流程和設計環節。
  2. 在本實驗的操作過程中,復習學過的數據庫規范化,並利用規范化對數據庫進行關系模式的划分。
  3. 重點把握面向對象數據庫的概念模型設計與PDM設計,以及數據庫的模型設計,即要求掌握數據庫邏輯設計階段所要運用的理論知識。
  4. 能從實驗背景中分析出項目的需求說明,同時能使用RQM對需求說明進行簡單的描述,提高對系統設計的分析能力。

 

 

二、實驗內容

實驗背景導入:

某公司接到一個網購系統的項目,任命你做該任務的數據庫設計師,對網購系統進行數據庫整體的設計。Webshop就是一個B2C模式的電子商城,該電子商務系統能夠實現包括前台用戶和后台管理兩大部分。

前台購物系統包括會員注冊、會員登錄、商品展示、商品搜索、購物車、產生訂單和會員資料修改等等功能。后台管理系統包括管理用戶、維護商品庫、處理訂單、維護會員信息和其他管理功能。

根據上述實驗背景的系統功能描述和實際業務分析,進行電子商城的數據庫相關設計,要求完成以下實驗需求:

①需求分析說明書。在數據庫設計初期,首先進行系統功能需求說明書編寫。

②OR模型設計。進入邏輯設計階段,進行實體關系模型的設計,將現實的系統經過抽象后通過E-R模型表現。

③由OR模型轉變成面向對象模型。將上述完成的CDM轉化為PDM模型。

④數據字典編寫。進入數據字典的編寫,對系統相關實體的屬性所取的類型確定,並以文檔的形式進行編寫保存。

 

 

三、實驗平台

軟件:POWER DESIGNER,WORD

   

 

四、實驗步驟

①需求分析說明書。

進行系統功能需求說明書編寫。本實驗使用POWER DESIGNER的Requirements Model進行功能需求說明,其中按照系統功能的角色分類進行描述說明。角色分別為:Admin_Model、Business_Model和Consumer_Model ,具體角色的功能詳見RQM設計結果,完成系統初步的功能需求說明文檔。關於POWER DESIGNER的具體使用方法這里不詳述。

②OR模型設計。

邏輯設計階段,需進行實體關系模型的設計,本實驗利用POWER DESIGNER的Free Model,將從①需求分析說明書中抽象出具體的實體對象,並依據抽象出的實體對象設計相關的對象間關系,最終完成實體關系模型的設計。

③由OR模型轉變成面向對象模型。使用面向對象數據庫模式定義語言,將上述所設計的實體關系模型進行轉換模型的轉換。

④數據字典編寫。

    在對數據字典進行編寫時,以表的形式對系統相關實體的屬性和所取的類型進行記錄和保存,其中表頭包括:序號、數據項、數據類型、長度和是否為鍵,本實驗則按照類的形式分別對其進行描述,同時以文檔的形式進行編寫保存,最終完成數據字典的說明文檔。

 

 

五、運行結果

1.RQM

 

圖5-1  Consumer角色的RQM需求

 

圖5-2  Business角色的RQM需求

 

 

圖5-3  Admin角色的RQM需求1

 

圖5-3  Admin角色的RQM需求2

 

 

 

2.OR圖。

圖5-4  項目核心的OR模型

 

 

 

圖5-5  項目詳細的OR模型

 

 

 

 

3.面向對象數據庫模式

class User:Object(extent users,key User_ID){

     attribute String  User_ID;

     attribute String  Birth;

     attribute String  Address;

     attribute String  Mobile;

     attribute String  WeChat;

     attribute String  Reputation;

     attribute String  Hobby;

     attribute Integer  Wages;

     attribute String  Job;

};

class Member extends User(extent members,key Member_ID){

     attribute String  Member_ID;

     attribute String  Password;

     attribute String  User_name;

     relationship Shopping_Cart exist  inverse Shopping_Cart::existed;

     relationship Set<Good> buy inverse Good::bought;

     relationship Punish Appeal inverse Punish::Appealed;

     relationship  Administrators Member_managemented inverse Administrators::Member_management;

 

     Membership_registration(in Member)raises<already_registration>;//會員注冊

     Membership_logon(in User_name,Password)raises(login_failed);//會員登錄

     Membership_Logout();//會員安全退出

     Membership_Modifying_data(in Member);//會員資料修改

     Membership_Appeal_Punish(in Member,Punish);//處罰申訴

     Membership_search_business(in Business)raises(non_existent);//搜索商家

     Membership_see_reputation(in Business,Punish)raises(non_existent);//查看商家信譽度

     Membership_see_goods(in Business,Good)raises(non_existent);//查看商家商品

     Membership_Purchase_goods(in Member,Good,Payment_status);//商品購買

     Membership_Add_Shopping_Cart(in Member,Good,Shopping_Cart);//加入購物車

     Membership_evaluate(in Member,Payment_status,Order,Evaluate)raises(no_purchase);//商品評價

     Membership_append_Evaluate(in Member,Evaluate);//追加評論

     Membership_remove_Evaluate(in Member,Evaluate)raises(already_remove);//刪除評價

};

class Business extends User(extent businesses,key Business_ID){

     attribute String  Business_ID;

     attribute String  Password;

     attribute String  User_name;

     relationship Set<Good> Release  inverse Good::Released;

     relationship Administrators Busin_managemented  inverse Administrators::Busin_management;

     relationship  Punish Appeal inverse Punish::Appealed;

    

     Business_registration(in Business)raises<already_registration>;//商家注冊

     Business_logon(in User_name,Password)raises(login_failed);//商家登錄

     Business_Logout();//商家安全退出

     Business_Modifying_data(in Business);//商家資料修改

     Business_Appeal_Punish(in Business,Punish);//處罰申訴

     Business_see_reputation(in Business,Punish)raises(non_existent);//查看信譽度

     Business_add_goods(in Business,Good)raises(already_existent);//新品上架

     Business_remove_goods(in Business,Good)raises(non_existent);//商品下架

     Business_modify_details(in Business,Good);//修改商品詳情

     Business_modify_Price(in Business,Good,Price);//修改商品價格

     Business_modify_type(in Business,Good,Commodity_type);//修改商品分類

     Business_reply_Evaluate(in Business,Evaluate);//回復評價

     Business_remove_reply(in Business,Evaluate)raises(already_remove);//刪除回復

};

class Administrator extends User(extent administrators,key Admin_ID){

     attribute String  Admin_ID;

     attribute String  Password;

     attribute String  User_name;

     relationship Set<Order> Order_management inverse Order::Order_managemented;

     relationship Set<Good> Good_management inverse Good::Good_managemented;

     relationship Set<Evaluate> Comment_management inverse Evaluate::Comment_managemented;

     relationship Set<Business> Busin_management inverse Business::Busin_managemented;

     relationship Set<Punish> Busin_management inverse Punish::Busin_managemented;

     relationship Set<Member> Member_management inverse Member::Member_managemented;

    

     Administrator_registration(in Administrator)raises<already_registration>;//申請管理員

     Administrator_logon(in User_name,Password)raises(login_failed);//管理員登錄

     Administrator_Logout();//管理員安全退出

     Administrator_Modifying_data(in Administrator);//管理員資料修改

     Administrator_add_Member(in Member)raises<already_existent>;//添加會員

     Administrator_remove_Member(in Member)raises<already_remove>;//刪除會員

     Administrator_Modifying_Memberdata(in Member);//修改會員資料

     Administrator_see_Member(in Member)raises<non_existent>;//查看會員信息

     Administrator_search_Member(in Member)raises<non_existent>;//搜索會員

     Administrator_Punish_Member(in Member,Punish);//處罰會員

     Administrator_add_Business(in Business)raises<already_existent>;//添加商家

     Administrator_remove_Business(in Business)raises<already_remove>;//刪除商家

     Administrator_Modifying_Businessdata(in Business);//修改商家資料

     Administrator_see_Business(in Business)raises<non_existent>;//查看商家信息

     Administrator_search_Business(in Business)raises<non_existent>;//搜索商家

     Administrator_Punish_Business(in Business,Punish);//處罰商家

     Administrator_modify_details(in Good);//修改商品信息

     Administrator_modify_type(in Good,Commodity_type);//修改商品類型

     Administrator_remove_goods(in Good)raises(non_existent);//強制下架商品

     Administrator_modify_Order(in Order);//修改訂單信息

     Administrator_modify_Ordertype(in Order,Order_type);//強制修改訂單類型

     Administrator_recovery_Order(in Order,Business);//恢復商家訂單

     Administrator_recovery_Order(in Order,Member);//恢復用戶訂單

     Administrator_remove_Order(in Order)raises(already_remove);//徹底刪除訂單

     Administrator_reply_Evaluate(in Evaluate);//回復評價

     Administrator_remove_reply(in Evaluate)raises(already_remove);//刪除回復

     Administrator_remove_reply(in Evaluate)raises(already_remove);//強制刪除用戶評論

};

class Commodity_type:Object(extent commodity_types,key Commodity_type_ID){

     attribute String  Commodity_type_ID;

     attribute String  Life;

     attribute String  Fruits;

     attribute String  Delicious_food;

     attribute String  Drinks;

     attribute String  snacks;

     attribute String  office;

     attribute String  Stationery;

};

class Good extends Commodity_type(extent goods,key Good_ID){

     attribute String  Good_ID;

     attribute Double  Price;

     attribute String  Stock;

     attribute String  details;

     relationship Payment_status pay  inverse Payment_status::paid;

     relationship Set<Member> bought inverse Member::buy;

     relationship Set<Business> Released inverse Business::Release;

     relationship Set<Evaluate> commented inverse Evaluate::comment;

     relationship Administrators Good_managemented  inverse Administrators::Good_management;

 

     Show_goods(in Good)raises(non_existent);//商品展示

     Search_goods(in Good)raises(non_existent);//商品搜索

     See_goods_details(in Good)raises(no_description);//查看商品詳情

};

 

class Shopping_Cart:Object(extent shopping_Carts,key Cart_ID){

     attribute String  Cart_ID;

     attribute String  Add_time;

     attribute String  Number;

     attribute String  Good;

     attribute String  Describe;

     relationship Set<Payment_status> paid inverse Payment_status::pay;

     relationship  Member existed inverse Member::exist;

    

     Membership_Show_goods(in Shopping_Cart,Good)raises(non_existent);//查看購物車商品

     Membership_modify_count(in Shopping_Cart,Number);//修改購物車商品購買數量

     Membership_add_goods(in Shopping_Cart,Good)raises(already_add);//添加購物車商品

     Membership_remove_goods(in Shopping_Cart,Good)raises(already_remove);//移除購物車商品

     Membership_payment_goods(in Shopping_Cart,Good,Payment_status)raises(repeated_payment);//支付購物車商品

};

class Payment_type:Object(extent payment_types,key Payment_type_ID){

     attribute String  Payment_type_ID;

     attribute String  WeChat;

     attribute String  Alipay;

};

class Payment_status extends Payment_type(extent payment_statuses,key Payment_status_ID){

     attribute String  Payment_status_ID;

     attribute String  Unpaid;

     attribute String  Paid;

     relationship Shopping_Cart pay inverse Shopping_Cart::paid;

     relationship  Order generate inverse Order::generated;

};

class Order_type:Object(extent order_types,key Order_type_ID){

     attribute String  Order_type_ID;

     attribute String  Pending_payment;

     attribute String  Tobe_shipped;

     attribute String  Tobe_receivedGoods;

     attribute String  Tobe_commented;

};

class Order extends Order_type(extent orders,key Order_ID){

     attribute String  Order_ID;

     attribute Integer  Number;

     attribute Double  Total_price;

     attribute String  Setup_time;

     relationship Payment_status generated  inverse Payment_status::generate;

     relationship  Administrators Order_managemented inverse Administrators::Order_management;

    

     order_details(in Order);//查看訂單詳情

     remove_Order(in Order)raises(already_remove);//刪除訂單

     search_order(in Order)raises(non_existent);//搜索訂單

};

class Evaluate:Object(extent evaluates,key Comment_ID){

     attribute String  Comment_ID;

     attribute String  Prefix_muber;

     attribute String  User;

     attribute String  content;

     attribute String  Suffix_muber;

     relationship Good comment  inverse Good::commented;

     relationship Administrators Busin_managemented  inverse Administrators::Busin_management;

     see_Evaluate(in Evaluate);//查看評價

 

};

class Punish:Object(extent punishs,key Punish_ID){

     attribute String  Punish_ID;

     attribute String  Reputation_value;

     attribute String  Punish;

     relationship Set<Member> Appealed inverse Member::Appeal;

     relationship Set<Business> Appealed inverse Business::Appeal;

     relationship  Administrators Busin_managemented inverse Administrators::Busin_management;

 

     Administrator_Restricted_login(in Punish)raises(already_restricted);//限制登錄

     Administrator_Reply_appeal(in Punish)raises(already_reply);//回復申訴

     Administrator_Permanent_title(in Punish)raises(non_existent);//永久封號

     Administrator_Modify_reputation(in Punish);//修改商家信譽度

     Administrator_remove_Punish(in Punish)raises(already_remove);//解除處罰

};

 

  

 

 

4數據字典

表5-1 User用戶數據字典

序號

數據項

數據類型

長度

是否為鍵

01

User_ID

VARCHAR

11

02

Birth

VARCHAR

10

 

03

Address

VARCHAR

20

 

04

Mobile

VARCHAR

11

 

05

WeChat

VARCHAR

11

 

06

Reputation

VARCHAR

15

 

07

Hobby

VARCHAR

50

 

08

Wages

INTEGER

20

 

09

Job

VARCHAR

30

 

.

表5-2  Member會員數據字典

序號

數據項

數據類型

長度

是否為鍵

01

Member_ID

VARCHAR

11

02

Password

VARCHAR

50

 

03

User_name

VARCHAR

11

 

 

表5-3  Business商家數據字典

序號

數據項

數據類型

長度

是否為鍵

01

Business_ID

VARCHAR

11

02

Password

VARCHAR

50

 

03

User_name

VARCHAR

11

 

 

表5-4  Administrators管理員數據字典

序號

數據項

數據類型

長度

是否為鍵

01

Admin_ID

VARCHAR

11

02

Password

VARCHAR

50

 

03

User_name

VARCHAR

11

 

 

表5-5 Good商品數據字典

序號

數據項

數據類型

長度

是否為鍵

01

Good_ID

VARCHAR

11

02

Price

DOUBLE

5

 

03

Stock

VARCHAR

10

 

04

details

VARCHAR

100

 

 

表5-6 Commodity_type商品類型數據字典

序號

數據項

數據類型

長度

是否為鍵

01

Commodity_type_ID

VARCHAR

11

02

Life

VARCHAR

10

 

03

Fruits

VARCHAR

5

 

04

Delicious_food

VARCHAR

10

 

05

Drinks

VARCHAR

6

 

06

snacks

VARCHAR

10

 

07

office

VARCHAR

8

 

08

Stationery

VARCHAR

10

 

 

表5-7 Shopping_Cart購物車數據字典

序號

數據項

數據類型

長度

是否為鍵

01

Cart_ID

VARCHAR

11

02

Add_time

VARCHAR

20

 

03

Number

VARCHAR

100

 

04

Good

VARCHAR

20

 

05

Describe

VARCHAR

30

 

 

表5-8 Payment_type支付類型數據字典

序號

數據項

數據類型

長度

是否為鍵

01

Payment_type_ID

VARCHAR

11

02

WeChat

VARCHAR

11

 

03

Alipay

VARCHAR

11

 

 

表5-9 Payment_status支付狀態數據字典

序號

數據項

數據類型

長度

是否為鍵

01

Payment_status_ID

VARCHAR

11

02

Unpaid

VARCHAR

3

 

03

Paid

VARCHAR

3

 

 

表5-10 Order_type訂單類型數據字典

序號

數據項

數據類型

長度

是否為鍵

01

Order_type_ID

VARCHAR

11

02

Pending_payment

VARCHAR

3

 

03

Tobe_shipped

VARCHAR

3

 

04

Tobe_receivedGoods

VARCHAR

3

 

05

Tobe_commented

VARCHAR

3

 

 

表5-11 Order訂單數據字典

序號

數據項

數據類型

長度

是否為鍵

01

Order_ID

VARCHAR

11

02

Number

INTEGER

100

 

03

Total_price

DOUBLE

1000

 

04

Setup_time

VARCHAR

20

 

 

表5-12 Evaluate評價數據字典

序號

數據項

數據類型

長度

是否為鍵

01

Comment_ID

VARCHAR

11

02

Prefix_muber

VARCHAR

11

 

03

User

VARCHAR

11

 

04

content

VARCHAR

20

 

05

Suffix_muber

VARCHAR

11

 

 

表5-13  Punish違規處罰數據字典

序號

數據項

數據類型

長度

是否為鍵

01

Punish_ID

VARCHAR

11

02

Reputation_value

VARCHAR

3

 

03

Punish

VARCHAR

2

 

 

 

 

 

 

六、實驗總結

通過本實驗,可將相關的總結和經驗收獲分點總結如下:

1、在進行RQM設計時,本實驗按照系統角色的方式對系統的功能和需求進行了划分,各個角色下可以存在相同功能方法。其中,對於弱權限的類操作方法,可在數據庫模式定義中直接放到該目標類中。如:Good類對於三個不同的角色都具有商品展示、商品搜索和查看商品詳情的功能,所以不需要考慮不同角色調用該類時發生權限所屬的問題,直接將其放到Good類中。

2、 對於角色的強所屬權限而言,必須放到其角色類內部,如:對於Administrator角色,其具有至高權限,為了權限不發生錯亂而將添加會員、刪除會員和刪除商家等功能放到Administrator角色類中,但前提是方法輸入的參數必須為整個對象類目標。

3、 對於面向對象數據庫模式的設計,可以存在方法也可以不使用方法,那本實驗為何要使用自定義的功能方法呢?首先,本實驗是將后台數據庫數據通過以自定義方法的方式進行封裝,方便在前台設計時直接調用該方法,同時也大大節約了前台的數據計算量。

4、 基本熟悉了在面向對象數據庫設計過程中數據庫設計文檔的設計技巧和撰寫方法,以及面向對象數據庫設計的具體流程和設計環節。

5、 在本實驗的操作過程中,復習了學過的數據庫規范化,並利用了規范化對數據庫進行基本的關系模式的划分。

6、 初步把握了面向對象數據庫的概念模型設計與PDM設計的實現方法,以及數據庫的模型設計過程


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM