近期,由于疫情原因,大多数数据小伙伴们和笔者一样,由于岗位非一线业务人员,可以在家远(zi)程(yu)办(zi)公(le)。那么在家办公的闲暇之余,可以上手尝试设计、搭建、优化一个自己的个人数据库。既可以进一步熟悉、理解公司的业务逻辑,又可以get新技能,并在优化调整数据库的过程中提高SQL代码能力,何乐而不为。
01 数据库简介
数据库(Database):即按照特定的方式存储、管理和使用查询数据的“仓库”,具有多用户共享(通过设置用户和对应权限)、操作便利、稳定高效等优点。
常见的数据库模型可分为:关系型数据库和非关系型数据库,目前,在多数传统行业和中小型企业,仍以关系型数据库为主。
关系型数据库:即二维表格形式,将复杂的数据结构转化为较为简单的二元关系,多张二维表之间通过外键建立表间关系(类似于Excel表中的多个sheet页,互相通过VLOOKUP关联匹配)
SQL语言:结构化查询语言的简称,是应用较广泛的一种关系型数据库查询语言,通常用来存取、查询、更新和管理数据库(是数据工作者需要掌握的基础技能之一)。
02 Mysql和Navicat
Mysql:典型的、较为普及的关系型数据库软件,类似的软件有:Orancle、Access、SQL Server等。Mysql是一个开源软件,可直接在Mysql官网下载正版安装包。
Navicat:一个对使用者十分友好的数据库管理工具,用户界面直观简单,初学者通过查看产品文档,可以迅速上手创建数据库、新建表、设计表等技能。
1、Mysql下载安装
官网下载地址:dev.mysql.com/downloads
(注:如无特殊需求,下载安装时,可选择免费版本)
2、Navicat下载安装
官网下载地址:navicat.com.cn/products
(注:Navicat为收费软件,试用版可免费试用14天)
03 举个例子:从0搭建一个数据库
例子本例:王光荣老师,一名光荣的人民教师兼高一(1)班班主任。以下内容从王老师的角度展开。
1、 明确业务需求:
梳理业务逻辑,充分理解业务的现实数据需求,并考虑到后期可能的业务变化所带来的数据库的调整;
简要分析王老师的需求:
(1) 高一(1)班学生专属档案,便于筛选国家/社会助学金、勤工俭学、文艺晚会、运动会名单等;
(2) 保留、记录和便捷查询每个学生的学习成长轨迹(月考等考试的数据、变化趋势、个人优势劣势分析、查漏补缺的方向),便于向学生发出预警、指导等;
(3) 各学科/教师教学质量评价及阶段性变化趋势。
2、 数据结构设计:
常用的主要有星型结构和雪花型结构,均由事实表和维度表构成。
第一步:确定数据粒度和维度,即可以确认数据记录的最小级别和维度。原则上,应当选择最细级别的粒度,以保证事实表的实际应用型;
第二步:维度应当选择能够清晰描绘业务过程的维度,和事实表的结合可以满足业务需求。
以王老师为例:学生每一次模考都包含多个学科的考试成绩,模考包含学科考试,此时事实表的粒度应选择:学科考试成绩;相关的维度有:学生维度、学科维度、模考维度等。
(1) 星型结构
所有维度表都可以直接和事实表连接查询,不存在渐变维度。
优点:a、因数据存在冗余,多数查询单表即可满足查询,一般情况下查询效率要高于雪花型结构;b、设计和实现较为简单。
缺点:冗余数据。
以王老师为例:
(2) 雪花型结构下的数据结构设计
部分维度表不可以直接和事实表连接查询,需要二次连接。
优点:冗余较少、规范化。
缺点:a、模型较为复杂,设计和理解使用有一定难度;b、多次连接查询影响效率。’
以王老师为例:
3、 数据准备:
a、 原始线下数据清洗,保证入库数据的质量(可据数据体量、质量选择性使用Excel、PBI等工具);
b、 将清洗后数据,按照设计的数据结构、字段整理成对应的二维表。
4、 数据入库(以Navicat为例)
a、 创建数据库
连接Mysql数据库-选中已连接的数据库-右键-新建数据库-输入数据库名称(尽量使用英文)-字符集选择utf8-unicode-排序选择utf8_general_ci-点击确定-查看新建数据库:work库。
b、 将整理好的二维表分别导入数据库
选中work数据库 表-右键-新建数据表-录入表字段信息-保存-输入表名:grade_info-确定;
打开表grade_info -导入-选择导入类型(根据个人需求选择对应类型)-选择导入文件-确认目标栏位和源栏位匹配是否正确-添加:添加记录到目标表-完成-导入完成后右键刷新表grade_info即可。
(注:导入之后数据显示有问题,例如中文显示乱码。
第一步:请检查数据库编码是否为utf8,查询代码:
show variables like ‘char %’;
如不是,需修改数据库编码,代码如下:
set character_set_client= utf8;
set character_set_connection =utf8 ;
set character_set_results=utf8 ;
第二步:编码修改之后,如仍有问题,检查导入文件的数据格式设置是否正确,如日期格式的设置;若仍然有误,可在格式调整之后,另存为csv-utf8格式文件,重新导入即可。)
5、 检查数据库,sql代码测试是否数据库运行情况。
6、 在长期的使用过程中,不断的调整优化数据库,日复一日、年复一年的进步。