
简介这是一份面向ECSHOP电商系统开发及二次开发人员的完整版数据库字典文档覆盖v3.6/v3.0版本。文档从数据库字典角度系统梳理商品分类、商品资料、商品相册、关联文章等模块的表结构设计逐字段列出字段名、字段描述、字段类型、默认值、索引等关键属性并针对关键字段补充语义说明如上下架标识、供货商审核标识、促销价格处理规则等。资源共1个Word文档docx压缩包仅324KB文档按业务模块组织总页数36页目录结构清晰便于按需速查。目前已有233人浏览学习适合ECSHOP使用者、PHP电商开发者及数据库维护人员作为日常参考手册。借助字段级说明可快速掌握商品分类层级、价格区间、库存预警、促销周期、红包类型等业务在数据库中的落表方式为二次开发、数据迁移与性能优化提供扎实基础。1. 这份 ECSHOP 数据字典到底能帮你省多少事接手 ECSHOP 老项目做二次开发最怕的不是 PHP 代码烂而是打开数据库一脸懵上百张表、几千个字段不知道ecs_goods和ecs_order_goods之间到底靠什么关联更不知道is_real、is_shipping这些字段什么时候该置 0 什么时候该置 1。ECSHOP-v3.6--3.0-完整版数据字典-数据库结构.docx 这份文档就是用来治这个毛病的。它把 ECSHOP 3.6 / 3.0 全系列的数据库表结构、字段含义、默认值和关联关系整理成了一份可检索的离线手册你做迁移、做二次开发、做报表统计前花半小时翻一遍后面少走两三天弯路。这份文档适合三类人刚接手 ECSHOP 项目还摸不清表结构的初级开发、正在规划从旧版升级到 3.6 的迁移工程师、以及需要基于订单和商品数据做定制报表的运维或数分。说白了它是把数据库这块“黑匣子”强行掀开让你在写 SQL 之前就知道每一张表是干嘛的、每一个字段该不该用。有了它你不再需要凭猜和试错去连表查询。2. 拿到 docx 先别急着翻从文档结构反推 ECSHOP 的库表设计思路2.1 文档里最常见的内容组织方式按模块分组按表逐条拆ECSHOP 数据字典类文档的常规写法是先列一张“表清单”把所有数据表按前缀ecs_或ecs_加模块名如ecs_users、ecs_order_info统一编号再逐个对每张表给出字段明细包括字段名、数据类型、是否允许 NULL、默认值、键类型和备注。v3.6 和 3.0 版本的字典目录结构大体一致差异主要体现在几个关键表上ecs_goods增加了is_xiuxian、is_virtual等虚拟商品和扩展属性相关字段ecs_order_info的支付和配送状态字段在 3.6 里做了补全比如pay_status和shipping_status的枚举值说明更详细ecs_admin_user的权限字段action_list在 3.6 中改成了序列化存储的富文本字符串。拿到文档后不要从头到尾线性阅读。我一般先打开“表清单”那一页用荧光笔圈出自己业务涉及的表组再跳到对应表页精读。比如做的是商城前台重点关注ecs_goods、ecs_category、ecs_products货品表这三张做订单流程只看ecs_order_info、ecs_order_goods、ecs_order_action。文档不是教材是手册定位到具体表再去查字段效率高得多。2.2 用字段命名规律快速圈定业务表前缀和动词后缀ECSHOP 的表名和字段名有一个明显的规律动词放后、模块放前、状态用短单词。比如is_on_sale表示是否上架is_delete表示是否逻辑删除is_best表示是否精品推荐。这些字段全部是is_开头的布尔开关值是 0 或 1。文档里对这种命名方式通常不会重复解释你需要自己总结规律前缀is_是开关、goods_是商品维度、order_是订单维度、user_是会员维度。这个规律还有一个实用场景当你不知道某张表属于哪个业务模块时直接看表名前 10 个字符。ecs_virtual_card一看就是虚拟卡券ecs_snatch_log是夺宝奇兵活动的日志。文档的表清单里每张表都带了一个备注列写的是“商品活动表”“红包类型表”这类中文说明。把这个备注和你的业务场景映射起来就能避免把活动日志当成订单表去解析的错误。2.3 大表优先读结构小表直接看内容数据字典里表有大小之分。像ecs_goods、ecs_order_info、ecs_users这种单表字段超过 30 个的表属于“大表”你需要重点看字段名、类型和注释不看具体数据。像ecs_cart购物车、ecs_collect_goods收藏这种只有十来个字段的小表我反而建议直接联库看几条记录配合字典确认字段的实际取值格式。为什么这样分大表字段多枚举值说明散落在注释里一条条看容易走神小表字段少逻辑简单连库 SELECT 几条数据能加速理解。比如ecs_cart里的rec_type字段字典里写的是“商品类型”不看数据你根本不知道 0 是普通商品、1 是团购、2 是夺宝。翻库才能见到真实取值。3. 用数据字典把 ECSHOP 表结构反推成实战 SQL连表、分组、统计的三板斧3.1 先确认主键和逻辑外键没有物理外键全靠字典里的说明ECSHOP 的 MyISAM/InnoDB 表结构里大多数表没有物理外键约束。表之间的关联是靠“业务主键字段”完成的比如ecs_order_info.order_sn关联到ecs_order_goods.order_id其实用的是整型order_id而ecs_goods.goods_id关联到ecs_order_goods.goods_id。这套逻辑关联通常不会在数据库层面强制但数据字典会用“对应表”或“关联字段”的方式标注出来。你在拿它设计查询时务必将这些逻辑外键当成物理外键对待否则连表会出现一对多放大。举个例子统计“每个订单实际商品件数和金额”SELECT oi.order_id, oi.order_sn, COUNT(og.goods_id) AS goods_count, SUM(og.goods_number) AS total_number, SUM(og.goods_price * og.goods_number) AS total_goods_amount FROM ecs_order_info oi LEFT JOIN ecs_order_goods og ON oi.order_id og.order_id WHERE oi.order_status NOT IN (2, 3) GROUP BY oi.order_id, oi.order_sn;这里LEFT JOIN的关键是oi.order_id og.order_id字段名和类型在两表都一致文档里ecs_order_info.order_id和ecs_order_goods.order_id都是 int(10) unsigned不会出现隐式转换问题。order_status NOT IN (2, 3)是排除已取消和已完成订单的统计口径具体枚举值以字典说明为准。3.2 商品与货品SKU的关联goods_id 和 product_id 的嵌套关系做电商开发绕不开 SKU。ECSHOP 主表ecs_goods存商品基础信息ecs_products存货品比如红色、XL 码这种具体规格组合。字典里ecs_products的字段goods_id和product_sn是核心。在 3.6 版本中ecs_products增加了bar_code条形码和is_promote是否促销字段这就会影响你的库存同步脚本。一个常见的错误写法是查销量只关联ecs_goods而忽略了ecs_products导致开了多规格的商品销量统计被压缩成单品维度。正确做法是先关联到货品表再汇总SELECT p.goods_id, SUM(p.product_number) AS total_stock FROM ecs_products p LEFT JOIN ecs_goods g ON p.goods_id g.goods_id WHERE g.is_delete 0 GROUP BY p.goods_id;注意这里用的是LEFT JOIN ecs_goods并过滤掉is_delete 1的逻辑删除商品因为订单明细里可能有一批货品早已在后台被删但历史订单还需要显示。数据字典的价值就在于告诉你product_number这个字段控制库存is_promote控制促销价生效两者都是数值类型别拿字符串拼 SQL。3.3 订单状态机把字典里的状态字段拼成完整业务流ECSHOP 的订单状态不是单一字段而是order_status、pay_status、shipping_status三个字段的组合这是数据字典里最容易被低估的内容。字典对每个字段的枚举值单独列出了说明但没告诉你它们怎么组合。实际开发中统计“有效订单”或“待发货订单”必须对三字段做联合判断。SELECT order_status, pay_status, shipping_status, COUNT(*) AS order_count FROM ecs_order_info GROUP BY order_status, pay_status, shipping_status ORDER BY order_count DESC;这条 SQL 的作用是先把订单表的所有状态组合拉出来结合字典的定义把每个组合翻译成业务含义。比如order_status1, pay_status2, shipping_status1表示“已确认、已付款、部分发货”。你可以通过这一条命令彻底摸清线上环境跑着的订单状态分布而不是靠猜。4. 字典落不了地把 ECSHOP-v3.6 字段类型、默认值和索引约定一次讲清4.1 字段类型选择背后的潜规则int 存时间戳decimal 存金额tinyint 存开关ECSHOP 3.6 的表中add_time和update_time都是 int(10) 类型存的是 Unix 时间戳不是 datetime。这个细节在数据字典里会明确标注但很多从 WordPress 转过来的开发者容易忽略。你用FROM_UNIXTIME(add_time)转格式是常规操作但做范围查询时要注意别在函数上建索引直接比较时间戳整数。金额字段一律是 decimal(10, 2)比如goods_price、market_price、pay_points。不要用 float因为浮点比较和聚合会有精度误差。在字典里你会看到integral_money这类字段注释是“积分抵扣金额”它的值可能是零但数据类型仍是 decimal。为了安全我一般把所有金额字段的运算都用ROUND(x, 2)包一层。布尔开关字段统一用 tinyint(1)别写BOOL。比如ecs_goods.is_on_sale字典里注释就是“是否上架 1 上架 0 下架”。这没有歧义但你在拼写 SQL 时别漏掉WHERE is_on_sale 1否则默认把下架商品也拉出来了。4.2 默认值设计NULL 和空串的边界数据字典里有一列专门标“默认值”。ECSHOP 表设计习惯是数值型字段默认 0字符型字段默认空串时间字段默认 0即 1970 时间戳。这个约定和很多现代框架的“字段默认 NULL”不同。你在写代码时,要用COALESCE(column, 0)或IFNULL(column, 0)把它们统一否则SUM聚合时 NULL 会导致结果异常。比如订单表中pay_time字段默认 0表示未支付。当你写统计SELECT COUNT(*) AS total_orders, SUM(IF(pay_time 0, 1, 0)) AS paid_orders FROM ecs_order_info WHERE add_time UNIX_TIMESTAMP(2024-01-01 00:00:00);这里的IF(pay_time 0, 1, 0)就是把默认 0 当成“未支付”来处理而不是检查 IS NULL。数据字典里的默认值列,看起来不起眼实际排查数据差异时是最先怀疑的对象比如客户说“后台显示 300 单你的报表只有 200 单”八成是状态字段取 NULL 还是取 0 的口径不一致。4.3 索引约定哪些字段自带索引、哪些别乱加字典里每张表会有 KEY 或 INDEX 标注。ecs_order_info的主键是order_id通常还有order_sn的唯一索引。ecs_goods有cat_id和brand_id的普通索引。做高性能查询时索引是很重要的参考如果字典里一张表的查询字段没有索引你还经常要用那就得自己在上线前补上。典型的踩坑点ecs_order_goods在order_id上有没有索引有但在goods_id上没有。而很多报表会按商品维度去聚合订单明细这样就会全表扫描几万条订单明细就被拖慢。我的建议是按字典的索引设置为底表自己额外加两到三个高频查询索引比如idx_goods_id、idx_order_sn。注意不要盲目加一个表超过六个索引写入性能就会明显下降。5. 实战排雷使用 ECSHOP 数据字典最容易踩的四个坑5.1 坑一表前缀不一致导致字典和线上库对不上号现象拿字典里的ecs_order_info去查询线上数据库报错“Table doesnt exist”。原因字典默认前缀是ecs_但很多部署环境为了安全或者多租户隔离把前缀改成了shop_、sites_之类的自定义值。字典文档本身不会覆盖这种情况。解决先查实例里到底有哪些表SHOW TABLES LIKE %order%;如果返回结果是shop_order_info那就把字典里所有ecs_前缀在头脑里替换成shop_或者直接用文本编辑器批量替换一遍。前缀确认是第一步别上来就复制文档里的建表语句那在多数线上库跑不通。5.2 坑二v3.0 和 v3.6 的字段差异把代码写错了版本现象按文档查询ecs_goods的is_virtual字段报错 Unknown column。原因手里这份字典标的是 3.6但线上库是 3.0。3.0 的ecs_goods里根本没有is_virtual虚拟商品字段是后来加的。文档封面写的“3.6/3.0 完整版”很容易让人误以为两个版本字段完全一样。解决开发前先确认线上库的 ECSHOP 版本用一条 SQL 验证字典里的“新字段”是否存在SHOW COLUMNS FROM ecs_goods LIKE is_virtual;返回空结果就说明线上是旧版字典里带版本差异的字段都不能用。我在做 3.0 升 3.6 前会把字典里注释带“版本”两字的字段全部筛出来逐个比对线上库。5.3 坑三逻辑删除和数据字典的“物理删除”误解现象写统计类报表时发现ecs_order_info里查出了大量order_status 2已取消的单子导致销售额虚高。原因ECSHOP 的订单取消是逻辑删除数据行还在表里只是状态位被置成2。数据字典通常不会特别强调“这是软删除”它只会写着“order_status 订单状态”但代码里取消订单动作对这个字段做了更新没有真正 DELETE。解决所有涉及订单统计的 SQL默认加上状态过滤条件WHERE order_status NOT IN (2, 3)2代表已取消3代表已完成。根据业务需要已完成订单是否计入销售额要单独拧清楚不要混在一起。这条血泪经验是从报表取数翻车中得来的字典只给你结构口径要靠自己定义。5.4 坑四把备注里带“冗余”的字段当成独立业务字段现象ecs_order_info里有goods_amount和total_amount字典注释分别是“商品总金额”和“订单总金额”不了解的人会认为两者独立统计。原因实际上total_amount是在goods_amount基础上加上shipping_fee、insure_fee、pay_fee、pack_fee、card_fee再减去bonus、integral_money、discount之后算出的最终金额。它是冗余字段用于订单列表页免计算展示。解决做报表时直接用total_amount作为订单实付金额不重复再算一遍。如果要排查“为什么后台订单金额和财务对不上”优先怀疑discount和integral_money这两个字段是否被正确扣减。字典里字段注释短你需要结合 ECSHOP 的结算逻辑去理解而不是孤立地看每个字段。6. 把数据字典吃到肚子里一套不用写代码的库表结构校验流程光看不练数据字典是“死”的。把它和线上库做一次比对才能确认文档的可信度和覆盖度。做法分三步。第一步核对表数量用SELECT COUNT(*) FROM information_schema.tables WHERE table_schema 你的库名拿到实际表数量和字典表清单的数量对比差数通常就是插件或二次开发加的表。第二步对一个核心表抽查字段挑ecs_goods执行SHOW FULL COLUMNS FROM ecs_goods把输出结果和字典里的对应页逐条比对重点看字段注释、类型和默认值。第三步如果发现字典里有但库表里没有的字段用前面SHOW COLUMNS LIKE确认版本差异即可。这套流程做完你对这份字典的信任度会从“大概齐”变成“能用”。真正上了项目我的习惯是在 Navicat 里把核对过的表结构导出成一份带注释的 HTML 或 Markdown替换掉原始 docx作为后续团队协作的数据库基线。哪怕团队换人新来的兄弟照着这份结构文档就能写查询不用反复去数tinyint到底是 0 还是 1。最后的验证建议是拿一个真实业务问题走一遍比如“统计上月已付款且未发货的订单总额”。打开字典定位到ecs_order_info的pay_status和shipping_status确认 3.6 版分别用2表示已付款、1表示未发货再写一条 SQL 跑通业务方认了这套字典方法论就真正落地了。数据库结构这东西就怕“用着用着发现表对不上”提前做一次库表结构校验相当于给项目吃了一颗后悔药等出问题再回头翻文档成本高得多。希望帮到你。本文还有配套的精品资源点击获取