系统分析与设计作业4

领域建模

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

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

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

    用MySQL Workbench构建的系统的 E-R 模型(数据逻辑模型)如下:

    导出脚本:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    -- MySQL Script generated by MySQL Workbench  
    -- Mon Apr 01:08:21 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` INT NOT NULL,
    `address` VARCHAR(45) NOT NULL,
    `star level` INT NOT NULL,
    PRIMARY KEY (`idHotel`),
    UNIQUE INDEX `name_UNIQUE` (`name` ASC))
    ENGINE = InnoDB;


    -- -----------------------------------------------------
    -- Table `mydb`.`Customer`
    -- -----------------------------------------------------
    CREATE TABLE IF NOT EXISTS `mydb`.`Customer` (
    `identity number` INT NOT NULL,
    `name` VARCHAR(45) GENERATED ALWAYS AS () VIRTUAL,
    PRIMARY KEY (`identity number`),
    UNIQUE INDEX `name_UNIQUE` (`name` ASC))
    ENGINE = InnoDB;


    -- -----------------------------------------------------
    -- Table `mydb`.`Reservation`
    -- -----------------------------------------------------
    CREATE TABLE IF NOT EXISTS `mydb`.`Reservation` (
    `idReservation` INT NOT NULL,
    `hotel name` VARCHAR(45) NOT NULL,
    `room type` VARCHAR(45) NOT NULL,
    `check in date` DATE NOT NULL,
    `check out date` DATE NOT NULL,
    `total price` VARCHAR(45) GENERATED ALWAYS AS () VIRTUAL,
    `Customer_idCustomer` INT NOT NULL,
    `Hotel_idHotel` INT NOT NULL,
    PRIMARY KEY (`idReservation`),
    UNIQUE INDEX `hotel name_UNIQUE` (`hotel name` ASC),
    INDEX `_idx` (`Customer_idCustomer` ASC),
    INDEX `Hotel_idHotel_idx` (`Hotel_idHotel` ASC),
    CONSTRAINT `idCustomer`
    FOREIGN KEY (`Customer_idCustomer`)
    REFERENCES `mydb`.`Customer` (`identity number`)
    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,
    `type` VARCHAR(45) NOT NULL,
    `price` INT NOT NULL,
    `Hotel_idHotel` INT NOT NULL,
    PRIMARY KEY (`idRoom`),
    INDEX `idHotel_idx` (`Hotel_idHotel` ASC),
    CONSTRAINT `idHotel`
    FOREIGN KEY (`Hotel_idHotel`)
    REFERENCES `mydb`.`Hotel` (`idHotel`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
    ENGINE = InnoDB;


    -- -----------------------------------------------------
    -- Table `mydb`.`CreditCard`
    -- -----------------------------------------------------
    CREATE TABLE IF NOT EXISTS `mydb`.`CreditCard` (
    `idCreditCard` INT NOT NULL,
    `type` VARCHAR(45) NOT NULL,
    `idCustomer` INT NOT NULL,
    PRIMARY KEY (`idCreditCard`),
    INDEX `idCustomer_idx` (`idCustomer` ASC),
    CONSTRAINT `idCustomer`
    FOREIGN KEY (`idCustomer`)
    REFERENCES `mydb`.`Customer` (`name`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
    ENGINE = InnoDB;


    -- -----------------------------------------------------
    -- Table `mydb`.`Payment`
    -- -----------------------------------------------------
    CREATE TABLE IF NOT EXISTS `mydb`.`Payment` (
    `idPayment` INT NOT NULL,
    `total price` INT NOT NULL,
    `CreditCard_id` INT NOT NULL,
    `Revervation_idReservation` INT NOT NULL,
    PRIMARY KEY (`idPayment`),
    INDEX `idReservation_idx` (`Revervation_idReservation` ASC),
    INDEX `idCreditCard_idx` (`CreditCard_id` ASC),
    CONSTRAINT `idReservation`
    FOREIGN KEY (`Revervation_idReservation`)
    REFERENCES `mydb`.`Reservation` (`hotel name`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
    CONSTRAINT `idCreditCard`
    FOREIGN KEY (`CreditCard_id`)
    REFERENCES `mydb`.`CreditCard` (`idCreditCard`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
    ENGINE = InnoDB;


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

    数据库逻辑模型和领域模型的异同:

    • 领域模型:领域模型是对领域内的概念类或现实世界中对象的可视化表示。又称概念模型、领域对象模型、分析对象模型。它专注于分析问题领域本身,发掘重要的业务领域概念,并建立业务领域概念之间的关系。
    • 数据库逻辑模型:对数据库结构的表示,是对概念模型的具体化,是系统设计与开发的一部分。
    • 相同点:领域建模和数据库建模都是通过类或实体、属性、关联构建的,表示形式很相似。
    • 不同点:领域模型是在了解用户需求后提出的一些概念性的东西,而数据库逻辑模型将其具体到数据存储类型。