数据仓库之命名规范

数据仓库命名规范旨在确保数据仓库中的各种对象(如数据库、表、列、索引、视图等)具有一致、清晰且有意义的名称。这些规范有助于提高数据的可读性、可维护性和可理解性。以下是一些常见的数据仓库命名规范,涵盖了数据库对象的各个方面。

一般命名规则

1. 清晰和有意义

名称应该清晰明了,能够反映其实际用途或内容。

-- 不好的命名
SELECT * FROM tbl1;-- 好的命名
SELECT * FROM customer_orders;

2. 避免使用保留字

避免使用SQL或其他数据库系统的保留字作为名称。

-- 不好的命名
SELECT * FROM user;-- 好的命名
SELECT * FROM customer;

3. 使用小写字母

使用小写字母,避免使用大写或混合大小写,以提高一致性。

-- 不好的命名
SELECT * FROM CustomerData;-- 好的命名
SELECT * FROM customer_data;

4. 单词间使用下划线分隔

使用下划线(_)分隔单词,提高名称的可读性。

-- 不好的命名
SELECT * FROM customerdetails;-- 好的命名
SELECT * FROM customer_details;

数据库对象命名

1. 数据库

数据库名称应反映其用途或所属的业务领域。

-- 示例
CREATE DATABASE sales_data;

2. 表

表名应为复数形式,反映表中存储的数据类型。

-- 示例
CREATE TABLE employees (employee_id INT PRIMARY KEY,first_name VARCHAR(50),last_name VARCHAR(50),email VARCHAR(100)
);

3. 列

列名应为单数形式,反映列中存储的数据内容。

-- 示例
CREATE TABLE orders (order_id INT PRIMARY KEY,customer_id INT,order_date DATE,total_amount DECIMAL(10, 2)
);

4. 索引

索引名称应包含表名和列名,并以idx为后缀。

-- 示例
CREATE INDEX idx_orders_customer_id ON orders (customer_id);

5. 视图

视图名称应以vw_为前缀,反映其数据来源或用途。

-- 示例
CREATE VIEW vw_customer_orders AS
SELECT c.customer_id, c.first_name, c.last_name, o.order_id, o.order_date, o.total_amount
FROM customers c
JOIN orders o ON c.customer_id = o.customer_id;

6. 存储过程和函数

存储过程和函数名称应以sp_fn_为前缀,反映其功能。

-- 示例
CREATE PROCEDURE sp_get_customer_orders (IN customer_id INT)
BEGINSELECT * FROM orders WHERE customer_id = customer_id;
END;CREATE FUNCTION fn_calculate_discount (amount DECIMAL(10, 2), discount_rate DECIMAL(5, 2))
RETURNS DECIMAL(10, 2)
BEGINRETURN amount * (1 - discount_rate);
END;

命名约定示例

-- 数据库
CREATE DATABASE sales_data;-- 表
CREATE TABLE customers (customer_id INT PRIMARY KEY,first_name VARCHAR(50),last_name VARCHAR(50),email VARCHAR(100)
);CREATE TABLE orders (order_id INT PRIMARY KEY,customer_id INT,order_date DATE,total_amount DECIMAL(10, 2)
);-- 索引
CREATE INDEX idx_orders_customer_id ON orders (customer_id);-- 视图
CREATE VIEW vw_customer_orders AS
SELECT c.customer_id, c.first_name, c.last_name, o.order_id, o.order_date, o.total_amount
FROM customers c
JOIN orders o ON c.customer_id = o.customer_id;-- 存储过程
CREATE PROCEDURE sp_get_customer_orders (IN customer_id INT)
BEGINSELECT * FROM orders WHERE customer_id = customer_id;
END;-- 函数
CREATE FUNCTION fn_calculate_discount (amount DECIMAL(10, 2), discount_rate DECIMAL(5, 2))
RETURNS DECIMAL(10, 2)
BEGINRETURN amount * (1 - discount_rate);
END;

数据仓库分层概述

  1. 原始数据层(Raw Data Layer)

    • 保存从源系统提取的原始数据,未经处理或仅经过基本清洗。
    • 命名规范:通常以raw_stg_作为前缀。
  2. 数据集成层(Data Integration Layer)

    • 保存经过清洗、转换和集成的数据,通常用于进一步分析和处理。
    • 命名规范:通常以int_etl_作为前缀。
  3. 数据汇总层(Data Aggregation Layer)

    • 保存聚合和汇总的数据,通常用于生成报表和仪表盘。
    • 命名规范:通常以agg_sum_作为前缀。
  4. 数据服务层(Data Service Layer)

    • 保存最终提供给用户或应用程序的数据,通常以视图或数据集形式存在。
    • 命名规范:通常以svc_vw_作为前缀。

分层命名规范详细介绍

原始数据层(Raw Data Layer)

原始数据层中的表和对象通常使用raw_stg_作为前缀,后面跟随数据源名称和表名。

