a.阅读 Asg_RH 文档,按用例构建领域模型。
- 按 Task2 要求,请使用工具 UMLet,截图格式务必是 png 并控制尺寸。
- 说明:请不要受 PCMEF 层次结构影响。你需要识别实体(E)和 中介实体(M,也称状态实体)
– 在单页面应用(如 vue)中,E 一般与数据库构建有关, M 一般与 store 模式 有关
- – 在 java web 应用中,E 一般与数据库构建有关, M 一般与 session 有关
b. 数据库建模(E-R 模型)
给出系统的 E-R 模型(数据逻辑模型):(使用的建模工具:MySQL Workbench)
- 按 Task 3 要求,给出系统的 E-R 模型(数据逻辑模型)
- 建模工具 PowerDesigner(简称PD) 或开源工具 OpenSystemArchitect
- 不负责的链接 http://www.cnblogs.com/mcgrady/archive/2013/05/25/3098588.html
- 导出 Mysql 物理数据库的脚本
创建了下列这些表:
customer
reservation
payment
hotel
room
shopping basket
它们之间的联系如下:
![](https://i-blog.csdnimg.cn/blog_migrate/42ca7b988f0a7cb59a0046c01b8fe8bb.png)
导出脚本
CREATE TABLE `reservation` (
`reservationID` int(11) NOT NULL,
`city` varchar(255) NULL,
`check_in_date` datetime NULL,
`check_out_date` datetime NULL,
`number_of_nights` int NULL DEFAULT 1,
`number_of_persons` int NULL,
`customerID` int(11) NULL,
`hotelID` int(11) NULL,
`roomID` int(11) NULL,
`paymentID` int(11) NULL,
PRIMARY KEY (`reservationID`)
);
CREATE TABLE `customer` (
`customerID` int(11) NOT NULL,
`userName` varchar(255) NULL,
`password` varchar(255) NULL,
PRIMARY KEY (`customerID`)
);
CREATE TABLE `payment` (
`paymentID` int(11) NOT NULL,
`amount` double(255,0) NULL,
`credit card type` varchar(255) NULL,
`card numbers` int NULL,
`card security code` varchar(255) NULL,
`customerID` int(11) NULL,
PRIMARY KEY (`paymentID`)
);
CREATE TABLE `shopping basket` (
`baeketID` int(11) NOT NULL,
`itemID` int(11) NULL,
`itemNum` int NULL,
`ownerID` int(11) NULL,
PRIMARY KEY (`baeketID`)
);
CREATE TABLE `hotel` (
`hotel_id` int(11) NOT NULL,
`city` varchar(255) NULL,
`location` varchar(255) NULL,
`name` varchar(255) NULL,
`star rating` integer(255) NULL,
`romNum` int NULL,
PRIMARY KEY (`hotel_id`)
);
CREATE TABLE `room` (
`roomID` int(11) NOT NULL,
`type` varchar(255) NULL,
`price` decimal(10,2) NULL,
`availability` varchar(255) NULL,
`hotel_id` int(11) NULL,
PRIMARY KEY (`roomID`)
);
ALTER TABLE `payment` ADD CONSTRAINT `fk_payment` FOREIGN KEY (`customerID`) REFERENCES `customer` (`customerID`);
ALTER TABLE `reservation` ADD CONSTRAINT `fk_reservation` FOREIGN KEY (`customerID`) REFERENCES `customer` (`customerID`);
ALTER TABLE `shopping basket` ADD CONSTRAINT `fk_shopping basket` FOREIGN KEY (`itemID`) REFERENCES `reservation` (`reservationID`);
ALTER TABLE `room` ADD CONSTRAINT `fk_room` FOREIGN KEY (`hotel_id`) REFERENCES `hotel` (`hotel_id`);
ALTER TABLE `reservation` ADD CONSTRAINT `fk_reservation_1` FOREIGN KEY (`hotelID`) REFERENCES `hotel` (`hotel_id`);
ALTER TABLE `shopping basket` ADD CONSTRAINT `fk_shopping basket_1` FOREIGN KEY (`ownerID`) REFERENCES `customer` (`customerID`);
ALTER TABLE `reservation` ADD CONSTRAINT `fk_reservation_2` FOREIGN KEY (`roomID`) REFERENCES `room` (`roomID`);
ALTER TABLE `reservation` ADD CONSTRAINT `fk_reservation_3` FOREIGN KEY (`paymentID`) REFERENCES `payment` (`paymentID`);
简单叙说数据库逻辑模型与领域模型的异同:
领域建模:专注于某一个功能模块、或者说是围绕业务功能进行。
主要作用:围绕功能业务进行操作
优势:操作流程代码清晰,不紊乱其他业务的操作
劣势:代码冗余大,重用性低,维护成本高
如:会员消费余额、会员充值余额!这是两个业务功能,互不牵扯,所以需要对会员表多次操作
数据建模:专注于某一个数据库表(javaBean)操作
主要作用:围绕数据库表(javaBean)
优势:重用性高,代码冗余小,维护成本低
劣势:业务需求流程复杂,功能紊乱
如:会员消费余额、会员充值余额!这是两个业务功能,互不牵扯,只需要操作一个会员业务,其他的牵扯到的会员业务都会随之改变!感觉牵一发而动全身!