写给新人的数据库指南

在数据分析师的职业生涯中,数据库与SQL会是他们性价比最高的技能之一。

数据库是逻辑上的概念,它是一堆互相关联的数据,放在物理实体上,是一堆写在磁盘上的文件,文件中有数据。这些最基础的数据组成了表(table),我们把它想象成一张Excel的sheet。

数据表的抽象概念如上图。

ID是数据库中重要的概念,叫做唯一标识符/主键,用来表示数据的唯一性。我们把它理解成数据的身份证号。我知道身份证,也就知道数据在哪里了。

ID不会有现实的业务意义,就是一串单纯的数字,每张表只能有一个主键。

数据库是表的集合,一个数据库中可以放多张表,我们给每张表命名,表与表之间能互相联系。

联系就是数据能够对应匹配,正式名称叫联接,对应的操作叫做Join,我们想象成Excel中的vlookup。

上面就是两张表,用户和教育背景,看上去能够使用姓名进行匹配,可是这里出现了两个张三,一个是北京大学,一个是上海大学,究竟哪个张三才能和用户表的张三对应上?都不能。

也许清华大学还有张三,复旦大学,交通大学也有,毕竟全中国姓名相同的人那么多。正确的用法应该是使用ID联接,而不是姓名。ID是产品、运营和数据人员们在工作中接触最多的内容之一,用户ID文章ID商品ID等,如果大家还不了解,这里需要掌握。

上图就是正确的用法,用户表和教育表能够通过ID联接,可能有人疑问,用户ID为1和6的,还是不能对应呀?这个不要紧,因为在数据库中,不是所有的表都能一一对应,存在部分匹配的可能性,也许那个叫秦路的,他没读过书,教育背景表中自然没有记录了。

当然,数据库的设计还要更严谨,一般每张表都会有主键(主键不是必须,但是从效率优化上肯定会加),这个主键也不能是其他表的主键,防止产生冲突。

这样就靠谱了,用户ID是用户表的主键,教育背景ID是教育背景表的主键,我们在教育背景表中加入一个字段叫用户ID,它是专门用来联接用户表的,它不是主键。

是不是有点绕?实际上,并不是所有名字带ID的都叫主键,这一点要搞清楚。

数据库中,表的名字和字段应该是英文。如果是主键,只要叫id即可,你要关联其他表,则以「表名_id」作为联接。

关联后的逻辑如下,这种方式叫全联接,匹配不上的都用Null表示,匹配上的我用橙色表示。联接是关系型数据库中的核心概念,是操作的基础,现在迷糊不要紧,多练习几次就好了。

如果现在我有一张新的表,需要关联education,聪明的你也一定想到方法了吧。

了解上面的概念,你就知道什么叫关系型数据库,简单说,它是由多张能互相联接的二维行列表格组成的数据库。

关系型数据库是基于关系代数模型发展而来。常用的数据库有SQL Server、MySQL、Oracle等,我们后续学习都以MySQL为主。

接下来是安装MySQL。

我们去MySQL的官网下载,版本5.6以上即可。

按照教程完成后,我们通过命令行查询知否成功,Win和Mac的操作不一样。

我们当然不会在这么丑的界面上操作MySQL啦,我们还需要安装GUI,这是为我们提供操作界面的。

Mac用户推荐SequelPro,Win用户推荐WorkBench。后续我会在SequelPro操作。MySQL的默认用户名和密码均是root,建议重新设置一下。

如果大家有疑问,可以去网上搜索相关教程,不安装MySQL也是可以的。因为数据分析师大多数情况是用在线数据查询平台操作,安装只是为了方便演示。不想要安装的同学,可以在SQLZoo练习,以后我也会讲解。

输入账号密码后进入操作界面,数据库我命名为qin。左侧栏是数据库中的Table列表,现在为空。右侧是表相关的操作和信息。

因为现在没有数据,我们加载曾经使用过的练习数据。数据分析师不需要学习如何创建删除增改表的操作,因为用不到,我只会讲解查询,大家有兴趣可以自行了解。

任何MySQL的GUI工具,都能加载CSV,一般叫import。

Encoding选择Autodetect,其余按默认。

接下来需要设置各字段的数据类型,系统会帮我们自动选上,这里不用改动。int代表整数数值,varchar代表字符串(中文英文标点符号这类),括号里面的数字是允许存储字节,这块也不要深入理解,只要知道常用的字段类型即可。

给表取个名字,载入后,就将CSV成功导入到数据库了,能够进行数据查询的操作。

这张表没有设置主键,主要是练习,所以跳过了这一步骤。

大家可能会遇到导入的数据是乱码,这是系统编码之间的差异,是utf8和gbk之间的冲突,网上有相关解答,搜索关键词即可。

到这里,大家已经成功地在自己电脑上创建了数据库。我们在之前文章已经针对练习数据进行了Excel操作、BI分析,接下来学习SQL。可能你们也猜到了,后续还会有统计学、Python编程。

作者:秦路

时间: 04-29