-- 示例
CREATE TABLE raw_sales_data (sale_id INT,product_id INT,sale_date DATE,quantity INT,price DECIMAL(10, 2)
);CREATE TABLE stg_customer_data (customer_id INT,first_name VARCHAR(50),last_name VARCHAR(50),email VARCHAR(100)
);

数据集成层(Data Integration Layer)

数据集成层中的表和对象通常使用int_etl_作为前缀,后面跟随数据处理阶段和表名。

-- 示例
CREATE TABLE int_sales_data_cleaned (sale_id INT,product_id INT,sale_date DATE,quantity INT,price DECIMAL(10, 2),cleaned_flag BOOLEAN
);CREATE TABLE etl_customer_data_transformed (customer_id INT,first_name VARCHAR(50),last_name VARCHAR(50),email VARCHAR(100),full_name VARCHAR(100)
);

数据汇总层(Data Aggregation Layer)

数据汇总层中的表和对象通常使用agg_sum_作为前缀,后面跟随汇总维度和表名。

-- 示例
CREATE TABLE agg_sales_monthly (month DATE,total_sales DECIMAL(10, 2),total_quantity INT
);CREATE TABLE sum_customer_purchases (customer_id INT,total_purchases DECIMAL(10, 2),total_items INT
);

数据服务层(Data Service Layer)

数据服务层中的视图和对象通常使用svc_vw_作为前缀,后面跟随数据服务对象的名称。

-- 示例
CREATE VIEW svc_sales_summary AS
SELECT sale_date,SUM(quantity) AS total_quantity,SUM(price * quantity) AS total_sales
FROM int_sales_data_cleaned
GROUP BY sale_date;CREATE VIEW vw_customer_summary AS
SELECT customer_id,full_name,email,total_purchases,total_items
FROM sum_customer_purchases
JOIN etl_customer_data_transformed USING (customer_id);

实践中的分层命名示例

假设我们有一个电商平台的数据仓库,包含订单数据和客户数据:

原始数据层

CREATE TABLE raw_orders (order_id INT,customer_id INT,order_date DATE,product_id INT,quantity INT,price DECIMAL(10, 2)
);CREATE TABLE raw_customers (customer_id INT,first_name VARCHAR(50),last_name VARCHAR(50),email VARCHAR(100)
);

数据集成层

CREATE TABLE int_orders_cleaned (order_id INT,customer_id INT,order_date DATE,product_id INT,quantity INT,price DECIMAL(10, 2),cleaned_flag BOOLEAN
);CREATE TABLE int_customers_transformed (customer_id INT,first_name VARCHAR(50),last_name VARCHAR(50),email VARCHAR(100),full_name VARCHAR(100)
);

数据汇总层

CREATE TABLE agg_orders_monthly (month DATE,total_sales DECIMAL(10, 2),total_quantity INT
);CREATE TABLE sum_customers_purchases (customer_id INT,total_purchases DECIMAL(10, 2),total_items INT
);

数据服务层

CREATE VIEW svc_order_summary AS
SELECT order_date,SUM(quantity) AS total_quantity,SUM(price * quantity) AS total_sales
FROM int_orders_cleaned
GROUP BY order_date;CREATE VIEW vw_customer_summary AS
SELECT customer_id,full_name,email,total_purchases,total_items
FROM sum_customers_purchases
JOIN int_customers_transformed USING (customer_id);

通过遵循这些命名规范,可以显著提高数据仓库的可读性和可维护性,使得数据管理和使用更加高效。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/43316.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于Java中的SSM框架实现学生网上请假系统项目【项目源码+论文说明】计算机毕业设计

摘要 本学生网上请假系统是针对目前学生网上请假系统的实际需求,从实际工作出发,对过去的学生网上请假系统存在的问题进行分析,结合计算机系统的结构、概念、模型、原理、方法,在计算机各种优势的情况下,采用目前最流…

大文件切片上传 So Easy?分享 1 段优质 JS 代码片段!

本内容首发于工粽号:程序员大澈,每日分享一段优质代码片段,欢迎关注和投稿! 大家好,我是大澈! 本文约 1100 字,整篇阅读约需 2 分钟。 大文件切片上传,我一般会分为4步来搞&#xf…

liosam编译问题

编译过程 因为lego安装时已经安装了gtsam因子图优化库,所以不需要再安装 直接编译即可 catkin_make -j8 报错实例 示例:[lio_sam_imuPreintegration-2] process has died,[lio_sam_mapOptmization-5] process has died 解决方法 实际问题是库文件libmetis.so 的位置。…

数据结构与算法:顺序表和链表

目录 一、线性表 二、顺序表 三、链表 一、线性表 线性表( linear list )是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串... 线性表在逻辑上是线…

MyBatis框架学习笔记(一):MyBatis入门

1 MyBatis 介绍 1.1 官方文档 MyBatis 中文手册: (1)https://mybatis.org/mybatis-3/zh/index.html (2)https://mybatis.net.cn/ Maven 仓库: https://mvnrepository.com/ 仓库作用:需要…

(三)前端javascript中的数据结构之集合

