面向对象数据库设计与应用 01 - 数据库建模

2021年09月15日 阅读数:9
这篇文章主要向大家介绍面向对象数据库设计与应用 01 - 数据库建模,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

1、实验目的

  1. 掌握在面向对象数据库设计过程当中数据库设计文档的设计技巧和撰写方法,熟悉把握面向对象数据库设计的具体流程和设计环节。
  2. 在本实验的操做过程当中,复习学过的数据库规范化,并利用规范化对数据库进行关系模式的划分。
  3. 重点把握面向对象数据库的概念模型设计与PDM设计,以及数据库的模型设计,即要求掌握数据库逻辑设计阶段所要运用的理论知识。
  4. 能从实验背景中分析出项目的需求说明,同时能使用RQM对需求说明进行简单的描述,提升对系统设计的分析能力。

 

 

2、实验内容

实验背景导入:数据库

某公司接到一个网购系统的项目,任命你作该任务的数据库设计师,对网购系统进行数据库总体的设计。Webshop就是一个B2C模式的电子商城,该电子商务系统可以实现包括前台用户和后台管理两大部分。安全

前台购物系统包括会员注册、会员登陆、商品展现、商品搜索、购物车、产生订单和会员资料修改等等功能。后台管理系统包括管理用户、维护商品库、处理订单、维护会员信息和其余管理功能。app

根据上述实验背景的系统功能描述和实际业务分析,进行电子商城的数据库相关设计,要求完成如下实验需求:数据库设计

①需求分析说明书。在数据库设计初期,首先进行系统功能需求说明书编写。ui

②OR模型设计。进入逻辑设计阶段,进行实体关系模型的设计,将现实的系统通过抽象后经过E-R模型表现。lua

③由OR模型转变成面向对象模型。将上述完成的CDM转化为PDM模型。spa

④数据字典编写。进入数据字典的编写,对系统相关实体的属性所取的类型肯定,并以文档的形式进行编写保存。设计

 

 

3、实验平台

软件:POWER DESIGNER,WORDrest

   

 

4、实验步骤

①需求分析说明书。code

进行系统功能需求说明书编写。本实验使用POWER DESIGNER的Requirements Model进行功能需求说明,其中按照系统功能的角色分类进行描述说明。角色分别为:Admin_Model、Business_Model和Consumer_Model ,具体角色的功能详见RQM设计结果,完成系统初步的功能需求说明文档。关于POWER DESIGNER的具体使用方法这里不详述。

②OR模型设计。

逻辑设计阶段,需进行实体关系模型的设计,本实验利用POWER DESIGNER的Free Model,将从①需求分析说明书中抽象出具体的实体对象,并依据抽象出的实体对象设计相关的对象间关系,最终完成实体关系模型的设计。

③由OR模型转变成面向对象模型。使用面向对象数据库模式定义语言,将上述所设计的实体关系模型进行转换模型的转换。

④数据字典编写。

    在对数据字典进行编写时,以表的形式对系统相关实体的属性和所取的类型进行记录和保存,其中表头包括:序号、数据项、数据类型、长度和是否为键,本实验则按照类的形式分别对其进行描述,同时以文档的形式进行编写保存,最终完成数据字典的说明文档。

 

 

5、运行结果

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

 

 

 

 

 

 

6、实验总结

经过本实验,可将相关的总结和经验收获分点总结以下:

一、在进行RQM设计时,本实验按照系统角色的方式对系统的功能和需求进行了划分,各个角色下能够存在相同功能方法。其中,对于弱权限的类操做方法,可在数据库模式定义中直接放到该目标类中。如:Good类对于三个不一样的角色都具备商品展现、商品搜索和查看商品详情的功能,因此不须要考虑不一样角色调用该类时发生权限所属的问题,直接将其放到Good类中。

二、 对于角色的强所属权限而言,必须放到其角色类内部,如:对于Administrator角色,其具备至高权限,为了权限不发生错乱而将添加会员、删除会员和删除商家等功能放到Administrator角色类中,但前提是方法输入的参数必须为整个对象类目标。

三、 对于面向对象数据库模式的设计,能够存在方法也能够不使用方法,那本实验为什么要使用自定义的功能方法呢?首先,本实验是将后台数据库数据经过以自定义方法的方式进行封装,方便在前台设计时直接调用该方法,同时也大大节约了前台的数据计算量。

四、 基本熟悉了在面向对象数据库设计过程当中数据库设计文档的设计技巧和撰写方法,以及面向对象数据库设计的具体流程和设计环节。

五、 在本实验的操做过程当中,复习了学过的数据库规范化,并利用了规范化对数据库进行基本的关系模式的划分。

六、 初步把握了面向对象数据库的概念模型设计与PDM设计的实现方法,以及数据库的模型设计过程