Homework5 of Software-System-Analysis-and-Design

1. 阅读 Asg_RH 文档,按用例构建领域模型。

  • 按 Task2 要求,请使用工具 UMLet,截图格式务必是 png 并控制尺寸
  • 说明:请不要受 PCMEF 层次结构影响。你需要识别实体(E)和 中介实体(M,也称状态实体)
    • 在单页面应用(如 vue)中,E 一般与数据库构建有关, M 一般与 store 模式有关
    • 在 java web 应用中,E 一般与数据库构建有关, M 一般与 session 有关

建模结果如下: Asg_RH_UML

2. 数据库建模(E-R 模型)

  • 按 Task 3 要求,给出系统的 E-R 模型(数据逻辑模型) 建模结果如下: Asg_RH_UML

  • 导出 Mysql 物理数据库的脚本如下:

-- MySQL Script generated by MySQL Workbench
-- Thu May 10 00:46:58 2018
-- Model: New Model    Version: 1.0
-- MySQL Workbench Forward Engineering

SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';

-- -----------------------------------------------------
-- Schema mydb
-- -----------------------------------------------------

-- -----------------------------------------------------
-- Schema mydb
-- -----------------------------------------------------
CREATE SCHEMA IF NOT EXISTS `mydb` DEFAULT CHARACTER SET utf8 ;
USE `mydb` ;

-- -----------------------------------------------------
-- Table `mydb`.`Hotel`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`Hotel` (
  `idHotel` INT NOT NULL,
  `name` VARCHAR(45) NULL,
  `price` VARCHAR(45) NULL,
  `date` VARCHAR(45) NULL,
  `location` VARCHAR(45) NULL,
  `level` INT NULL,
  PRIMARY KEY (`idHotel`))
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `mydb`.`Customer`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`Customer` (
  `idCustomer` INT NOT NULL,
  `usename` VARCHAR(45) NULL,
  `password` VARCHAR(45) NULL,
  `Hotel_idHotel` INT NOT NULL,
  PRIMARY KEY (`idCustomer`),
  INDEX `Hotel_idHotel_idx` (`Hotel_idHotel` ASC),
  CONSTRAINT `Hotel_idHotel`
    FOREIGN KEY (`Hotel_idHotel`)
    REFERENCES `mydb`.`Hotel` (`idHotel`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `mydb`.`Reservation`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`Reservation` (
  `idReservation` INT NOT NULL,
  `hotel` VARCHAR(45) NULL,
  `roomType` VARCHAR(45) NULL,
  `check_in&check_out date` VARCHAR(45) NULL,
  `service` VARCHAR(45) NULL,
  `Customer_idCustomer` INT NOT NULL,
  `Hotel_idHotel` INT NOT NULL,
  PRIMARY KEY (`idReservation`),
  INDEX `idCustomer_idx` (`Customer_idCustomer` ASC),
  INDEX `idHotel_idx` (`Hotel_idHotel` ASC),
  CONSTRAINT `idCustomer`
    FOREIGN KEY (`Customer_idCustomer`)
    REFERENCES `mydb`.`Customer` (`idCustomer`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `idHotel`
    FOREIGN KEY (`Hotel_idHotel`)
    REFERENCES `mydb`.`Hotel` (`idHotel`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `mydb`.`Room`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`Room` (
  `idRoom` INT NOT NULL,
  `roomType` VARCHAR(45) NULL,
  `price` VARCHAR(45) NULL,
  `capacity` INT NULL,
  `Resevation_idReservation` INT NOT NULL,
  `Hotel_idHotel` INT NOT NULL,
  PRIMARY KEY (`idRoom`),
  INDEX `idReservation_idx` (`Resevation_idReservation` ASC),
  INDEX `idHotel_idx` (`Hotel_idHotel` ASC),
  CONSTRAINT `idReservation`
    FOREIGN KEY (`Resevation_idReservation`)
    REFERENCES `mydb`.`Reservation` (`idReservation`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `idHotel`
    FOREIGN KEY (`Hotel_idHotel`)
    REFERENCES `mydb`.`Hotel` (`idHotel`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `mydb`.`Pay`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`Pay` (
  `idPay` INT NOT NULL,
  `balance` INT NULL,
  `creditcard` VARCHAR(45) NULL,
  `Customer_idCustomer` INT NOT NULL,
  `Reservation_idReservation` INT NOT NULL,
  PRIMARY KEY (`idPay`),
  INDEX `Customer_idx` (`Customer_idCustomer` ASC),
  INDEX `Reservation_idx` (`Reservation_idReservation` ASC),
  CONSTRAINT `Customer`
    FOREIGN KEY (`Customer_idCustomer`)
    REFERENCES `mydb`.`Customer` (`idCustomer`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `Reservation`
    FOREIGN KEY (`Reservation_idReservation`)
    REFERENCES `mydb`.`Reservation` (`idReservation`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;

USE `mydb` ;

-- -----------------------------------------------------
-- Placeholder table for view `mydb`.`view1`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`view1` (`id` INT);

-- -----------------------------------------------------
-- View `mydb`.`view1`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `mydb`.`view1`;
USE `mydb`;


SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;

  • 简单叙说数据库逻辑模型与领域模型的异同

    • 两者都是用于描述实体之间的关系的  
    • 逻辑模型是将概念模型转化为具体的数据模型的过程,即按照概念结构设计阶段建立的基本E-R图,按选定的管理系统软件支持的数据模型(层次、网状、关系、面向对象),转换成相应的逻辑模型。这种转换要符合关系数据模型的原则。
    • 领域模型是描述业务用例实现的对象模型。该模型为产生预期效果确定了业务人员以及他们处理和使用的对象之间应该具有的静态和动态关系。它注重业务中承担的角色及其当前职责。这些模型类的对象组合在一起可以执行所有的业务用例。
    • 数据库模型更具体,有由领域模型中关系得到的具体表间关系、也有每个属性的具体类型等,领域模型更关注整体