写给新人的数据库指南的相关文章

『数据库』随手写了一个 跨数据库 数据迁移工具

随手写了一个 跨数据库 的 数据迁移工具:>目前支持 SQLServer,MySql,SQLite: >迁移工具 可以自动建表,且 保留 主键,自增列: >迁移工具 基于 Laura.Source  ORM框架 开发: >迁移工具 支持 崩溃恢复(重启迁移工具,将会继续 未完成的 数据迁移): >每张表一个事务(即使  表中有 >100W 的数据,也是一个事务完成): >迁移后 的 自增列 和 原数据库 保持一致: 只是展示一下,直接上图片: 操作工具: 迁移工具

Java、JVM和操作系统之间的关系,写给新人,

来张图:这个帖子写给新人的,老玩家就直接无视他,因为这个完完全全是白话基础原理. 解释:上面的图是从上往下依次调用的关系. 操作系统(Windows/Linux)管理硬件,让硬件能够正常.合理的运行,当然各种硬件的驱动实现了操作系统的接口,操作系统调用这些接口就能管理硬件,操作系统还像程序员提供了一层接口,叫做系统呼叫层,程序员可以面向这一层的接口编程,来实现对计算机的控制,而不同的操作系统(或者说不同的CPU架构)所提供的接口都是不一样的,Windows和Linux提供给的那肯定是完全不一样的

分享一篇朋友写的关于共享性数据库的文章

原文地址:http://www.cnblogs.com/cloud_china/p/3799907.html 剖析云平台中的“共享型数据库” 摘要: 随着云计算的出现,出现了很多新的名词,像弹性扩容,平缓迁移,资源隔离等.目前我就“共享型数据库”做一下解释,下面就以京东云擎的云数据库为例,给大家剖析什么叫“共享性数据库”.  这个是我第一篇帖子,我首先自我介绍一下,我从事IT行业10年,在多年以前是一名架构师,现在在一家互联网企业做产品经理,下面的仅仅是因为个人与行业一些从业人员交流得到的心得以

自己写好的pdo数据库抽象层 mysql为例

class pdo_database{ function __construct($type_database,$host_name,$dbname,$user_role,$pass_role,$sql){ $dbms=$type_database; //数据库类型 Oracle 用ODI,对于开发者来说,使用不同的数据库,只要改这个,不用记住那么多的函数了 $host=$host_name; //数据库主机名 $dbName=$dbname;    //使用的数据库 $user=$user_r

1.30 Java周末总结①控制显示多少位小数位②读txt和写txt模拟ATM数据库

1.30 Java周末总结①控制显示多少位小数位②读txt和写txt模拟ATM数据库 一.控制显示多少位小数位 有些时候小数位数太多了,想保留多少位小数,这里介绍一种利用四舍五入保留想要的小数位数Math.round四舍五入到整数位,所以把小数乘以整10或整百,在除以整10或整百,就得到想要的位数了 double a = 3.14159265359;double weishu = 5;double b = Math.pow(10,weishu);a = Math.round(a*b)/b; 二.

经过多次的测试,最终写出了access数据库一次插入多条数据

OleDbConnection inconn = new OleDbConnection("Provider=Microsoft.Jet.OleDb.4.0;Data Source=DB.mdb"); inconn.Open(); OleDbTransaction myTrans = inconn.BeginTransaction(); OleDbCommand incmd = inconn.CreateCommand(); incmd.Transaction = myTrans; s

技术无关 自己写的项目 一些数据库的想法

不知道一个论坛的数据库该怎么设计 姑且先这样搞 user表 +----------+--------------+------+-----+---------+----------------+| Field    | Type         | Null | Key | Default | Extra          |+----------+--------------+------+-----+---------+----------------+| user_id  | int(10

啊啊啊啊啊啊啊今天就写,炒鸡简单 数据库Sqlite的创建,库的增删改查

啦啦啦啦啦啦啦 写这个不用多长时间,我直接写代码注释都是些语句,Sql语句和Api来操作数据库 ,语句的参数我会注释 SQLite数据库创建数据库需要使用的api:SQLiteOpenHelper必须定义一个构造方法: //arg1:数据库文件的名字 //arg2:游标工厂 //arg3:数据库版本 public MyOpenHelper(Context context, String name, CursorFactory factory, int version){ }//数据库被创建时会调

干掉拖延症!写给新人的GTD方法

部门周会上有一个环节是每个同学讲述本周之最:最认可自己的.最反思的.最困惑的.其中,最认可自己,代表自己阶段性的成就感,在从外界取得成就感之前,首先自己要认可自己.最反思,要注意,不能只反不思,要记录下来,看看自己再过一段时间是否在这个反思点上有所提升.最困惑的,则可以抛出来,看看别的同学是否可以给予一些帮助和建议. 所以,每周,我们都要从最困惑的议题中带回一个自己研究并于下周进行分享.本周我就带回了一个新人提出的“时间管理”方面的困惑. 那么在为新人想一些时间管理方面自己所仅有的经验时,我把议