餐饮外卖销售系统数据库设计:订单洪峰与骑手轨迹的表结构推演
简介这份资源是面向高校数据库课程设计场景的餐饮外卖销售系统完整源码包基于C#与SQL Server 2019开发涵盖商家、客户、骑手三类用户界面及注册登录模块采用扁平化设计界面达到商业软件级别。资源包共46个文件以cs源码、resx资源文件、config配置、jpg界面截图及exe可执行文件为主压缩包约886KB配置好环境后可直接用Visual Studio打开运行。代码结构清晰、注释详细数据库课设满分作品已有1593人学习下载。读者可从中获得完整的三端外卖业务建模方案、数据库表结构设计思路、登录注册与角色权限实现逻辑以及可复用的WinForm界面布局与资源管理方式适合作为课程设计参考、答辩演示或二次开发起点。1. 餐饮外卖销售系统数据库设计从订单洪峰到骑手轨迹的表结构推演做过餐饮外卖系统的人都有一个共识业务代码写得再漂亮数据库设计一旦翻车后面全是血泪史。一份「餐饮外卖销售系统数据库设计.rar」摆在面前真正值钱的不是压缩包里那几个 .sql 文件而是它背后对「用户下单 → 商家接单 → 骑手配送 → 完成结算」这条链路的建模思路。外卖场景和普通电商最大的区别在于订单有强时效性、状态流转极快、配送轨迹需要持续写入、商家菜单频繁变更。这些特征直接决定了表结构不能照搬通用商城模板。这篇文章面向正在做外卖系统课程设计的学生、需要从零搭建外卖后端的中小团队以及想重构旧表结构的一线开发者把这份数据库设计拆成能直接复现的建表逻辑、索引策略和踩坑清单。2. 外卖业务实体拆解哪些表必须独立哪些该合并外卖系统的实体看起来很多但真正需要独立建表的其实就那么几个核心域。很多初学者一上来就建二三十张表结果查询时 JOIN 到怀疑人生。我一般会先画一遍业务流转图把「谁产生数据、谁消费数据、数据生命周期多长」三个问题回答清楚再决定表的粒度。2.1 用户域、商家域、骑手域的边界划分用户域的核心表是user消费者和user_address收货地址。注意外卖场景下地址不是简单的字符串它需要经纬度坐标来支持「附近商家」和「配送范围计算」所以user_address至少要包含longitude、latitude、address_detail、contact_name、contact_phone五个关键字段。地址表用软删除is_deleted标记而不是物理删除因为历史订单需要回溯收货地址。商家域拆成merchant商家主体、shop门店、category菜品分类、dish菜品/SKU四张表。这里有个容易搞混的点一个商家可能有多个门店一个门店有多个分类一个分类下有多个菜品。如果你只做单店系统merchant和shop可以合并但一旦涉及连锁品牌合并就是给自己挖坑。骑手域相对简单rider骑手基本信息和rider_location骑手实时位置分开建。位置表是高频写入表必须和主表隔离否则骑手信息查询会被位置写入拖垮。-- 用户收货地址表外卖场景必须带经纬度 CREATE TABLE user_address ( id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, user_id BIGINT UNSIGNED NOT NULL COMMENT 所属用户, contact_name VARCHAR(32) NOT NULL COMMENT 联系人姓名, contact_phone VARCHAR(20) NOT NULL COMMENT 联系电话, address_detail VARCHAR(255) NOT NULL COMMENT 详细地址, longitude DECIMAL(10,7) NOT NULL COMMENT 经度用于配送范围计算, latitude DECIMAL(10,7) NOT NULL COMMENT 纬度, tag VARCHAR(16) DEFAULT NULL COMMENT 标签家/公司/学校, is_default TINYINT(1) NOT NULL DEFAULT 0 COMMENT 是否默认地址, is_deleted TINYINT(1) NOT NULL DEFAULT 0 COMMENT 软删除标记, created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (id), KEY idx_user_id (user_id, is_deleted) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT用户收货地址;这段建表语句里DECIMAL(10,7)是经纬度的常用精度小数点后 7 位大约精确到 1 厘米级别对配送场景完全够用。用DECIMAL而不是FLOAT是因为浮点数在范围比较时会出现精度漂移导致「明明在配送范围内却判定为超出」的玄学问题。idx_user_id联合索引带上is_deleted是因为查询用户地址列表时几乎总是带软删除过滤条件。2.2 订单主表与订单明细表的字段取舍订单是外卖系统的核心。order_main订单主表和order_item订单明细必须分开这是一条铁律。主表存订单级别的信息订单号、用户、商家、骑手、总金额、配送费、状态、下单时间、预计送达时间。明细表存每个菜品的快照菜品名称、单价、数量、规格。这里有一个新手最容易犯的错误明细表里只存dish_id不存菜品名称和价格快照。结果商家改了菜名或调了价格历史订单显示的就全变了。正确做法是在order_item里冗余存储下单时刻的菜品名称、单价、规格描述这叫「快照冗余」是订单类系统的标准操作。-- 订单主表状态字段是灵魂 CREATE TABLE order_main ( id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, order_no VARCHAR(32) NOT NULL COMMENT 业务订单号对外展示, user_id BIGINT UNSIGNED NOT NULL, shop_id BIGINT UNSIGNED NOT NULL, rider_id BIGINT UNSIGNED DEFAULT NULL COMMENT 接单骑手未分配时为空, total_amount DECIMAL(10,2) NOT NULL COMMENT 商品总价, delivery_fee DECIMAL(10,2) NOT NULL DEFAULT 0 COMMENT 配送费, pay_amount DECIMAL(10,2) NOT NULL COMMENT 实付金额, status TINYINT NOT NULL DEFAULT 0 COMMENT 0待支付 1已支付 2商家接单 3骑手接单 4配送中 5已完成 6已取消, expect_delivery_time DATETIME DEFAULT NULL COMMENT 预计送达时间, finished_at DATETIME DEFAULT NULL COMMENT 实际完成时间, created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (id), UNIQUE KEY uk_order_no (order_no), KEY idx_user_status (user_id, status), KEY idx_shop_status_created (shop_id, status, created_at), KEY idx_rider_status (rider_id, status) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT订单主表;status用TINYINT而不是字符串枚举是为了索引效率和存储空间。三个联合索引分别服务三类高频查询用户查自己的订单、商家查待处理订单、骑手查配送中订单。注意idx_shop_status_created把created_at放在最后因为商家后台通常按时间倒序拉取订单列表这个顺序能让排序也走索引。2.3 购物车、评价、优惠券的建表时机购物车表cart的设计要区分登录用户和游客。登录用户存数据库游客存本地或 Redis。如果非要在数据库里存游客购物车用session_id关联但一定要设置过期清理策略否则表会膨胀得很快。评价表order_review和订单是一对一关系用order_id做唯一索引即可。优惠券拆成coupon券模板和user_coupon用户领取记录两张表这是标准做法不要合并。这三类表有一个共同点它们不是订单主链路的关键路径。建表时可以适当放宽范式要求比如评价表里冗余存商家 ID 和用户 ID避免查询时多一次 JOIN。3. 高频写入场景下的索引与分表策略外卖系统的数据库压力主要来自三个地方订单创建、骑手位置上报、订单状态流转。这三类操作的写入频率远高于普通查询索引设计稍有不慎就会导致写入性能断崖式下跌。3.1 订单表按时间分区的落地步骤当订单量达到千万级单表查询会明显变慢。这时候需要考虑分区或分表。MySQL 原生支持 RANGE 分区按created_at的月份分区是最直观的方案。-- 对订单主表按创建时间做 RANGE 分区 ALTER TABLE order_main PARTITION BY RANGE (TO_DAYS(created_at)) ( PARTITION p202401 VALUES LESS THAN (TO_DAYS(2024-02-01)), PARTITION p202402 VALUES LESS THAN (TO_DAYS(2024-03-01)), PARTITION p202403 VALUES LESS THAN (TO_DAYS(2024-04-01)), PARTITION p_max VALUES LESS THAN MAXVALUE );分区的核心价值在于查询某个月订单时数据库只需要扫描对应分区而不是全表。但要注意分区键必须包含在主键或唯一索引中否则建分区会直接报错。上面order_main的主键是id而分区键是created_at这在 MySQL 里是不允许的——实际落地时要么把主键改成(id, created_at)联合主键要么放弃分区改用应用层分表。这是一个非常典型的翻车点很多人写到一半才发现。我的建议是日订单量在 50 万以下先用单表加索引扛着超过这个量级再考虑分表而且优先选应用层分表比如按shop_id取模因为分区表的维护成本比想象中高。3.2 骑手位置表的写入优化与冷热分离骑手位置上报的频率通常是 3 到 5 秒一次一个中等规模平台如果有 5000 名活跃骑手每天产生的位置记录就是上亿条。这张表绝对不能和业务表放在同一个库实例里。常见做法是位置数据先写入 Redis 或时序数据库只把最新一条位置同步到 MySQL 的rider_location表供业务查询。历史轨迹数据定期归档到冷存储。rider_location表只保留每个骑手的最新记录用rider_id做唯一索引写入时用INSERT ... ON DUPLICATE KEY UPDATE。-- 骑手位置表只存最新位置用 upsert 写入 CREATE TABLE rider_location ( rider_id BIGINT UNSIGNED NOT NULL, longitude DECIMAL(10,7) NOT NULL, latitude DECIMAL(10,7) NOT NULL, updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (rider_id) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT骑手最新位置; -- 写入示例存在则更新不存在则插入 INSERT INTO rider_location (rider_id, longitude, latitude) VALUES (1001, 116.3974280, 39.9092300) ON DUPLICATE KEY UPDATE longitude VALUES(longitude), latitude VALUES(latitude);用rider_id直接做主键省掉二级索引写入性能最好。ON DUPLICATE KEY UPDATE在并发写入同一骑手位置时可能出现锁竞争但外卖场景下同一骑手的位置上报是串行的不会有大问题。3.3 状态流转日志表该不该单独建订单状态每次变更都值得记录一条日志这张表叫order_status_log。它的价值在于排查客诉时能还原完整时间线做数据分析时能算出商家平均接单时长、骑手平均配送时长。CREATE TABLE order_status_log ( id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, order_id BIGINT UNSIGNED NOT NULL, from_status TINYINT NOT NULL COMMENT 变更前状态, to_status TINYINT NOT NULL COMMENT 变更后状态, operator_type TINYINT NOT NULL COMMENT 1用户 2商家 3骑手 4系统, operator_id BIGINT UNSIGNED DEFAULT NULL, created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (id), KEY idx_order_id (order_id) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT订单状态流转日志;这张表是纯追加写入没有更新操作索引只需要一个order_id。数据量大了之后按created_at做归档即可不需要分区。4. 避坑与排查外卖数据库设计里最容易翻车的五件事4.1 金额字段用 FLOAT 导致对账差几分钱现象财务对账时发现订单总价和明细加总差 0.01 元反复出现但无法稳定复现。原因FLOAT和DOUBLE是二进制浮点数无法精确表示 0.1、0.2 这类十进制小数。多个浮点数累加时误差会累积。解决所有金额字段一律用DECIMAL(10,2)Java 侧对应BigDecimalPython 侧用decimal.Decimal。不要用FLOAT也不要用INT存「分」——虽然INT存分也能避免精度问题但每次读写都要手动乘除 100容易漏。4.2 订单号用自增 ID 暴露业务量现象用户发现自己的订单号是 10001下一单变成 10002能推测出平台每天大概多少单。原因直接把自增主键当订单号返回给前端。解决订单号单独生成常见方案是「日期 用户 ID 后四位 随机数」或雪花算法。数据库主键仍然用自增id但对外展示的order_no是独立的业务编号加唯一索引。4.3 商家接单超时没有兜底导致订单卡死现象用户支付成功但商家一直不接单订单永远停在「已支付」状态。原因状态机设计时只考虑了正常流转没有设计超时自动取消或自动转派逻辑。解决在order_main里加expect_accept_time字段用一个定时任务扫描超时未接单的订单自动取消并退款。状态流转日志里记录一条「系统自动取消」的记录方便追溯。4.4 骑手位置更新把主库 IO 打满现象高峰期数据库 CPU 飙升订单查询变慢排查发现是rider_location表的写入量太大。原因位置上报直接写 MySQL且没有做批量合并每条位置更新都触发一次磁盘 IO。解决位置数据先进 Redis用 Redis 的过期时间做自动清理只把最新位置异步刷到 MySQL。或者干脆把位置查询也走 RedisMySQL 只做冷备。4.5 菜品删除后历史订单查不到明细现象商家下架了某个菜品用户查看历史订单时该菜品显示为空。原因order_item表只存了dish_id没有存菜品名称快照菜品被物理删除后 JOIN 不到数据。解决order_item必须冗余存储dish_name、dish_price、spec_desc三个快照字段。菜品表用软删除不做物理删除。5. 从建表到压测一套可复现的验证流程数据库设计做完不是终点能不能扛住真实流量才是。我一般会走一遍「建表 → 造数 → 压测 → 看执行计划」的闭环这里分享几个具体技巧。5.1 用存储过程批量造测试数据手工插几条数据看不出性能问题至少造 10 万条订单、50 万条明细才有参考价值。用 MySQL 存储过程造数比写脚本快得多。-- 批量插入 10 万条测试订单 DELIMITER $$ CREATE PROCEDURE gen_test_orders(IN num INT) BEGIN DECLARE i INT DEFAULT 0; WHILE i num DO INSERT INTO order_main (order_no, user_id, shop_id, total_amount, pay_amount, status, created_at) VALUES ( CONCAT(TEST, LPAD(i, 10, 0)), FLOOR(1 RAND() * 10000), FLOOR(1 RAND() * 500), ROUND(10 RAND() * 200, 2), ROUND(10 RAND() * 200, 2), FLOOR(RAND() * 7), DATE_SUB(NOW(), INTERVAL FLOOR(RAND() * 90) DAY) ); SET i i 1; END WHILE; END$$ DELIMITER ; CALL gen_test_orders(100000);这段存储过程的关键点是created_at随机分布在过去 90 天内这样能模拟真实的时间分布测试按时间范围查询时才有意义。order_no用LPAD补齐 10 位保证长度一致。5.2 用 EXPLAIN 验证索引是否真的被命中造完数据后把最核心的几条查询拿出来跑EXPLAIN。比如「查询某用户最近 10 笔订单」EXPLAIN SELECT * FROM order_main WHERE user_id 1234 AND status IN (1,2,3,4,5) ORDER BY created_at DESC LIMIT 10;重点看type列是不是ref或rangekey列是不是命中了idx_user_statusrows列扫描行数是否合理。如果type是ALL说明走了全表扫描索引没生效。常见原因是查询条件里的字段类型和索引字段类型不一致比如user_id是BIGINT但传了字符串。5.3 慢查询日志的开启与关键参数压测期间一定要开慢查询日志否则你根本不知道哪条 SQL 在拖后腿。-- 开启慢查询日志阈值设为 1 秒 SET GLOBAL slow_query_log ON; SET GLOBAL long_query_time 1; SET GLOBAL log_queries_not_using_indexes ON;long_query_time设 1 秒是压测阶段的激进值生产环境可以放宽到 2 到 3 秒。log_queries_not_using_indexes会把所有没走索引的查询都记下来压测时非常有用但生产环境慎开日志量会很大。5.4 一个容易被忽略的验证点并发下单时的库存扣减外卖菜品通常不像电商那样严格扣库存但「限量特价菜」场景下仍然需要防超卖。如果数据库设计里没有库存字段或者库存扣减用的是「先查再改」的两步操作并发时必然超卖。正确做法是在dish表加stock字段扣减时用原子操作UPDATE dish SET stock stock - 1 WHERE id 1001 AND stock 1;然后检查affected_rows是否为 1为 0 说明库存不足。这个操作不需要事务包裹单条语句因为UPDATE本身是原子的。如果涉及多菜品扣减再考虑用事务或分布式锁。5.5 验证清单上线前必须确认的六个点检查项验证方法通过标准金额字段类型查information_schema.columns全部为decimal订单号唯一性并发插入测试无重复无冲突报错核心查询索引EXPLAIN逐条检查type不为ALL状态流转完整性模拟全链路操作日志表记录完整位置表写入压力模拟 5000 骑手并发上报主库 CPU 低于 60%历史订单快照删除菜品后查历史订单明细仍可正常显示这套流程走下来基本能覆盖外卖数据库设计 90% 的落地问题。我自己踩过最深的坑是订单表分区键和主键冲突当时已经写了几百行建表语句最后不得不把主键改成联合主键才通过。所以现在我做任何分表分区之前第一件事就是确认分区键是否在主键里。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