集合的特点 1.无序 2.唯一性 3.不可重复 集合相对于前面几种数据结构,比较简单好理解,看看代码实现就能知道他的用法了 集合的创建 function MySet() {this.item {}; } MySet.prototype.has function (value) {return value in this.item; };//增 M…

编程范式之函数式编程

目录 前言1. 函数式编程的定义2. 函数式编程的特点2.1 纯函数2.2 不可变性2.3 高阶函数2.4 惰性求值 3. 函数式编程的应用场景3.1 并行计算3.2 数据分析3.3 Web开发 4. 函数式编程的优缺点4.1 优点4.2 缺点 5. 代表性的编程语言5.1 Haskell5.2 Scala5.3 Clojure 6. 示例代码结语…

Java中常见的消息中间件有哪些,各自的优缺点是那些?

1、ActiveMQ 优点: Apache基金会开发的开源消息中间件,支持JMS规范。 提供多种集群模式和高可用机制。 易于使用,并且与多种编程语言交互良好。 缺点: 在处理大量消息和并发连接时,性能可能不如其他中间件。 对于大型…

状态模式在金融业务中的应用及其框架实现

引言 状态模式(State Pattern)是一种行为设计模式,它允许对象在内部状态改变时改变其行为。状态模式通过将状态的相关行为分离到独立的状态类中,使得状态转换更加明确和简洁。在金融业务中,状态模式可以用于实现交易状…

legoloam算法环境配置和调试笔记

安装gtsam 参考 Ubuntu20.04安装gtsam记录_gtsam安装-CSDN博客 mkdir buildcd buildcmake .. make -

简谈设计模式之设计原则

设计模式是软件工程中解决特定问题的通用解决方案。这些模式提供了设计结构和最佳实践,帮助开发者创建灵活、可重用和可维护的代码。 设计模式分类 创建型模式 用于描述"如何创建对象", 它的特点是“将对象的创建和使用分离”. 包括单例, 原型, 工厂方…

负载均衡(Load Balancing)、集群(Cluster)和分布式(Distributed)

负载均衡(Load Balancing) 定义:负载均衡是指将网络流量或计算任务均匀地分配到多个服务器或计算资源上,以提高系统的整体处理能力、可靠性和响应速度。 特点: 流量分配:负载均衡器根据一定的算法&#x…

HTML5新增的input元素属性:placeholder、required、autofocus、min、max等

HTML5 大幅度地增加与改良了 input 元素的属性,可以简单地使用这些属性来实现 HTML5 之前需要使用 JavaScript 才能实现的许多功能。 下面将详细介绍这些新增的 input 元素的属性。 属性说明属性说明placeholder在输入框显示描述性或提示性文本list为文本框添加选…

React+TS前台项目实战(二十七)-- 首页响应式构建之banner、搜索、统计模块布局

文章目录 前言一、 效果展示二、相关模块1. Statistic统计模块功能分析代码详细注释使用方式 2. Search搜索模块功能分析代码详细注释使用方式 3. banner模块功能分析代码详细注释使用方式 总结 前言 前面我们已经封装了这个项目基本要用到的全局组件了,现在就开始…

ScreenAI ——能理解从信息图表到用户界面的图像和文本算法解析

概述 论文地址:https://arxiv.org/pdf/2402.04615.pdf 信息图表(图表、示意图、插图、地图、表格、文档布局等)能够将复杂的数据和想法转化为简单的视觉效果,因此一直以来都被视为传播的重要元素。这种能力来自于通过布局和视觉线…

在Pycharm中把jupyter notebook转换成md格式

在Pycharm的控制台输入: jupyter nbconvert --to markdown filename.ipynb这里实际上是用的nvconvert 同理,如果是在vscode中写jupyter,也可以用: jupyter nbconvert --to FORMAT notebook.ipynb将其变成ipynb文件(…

普通人必看!AI绘画商业变现全攻略(附教程)

大部分的设计师除了主业以外,都会利用空余时间去接单做副业。 单子包括但不限于产品/品牌LOGO、电商产品图设计、海报、室内设计图等等,单价在几十到上千不等 引起了我的思考,我们普通人有没有机会,也能像他们一样去接单赚钱吗&a…

pytorch- RNN循环神经网络

目录 1. why RNN2. RNN3. pytorch RNN layer3.1 基本单元3.2 nn.RNN3.2.1 函数说明3.2.2 单层pytorch实现3.2.3 多层pytorch实现 3.3 nn.RNNCell3.3.1 函数说明3.3.2 单层pytorch实现3.3.3 多层pytorch实现 4.完整代码 1. why RNN 以淘宝的评论为例,判断评论是正面…

Jackson中ObjectMapper

文章目录 概要ObjectMapper常用方法将Java对象转换为JSON字符串从JSON字符串转换为Java对象读取JSON文件并解析为树结构 概要 ObjectMapper 是 Jackson 数据处理库的核心类,用于将 Java 对象转换为 JSON,以及将 JSON 转换为 Java 对象。 ObjectMapper常…

matplotlib颜色对照表

matplotlib的色彩设置: #------------------------------------------------------------------------------------------------------------------------------- #-------------------------------------------------------------------------------------------------------…