一、了解数据库的意义
一个互联网产品在功能层面上看到的是一个一个根据用户场景设计的功能,但是在数据层却是一个一个的数据模型。其实一个中等级别的产品设计人员,是应该考虑数据库的设计的。将产品的数据划分为一个个的数据模型(其实也就是关系型数据库中的表),在产品的迭代中从数据库的角度思考问题会避免很多逻辑上的问题,而且也为后面的数据分析、人物画像等数据产品经理的方面打下基础。
二、数据库简介
我们每天使用互联网产品会产生大量的数据,例如使用微信产生的很多的聊天记录,在微信里发的朋友圈图片。使用百度搜索的各种内容,使用淘宝进行购物的记录等,这些数据都是存储在数据库中。数据库运行在服务器中,类似于一个进行数据存储的仓库,数据按照一定的规则存储,可以对数据库中的数据进行增删改查的操作。
目前数据库的类型主要是两种,关系型数据库和非关系型数据库。关系型数据库是一种应用比较广泛的数据库,很多产品和系统的后台数据库都是关系型数据库,例如银行的交易系统和电商的商品管理系统,MySQL就是关系型数据库的典型代表。非关系型数据库相对于关系型数据库来说,主要在存储格式和设计思想上存在差异。近年来,非关系型数据库的使用越来越广泛,二者各有优劣,相互补充,现在很多系统同时使用关系型数据库和非关系型数据库,同时使用两种类型数据库的优点是能对不同类型的数据进行存储。
三、关系型数据库
关系型数据库是一种基于关系模型的数据库,关系模型折射现实世界中的实体关系,将现实世界中各种实体及实体之间的关系通过关系模型表达出来。例如,人是一个实体,人与人之间有关系,这种实体和关系间的对应就可以表达为一个关系模型。现实世界中我们可以定义很多实体,一个人是一个实体,一辆车、一栋房子都可以表达成一个实体。实体是一系列属性的集合,人作为一个实体有姓名、年龄、性别等基本属性,人还可以有职业、爱好等附加属性,这些属性的集合构成人这个实体。于此同时,一个属性也可以单独成为一个实体。例如,性别就可以成为一个单独的实体,这个实体里面的属性包括两种,男和女。
在人这个实体和性别这个实体之间存在一个关系,一个人只能有一种性别,所以人和性别这两个实体之间的关系是一对一的。职业也可以构成一个实体,职业的属性包括工程师、建筑师、画家等很多种,人作为实体与职业这个实体的关系是一对多的,也就是说一个人可以拥有多个职业,是建筑师的同时也可能是画家。将这种现实世界中的实体和关系通过关系模型表达出来就可以形成一种数据存储关系,通过这种方式来表达的数据库就叫作关系型数据库。关系型数据库是目前应用比较多的一种数据库模型,主流的关系型数据库有MySQL、Oracle、DB2等,在智能手机中使用的小型轻量级数据库SQLite也是关系型数据库的一种。
对于产品经理来说,在产品设计阶段不需要考虑技术实现选用哪种数据库,这是架构师在进行技术选型时考虑的问题,但在设计产品角色和逻辑关系时,产品经理需要明白产品背后的数据库结构是如何设计的。例如电商产品,如果使用关系型数据库,势必有一个数据实体是专门用来存储商品数据的,而且电商产品有订单,订单在数据库中也是以一个实体的形式存在,商品和订单这两个实体之间又存在一个关联关系,一个订单可以包含多个商品,一个商品也可以出现在多个订单中,所以订单实体和商品实体之间是多对多的关联关系。
3.1数据库表与表的关系
上面提到的关系型数据库中的实体关系模型。在关系型数据库中可以通过数据库表与表之间的关系来具象表示这种模型,表就是我们常用的二维表格,有表的名字,表的各项标题名。例如对于人这个实体,我们可以建立一个表,表的名字可以取名为“people”,在表中可以存在属性,例如姓名、性别、年龄、职业、爱好等。对于职业我们可以新建另一个表,取名为“progression”,表中的属性可以表示为职业名称。需要注意的是,在数据库中,表名和属性名只能用英文命名。表与表之间可以通过关系来链接,如果两个表之间有对应关系,在两个表中就有对应的属性项来标识这个关系。下图表示的是人和职业这两个表:
peopleId | name | sex | age | profession |
professionId | professionName |
在两个数据库表对应人这个实体的表叫作“people”,对应职位这个实体的表叫作“profession”,两个表都预设了一些属性,我们为这些属性取了对应的名字。在“people”表中第一个属性的名字叫作“peopleId”这是一个唯一标识,在数据库表中称为“主键”,表示在数据库表中的一条唯一数据,理论上每一个数据库表的属性里面都有一个用来做唯一性标记的id,这里我们使用“peopleId”来唯一标记一个人,即每个人只会在该表中出现一次。对应在职业表“profession”中,我们也使用了一个叫“professionId”的属性名来表示唯一性。在“people”表中有一个表示职业的属性叫作“professionId”的属性名来表示唯一性。在“people”表中有一个表示职业的属性叫作“profession”,通过这个属性可以和“profession”表产生关联关系,可以将所有的职业信息全部存储在“profession”表中,然后在“people”表中通过“profession”属性和“profession”表进行关联。
3.2数据库字段和字段类型
在关系型数据库中,我们使用二维表来表示关系型模型,在二维表中可以使用属性来表示某一类数据,属性在数据库表中也称为字段。一个数据库表有表名,也有字段名,理论上说,一个数据库表可以有无限个字段,每一个字段名都不重复,且表名和字段名都只能用英文表示。
与编程语言中的数据类型一样,数据库表中的字段同样也有字段类型。在设计数据库表的时候名时候,需要确定的有:表名、字段名、每个字段的数据类型(比如字符串类型、整型、浮点型、日期类型等等)、每个字段是否可以为空、是否设置默认值等等。
数据库表字段的确定和表关系的设计在设计数据库初期就需要确定,设计一个完整且兼容性强的数据库需要非常丰富的经验及对产品需求的充分理解。其实最好是能够在产品经理设计产品的时候就能从数据的角度考虑产品的设计逻辑,这样才能设计处更符合数据模型的产品。
3.3数据库操作语言SQL
SQL(Structured Query Language)即结构化查询语言,是一种用来操作关系型数据库的编程语言(也是一门编程语言哦~),可以理解为对数据库的操作命令。我们可以使用SQL对数据库进行各种操作,包括创建数据库表,为某一个数据库表添加数据,或者对数据进行修改、删除及查询操作等。SQL和编程语言一样,也有固定的语法结构。SQL是一种非常灵活的数据库操作语言,可以进行非常复杂的数据库操作,基本可以满足我们对数据库的一切操作。
四、非关系型数据库
与关系型数据库相比,非关系型数据库是一种相对松散且可以不按照严格的结构规范进行存储的数据库。非关系型数数据库一般叫作NoSQL(Not Only SQL),非关系型数据库没有关系型数据库那样严格的数据结构约束,在存储的形式和使用上有别与关系型数据库。现在主流的非关系型数据库有MongoDB和CouchDB。以MongoDB为例,它是一种典型的非关系型数库,数据以类似于文档的形式进行存储,每一个文档都有对应的唯一标识和版本号。在关系型数据库中,我们使用二维表和字段来规范数据存储,但是在非关系型数据库中,我么可以按照更加灵活的方式定义数据存储。在非关系型数据库MongoDB中,我们使用键值对的方式表示和存储数据,即使用JSON格式的数据进行数据表示和存储。有关MongoDB的更多信息可以在它的官网了解。
声明:上面的内容大多数摘抄于《产品经理必懂的技术那点事儿》书中的部分章节。好的知识,共享共用,希望自己的努力能为国家的富强作出一些贡献。