1.关系型数据库
关系型数据库是一种基于关系模型的数据库,关系模型折射现实世界中的实体关系,将现实世界中各种实体及实体之间的关系通过关系模型表达出来。
主流的关系型数据库:MySQL、SQL Server、DB2、Oracle、SQLite
在设计产品角色和逻辑关系时,需要明白产品背后的数据库结构是如何设计的。
关系型数据库:数据库表和表的关系
关系型数据库中的实体关系模型,在关系型数据库中可以通过数据库表和表之间的关系具象表示这种模型,表就是二维表格,有表的名字,表的各项标题名。
在数据表中,字段名含有“Id”的字段名,是用来做唯一性标记的,称为“主键”,理论上每一个数据库表的属性里面都有一个用来做唯一性标记的id。
关系型数据库:数据库字段和字段类型
在定义一个数据库表的时候,需要定义表名、字段名及字段的数据类型。
数据库表字段类型及关系图“people”表中的“profession”字段与“profession”表中的“professionId”字段关联起来,通过这种关联,两个表就产生了一个关联关系。
数据库表结构通过“peopleId”唯一表示了一个具体的人,然后存储了包括姓名、性别和职业等信息。职业信息使用了另外一个表来存储,然后通过关联两个表的对应字段进行联系。可以看到在“people”表中的字段“profession”存储的数据是整型数字 1 ,对应在“profession”表中也有一个整型字段“professionId”,对应值是 1 。而代表的的职业是“建筑师”。
如果有新增的职业,只需要往“profession”表中添加数据,通过在“people”表引用“profession”表的字段表示职业。
数据库表字段的确定和表关系的设计在设计数据库初期就需要确定,在设计产品时要知道产品背后使用的数据库是哪一种类型的数据库,并且要了解数据库的基本结构,知道每一个实体间的关系是如何设计的。从数据的角度考虑产品的设计逻辑,设计出更符合数据模型的产品。
数据库操作语言(SQL)
SQL即结构化查询语言,是一种用来操作关系型数据库的编程语言,可以理解为对数据库的操作命令。可以使用SQL来进行对数据库数据的增删改查。
示例
创建“people”数据表
Create table people(peopleID vachar(30)primary key,peopleName vachar(50))
primary key:设为主键
在“people”表中插入一条数据
insert into people values (“001”,“Bruse”)
values(关键字):值,表示插入的数据的值是什么。(一般与insert into联用)
在“people”表中修改一条数据
updata people set name=“Jacky” where peopleID=“001”
set(关键字):表示修改哪一个字段的值。
在“people”数据表中查询所有数据
Select*from people
*:表示所有
在“people”数据表查询一个或多个字段的数据
Select peopleID,peopleName from people
在“people”数据表中查询某一个数据
Select*from people name=“Bruse” where peopleId=“001”
在“people”数据表中查询某一个区间的数据
Select*from people age<30
2.数据库索引
数据库中的索引就是数据表中数据的目录。
数据库索引右边是一个存储了用户的姓名和性别的数据表,同时标记了数据表中每一行数据的具体位置。左边是针对数据表中性别这一列的一个索引,通过这个索引我们可以 i很快知道性别为男的用户分别在数据表中的什么位置。
3.非关系型数据库
非关系型数据库是一种相对松散且可以不按照严格的结构规范进行存储的数据库。一般叫作:NoSQL。在存储的形式和使用上有别于关系型数据库。
主流的非关系型数据库:MongoDB与CouthDB
在关系型数据库中,我们使用二维表与字段来规范数据存储。在非关系型数据库中,使用键值对的方式表示和存储数据,键值对就是“Key-value”的形式,类似在关系型数据库表中的字段名和字段名对应的值。在MongoDB中,使用JSON格式的数据进行数据表示和存储。
{
"peopleID":"001",
"peopleName":"Bruse",
"age":"24",
"sex":"man",
"profession":"Designer"
}
以“key-value”的形式存储,冒号左边的是key,冒号右边的是value,基于这个结构,可以无限扩展其他的键值对,而且键值对可以进行嵌套。
{
"ID":"001",
"Name":"Bruse",
"age":"24",
"sex":"man",
"profession":{"id":"1","professionName":"Designer"}
}
键“profession”对应的值也是一个JSON结构,通过这种嵌套的方式可以很灵活的扩展数据表示,对数据存储方式也更灵活。
非关系型数据库适合应用在一些对存取要求比较高且并发处理比较高的场合,例如对网站访问数据的统计。现阶段与关系型数据库呈互补状态。
所有的功能最终都将数据通过产品功能表现出来,尤其是对已有功能进行修改时候,是需要新增数据库字段,还是修改或删除原有字段。新的设计对原有数据的兼容性问题,兼容性问题往往是产品设计中带来最主要的影响之一。
每一个数据在数据库李都对应一个数据库表字段,每一个字段都有自己的名字。需要了解的是字段代表的含义。例如:最常用的字段都代表是什么信息,在客户端与服务端进行数据传递时,对应字段的值是什么,字段是代表哪个产品功能中的信息。
4.数据存储与恢复
数据存储在数据库中,而数据库在无力上是位于服务器的数据磁盘中,在数据磁盘中,通常划分为两个区域,一个是索引区,另一个是数据区。
索引区与数据区索引:是一个对存储的数据进行快速检索的数据库目录。在数据磁盘区中索引区存储的就是数据的目录。
数据区:就是具体存放数据的区域。
数据存储流程:
当一条新数据需要存入数据库中的数据磁盘中,首先会在索引区建立一个该数据的目录索引。然后再将具体的数据存储在数据区当中。
删除数据时:
当删除一条数据时,只会在索引区将该数据的索引删除,在数据区中仍保留该数据。直到新的数据存储时,会将这些已经没有了索引的数据区数据覆盖掉。
恢复数据时:
当需要恢复已经删除的数据时,在数据区检索那些失去索引的数据,重新建立索引,就能完成恢复数据任务。
删除一条数据都是优先从逻辑上删除,并不会立刻完成物理删除的操作。如果要恢复数据,在恢复数据前不要对数据库有其他新的写入操作,这么做的目的是为了防止数据库中需要被恢复的数据被覆盖。也可以为已经删除的数据进行特殊标记,将这些已经删除的数据存储在另外一个数据库表中或者对数据做一个已删除的标记,当需要恢复室,修改数据标记即可,并没有真正删除数据。
在互联网产品设计中,设计用户删除数据的时候,一般都是“假删除”,意思是对数据进行删除标记,实际上并没有从物理上删除数据。通常情况是存储某一个时间范围内的已删除数据,超过时间,数据就进行物理删除。
从数据角度看产品
每个对象在数据库中都是一个实体对象,表示一个实物。
登录功能在产品角度是用户输入用户名和密码完成身份验证。如果从数据角度看,是查询了用户这个实体对象表中的用户名和密码两个属性。
产品都是在一些功能的基础上实现数据的流转,通过用户对产品的操作和具体的业务流程,实现对输入数据的处理和输出从数据的存储。在设计产品时,需要先明确在整个产品业务流程中有哪些实体对象,产品所设计的数据在系统内是如何流转的。
产品数据流转产品中的业务逻辑实际上是由不同的实体对象按照一定的业务规则和顺序组合起来的。
总结
关系型数据库通过二维表及数据库表字段和字段类型表示数据。在关系型数据库中,可以将现实世界中的实体折射成二维表,然后通过实体关系关联不同的表,构成数据存储的关系模型。通过主键关联其他的表,同时,可以使用SQL(结构化查询语言)对数据库进行增删改查。
非关系型数据库是一种新的数据存储模型,以相对松散的结构进行数据存储。
网友评论