1. 数据仓库命名规范到底在解决什么问题
刚入行做数据那会儿,我最怕的不是写复杂的SQL,也不是调优慢查询,而是接手一个已经跑了半年的数据仓库。表名像天书一样,t_001、tmp_a、test_final_v2混在一起,字段名一会儿是拼音一会儿是英文缩写,问了一圈没人说得清哪张表是干啥的。那种感觉就像走进一个没有门牌号的巨大仓库,你知道东西在里面,但找一个螺丝钉得花一整天。
数据仓库命名规范,说白了就是给这个仓库里的每一个货架、每一个箱子、每一个标签定一套所有人都得遵守的起名规则。它解决的核心问题只有一个:降低沟通成本和维护成本。当团队从3个人变成10个人,从10个人变成30个人的时候,如果没有一套统一的命名约定,数据资产就会迅速变成数据负债。
这套规范适合谁来参考?如果你是数据仓库的架构师、数据开发工程师、数据分析师,或者是一个正在从零搭建数仓团队的技术负责人,那这套东西你迟早要面对。哪怕你现在只是一个人维护几张表,提前把命名规范定好,后面扩展的时候会省下大量重构的时间。我见过太多团队在业务跑起来之后才想起来要统一命名,结果就是几百张表要重命名,下游任务全部报错,那场面相当壮观。
命名规范不是银弹,它不能解决数据质量的问题,也不能让慢查询变快。但它是一个团队数据治理水平的直接体现。一套好的命名规范,能让新人在三天内看懂数仓结构,能让数据分析师不用问人就能找到想要的表,能让运维在排查问题时快速定位到责任人和业务域。这些东西听起来很虚,但真正在项目里踩过坑的人都懂,这些“虚”的东西恰恰是最耗时间的。
2. 命名规范的整体设计思路与分层逻辑
2.1 为什么不能想到什么起什么
很多人觉得命名就是个形式主义,表能跑就行,名字随便起起无所谓。我刚开始也这么想,直到有一次排查一个数据对不上的问题,花了整整两天时间,最后发现是两张表名字太像,开发同学在写调度任务的时候引用错了。一张叫user_order,一张叫order_user,就换了个顺序,逻辑完全不一样。这种坑踩一次就够你记一辈子。
命名规范的本质是信息编码。一个好的表名应该像身份证号一样,不用打开看内容,光看名字就能知道这张表属于哪个业务域、什么分层、什么类型、什么粒度、更新频率大概是什么样。这不是为了好看,是为了在几百上千张表的环境里,让人和机器都能快速识别和定位。
从设计思路来讲,我倾向于把命名规范分成三个维度来考虑。第一个维度是分层标识,数仓通常分为ODS、DWD、DWS、ADS这几层,每层的数据来源、加工方式、使用场景都不一样,必须在名字里体现出来。第二个维度是业务域标识,比如交易、用户、商品、营销、物流,每个业务域有自己的主题,表名里要能看出来。第三个维度是数据粒度与更新方式,是全量快照还是增量流水,是天级还是小时级,这些信息直接影响下游怎么用这张表。
2.2 分层设计是命名的骨架
数仓分层不是新鲜概念,但每一层的命名规则怎么定,不同团队有不同的做法。我见过比较清晰的一种做法是:层次前缀 + 业务域 + 主题 + 粒度/更新标识。比如dwd_trade_order_detail_di,一眼就能看出来这是DWD层的交易域订单明细表,日增量更新。
为什么要用下划线分隔而不是驼峰?因为在SQL里写表名的时候,下划线更符合大多数人的输入习惯,而且不容易因为大小写问题在不同操作系统上出幺蛾子。MySQL在Linux下默认表名大小写敏感,Windows下不敏感,用下划线全小写能避免很多跨环境的麻烦。
分层的具体命名建议是这样的:
| 分层 | 推荐前缀 | 说明 | 示例 |
|---|---|---|---|
| ODS | ods_ | 原始数据层,尽量与源系统保持一致 | ods_mysql_order_info |
| DWD | dwd_ | 明细数据层,做过清洗和规范化 | dwd_trade_order_detail_di |
| DWS | dws_ | 汇总数据层,按主题聚合 | dws_user_action_1d |
| ADS | ads_ | 应用数据层,直接面向报表和接口 | ads_sales_report_1d |
| DIM | dim_ | 维度表,统一管理 | dim_product_full |
这个表看起来简单,但实际落地的时候有很多细节要抠。比如ODS层要不要保留源系统的表名?我的建议是保留,但加上源系统标识和同步方式。ods_mysql_order_info表示从MySQL同步过来的订单信息表,ods_hive_user_log表示从Hive数仓同步的用户日志。这样在排查数据来源的时候非常方便。
2.3 业务域划分的颗粒度怎么把握
业务域划分太粗,表名区分度不够;划分太细,又记不住那么多前缀。我的经验是,业务域的数量控制在10到15个之间比较合适。太少了覆盖不全,太多了记不住。常见的业务域包括:交易(trade)、用户(user)、商品(product)、营销(marketing)、物流(logistics)、财务(finance)、风控(risk)、流量(traffic)、内容(content)、客服(service)等。
这里有个坑要注意:业务域的名称一旦定下来,就不要轻易改。我见过一个团队,一开始把营销域叫promotion,后来觉得marketing更准确,就改了一波表名。结果下游有几十个任务引用了旧表名,改完之后漏了几个,第二天报表全空了。所以业务域命名要一次性想清楚,宁可多花半天讨论,也不要后面反复改。
还有一个经验是,业务域的前缀尽量用英文全称而不是缩写,除非这个缩写是行业通用且无歧义的。比如trade就比trd好,product就比prod好。虽然长一点,但可读性高很多。当然像ods、dwd这种分层前缀,因为使用频率极高且含义固定,用缩写是没问题的。
3. 核心细节解析与实操要点
3.1 表命名中必须包含的关键要素
一张表的命名,我建议至少包含以下五个要素中的三到四个:分层、业务域、主题、粒度、更新频率。不是每张表都要全部包含,但核心信息不能丢。
以dwd_trade_order_detail_di为例,拆解一下:
dwd:分层标识,表示这是明细数据层trade:业务域标识,表示交易域order_detail:主题标识,表示订单明细di:更新频率标识,表示daily incremental,日增量
如果是全量快照表,后缀用df(daily full);如果是小时增量,用hi(hourly incremental);如果是小时全量,用hf。如果是月级,用mi或mf。这个后缀规则一定要统一,不能有的表用di有的表用inc,那就乱套了。
维度表的命名相对简单,一般是dim_业务域_维度名_更新方式。比如dim_product_full表示商品维度全量表,dim_user_zip表示用户维度拉链表。拉链表用zip后缀是一个比较通用的做法,表示这是带时间戳的拉链结构。
临时表的命名要特别小心。我强烈建议临时表统一加tmp_前缀,并且加上创建者的标识和日期。比如tmp_zhangsan_order_check_20240501。这样做的好处是,一方面能快速识别哪些是临时表可以清理,另一方面出了问题能知道找谁。我见过太多团队因为临时表命名混乱,导致临时表被当成正式表引用,最后数据出了问题查了半天。
3.2 字段命名的那些坑
表名定好了,字段命名同样重要。字段命名的核心原则是:一致性、可读性、无歧义。
一致性是指同一个含义的字段,在不同表里必须用同一个名字。比如用户ID,不能这张表叫user_id,那张表叫uid,另一张表叫user_no。这种不一致是数据分析师最大的噩梦,每次写JOIN都要去查一下字段名到底是什么。我的建议是,在项目初期就建立一份字段命名词典,把所有通用字段的标准命名定下来,后面所有表都参照这个词典来。
可读性是指字段名要能让人看懂,不要用过于晦涩的缩写。比如amt表示金额,qty表示数量,cnt表示计数,这些是数仓里比较通用的缩写,可以用。但像t1、f2、col3这种就绝对不行。还有拼音缩写也要避免,ddh(订单号)、yhm(用户名)这种,除了你自己没人看得懂。
无歧义是指字段名不能有多个解释。比如status这个词,在订单表里可能表示订单状态,在用户表里可能表示用户状态,在商品表里可能表示商品上下架状态。如果都用status,在跨表查询的时候就会很混乱。更好的做法是加上业务前缀,比如order_status、user_status、product_status。
字段类型和长度也要在命名中有所体现吗?我的观点是不需要。字段类型是技术元数据,应该在数据字典里管理,而不是塞到字段名里。把类型写进字段名,比如user_id_bigint,只会让名字变得冗长且难以维护。类型变了还要改名字,得不偿失。
3.3 命名长度和字符集的约束
表名和字段名的长度,不同数据库有不同的限制。MySQL表名最长64个字符,Hive表名最长128个字符,字段名一般也是128个字符。虽然限制比较宽松,但我不建议把名字起得太长。表名控制在40个字符以内,字段名控制在30个字符以内,是比较合理的范围。太长了写SQL的时候容易打错,而且可读性反而下降。
字符集方面,只用小写字母、数字和下划线,这是最安全的做法。不要用大写字母,不要用中文,不要用特殊字符,不要用空格。有些数据库支持中文表名,但那是给自己找麻烦。跨系统同步的时候,中文表名经常出现乱码问题。数字可以出现在名字中间或结尾,但不要出现在开头,因为有些系统不允许表名以数字开头。
还有一个细节是避免使用保留字。比如order、group、select、from这些SQL保留字,虽然有些数据库允许用反引号包裹后作为表名,但写SQL的时候很容易忘记加反引号导致语法错误。如果业务域确实需要用到这些词,可以加个前缀或后缀,比如order_info、user_group。
4. 实操过程与核心环节实现
4.1 从零开始制定命名规范的完整流程
如果你现在要在一个团队里推行命名规范,我建议按照以下步骤来操作。这个流程是我在几个项目里实际跑过的,踩过一些坑,也总结了一些经验。
第一步:盘点现有资产。先把当前数仓里所有的表列出来,统计一下有多少张表,分别属于哪些业务域,命名混乱的程度如何。这一步的目的是摸清家底,知道要改多少东西。如果表不多,比如几十张,那可以直接重新命名。如果表很多,几百上千张,那就得考虑渐进式改造,不能一刀切。
第二步:确定分层和业务域。召集数据团队的核心成员,一起讨论分层怎么分,业务域怎么划。这个讨论一定要让下游使用方也参与,因为他们的使用习惯直接影响命名规范能不能落地。讨论的结果要形成文档,每个人都要确认。
第三步:制定命名规则文档。把讨论结果写成正式的文档,包括分层前缀、业务域前缀、更新频率后缀、字段命名规则、临时表规则等。文档要写得具体,最好配上正例和反例。比如“正确示例:dwd_trade_order_detail_di,错误示例:dwd_order_trade_detail(业务域和主题顺序颠倒)”。
第四步:试点推行。不要一上来就全量推行,先选一个业务域或者一个新项目做试点。试点过程中收集反馈,看看规则有没有不合理的地方,有没有遗漏的场景。试点跑通之后,再逐步推广到其他业务域。
第五步:建立审核机制。命名规范要落地,必须有审核环节。新建表的时候,要有一个人或者一个流程来检查表名是否符合规范。可以是一个简单的checklist,也可以是一个自动化的脚本。我见过比较有效的做法是,在数据开发平台上加一个表名校验规则,不符合规范的表名直接不允许提交。
第六步:定期巡检和清理。规范推行一段时间后,要定期巡检,看看有没有新的不合规的表名出现。同时要清理临时表和废弃表,避免数仓里堆积大量无用资产。我建议每个季度做一次巡检,把不合规的表名列出来,限期整改。
4.2 命名规范文档的模板参考
下面是一个命名规范文档的模板,你可以根据自己团队的情况调整。这个模板是我在实际项目中用过并且觉得比较实用的版本。
# 数据仓库命名规范 v1.0 ## 1. 通用规则 - 所有名称使用小写字母、数字、下划线 - 名称长度不超过40个字符 - 不使用SQL保留字 - 不使用拼音和中文 ## 2. 分层前缀 | 分层 | 前缀 | 说明 | |------|------|------| | ODS | ods_ | 原始数据层 | | DWD | dwd_ | 明细数据层 | | DWS | dws_ | 汇总数据层 | | ADS | ads_ | 应用数据层 | | DIM | dim_ | 维度层 | ## 3. 业务域前缀 | 业务域 | 前缀 | |--------|------| | 交易 | trade | | 用户 | user | | 商品 | product | | 营销 | marketing | | 物流 | logistics | | 财务 | finance | ## 4. 更新频率后缀 | 后缀 | 含义 | |------|------| | di | 日增量 | | df | 日全量 | | hi | 小时增量 | | hf | 小时全量 | | mi | 月增量 | | mf | 月全量 | | zip | 拉链表 | ## 5. 表命名公式 {分层前缀}_{业务域}_{主题}_{更新频率后缀} 示例:dwd_trade_order_detail_di ## 6. 字段命名规则 - 通用字段使用标准命名词典 - 业务字段加业务前缀 - 布尔字段用is_开头 - 时间字段用_ts或_dt结尾 ## 7. 临时表规则 - 统一使用tmp_前缀 - 包含创建者标识和日期 - 示例:tmp_zhangsan_order_check_20240501这个模板看起来简单,但每一条都是经过实践检验的。比如“布尔字段用is_开头”这一条,看起来是小事,但实际用起来非常方便。is_paid、is_deleted、is_valid,一眼就能看出来是布尔值,不用去查数据字典。
4.3 自动化校验脚本的实现思路
光有文档不够,还得有工具来辅助执行。我写过一个简单的Python脚本,用来校验表名是否符合规范。思路很简单:定义好正则表达式,然后遍历所有表名,不符合的就输出警告。
import re # 定义命名规范的正则 pattern = re.compile( r'^(ods|dwd|dws|ads|dim)_' # 分层前缀 r'(trade|user|product|marketing|logistics|finance)_' # 业务域 r'[a-z0-9_]+' # 主题 r'_(di|df|hi|hf|mi|mf|zip)$' # 更新频率后缀 ) # 临时表单独校验 tmp_pattern = re.compile(r'^tmp_[a-z]+_[a-z0-9_]+_\d{8}$') def validate_table_name(table_name): if table_name.startswith('tmp_'): if not tmp_pattern.match(table_name): return False, "临时表命名不符合规范" else: if not pattern.match(table_name): return False, "表名不符合命名规范" return True, "OK" # 测试 test_tables = [ 'dwd_trade_order_detail_di', 'dwd_order_trade_detail', 'tmp_zhangsan_check_20240501', 'user_profile', ] for t in test_tables: ok, msg = validate_table_name(t) print(f"{t}: {msg}")这个脚本跑出来的结果是:dwd_trade_order_detail_di通过,dwd_order_trade_detail不通过(业务域和主题顺序不对),tmp_zhangsan_check_20240501通过,user_profile不通过(缺少分层前缀)。把这个脚本集成到数据开发平台的提交流程里,就能在源头上拦住不合规的表名。
当然,正则表达式要根据你团队的规范来调整。比如有些团队的业务域前缀可能更多,有些团队可能不需要更新频率后缀。关键是这个思路:用自动化工具来降低人工审核的成本。人工审核容易漏,也容易因为人情关系放水,机器审核一视同仁,效率也高。
5. 常见问题与排查技巧实录
5.1 命名规范推行不下去怎么办
这是最常见的问题。你辛辛苦苦定了一套规范,结果开发同学该咋样还咋样,新表还是乱起名。这种情况我遇到过不止一次,总结下来原因无非几个:一是规范太复杂记不住,二是没有强制约束,三是历史包袱太重改不动。
针对第一个原因,我的建议是简化规范。如果一套规范需要开发同学背半天才能记住,那它大概率推行不下去。核心规则控制在10条以内,最好能浓缩成一张卡片。比如“分层前缀+业务域+主题+频率后缀”这个公式,记住这一个公式就能覆盖80%的场景。
针对第二个原因,必须要有强制约束。可以是流程上的,比如建表必须经过审核;也可以是工具上的,比如在开发平台里加校验规则。没有约束的规范就是一纸空文。我见过一个团队,把命名规范写进了代码提交的hook里,表名不符合规范直接提交失败,效果立竿见影。
针对第三个原因,历史表可以渐进式改造。不要想着一次性把所有表都改完,那是不现实的。可以先把新表管住,然后结合业务迭代,逐步改造旧表。改造的时候要做好兼容,比如建新表的同时保留旧表的视图,让下游有个过渡期。
5.2 业务域边界模糊怎么处理
有些表很难判断属于哪个业务域。比如“用户下单”这个行为,算交易域还是用户域?这种边界模糊的情况很常见。我的处理原则是:看这张表的主要使用场景。如果主要是交易分析在用,就归交易域;如果主要是用户行为分析在用,就归用户域。如果两个场景都用,那就看数据的主要来源,从交易系统来的归交易域,从用户系统来的归用户域。
还有一种做法是设立一个“公共域”或“基础域”,把那些跨业务域的表放进去。比如用户画像表,可能交易、营销、客服都要用,那就放在dim层或者一个专门的common域里。但公共域不能滥用,否则所有表都往公共域里塞,就失去了业务域划分的意义。
5.3 常见问题速查表
| 问题现象 | 可能原因 | 排查思路 | 解决方案 |
|---|---|---|---|
| 表名重复 | 不同业务域用了相同主题名 | 检查业务域前缀是否缺失 | 补全业务域前缀 |
| 下游任务报错 | 表名变更未通知下游 | 检查变更记录和下游依赖 | 建立变更通知机制 |
| 找不到表 | 命名不符合直觉 | 检查命名规范文档 | 统一命名规则并加强培训 |
| 临时表被误用 | 临时表命名不规范 | 检查是否有tmp_前缀 | 强制临时表加前缀和日期 |
| 字段含义不明 | 字段命名有歧义 | 检查字段命名词典 | 建立并维护字段词典 |
| 跨库查询失败 | 大小写不一致 | 检查数据库大小写敏感性 | 统一使用小写 |
这张表里的每一条都是我在实际项目中遇到过的。特别是“临时表被误用”这一条,看起来是小事,但后果可能很严重。临时表通常没有数据质量保障,如果被当成正式表引用,报表数据可能随时出错。所以临时表的命名一定要有醒目的标识,并且要定期清理。
5.4 几个容易忽略的实操心得
第一个心得是保留字段要统一。每张表都应该有一些标准字段,比如etl_time(数据加载时间)、dt(分区日期)、src_system(来源系统)。这些字段的命名要统一,不能这张表叫etl_time那张表叫load_time。统一之后,写数据质量监控和血缘分析的时候会方便很多。
第二个心得是分区字段的命名要规范。Hive表的分区字段通常是dt(日期)或hour(小时)。我建议统一用dt表示日期分区,格式为yyyyMMdd;用hour表示小时分区,格式为HH。不要用date、day、pt这些变体,统一用dt最省事。
第三个心得是命名规范要版本化。规范不是一成不变的,随着业务发展可能需要调整。每次调整都要记录版本号和变更内容,并且要评估对现有表的影响。我见过一个团队改了业务域前缀,但没有通知下游,导致大量任务失败。如果有一个版本化的变更记录,至少能追溯和回滚。
第四个心得是新人入职培训要包含命名规范。很多团队把命名规范写在文档里就完事了,新人来了没人告诉他,结果新人按自己的习惯起名,又制造了一批不合规的表。把命名规范纳入新人培训的必修内容,从源头上减少不合规的情况。
6. 命名规范与数据治理的关系
6.1 命名规范只是数据治理的起点
命名规范看起来是个小事,但它其实是数据治理的入口。一个团队如果连表名都管不好,很难相信他能管好数据质量、数据安全、数据血缘这些更复杂的事情。反过来,如果能把命名规范推行下去,说明团队有基本的执行力和规范意识,后面推行其他治理措施也会顺利很多。
我个人的经验是,从命名规范切入数据治理,是最容易见效的。因为它不涉及复杂的权限设计,也不涉及敏感的数据内容,纯粹是一个技术约定。推行起来阻力相对小,但效果很直观。新来的同学能快速看懂数仓结构,老同学找表效率提升,这些都是实实在在的收益。
6.2 命名规范如何与数据地图联动
现在很多团队都有数据地图或数据资产平台,命名规范可以和这些平台联动。比如在数据地图里,按照分层和业务域来组织表,用户点开交易域就能看到所有交易相关的表,点开DWD层就能看到所有明细表。这种组织方式的前提就是表名里有分层和业务域的信息。
如果表名不规范,数据地图就很难自动归类,只能靠人工打标签。人工打标签的问题是不可持续,今天打了明天可能就忘了。而基于命名规范的自动归类,只要表名符合规范,就能自动归到对应的分类下,维护成本几乎为零。
6.3 命名规范对数据血缘的影响
数据血缘分析是数仓运维的重要工具,能帮我们快速定位数据问题的源头。但血缘分析的前提是能准确识别表之间的关系。如果表名混乱,血缘分析工具就很难自动解析SQL里的表引用关系。而如果表名规范,血缘分析工具就能更准确地构建血缘图谱。
举个例子,如果所有DWD层的表都以dwd_开头,血缘分析工具就能快速识别出哪些表是DWD层,哪些是DWS层,从而构建出分层的血缘关系。如果表名没有规律,工具就只能靠人工配置或者复杂的解析逻辑,效率和准确性都会打折扣。
7. 不同规模团队的落地策略
7.1 小团队:简单够用就好
如果你在一个3到5人的小团队,命名规范不需要太复杂。核心就三条:分层前缀统一、业务域前缀统一、临时表加前缀。字段命名可以宽松一些,但通用字段比如user_id、order_id、create_time这些要统一。小团队的优势是沟通成本低,有问题喊一嗓子就解决了,不需要太重的流程。
但小团队也要注意一点:不要因为人少就不定规范。我见过几个人的小团队,一开始觉得定规范浪费时间,结果半年后表多了,自己都记不清哪张表是干啥的。小团队定规范的成本很低,收益却很高,因为后面扩展的时候不用推倒重来。
7.2 中型团队:流程和工具并重
10到30人的中型团队,光靠口头约定就不够了,需要文档和流程。命名规范文档要写清楚,新表创建要有审核,最好能有自动化工具辅助校验。这个阶段的关键是建立习惯,让所有人都养成按规范命名的习惯。习惯一旦养成,后面维护成本就很低。
中型团队还要注意跨团队协作的问题。如果数仓团队和数据分析团队是分开的,那命名规范要两个团队一起定,不能数仓团队自己定了就完事。数据分析师是表的主要使用者,他们的意见很重要。我见过一个团队,数仓定了规范但没问分析师,结果分析师觉得表名太长不好用,私下里建了一堆视图来简化,反而更乱了。
7.3 大型团队:平台化治理
30人以上的大型团队,命名规范必须平台化。靠文档和人工审核已经管不过来了,必须要有系统级的约束。比如在数据开发平台上,建表的时候表名必须从下拉菜单里选分层和业务域,主题部分手动输入,系统自动拼接成完整的表名。这样从源头上就杜绝了不合规的表名。
大型团队还要考虑多业务线的情况。不同业务线可能有不同的命名习惯,但底层数仓的命名规范要统一。可以在业务线内部允许一些个性化的扩展,但核心的分层和业务域前缀必须一致。这样既能保证整体规范,又能兼顾业务线的灵活性。
8. 我踩过的那些坑和最后的建议
说几个我实际踩过的坑,希望能帮你少走弯路。
第一个坑是规范定得太细。一开始我定了几十条规则,连字段注释的格式都规定了。结果开发同学记不住,执行了两周就放弃了。后来精简到十条核心规则,反而推行下去了。规范不是越细越好,核心规则要少而精,边缘规则可以宽松。
第二个坑是没有考虑历史表。定规范的时候只想着新表,结果历史表还是老样子,新老混在一起更乱了。后来学乖了,定规范的同时就规划好历史表的改造路径,哪怕暂时不改,也要标记出来,让大家都知道这些表是待改造的。
第三个坑是变更没有通知机制。有一次改了几张表的命名,以为下游都知道,结果有个报表任务引用了旧表名,第二天报表空了才发现。后来建立了表名变更的通知流程,任何表名变更都要提前通知下游,并且在变更窗口期保留旧表的视图。
第四个坑是工具校验太严格。有个团队的正则表达式写得太死,连业务域的顺序都不能变,结果有些合理的表名也被拦住了。工具校验的目的是辅助,不是添堵。规则要有一定的灵活性,特殊情况可以走例外审批。
如果让我给正在准备制定命名规范的团队一个建议,那就是:先跑起来,再优化。不要想着一次性定一套完美的规范,那是不可能的。先定一个简单可执行的版本,在实践过程中发现问题再调整。命名规范不是写出来的,是用出来的。用着用着,哪些规则合理哪些不合理就清楚了。
还有一点很重要:规范是给人用的,不是给人添堵的。如果一套规范让开发效率变低了,那它就有问题。好的命名规范应该让人感觉自然,不需要刻意记忆就能遵守。如果你发现团队里大部分人都在抱怨规范太麻烦,那可能需要反思一下规范本身是不是设计得太复杂了。
最后分享一个我一直在用的小技巧:把命名规范的核心规则做成一张卡片,贴在数据开发平台的首页或者团队的wiki首页。卡片上就写最核心的公式和几个正例反例,让大家随时能看到。看得多了,自然就记住了。这比写几十页文档管用得多。