数据库表关系
视频
设计思路与核心细节
项目并非简单的 CRUD 堆砌,而是典型的“高并发微服务架构”下的数据库设计范本。其设计核心在于性能优先、数据隔离、以及对分库分表场景的深度适配。
一、 核心设计思路 (Macro Design Strategy)
1. 垂直拆分:一服务一库 (Microservice Isolation)
- 思路:遵循微服务架构原则,数据的所有权归属于特定的服务。
- 落地:
- 用户服务 ->
damai_user库 - 节目服务 ->
damai_program库 - 订单服务 ->
damai_order库 - 支付服务 ->
damai_pay库
- 用户服务 ->
- 价值:避免跨服务直接连库查询(这是微服务大忌),强制通过 RPC 接口调用,降低耦合度。
2. 水平拆分:分库分表 (Sharding Strategy)
- 思路:针对数据量极大的表(如订单、用户),单表无法承载海量数据,必须进行水平切分。
- 落地:项目采用了“2库 x 4表”的策略(如
damai_order_0,damai_order_1)。 - 关键点:学习时不需要分出 32 个库这么夸张,只要配置好了 ShardingSphere,从 2 个库扩展到 16 个库只是修改配置文件的分片规则而已,核心是为什么掌握分片原理就能很容易实现分库分表?。
3. 读写分离与反范式设计 (Denormalization)
- 思路:为了应对高并发查询,牺牲空间换时间,打破数据库范式(3NF),进行适当的数据冗余。
- 落地(典型案例):订单表 (
d_order) 冗余了大量节目信息。- 现象:
d_order表中不仅存了program_id,还存了program_title(标题)、program_place(地点)、program_show_time(演出时间) 等。 - 原因:用户查看订单列表是高频操作。如果不冗余,查询订单时必须远程调用节目服务(RPC)或跨库 Join,这将导致严重的性能瓶颈。冗余后,单表查询即可出结果,效率极高。
- 现象:
二、 极具价值的处理细节 (Implementation Details)
1. 解决分库分表后的“读扩散”问题
- 痛点:用户表按
user_id分片。但用户登录时,往往是用 手机号 或 邮箱 登录,此时不知道user_id,就不知道去哪个分片查,会导致全库扫描(读扩散)。 - 神来之笔:设计了
d_user_mobile(手机号表) 和d_user_email(邮箱表)。- 这两张表不做分片(或按手机号分片),专门用来建立
手机号 -> user_id的映射。 - 流程:登录 -> 查手机表拿到 ID -> 根据 ID 路由到具体的分片查用户详情。
- 这两张表不做分片(或按手机号分片),专门用来建立
2. 字段设计的“基建标准”
- 强制字段:每张表必须包含
id(主键)、create_time(创建时间)、edit_time(编辑时间)、status(逻辑删除/状态)。这是企业级开发的硬性规范,用于审计和数据追踪。 - 枚举映射注释:在 SQL 建表语句的
COMMENT中,明确写出状态码的含义(如1:未支付 2:已取消)。这比单独的文档更有效,能防止代码中的枚举定义与数据库状态不一致。
3. 安全与渠道隔离
- 敏感数据加密:用户表中的
id_number(身份证)、mobile、address等隐私字段,在入库前全部加密存储,防止脱库泄露。 - 渠道隔离 (
d_channel_data):针对 PC、小程序、APP 等不同端,分配不同的code和密钥对(RSA/AES)。这意味着不同端的请求参数加密方式不同,极大提高了接口被爬虫破解的门槛。
4. 层次化的节目数据结构
- 节目数据设计得非常细致,分为四层结构,支撑了复杂的选座业务:
- 节目 (Program):如“周杰伦演唱会”。
- 场次 (ShowTime):如“5月20日场”、“5月21日场”。
- 票档 (TicketCategory):如“内场1280元”、“看台580元”。
- 座位 (Seat):具体的排号、座号,关联到票档。
三、 如何学会和使用这些设计?
1. 逆向思维训练(不要只看,要画)
- 练习方法:在看视频前,先自己构思:“如果让我设计一个支持选座的订单表,我会怎么设计?”
- 对比复盘:然后看视频,你会发现自己可能漏掉了“冗余节目名称”或者“手机号映射表”。这种**“我以为VS实际是”**的冲击,能让你对架构设计的理解最深刻。
2. 关注“反常”之处
- 当你看到数据库里有看起来“重复”或“多余”的设计时(比如单独的手机号表,或者订单里存了图片地址),不要觉得是作者乱写。
- 思考逻辑:问自己“在高并发下,如果不这么做会怎样?”。通常这些“反常”都是为了性能(减少 Join)或扩展性(分库分表路由)做的妥协。
3. 落地到你的项目
- 枚举管理:学习项目中将数据库
tinyint状态字段与 JavaEnum严格对应的做法。 - 基类抽取:在你的代码中,将
create_time,update_time,id抽取为BaseEntity,利用 MyBatis Plus 的自动填充功能处理,不要每次手动 set 时间。 - 敏感数据:模仿项目中的加密逻辑,在 Service 层切面或工具类中统一处理手机号等敏感信息的加密解密。
通过理解这些表结构背后的业务场景(高并发读写)和技术限制(分库分表路由),你不仅能学会这个项目,还能具备设计中大型系统数据库的能力。
基础数据服务
d_channel_data
CREATE TABLE `d_channel_data` (
`id` bigint(64) NOT NULL COMMENT 'id',
`name` varchar(50) DEFAULT NULL COMMENT '名称',
`code` varchar(50) NOT NULL COMMENT '编码',
`introduce` varchar(500) DEFAULT NULL COMMENT '介绍描述',
`sign_public_key` text NOT NULL COMMENT 'rsa签名公钥',
`sign_secret_key` text NOT NULL COMMENT 'rsa签名秘钥',
`aes_key` text COMMENT 'aes秘钥',
`data_public_key` text COMMENT 'rsa参数公钥',
`data_secret_key` text COMMENT 'rsa参数私钥',
`token_secret` text NOT NULL COMMENT 'token秘钥',
`status` int(1) DEFAULT '1' COMMENT '状态 1:启用 0:禁用',
`edit_time` datetime DEFAULT NULL COMMENT '编辑时间',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
PRIMARY KEY (`id`),
UNIQUE KEY `code_IDX` (`code`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='渠道基础数据信息';
d_area
CREATE TABLE `d_area` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '区域id',
`parent_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '父区域id',
`name` varchar(120) NOT NULL COMMENT '区域名字',
`type` int(11) NOT NULL DEFAULT '2' COMMENT '1:省 2:区 3:县',
`municipality` tinyint(1) NOT NULL DEFAULT '0' COMMENT '1:是 0:否',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`edit_time` datetime DEFAULT NULL COMMENT '编辑时间',
`status` tinyint(1) DEFAULT '1' COMMENT '1:正常 0:删除',
PRIMARY KEY (`id`),
KEY `parent_id` (`parent_id`),
KEY `ctype` (`type`)
) ENGINE=InnoDB AUTO_INCREMENT=3409 DEFAULT CHARSET=utf8 COMMENT='地区表';
表关系
用户服务
d_user 用户表
CREATE TABLE `d_user` (
`id` bigint(20) NOT NULL COMMENT '主键id',
`name` varchar(256) DEFAULT NULL COMMENT '用户名字',
`rel_name` varchar(256) DEFAULT NULL COMMENT '用户真实名字',
`mobile` varchar(512) NOT NULL COMMENT '手机号',
`gender` int(11) NOT NULL DEFAULT '1' COMMENT '1:男 2:女',
`password` varchar(512) DEFAULT NULL COMMENT '密码',
`email_status` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否邮箱认证 1:已验证 0:未验证',
`email` varchar(256) DEFAULT NULL COMMENT '邮箱地址',
`rel_authentication_status` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否实名认证 1:已验证 0:未验证',
`id_number` varchar(512) DEFAULT NULL COMMENT '身份证号码',
`address` varchar(256) DEFAULT NULL COMMENT '收货地址',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`edit_time` datetime DEFAULT NULL COMMENT '编辑时间',
`status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '1:正常 0:删除',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表';
d_user_mobile 用户手机表
CREATE TABLE `d_user_mobile` (
`id` bigint(20) NOT NULL COMMENT '主键id',
`user_id` bigint(20) NOT NULL COMMENT '用户id',
`mobile` varchar(512) NOT NULL COMMENT '手机号',
`create_time` datetime NOT NULL COMMENT '创建时间',
`edit_time` datetime NOT NULL COMMENT '编辑时间',
`status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '1:正常 0:删除',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户手机表';
d_user_email 用户邮箱表
CREATE TABLE `d_user_email` (
`id` bigint(20) NOT NULL COMMENT '主键id',
`user_id` bigint(20) NOT NULL COMMENT '用户id',
`email` varchar(512) NOT NULL COMMENT '邮箱',
`create_time` datetime NOT NULL COMMENT '创建时间',
`edit_time` datetime NOT NULL COMMENT '编辑时间',
`status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '1:正常 0:删除',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户邮箱表';
d_ticket_user 购票人表
CREATE TABLE `d_ticket_user` (
`id` bigint(20) NOT NULL COMMENT '主键id',
`user_id` bigint(20) NOT NULL COMMENT '用户id',
`rel_name` varchar(256) NOT NULL COMMENT '用户真实名字',
`id_type` int(11) NOT NULL DEFAULT '1' COMMENT '证件类型 1:身份证 2:港澳台居民居住证 3:港澳居民来往内地通行证 4:台湾居民来往内地通行证 5:护照 6:外国人永久居住证',
`id_number` varchar(512) NOT NULL COMMENT '证件号码',
`create_time` datetime NOT NULL COMMENT '创建时间',
`edit_time` datetime NOT NULL COMMENT '编辑时间',
`status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '1:正常 0:删除',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='购票人表';
注意
单独设计出 d_user_mobile 用户手机表 和 d_user_email 用户邮箱表 是因为用户登录时,可以使用手机号或者邮箱登录,而用户表在分库分表时,选择的分片键是用户id,所以要设计出这两张表,根据手机号或者邮箱查询到用户id,然后使用用户id查询用户信息
表关系
节目服务
d_program 节目表
CREATE TABLE `d_program` (
`id` bigint(20) NOT NULL COMMENT '主键id',
`program_group_id` bigint(20) NOT NULL COMMENT '节目分组id',
`prime` tinyint(1) NOT NULL DEFAULT '1' COMMENT '当属于同一个节目分组时 是否为主要节目 0:否 1:是',
`area_id` bigint(20) NOT NULL COMMENT '所在区域id',
`program_category_id` bigint(20) NOT NULL COMMENT '节目类型表id',
`parent_program_category_id` bigint(20) NOT NULL COMMENT '父节目类型表id',
`title` varchar(512) NOT NULL COMMENT '标题',
`actor` varchar(256) DEFAULT NULL COMMENT '艺人',
`place` varchar(100) DEFAULT NULL COMMENT '地点',
`item_picture` text COMMENT '项目图片',
`pre_sell` tinyint(1) NOT NULL DEFAULT '1' COMMENT '预售 1:是 0:否',
`pre_sell_instruction` varchar(256) DEFAULT NULL COMMENT '预售说明',
`important_notice` varchar(100) DEFAULT NULL COMMENT '重要通知',
`detail` text NOT NULL COMMENT '项目详情',
`per_order_limit_purchase_count` int(11) DEFAULT '6' COMMENT '每笔订单最多购买数量',
`per_account_limit_purchase_count` int(11) DEFAULT '6' COMMENT '每个账号最多购买数量',
`refund_ticket_rule` varchar(512) DEFAULT NULL COMMENT '退票/换票规则',
`delivery_instruction` varchar(512) DEFAULT NULL COMMENT '配送信息说明',
`entry_rule` varchar(512) DEFAULT NULL COMMENT '入场规则',
`child_purchase` varchar(512) DEFAULT NULL COMMENT '儿童购票',
`invoice_specification` varchar(512) DEFAULT NULL COMMENT '发票说明',
`real_ticket_purchase_rule` text COMMENT '实名购票规则',
`abnormal_order_description` text COMMENT '异常排单说明',
`kind_reminder` text COMMENT '温馨提示',
`performance_duration` varchar(100) DEFAULT NULL COMMENT '演出时长',
`entry_time` varchar(512) DEFAULT NULL COMMENT '入场时间',
`min_performance_count` int(11) DEFAULT NULL COMMENT '最低演出曲目',
`main_actor` varchar(100) DEFAULT NULL COMMENT '主要演员',
`min_performance_duration` varchar(100) DEFAULT NULL COMMENT '最低演出时长',
`prohibited_item` text COMMENT '禁止携带物品',
`deposit_specification` varchar(512) DEFAULT NULL COMMENT '寄存说明',
`total_count` bigint(20) DEFAULT NULL COMMENT '大麦网初始开售时全场可售门票总张数',
`permit_refund` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否允许退款 0:不支持退 1:条件退 2:全部退',
`refund_explain` varchar(512) DEFAULT NULL COMMENT '退款说明',
`rel_name_ticket_entrance` tinyint(1) NOT NULL DEFAULT '0' COMMENT '实名制购票和入场 1:是 0:否',
`rel_name_ticket_entrance_explain` varchar(512) DEFAULT NULL COMMENT '实名制购票和入场说明',
`permit_choose_seat` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否允许选座 1:允许选座 0:不允许选座',
`choose_seat_explain` varchar(512) DEFAULT NULL COMMENT '选座说明',
`electronic_delivery_ticket` tinyint(1) NOT NULL DEFAULT '1' COMMENT '电子票/快递票 0:都没有1:电子票 2:快递票',
`electronic_delivery_ticket_explain` varchar(512) DEFAULT NULL COMMENT '电子票说明',
`electronic_invoice` tinyint(1) NOT NULL DEFAULT '1' COMMENT '电子发票 1:是 0:不是',
`electronic_invoice_explain` varchar(512) DEFAULT NULL COMMENT '电子发票说明',
`high_heat` tinyint(1) NOT NULL DEFAULT '0' COMMENT '高热度节目 0:否 1:是',
`program_status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '节目状态 1:上架 0:下架',
`issue_time` datetime DEFAULT NULL COMMENT '上架发行时间',
`create_time` datetime NOT NULL COMMENT '创建时间',
`edit_time` datetime NOT NULL COMMENT '编辑时间',
`status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '1:正常 0:删除',
PRIMARY KEY (`id`),
KEY `program_group_id_idx` (`program_group_id`) USING BTREE,
KEY `issue_time_idx` (`issue_time`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='节目表';
d_program_group 节目分组表
CREATE TABLE `d_program_group` (
`id` bigint(20) NOT NULL COMMENT '主键id',
`program_json` text COMMENT '节目json',
`create_time` datetime NOT NULL COMMENT '创建时间',
`edit_time` datetime NOT NULL COMMENT '编辑时间',
`status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '1:正常 0:删除',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='节目分组表';
d_program_category 节目类型表
CREATE TABLE `d_program_category` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键id',
`parent_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '父id',
`name` varchar(120) NOT NULL COMMENT '名字',
`type` int(11) NOT NULL DEFAULT '2' COMMENT '1:一级种类 2:二级种类',
`create_time` datetime NOT NULL COMMENT '创建时间',
`edit_time` datetime NOT NULL COMMENT '编辑时间',
`status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '1:正常 0:删除',
PRIMARY KEY (`id`),
UNIQUE KEY `parent_id_name_type_idx` (`parent_id`,`name`,`type`) USING BTREE,
KEY `parent_id` (`parent_id`),
KEY `ctype` (`type`)
) ENGINE=InnoDB AUTO_INCREMENT=22 DEFAULT CHARSET=utf8 COMMENT='节目类型表';
d_program_show_time 节目演出时间表
CREATE TABLE `d_program_show_time` (
`id` bigint(20) NOT NULL COMMENT '主键id',
`program_id` bigint(20) NOT NULL COMMENT '节目表id',
`show_time` datetime NOT NULL COMMENT '演出时间',
`show_day_time` datetime DEFAULT NULL COMMENT '演出时间(精确到天)',
`show_week_time` varchar(64) NOT NULL COMMENT '演出时间所在的星期',
`area_id` bigint(20) DEFAULT NULL COMMENT '地区id',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`edit_time` datetime DEFAULT NULL COMMENT '编辑时间',
`status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '1:正常 0:删除',
PRIMARY KEY (`id`),
KEY `program_id_idx` (`program_id`) USING BTREE,
KEY `show_time_idx` (`show_time`) USING BTREE,
KEY `show_day_time_idx` (`show_day_time`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='节目演出时间表';
d_ticket_category 节目票档表
CREATE TABLE `d_ticket_category` (
`id` bigint(20) NOT NULL COMMENT '主键id',
`program_id` bigint(20) NOT NULL COMMENT '节目表id',
`introduce` varchar(256) NOT NULL COMMENT '介绍',
`price` decimal(10,0) NOT NULL COMMENT '价格',
`total_number` bigint(20) NOT NULL COMMENT '总数量',
`remain_number` bigint(20) NOT NULL COMMENT '剩余数量',
`create_time` datetime NOT NULL COMMENT '创建时间',
`edit_time` datetime NOT NULL COMMENT '编辑时间',
`status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '1:正常 0:删除',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='节目票档表';
d_seat
CREATE TABLE `d_seat` (
`id` bigint(20) NOT NULL COMMENT '主键id',
`program_id` bigint(20) NOT NULL COMMENT '节目表id',
`ticket_category_id` bigint(20) NOT NULL COMMENT '节目票档id',
`row_code` int(11) NOT NULL COMMENT '排号',
`col_code` int(11) NOT NULL COMMENT '列号',
`seat_type` int(3) NOT NULL COMMENT '座位类型 详见seatType枚举',
`price` decimal(10,0) NOT NULL COMMENT '座位价格',
`sell_status` int(3) NOT NULL DEFAULT '1' COMMENT '1未售卖 2锁定 3已售卖',
`create_time` datetime NOT NULL COMMENT '创建时间',
`edit_time` datetime NOT NULL COMMENT '编辑时间',
`status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '1:正常 0:删除',
PRIMARY KEY (`id`),
KEY `program_id_idx` (`program_id`) USING BTREE,
KEY `row_code_idx` (`row_code`) USING BTREE,
KEY `col_code_idx` (`col_code`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='座位表';
表关系
订单服务
d_order
CREATE TABLE `d_order` (
`id` bigint NOT NULL COMMENT '主键id',
`order_number` bigint NOT NULL COMMENT '订单编号',
`identifier_id` bigint DEFAULT NULL COMMENT '记录id',
`program_id` bigint NOT NULL COMMENT '节目表id',
`program_item_picture` varchar(1024) DEFAULT NULL COMMENT '节目图片介绍',
`user_id` bigint NOT NULL COMMENT '用户id',
`program_title` varchar(512) DEFAULT NULL COMMENT '节目标题',
`program_place` varchar(100) DEFAULT NULL COMMENT '节目地点',
`program_show_time` datetime DEFAULT NULL COMMENT '节目演出时间',
`program_permit_choose_seat` tinyint(1) NOT NULL COMMENT '节目是否允许选座 1:允许选座 0:不允许选座',
`distribution_mode` varchar(256) DEFAULT NULL COMMENT '配送方式',
`take_ticket_mode` varchar(256) DEFAULT NULL COMMENT '取票方式',
`order_price` decimal(10,0) DEFAULT NULL COMMENT '订单价格',
`pay_order_type` int DEFAULT NULL COMMENT '支付订单方式',
`order_status` int DEFAULT '1' COMMENT '订单状态 1:未支付 2:已取消 3:已支付 4:已退单',
`reconciliation_status` int DEFAULT '1' COMMENT '对账状态 1:未对账 -1:对账完成有问题 2:对账完成没有问题 3:对账有问题处理完毕',
`order_version` int NOT NULL DEFAULT '1' COMMENT '创建订单的版本',
`create_order_time` datetime DEFAULT NULL COMMENT '生成订单时间',
`cancel_order_time` datetime DEFAULT NULL COMMENT '取消订单时间',
`pay_order_time` datetime DEFAULT NULL COMMENT '支付订单时间',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`edit_time` datetime DEFAULT NULL COMMENT '编辑时间',
`status` tinyint(1) DEFAULT '1' COMMENT '1:正常 0:删除',
PRIMARY KEY (`id`),
UNIQUE KEY `d_order_order_number_IDX` (`order_number`) USING BTREE,
KEY `user_id_IDX` (`user_id`) USING BTREE,
KEY `program_id_IDX` (`program_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COMMENT='订单表';
d_order_ticket_user
CREATE TABLE `d_order_ticket_user` (
`id` bigint NOT NULL COMMENT '主键id',
`order_number` bigint NOT NULL COMMENT '订单编号',
`program_id` bigint NOT NULL COMMENT '节目表id',
`user_id` bigint NOT NULL COMMENT '用户id',
`ticket_user_id` bigint NOT NULL COMMENT '购票人id',
`seat_id` bigint NOT NULL COMMENT '座位id',
`seat_info` varchar(100) DEFAULT NULL COMMENT '座位信息',
`ticket_category_id` bigint DEFAULT NULL COMMENT '节目票档id',
`order_price` decimal(10,0) DEFAULT NULL COMMENT '订单价格',
`pay_order_price` decimal(10,0) DEFAULT NULL COMMENT '支付订单价格',
`pay_order_type` int DEFAULT NULL COMMENT '支付订单方式',
`order_status` int DEFAULT '1' COMMENT '订单状态 1:未支付 2:已取消 3:已支付 4:已退单',
`reconciliation_status` int DEFAULT '1' COMMENT '对账状态 1:未对账 -1:对账完成有问题 2:对账完成没有问题 3:对账有问题处理完毕',
`create_order_time` datetime DEFAULT NULL COMMENT '生成订单时间',
`cancel_order_time` datetime DEFAULT NULL COMMENT '取消订单时间',
`pay_order_time` datetime DEFAULT NULL COMMENT '支付订单时间',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`edit_time` datetime DEFAULT NULL COMMENT '编辑时间',
`status` tinyint(1) DEFAULT '1' COMMENT '1:正常 0:删除',
PRIMARY KEY (`id`),
KEY `d_order_ticket_user_order_id_IDX` (`order_number`) USING BTREE,
KEY `d_order_ticket_user_user_id_IDX` (`user_id`) USING BTREE,
KEY `d_order_ticket_user_ticket_user_id_IDX` (`ticket_user_id`) USING BTREE,
KEY `d_order_ticket_user_create_order_time_IDX` (`create_order_time`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COMMENT='购票人订单表';
表关系
支付服务
d_pay_bill
CREATE TABLE `d_pay_bill` (
`id` bigint(20) NOT NULL COMMENT '主键id',
`pay_number` varchar(64) DEFAULT NULL COMMENT '支付流水号',
`out_order_no` varchar(64) NOT NULL COMMENT '商户订单号',
`pay_channel` varchar(64) DEFAULT NULL COMMENT '支付渠道',
`pay_scene` varchar(64) DEFAULT NULL COMMENT '支付环境',
`subject` varchar(512) DEFAULT NULL COMMENT '订单标题',
`trade_number` varchar(256) DEFAULT NULL COMMENT '三方交易凭证号',
`pay_amount` decimal(10,0) NOT NULL COMMENT '支付金额',
`pay_bill_type` int(11) NOT NULL COMMENT '支付种类 详细见枚举PayBillType',
`pay_bill_status` int(11) NOT NULL DEFAULT '1' COMMENT '账单支付状态 详细见枚举PayBillStatus',
`pay_time` datetime DEFAULT NULL COMMENT '支付时间',
`create_time` datetime NOT NULL COMMENT '创建时间',
`edit_time` datetime NOT NULL COMMENT '修改时间',
`status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '状态 1:未删除 0:删除',
PRIMARY KEY (`id`),
UNIQUE KEY `d_pay_bill_out_order_no_IDX` (`out_order_no`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='支付表';
d_refund_bill
CREATE TABLE `d_refund_bill` (
`id` bigint(20) NOT NULL COMMENT '主键id',
`out_order_no` varchar(64) NOT NULL COMMENT '商户订单号',
`pay_bill_id` bigint(20) NOT NULL COMMENT '账单id',
`refund_amount` decimal(10,0) NOT NULL COMMENT '退款金额',
`refund_status` int(11) NOT NULL DEFAULT '1' COMMENT '账单退款状态 1:未退款 2:已退款',
`refund_time` datetime DEFAULT NULL COMMENT '退款时间',
`reason` varchar(50) DEFAULT NULL COMMENT '退款原因',
`create_time` datetime NOT NULL COMMENT '创建时间',
`edit_time` datetime NOT NULL COMMENT '修改时间',
`status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '状态 1:未删除 0:删除',
PRIMARY KEY (`id`),
UNIQUE KEY `d_refund_bill_out_order_no_IDX` (`out_order_no`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='退款表';
表关系
定制化服务
d_rule
CREATE TABLE `d_rule` (
`id` bigint(20) NOT NULL COMMENT 'id',
`stat_time` int(11) NOT NULL COMMENT '统计时间',
`stat_time_type` int(11) NOT NULL COMMENT '统计时间类型 1:秒 2:分钟',
`threshold` int(11) NOT NULL COMMENT '调用限制阈值',
`effective_time` int(11) NOT NULL COMMENT '限制时间',
`effective_time_type` int(11) NOT NULL COMMENT '限制时间类型 1:秒 2:分钟',
`limit_api` text COMMENT '限制路径 逗号分割',
`message` varchar(64) DEFAULT NULL COMMENT '限制访问提示语',
`status` tinyint(4) DEFAULT '1' COMMENT '状态标识1.正常 0. 禁用 (默认1)',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='调用限制规则表';
d_depth_rule
d_depth_rule
d_depth_rule
CREATE TABLE `d_depth_rule` (
`id` bigint(20) NOT NULL COMMENT 'id',
`start_time_window` varchar(64) NOT NULL COMMENT '[限制开始时间]',
`end_time_window` varchar(64) NOT NULL COMMENT '[限制结束时间]',
`stat_time` int(11) NOT NULL COMMENT '统计时间',
`stat_time_type` int(11) NOT NULL COMMENT '统计时间类型 1:秒 2:分钟',
`threshold` int(11) NOT NULL COMMENT '调用限制阈值',
`effective_time` int(11) NOT NULL COMMENT '限制时间',
`effective_time_type` int(11) NOT NULL COMMENT '限制时间类型 1:秒 2:分钟',
`limit_api` text COMMENT '限制路径 逗号分割',
`message` varchar(64) DEFAULT NULL COMMENT '限制访问提示语',
`status` tinyint(4) DEFAULT '1' COMMENT '状态标识1.正常 0. 禁用 (默认1)',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='深度调用限制规则表';
d_api_data
CREATE TABLE `d_api_data` (
`id` bigint(20) NOT NULL COMMENT '主键id',
`head_version` varchar(32) DEFAULT NULL COMMENT '请求版本',
`api_address` varchar(32) DEFAULT NULL COMMENT '客户端ip',
`api_method` varchar(32) DEFAULT NULL COMMENT '请求方法',
`api_body` varchar(200) DEFAULT NULL COMMENT '请求体',
`api_params` varchar(100) DEFAULT NULL COMMENT '请求参数',
`api_url` varchar(100) DEFAULT NULL COMMENT '请求路径',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`status` int(11) DEFAULT '1' COMMENT '状态 1:未删除 0:删除(默认1)',
`call_day_time` varchar(64) DEFAULT NULL COMMENT '按天维度记录请求时间',
`call_hour_time` varchar(64) DEFAULT NULL COMMENT '按小时维度记录请求时间',
`call_minute_time` varchar(64) DEFAULT NULL COMMENT '按分钟维度记录请求时间',
`call_second_time` varchar(64) DEFAULT NULL COMMENT '按秒维度记录请求时间',
`type` int(11) DEFAULT NULL COMMENT 'api规则生效类型 1一般规则 2深度规则',
PRIMARY KEY (`id`),
KEY `idx_create_time` (`create_time`) USING BTREE,
KEY `idx_api_address` (`api_address`) USING BTREE,
KEY `idx_api_url` (`api_url`) USING BTREE,
KEY `idx_call_day_time` (`call_day_time`) USING BTREE,
KEY `idx_call_hour_time` (`call_hour_time`) USING BTREE,
KEY `idx_call_minute_time` (`call_minute_time`) USING BTREE,
KEY `idx_call_second_time` (`call_second_time`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='api执行表';
表关系
企业级项目导航:⬅️ 00-各模块吃透 | 00-数据库表关系 | ➡️ 01-为什么掌握分片原理就能很容易实现分库分表?
💬 评论