将已建好的概念模型,变成MySQL物理实现。
1.数据库设计的阶段和每阶段的任务; 2.概念模型; 3.逻辑模型及其与概念模型的关系; 4.在DBMS中的物理实现。
数据库的设计大致分为以下几个阶段: 需求分析 根据业务需求,确定应用系统所涉及的数据(信息),以及处理需 求,形成数据字典,包括数据结、数据结构、数据流、数据存储、数据处理过程等文档 概念结构设计 主要工作是对数据建模,对关系数据库应用系统而言,主要是用ER图描述数据及数据间的关系(当然,也有人使用UML类图)。ER图有两种表达方式,一种是陈氏ER图,最早由出生于台湾省高雄市的陈品山(Peter Chen,路易斯安那州立大学教授)提出,教科书主要讲授这种E-R图。图1用陈氏ER图表达了教科书中常用的学生选课系统的概念模型:
图1 学生选修课程
陈氏ER图很占空间,当系统中的实体和属性较多时,从每个代表实体的矩形扩散开去的椭圆形(代表属性)会使整个模型显得混乱、拥挤。于是有了后来的Crow's foot(乌鸦脚)式的E-R图。图2用Crow's foot ER图表达了学生与院系的关示。
图2 Crow's foot ER图
图2反映了院系与学生的一对多联系,两个实体的属性就列在各自实体名的下方。用一条两端带有标记的线连接两个实体,表达二者间的联系,联系名就写在线中间,就样很节省空间。请注意一对多联系多端的形状,很像乌鸦的脚,遂得名Crow's foot(尽管多数鸟类的脚都是这幅模样)。
逻辑结构设计 最主要的工作就是把ER图转换成关系模式。概念结构到逻辑结构 的转变是有成规的,它跟两个实体间的联系相关,教材已经讲得够多了。Crow's foot式的ER图,有一个好处是,在原图上稍加改动(比如把1端的主码直接添加到多端),就可以变成逻辑结构,再添上主码,外码,索引,并指明每个列在某个DBMS上的类型,很快就能变成物理模型,方便计算机自动创建数据库对象。图3就已经给出了每次个属性的数据类型,定义了外码。
图3 接近物理模式的Crow's foot模型
物理结构设计 物理结构设计的主要工作,是在逻辑结构的基础上,确定存储结构和存取方法,将所有的数据类型针对具体的DBMS确定化等。
实施与运维 在选定的DBMS上,创建数据对象,初始化数据,试运行,在不断调试过程中完善系统,并持续改进与维护。
大多数建模工具,如ERWIN, Navicat, Microsoft Visio, Draw.IO, MySQL Workbench等,都支持Crows' foot。Visio和draw.io还支持Chen's ER图。在上述工具中,只有Draw.IO和MySQL Workbench是免费的。ERWIN,Navicat和MySQL Workbench还支持reverse engineering,即逆向工程,根据已建好的数据库,逆向导出模型,不过通常是物理模型。Navicat支持继续逆向到逻辑模型和概念模型。基本上,在逆向工程的基础上,替换掉DMBS的具体数据类型,如把varchar(50)改成string,就是一个逻辑模型,将逻辑模型中所有的外码列去掉,就成了概念模型,概念模型可以不标注数据类型。但在生产环境中,多用软件表达模型,实际从概念模型开始就已开始标注通用的数据类型如:string,integer,float,datetime,boolean等。
本关的任务,是根据一个已建好的逻辑模型,完成MySQL的实现。逻辑ER图如图3所示。
图3 机票订票系统概念模型ER图
说明:这个图是用draw.io画的,在浏览器地址栏输入draw.io即可调出,不用安装任何软件。
这是一个机票订票系统,系统需要考虑以下实体: 1.用户(user) 用户分两类,普通用户可以订票,管理用户有权限维护和管理整个系统的运营。为简单起见,两类用户合并,用admin_tag标记区分。用户的属性(包括业务约束)有: 用户编号: user_id int 主码,自动增加 名字: firstname varchar(50) 不可为空 姓氏: lastname varchar(50) 不可为空 生日: dob date 不可为空 性别: sex char(1) 不可为空 邮箱: email varchar(50) 联系电话: phone varchar(30) 用户名: username varchar(20) 不可空,不可有重 密码: password char(32) 不可空 管理员标志: admin_tag tinyint 缺省值0(非管理员),不能空
2. 旅客(passenger) 用户登录系统不一定是替自己买票,所以用户和旅客信息是分开存储的。属性有: 旅客编号: passenger_id int 自增,主码 证件号码: id char(18) 不可空 不可重 名字:firstname varchar(50) 不可空 姓氏: lastname varchar(50) 不可空 邮箱:mail varchar(50) 电话: phone varchar(20) 不可空 性别: sex char(1) 不可空 生日: dob date
3.机场(airport) 有以下属性: 编号: airport_id int 自增,主码 国际民航组织编码:iata char(3) 不可空,全球唯一 国际航运协会编码: icao char(4) 不可空,全球唯一 机场名称: name varchar(50) 不可空,普通索引 所在城市: city varchar(50) 所在国家: country varchar(50) 纬度: latitude decimal(11,8) 经度: longitude decimal(11,8) 全球每个机场都有唯一IATA编码和ICAO编码,IATA为3个字符,ICAO为4个字符。例如首都机场的(IATA,ICAO)分别为(PEK,ZBAA),大兴机场为(PKX,ZBAD),天河机机场为(WUH,ZHHH)。在飞机登记牌上出发地和到达地均用IATA表示。为能在地图上显示机场位置,需要记录经纬度信息。
4.航空公司(airline) 有以下属性: 编号:airline_id int 自增,主码 名称:name varchar(30) 不可空 国际民航组织编码: iata char(2) 不可空,具全球唯一性 航空公司的IATA编码为2位,如东航为MU,国航为CA,南航为CZ等,航班号一般以所属航空公司的IATA码为前缀。
5.民航飞机(airplane) 有属性: 编号:airplane_id int 自增,主码 机型:type varchar(50) 不可空,如B737-300,A320-500等 座位: capacity smallint 不可空 标识: identifier varchar(50) 不可空
6.航班常规调度表(flightschedule) 舤班一般以周次安排,例如:每周两个班次,周一和周五。 有属性: 航班号: flight_no char(8) 主码 起飞时间: departure time 非空 到达时间: arrival time 非空 飞行时长: duration smalint 非空 周一:monday tinyint 缺省0 周二:tuesday tinyint 缺省0 周三:wednesday tinyint 缺省0 周四:thursday tinyint 缺省0 周五:friday tinyint 缺省0 周六:saturday tinyint 缺省0 周日:sunday tinyint 缺省0 飞行时长一般以分种计。
7.航班表(flight) 航班依航班常规调度表为基准安排。但调度表不是一成不变,也不是每个既定的航都实际起飞,也不总是按既定的时间起飞,所以实飞航班必须单独安排并记录。 要记录的信息有: 飞行编号:flight_id int 自增,主码 起飞时间: departure datetime 非空 到达时间: arrival datetime 非空 飞行时长:duration smallint 非空 有的系统还会实时显示航班经纬度和高度位置,这里我们作了简化,去掉了实时飞行信息。
8.机票(ticket) 用户可替自己或其亲友购买某个航班的机票。机票的属性有: 票号:ticket_id int 自增,主码 坐位号:seat char(4) 价格:price decimal(10,2) 不能空
9.实体间的联系 实体间的联系都清楚地标注在ER图中:
请根据上述信息和所给ER图,给出在MySQL实现flight_booking的语句,包括建库,建表,创建主码,外码,索引,指定缺省,不能为空等约束。所有索引采用BTREE。所有约束的名字不作要求。所有的外码与主码同名。但有两处例外: 计划航班和飞行航班都涉及出发机场和到达机场,外码与主码同名会导致同一表有两个同名列。故这两处外码例外处理:出发机场命名为from,到达机场命名为to。
注意:所有的表名字和列名,都没有大写字母。列名存在与关键字同名的情形,请妥善处理。你有可能不能一次通过评测,请考虑你的代码要反复修改再运行的情形。
# 请将你实现flight_booking数据库的语句写在下方:
drop database if exists flight_booking;
create database flight_booking;
use flight_booking;
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
DROP TABLE IF EXISTS airline ; CREATE TABLE airline ( airline_id int NOT NULL AUTO_INCREMENT, name varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, iata char(2) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, airport_id int NOT NULL, PRIMARY KEY ( airline_id ) USING BTREE, UNIQUE INDEX iata_unq ( iata ) USING BTREE, INDEX base_airport_idx ( airport_id ) USING BTREE, CONSTRAINT airline_ibfk_1 FOREIGN KEY ( airport_id ) REFERENCES airport ( airport_id ) ON DELETE RESTRICT ON UPDATE RESTRICT ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;
DROP TABLE IF EXISTS airplane ; CREATE TABLE airplane ( airplane_id int(0) NOT NULL AUTO_INCREMENT, type varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, capacity smallint(0) NOT NULL, identifier varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, airline_id int(0) NOT NULL,
PRIMARY KEY ( airplane_id ) USING BTREE, INDEX airplane_ibfk_1 ( airline_id ) USING BTREE, CONSTRAINT airplane_ibfk_1 FOREIGN KEY ( airline_id ) REFERENCES airline ( airline_id ) ON DELETE RESTRICT ON UPDATE RESTRICT ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;
DROP TABLE IF EXISTS airport ; CREATE TABLE airport ( airport_id int NOT NULL AUTO_INCREMENT, iata char(3) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, icao char(4) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, name varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, city varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, country varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, latitude decimal(11, 8) NULL DEFAULT NULL, longitude decimal(11, 8) NULL DEFAULT NULL, PRIMARY KEY ( airport_id ) USING BTREE, UNIQUE INDEX iata_unq ( iata ) USING BTREE, UNIQUE INDEX icao_unq ( icao ) USING BTREE, INDEX name_idx ( name ) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;
DROP TABLE IF EXISTS passenger ; CREATE TABLE passenger ( passenger_id int NOT NULL AUTO_INCREMENT, id char(18) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, firstname varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, lastname varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, mail varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, phone varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, sex char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, dob date NULL DEFAULT NULL, PRIMARY KEY ( passenger_id ) USING BTREE, UNIQUE INDEX id_unq ( id ) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;
DROP TABLE IF EXISTS ticket ; CREATE TABLE ticket ( ticket_id int NOT NULL AUTO_INCREMENT, flight_id int NOT NULL, seat char(4) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, passenger_id int NOT NULL, price decimal(10, 2) NOT NULL, user_id int NOT NULL, PRIMARY KEY ( ticket_id ) USING BTREE, INDEX flight_idx ( flight_id ) USING BTREE, INDEX passenger_idx ( passenger_id ) USING BTREE, INDEX ticket_ibfk_3 ( user_id ) USING BTREE, CONSTRAINT ticket_ibfk_1 FOREIGN KEY ( flight_id ) REFERENCES flight ( flight_id ) ON DELETE RESTRICT ON UPDATE RESTRICT, CONSTRAINT ticket_ibfk_2 FOREIGN KEY ( passenger_id ) REFERENCES passenger ( passenger_id ) ON DELETE RESTRICT ON UPDATE RESTRICT, CONSTRAINT ticket_ibfk_3 FOREIGN KEY ( user_id ) REFERENCES user ( user_id ) ON DELETE RESTRICT ON UPDATE RESTRICT ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;
DROP TABLE IF EXISTS user ; CREATE TABLE user ( user_id int NOT NULL AUTO_INCREMENT, firstname varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, lastname varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, dob date NOT NULL, sex char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, email varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
phone varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, username varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, password char(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, admin_tag tinyint NOT NULL DEFAULT 0, PRIMARY KEY ( user_id ) USING BTREE, UNIQUE INDEX user_unq ( username ) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic; SET FOREIGN_KEY_CHECKS = 1;
DROP TABLE IF EXISTS flightschedule ; CREATE TABLE flightschedule ( flight_no char(8) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, `from` int NOT NULL, `to` int NOT NULL, departure time NOT NULL, arrival time NOT NULL, duration smallint NOT NULL,
airline_id int NOT NULL, monday tinyint NULL DEFAULT 0,
tuesday tinyint NULL DEFAULT 0,
wednesday tinyint NULL DEFAULT 0,
thursday tinyint NULL DEFAULT 0, friday tinyint NULL DEFAULT 0, saturday tinyint NULL DEFAULT 0, sunday tinyint NULL DEFAULT 0,
PRIMARY KEY ( flight_no ) USING BTREE,
INDEX from_idx ( `from` ) USING BTREE,
INDEX to_idx ( `to` ) USING BTREE,
INDEX airline_idx ( airline_id ) USING BTREE,
CONSTRAINT flightschedule_ibfk_1 FOREIGN KEY ( `from` ) REFERENCES airport ( airport_id ) ON DELETE RESTRICT ON UPDATE RESTRICT, CONSTRAINT flightschedule_ibfk_2 FOREIGN KEY ( `to` ) REFERENCES airport ( airport_id ) ON DELETE RESTRICT ON UPDATE RESTRICT, CONSTRAINT flightschedule_ibfk_3 FOREIGN KEY ( airline_id ) REFERENCES airline ( airline_id ) ON DELETE RESTRICT ON UPDATE RESTRICT ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;
DROP TABLE IF EXISTS flight ; CREATE TABLE flight ( flight_id int NOT NULL AUTO_INCREMENT, flight_no char(8) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, `from` int NOT NULL, `to` int NOT NULL,
departure datetime NOT NULL, arrival datetime NOT NULL, duration smallint NOT NULL, airline_id int NOT NULL, airplane_id int NOT NULL,
PRIMARY KEY ( flight_id ) USING BTREE,
INDEX from_idx ( `from` ) USING BTREE,
INDEX to_idx ( `to` ) USING BTREE,
-- INDEX departure_idx ( departure ) USING BTREE,
-- INDEX arrivals_idx ( arrival ) USING BTREE,
INDEX airline_idx ( airline_id ) USING BTREE,
INDEX airplane_idx ( airplane_id ) USING BTREE,
INDEX flightno ( flight_no ) USING BTREE,
CONSTRAINT flight_ibfk_1 FOREIGN KEY ( `from` ) REFERENCES airport ( airport_id ) ON DELETE RESTRICT ON UPDATE RESTRICT, CONSTRAINT flight_ibfk_2 FOREIGN KEY ( `to` ) REFERENCES airport ( airport_id ) ON DELETE RESTRICT ON UPDATE RESTRICT, CONSTRAINT flight_ibfk_3 FOREIGN KEY ( airline_id ) REFERENCES airline ( airline_id ) ON DELETE RESTRICT ON UPDATE RESTRICT, CONSTRAINT flight_ibfk_4 FOREIGN KEY ( airplane_id ) REFERENCES airplane ( airplane_id ) ON DELETE RESTRICT ON UPDATE RESTRICT, CONSTRAINT flight_ibfk_5 FOREIGN KEY ( flight_no ) REFERENCES flightschedule ( flight_no ) ON DELETE RESTRICT ON UPDATE RESTRICT ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;
SET FOREIGN_KEY_CHECKS = 1;
设计一个影院管理系统。影院对当前的放映厅和电影进行排片,顾客到来后,可以购买任一排场的电影票,进入对应放映厅观看。系统中有以下实体集:
如果用建模工具建模,请将模型另存为图片,如果手工画图,请拍照,请在图片上签名,或加上电子签名。图片文件请命名为ersolution.jpg。并将图片文件上传至网上(比如你的github或gitee上的开源项目中,或任何可以直接访问到的地方)。将访问该图片的URL填写在右侧编辑器的第2行,URL应直接定位到该图片(而不是在某个网页里能找到该图片),即点击URL即直接打开图片。
然后,在文件编辑器里写出关系模式。 关系模式的表达格式参考: 学生(学号,姓名,性别,出生日期,院系id),主码:(学号); 外码:(院系id) 不要使用纯中文符号。
请给出ER图文件存放的URL:
https://free.wzznft.com/i/2023/05/18/ersolution.jpg
以下给出关系模式:
电影(movie)(movie_ID, title, type, runtime, release_date, director, starring), 主码:(movie_ID)
顾客(customer)(c_ID, name, phone), 主码:(c_ID)
放映厅(hall)(hall_ID, mode, capacity, location), 主码:(hall_ID)
排场(schedule)(schedule_ID, date, time, price, number, hall_ID, movie_ID), 主码:(schedule_ID),外码:(hall_ID) 参照放映厅(hall),(movie_ID) 参照电影(movie)
电影票(ticket)(ticket_ID, seat_num, c_ID, schedule_ID), 主码:(ticket_ID),外码:(c_ID) 参照顾客(customer),(schedule_ID) 参照排场(schedule)
前往 DB2022Spring: HUST 数据库系统原理实验 2022年春季 下载实训所需要的资料包,或者仅下载本文件: https://gitee.com/kylin8575543/db2022-spring/raw/master/rbac.mwb
这是一个已经建好的模型文件rbac.mwb,请利用MySQL Workbench建模模块中的Forward engineering功能,自动导出SQL脚本。
线下处理完毕后,请把脚本粘贴到代码文件中。
# 请将利用MySQL Workbench软件的Modeling工具,经forward engineering 导出的创建schema的SQL语句完整粘到此处:
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='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
CREATE SCHEMA IF NOT EXISTS rbac DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci ;
USE rbac ;
CREATE TABLE IF NOT EXISTS rbac . aprole (
RoleNo INT NOT NULL COMMENT '角色编号',
RoleName CHAR(20) NOT NULL COMMENT '角色名',
Comment VARCHAR(50) NULL DEFAULT NULL COMMENT '角色描述',
Status SMALLINT NULL DEFAULT NULL COMMENT '角色状态',
PRIMARY KEY ( RoleNo ))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_0900_ai_ci
COMMENT = '角色表';
CREATE TABLE IF NOT EXISTS rbac . apuser(
UserID CHAR(8) NOT NULL COMMENT '用户工号',
UserName CHAR(8) NULL DEFAULT NULL COMMENT '用户姓名',
Comment VARCHAR(50) NULL DEFAULT NULL COMMENT '用户描述',
PassWord CHAR(32) NULL DEFAULT NULL COMMENT '口令',
Status SMALLINT NULL DEFAULT NULL COMMENT '状态',
PRIMARY KEY ( UserID ),
UNIQUE INDEX ind_username ( UserName ASC) VISIBLE)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_0900_ai_ci
COMMENT = '用户表';
CREATE TABLE IF NOT EXISTS rbac . apgroup (
UserID CHAR(8) NOT NULL COMMENT '用户编号',
RoleNo INT NOT NULL COMMENT '角色编号',
PRIMARY KEY ( UserID , RoleNo ),
INDEX FK_apGroup_apRole ( RoleNo ASC) VISIBLE,
CONSTRAINT FK_apGroup_apRole FOREIGN KEY ( RoleNo ) REFERENCES rbac . aprole ( RoleNo ),
CONSTRAINT FK_apGroup_apUser FOREIGN KEY ( UserID ) REFERENCES rbac . apuser ( UserID ))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_0900_ai_ci
COMMENT = '角色分配表';
CREATE TABLE IF NOT EXISTS rbac . apmodule (
ModNo BIGINT NOT NULL COMMENT '模块编号',
ModID CHAR(10) NULL DEFAULT NULL COMMENT '系统或模块的代码',
ModName CHAR(20) NULL DEFAULT NULL COMMENT '系统或模块的名称', PRIMARY KEY ( ModNo ))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_0900_ai_ci
COMMENT = '功能模块登记表';
CREATE TABLE IF NOT EXISTS rbac . apright (
RoleNo INT NOT NULL COMMENT '角色编号',
ModNo BIGINT NOT NULL COMMENT '模块编号',
PRIMARY KEY ( RoleNo , ModNo ),
INDEX FK_apRight_apModule ( ModNo ASC) VISIBLE,
CONSTRAINT FK_apRight_apModule
FOREIGN KEY ( ModNo )
REFERENCES rbac . apmodule ( ModNo ),
CONSTRAINT FK_apRight_apRole
FOREIGN KEY ( RoleNo )
REFERENCES rbac . aprole ( RoleNo ))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_0900_ai_ci
COMMENT = '角色权限表';
SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;