Skip to content

基础讲解-数据库表关系

本文将介绍大麦网中的数据库表的设计,包括表结构、表之间的关联关系

基础数据服务

d_channel_data

sql
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='渠道基础数据信息';

此表是用于用户登录时的信息,比如 code:0001,表示是pc端登录、code:0002,表示是app端登录

前端在调用接口时可以对参数进行签名,请求到了后端时,需要对签名进行验签,签名的公私钥信息也是放在此表中

1770772775374-e9cdfc73-ddb9-4fff-8cea-324709e6dbb5.png

d_area

sql
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='地区表';

这个表就很好理解了,项目中的地区显示就是靠此表完成的

1770773069662-d46861b0-ea36-46f1-8d78-05e7bfdb99e4.png

表关系

1728109171052-7a35f29c-8555-41ff-a951-1fe9aa90797f.png

用户服务

d_user 用户表

sql
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 用户手机表

sql
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 用户邮箱表

sql
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 购票人表

sql
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查询用户信息

表关系

1728109179160-47d1a6c1-85f5-45d4-a54a-32905caea592.png

节目服务

d_program 节目表

sql
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 节目分组表

sql
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='节目分组表';

会存在这样一种情况,同一个明星的不同地区都会开演唱会,这些演唱会也是单独作为独立的节目数据保存的,这些演唱会通过一个分组来管理

1770773228392-2b0ff670-29b9-44cb-b808-e50ede4bf53f.png

d_program_category 节目类型表

sql
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='节目类型表';

是保存节目都有哪些类型,并且有父类型和子类型的区别

所有父类型的展示:

1770773299007-e19aff5a-a86f-4a6b-976d-21bd815b6e71.png

父类型和子类型的展示:

1770773329266-54fc4b3b-230c-41f6-97f8-7f85cdc74e32.png

d_program_show_time 节目演出时间表

sql
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='节目演出时间表';

用来显示节目的演出时间:

1770773364261-ff064176-ba55-4fff-a20f-8ede8af1a04d.png

其实把演出时间直接放在节目表中也是可以的,但是为什么没有这么做呢?

因为进行了分库分表后,每张表的容量肯定是很大的,在节目表中,除了演出时间可能会修改外,别的字段基本上都不会改,而且节目表的字段确实很多,这样就造成了一个问题:

当修改演出时间后,节目表的聚集索引也要进行更新维护,看过索引的八股文都知道,聚集索引的叶子节目保存的是完整的每行数据。这样索引维护起来成本还是挺高的。所以把节目演出时间单独拆分出来到节目演出时间表中,这样字段就很少了,修改起来索引的维护成本也很低很多。

d_ticket_category 节目票档表

sql
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='节目票档表';

用来显示节目的不同票档信息:

1770773614912-41cee9a6-bdc4-4848-ab12-be4abee0b79b.png

d_seat

sql
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='座位表';

座位表是保存相关的座位信息,高并发的热门演唱会是不允许手动选座的,一些普通的节目才会允许选择

1770773683345-3f206e5c-fbf9-441d-8e59-e8bbe73760a2.png

表关系

1728109209086-667ffd5a-2481-4ca5-ad6c-642cf31196b7.png

订单服务

d_order

sql
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

sql
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='购票人订单表';

用来保存每个购票人的购票信息,一次买2个人的票,不管是手动选座还是自动选座,购票成功后,肯定是要有个座位信息的,那么这个座位信息肯定要对应到具体的购票人,购票人订单表就是实现这个功能。

表关系

1728109214260-62620645-bbcc-49d8-bf9d-5bd960a43780.png

支付服务

d_pay_bill

sql
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

sql
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='退款表';

支付和退款表很好理解,每笔支付和退款肯定是要有记录保存的

1728109219603-b8f7c546-0446-4db9-8379-33a1866ae7b1.png

定制化服务

d_rule

sql
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

sql
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

sql
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执行表';

表关系

1728109223439-c08064f5-23b8-4103-b94d-b9c7892b88bd.png

更新: 2026-02-11 09:39:02
原文: https://www.yuque.com/u22210564/ykdrdh/eykr15ak9zod9g5u

Java 后端面试知识库