本系列适合没有技术背景的菜鸟看,是我阅读唐韧老师的《产品经理必懂的技术那些事儿》的笔记,欢迎产品菜鸟们一起交流~
第二篇是数据库,包含数据库概述、关系型与非关系型数据库介绍
1. 数据库基础
1.1 定义
数据库类似于一个数据存储的仓库,按照一定的规则存储,可以进行增删改查操作。
1.2 分类
分为关系型数据库(MySQL为代表)与非关系型数据库(MongoDB和CouchDB为代表)。
区别:关系型数据库基于关系模型,折射现实世界中的实体关系。
非关系型数据库以相对松散的方式存储数据,不像关系型数据库有严格的数据结构约束。
1.3 基本操作
对数据库可进行增、删、改、查的操作。
2. 关系型数据库
2.1 定义
关系型数据库是基于关系模型的数据库,关系模型折射现实生活中的实体关系,通过实体关系模型的方式表现出来。
《产品经理必懂的技术那些事儿》配图实体关系模型:现实生活中,人是一个实体、车是一个实体,人跟人之间会有关系,人跟车也会有关系。
实体:一系列属性的结合,比如人这个实体就有职业、年龄、性别的属性。属性也可以成为一个实体,比如职业、性别都可以单独成为一个实体。
实体关系:一对一(1:1)、一对多(1:N)、多对多(M:N)。
比如在电商中如果用关系型数据库,实体就包括商品、订单,之间有多对多的关联关系。
实体模型再往下具象,在数据库中实际表现为数据库表和表之间的关系。
2.2 数据库表和表的关系
数据库表与实体模型的对应关系:实体→表,属性→字段,实体关系→数据表关系
定义规则:在定义表的时候需要定义表名、字段名、字段类型。表名和属性名只能用英文命名。
字段类型:与数据类型一致,分为整型、字符型等。
主键:表中第一个属性的名字叫做 表名+id ,作为表中数据的唯一性标记。例如“人”的表,主键就是peopleid,1号、2号……每个peopleid都唯一对应表中的一个人。
《产品经理必懂的技术那些事儿》配图关联方法:通过关联对应的主键实现实体/表之间的关联。如图就是在people中关联了professionId。
《产品经理必懂的技术那些事儿》配图2.3 数据库操作语言(SQL)
SQL语句:用来操作关系型数据库的操作命令
示例:
建表:create table people (peopleId varchar(30) primary key, name varchar (50))
建表包含peopleId与name两个字段,并通过primary key指定peopleId为主键,varchar (30) 表示字符型最大长度30字符
已建表中插入数据:
insert into people values('001','张三')
往people表中插入了值"001"张三”,按顺序对应到表中字段
对数据进行修改:
update people set name=‘李四’ where peopleId= '001'
更新people表中peopleId为001的这条数据,把名字改为李四
查询数据:
select * from people 查询表中所有的数据
select peopleId,name from people 查询表中的peopleId和name两个字段的数据
select * from people where peopleId='001' 查询表中peopleId为001的这条数据的所有字段
select * from people where age > 20 查询people表中年龄大于20岁的人
3.非关系型数据库NoSQL(Not Only SQL)
3.1 定义
松散的不按照严格的结构规范进行存储的数据库。
适合场合:对存取要求比较高且并发处理比较高的场合,例如对网站访问数据的统计。
3.2 四大分类:
键值对(key-value)存储数据库(如:Tokyo Cabinet/Tyrant, Redis, Voldemort, Oracle BDB)、列存储数据库(如:Cassandra, HBase, Riak)、文档型数据库(CouchDB, MongoDb)、图形数据库(Neo4J, InfoGrid, Infinite Graph)。其中文档型数据库是比较主流的。
3.3 以MongoDb为例
数据以类似文档的方式进行存储,每个文档都有唯一标识和版本号。以键值对(key-value)的方式表示和存储数据。据,使用JSON格式的数据进行表示和存储。
{
"peopleId": "001",
"name": "张三",
"sex": "male",
"age": "28",
"profession": "建筑师”
}
这就存储了5个“key-value”形式的数据,冒号左边的是key、右边的是value。
键值对的嵌套:
[
"id": "001"
"name": "张三”
"profession": {"id: "1", "professionName": "建筑师“”}
}
键profession的值也是一个JSON结构。
4.实际工作建议
在设计功能时,工程师常常会提出跟数据库相关的问题,如新功能影响到现有数据库的设计、有些字段是目前数据库里没有的、这个功能导致了数据库结构的变化。所以要求我们在对已有功能修改时注意两个问题:
一是新的设计应该对数据库做何种调整,是新增数据库字段还是要修改或删除原有字段
二是新设计对原有数据的兼容性问题
在沟通时工程师常常根据字段的名字来说明问题,产品需要知道字段是代表哪个产品功能中的哪一个具体信息。
网友评论