WebGIS警务社区管理系统实战:PostGIS空间查询与Leaflet地图渲染

WebGIS警务社区管理系统实战:PostGIS空间查询与Leaflet地图渲染

简介:这是一套基于WebGIS的警务社区管理系统完整源码,面向计算机相关专业的在校学生、教师及企业开发人员,可作为毕业设计、课程设计、大作业或初期项目立项的参考方案,也适合希望入门进阶WebGIS与Java Web开发的学习者。压缩包共…

2026/10/10 20:48:14 阅读更多 →
农产品商城小程序源码跑通指南:Java+小程序+MySQL电商闭环实战

农产品商城小程序源码跑通指南:Java+小程序+MySQL电商闭环实战

简介:这是一套面向计算机专业学生与初学者的农产品商城微信小程序毕业设计源码包,采用Java后端加小程序前端的经典架构,适合用于毕业设计、课程设计或小程序入门实战。压缩包共1241个文件,约19.59MB,包含131个Java源文…

2026/10/9 17:22:21 阅读更多 →
OpenClaw从入门到应用——工具(Tools):agent-send 实战配置与验证

OpenClaw从入门到应用——工具(Tools):agent-send 实战配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 19:07:56 阅读更多 →

最新新闻

共聚焦显微镜与激光共聚焦有什么区别?选型与实操全解析

