
点击上方【蓝字】关注我们
上一文中我们详细讲解了命名规范中,表命名规范、字段命名规范、任务命名规范、层级命名规范、自定义函数命名规范等,本文我们将详细讲解视图和存储过程命名规范、综合案例分析、常见的陷阱如何避免、命名规范的工具及最佳实践。
视图和存储过程的命名规范
视图和存储过程是数据仓库中重要的对象,它们的命名同样需要遵循一定的规范,以确保整个系统的一致性和可读性。
(1)视图命名规范
前缀使用:使用 v_ 作为视图的前缀。目的描述:在前缀后添加描述视图目的或内容的词语。数据粒度:如果视图代表特定的数据粒度,可以在名称中体现。全小写:使用全小写字母。下划线连接:使用下划线 _ 连接不同的单词。
-- 创建一个展示每日销售汇总的视图CREATE VIEW v_sales_daily_summary ASSELECTorder_date,SUM(total_amount) as daily_sales,COUNT(DISTINCT customer_id) as unique_customersFROM fact_orderGROUP BY order_date;-- 创建一个展示高价值客户的视图CREATE VIEW v_high_value_customers ASSELECT *FROM dim_customerWHERE lifetime_value > 10000;
(2)存储过程命名规范
前缀使用:使用 p_ 作为存储过程的前缀。动作描述:在前缀后添加描述存储过程主要动作的动词。对象描述:在动作后添加存储过程操作的主要对象。全小写:使用全小写字母。下划线连接:使用下划线 _ 连接不同的单词。
-- 创建一个更新客户终身价值的存储过程CREATE PROCEDURE p_update_customer_lifetime_valueASBEGIN-- 存储过程的具体实现END;-- 创建一个生成每月销售报告的存储过程CREATE PROCEDURE p_generate_monthly_sales_report@year INT,@month INTASBEGIN-- 存储过程的具体实现END;
综合案例分析
假设我们正在为一家在线零售公司构建数据仓库,主要包括订单、客户、产品和销售等数据。
-- 创建数据库CREATE DATABASE prod_ecommerce_dw_v1;USE prod_ecommerce_dw_v1;-- 创建维度表CREATE TABLE dim_customer (customer_id INT PRIMARY KEY,customer_name VARCHAR(100),customer_email VARCHAR(100),registration_date DATE,is_active BOOLEAN,last_login_timestamp TIMESTAMP);CREATE TABLE dim_product (product_id INT PRIMARY KEY,product_name VARCHAR(200),category_id INT,category_name VARCHAR(100),brand_name VARCHAR(100),unit_price DECIMAL(10,2));-- 创建事实表CREATE TABLE fact_order (order_id INT PRIMARY KEY,customer_id INT,order_date DATE,order_timestamp TIMESTAMP,total_amount DECIMAL(12,2),num_items INT,is_paid BOOLEAN,payment_method VARCHAR(50),dt STRING)PARTITIONED BY (dt);-- 创建汇总表CREATE TABLE dws_daily_sales (dt STRING,total_sales DECIMAL(15,2),total_orders INT,avg_order_value DECIMAL(10,2),num_unique_customers INT)PARTITIONED BY (dt);-- 创建视图CREATE VIEW v_top_selling_products ASSELECTp.product_id,p.product_name,SUM(fo.num_items) as total_sold,SUM(fo.total_amount) as total_revenueFROM fact_order foJOIN dim_product p ON fo.product_id = p.product_idGROUP BY p.product_id, p.product_nameORDER BY total_sold DESCLIMIT 100;-- 创建存储过程CREATE PROCEDURE p_update_daily_sales_summary(IN target_date DATE)BEGININSERT INTO dws_daily_salesSELECTDATE_FORMAT(target_date, '%Y%m%d') as dt,SUM(total_amount) as total_sales,COUNT(DISTINCT order_id) as total_orders,AVG(total_amount) as avg_order_value,COUNT(DISTINCT customer_id) as num_unique_customersFROM fact_orderWHERE DATE(order_date) = target_date;END;
在这个案例中,我们可以看到:
数据库名称 prod_ecommerce_dw_v1 清晰地表明了这是生产环境的电子商务数据仓库,版本为1。维度表使用 dim_ 前缀,如 dim_customer 和 dim_product。事实表使用 fact_ 前缀,如 fact_order。汇总表使用 dws_ 前缀,如 dws_daily_sales。所有表和字段名都使用小写字母和下划线。视图使用 v_ 前缀,如 v_top_selling_products。存储过程使用 p_ 前缀,如 p_update_daily_sales_summary。分区字段使用 dt,格式为 yyyymmdd。
常见陷阱如何避免
在实施数据仓库命名规范时,有一些常见的陷阱需要注意:
过度缩写:为了节省空间而过度使用缩写可能导致命名难以理解。避免方法:除非是广为人知的缩写,否则尽量使用完整词汇。不一致性:在不同的表或模块中使用不同的命名风格。避免方法:制定详细的命名指南,并定期审查以确保一致性。使用特殊字符:在名称中使用特殊字符可能导致SQL语句编写困难。避免方法:仅使用字母、数字和下划线。使用保留字:使用数据库的保留字作为对象名称。避免方法:熟悉所使用数据库系统的保留字列表,避免使用这些词。忽视业务含义:纯粹从技术角度命名,忽视业务含义。避免方法:在命名时考虑业务用户的理解,使用业务术语。命名过长:创建过长的名称,超出数据库系统的限制。避免方法:在保证清晰的前提下,控制名称长度,通常不超过64个字符。重复信息:在字段名中重复表名中已包含的信息。避免方法:例如,在 customer 表中,不要使用 customer_name,直接用 name 即可。使用数字前缀:某些数据库可能不支持以数字开头的标识符。避免方法:始终以字母开头命名。忽视未来扩展:命名不考虑未来可能的扩展需求。避免方法:设计命名方案时考虑可能的未来变化,预留扩展空间。混用大小写:在一些大小写敏感的数据库中可能导致问题。避免方法:统一使用小写,即使在不区分大小写的数据库中也是如此。
通过注意这些陷阱并采取相应的避免措施,我们可以创建一个更加健壮和可维护的数据仓库命名系统。
工具和最佳实践
为了更好地实施和维护数据仓库命名规范,我们可以利用一些工具和最佳实践:
数据字典:维护一个详细的数据字典,记录所有表、字段的名称、含义和用途。工具推荐:Confluence, Microsoft Excel, Dataedo命名规则检查器:使用自动化工具检查命名是否符合规范。工具推荐:SQL Prompt, ApexSQL Refactor版本控制:使用版本控制系统管理数据库脚本和文档。工具推荐:Git, SVN自动化文档生成:使用工具自动生成数据库文档,包括表结构、关系图等。工具推荐:Dataedo, SchemaSpy代码审查:实施严格的代码审查流程,确保新添加的对象符合命名规范。工具推荐:GitHub, GitLab, Bitbucket培训和指南:为团队成员提供详细的命名规范指南和培训。定期审计:定期审查数据仓库对象,确保它们持续符合命名规范。元数据管理:使用元数据管理工具来维护和管理数据仓库的结构信息。工具推荐:Alation, Collibra命名模板:创建标准化的命名模板,特别是对于复杂的对象如存储过程和视图。自动化重命名工具:使用工具批量重命名不符合规范的对象。工具推荐:ApexSQL Refactor, Redgate SQL Prompt
import redef check_table_name(name):pattern = r'^(dim|fact|dws|ods|tmp)_[a-z0-9_]+$'if re.match(pattern, name):return Trueelse:return False# 测试table_names = ['dim_customer', 'FACT_ORDER', 'dws_daily_sales', 'TempTable']for name in table_names:if check_table_name(name):print(f"{name} is valid")else:print(f"{name} is not valid")
通过使用这些工具和最佳实践,我们可以更有效地实施和维护数据仓库命名规范,提高整个团队的工作效率和数据质量。

猜你喜欢



公众号:会飞一十六
扫码关注 了解更多内容
点个 在看 你最好看
文章转载自会飞的一十六,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。