共聚焦显微镜与激光共聚焦有什么区别?选型与实操全解析

直接抛一个问题:你实验室里那台写着“共聚焦显微镜”的仪器,和你师弟论文里写的“激光共聚焦显微镜”,到底是不是同一个东西?如果只是名称长了三个字,为什么采购单上价格能差出一倍?很多刚接触显微成像的同…

2026/10/10 20:56:40 阅读更多 →
校园二手交易平台APP开发:从Android Studio工程到答辩的完整落地路径

校园二手交易平台APP开发:从Android Studio工程到答辩的完整落地路径

简介:这是一套基于 Android Studio 开发的校园二手交易平台 APP 完整源代码,面向计算机相关专业的毕业生、课程设计学习者以及需要期末大作业参考的开发者,帮助解决从零搭建移动端交易类项目的难题。压缩包共 95 个文件,约 929KB&…

2026/10/10 20:56:40 阅读更多 →
Windows运行库系统性修复指南:DirectX、.NET、VC++与3DM合集实战

Windows运行库系统性修复指南:DirectX、.NET、VC++与3DM合集实战

1. 这不是“一键修复”,而是运行库问题的系统性认知重建你是不是也遇到过:双击游戏图标,弹出“MSVCP140.dll 丢失”;点开某个设计软件,提示“.NET Framework 4.8 未安装或损坏”;甚至刚装完系统&#xff0c…

2026/10/10 20:56:40 阅读更多 →
大模型API聚合平台选型指南:从模型覆盖到容灾机制的核心Checklist

大模型API聚合平台选型指南:从模型覆盖到容灾机制的核心Checklist

最近一年,身边越来越多的企业朋友开始认真考虑接入大模型,而他们问我的第一个问题往往不是“该选哪家模型”,而是“要不要走API聚合平台”。这个问题问得很实在。我见过不少团队一开始图省事直接调各家模型官方的API,结果账号管理…

2026/10/10 20:56:39 阅读更多 →
从爬楼梯到跃迁:个人成长的非线性突破之道

从爬楼梯到跃迁:个人成长的非线性突破之道

"你的成长,不是爬楼梯,而是“跃迁”"去年我参加一个技术社区的小型聚会,有位做后端开发七八年的朋友跟我说了一句话,我到现在还记得:“我每年都在学新东西、做新项目,技术栈越用越新,…

2026/10/10 20:56:39 阅读更多 →
Java八种基本类型全解析:从内存布局到线上避坑实战

Java八种基本类型全解析:从内存布局到线上避坑实战

Java的八种基本类型,这个话题放在互联网上一搜一大把,但相信我,很多人在第一年学完就忘得干干净净。我自己带过几个人,面试时问int占几个字节,有人能回答上来,再问int的上限是多少、为什么负数下限比正数上…

2026/10/10 20:55:38 阅读更多 →

日新闻

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

1. 从“卫星轨道分类”这个标题说起:为什么值得花时间搞懂第一次接触“卫星轨道分类”这个概念,很多人会觉得它离自己很远——不就是天上的星星怎么转吗?但如果你正在做航天任务规划、遥感数据接收、星座设计,甚至只是准备一场航天…

2026/10/10 0:00:39 阅读更多 →
Spring AOP 核心原理与实战:从概念到日志切面落地

Spring AOP 核心原理与实战:从概念到日志切面落地

1. 从一个真实痛点说起:为什么你的代码里到处都是重复逻辑刚入行那会儿,我写过一个用户管理模块,注册、登录、改密码、注销四个接口。每个接口里都塞了几乎一样的日志打印、参数校验、事务开启和提交。当时觉得没什么,能跑就行。直…

2026/10/10 0:00:40 阅读更多 →
Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

简介:这是一套面向计算机相关专业学生与项目实战学习者的Python数据采集与分析可视化完整项目,以Boss直聘岗位数据为对象,适合用作毕业设计、课程设计或期末大作业。资源包共38个文件,约246KB,以13个py源码文件为核心&…

2026/10/10 0:00:40 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 11:14:25 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 1:36:08 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 11:14:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 5:23:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 10:38:42 阅读更多 →