介绍
介绍
昨天我们已经设计好了搜索引擎的模型,搜索引擎包括两个基本模型即:网站和网页。那么接下来我们就要针对这两个模型进行数据库的设计了。
设计数据库要考虑的问题很多,包括数据的大小、字段的数量、读取场景,写入场景等等。
除此之外还要考虑使用什么数据库引擎,因为不同的数据库引擎的特长是不一样的,我们要充分利用它们的这些特长之处,来将我们的项目的效率调整到最优状态。
这个搜索引擎福哥会使用两个数据库引擎,即:MySQL和ElasticSearch。因为存储数据来讲我们学过的数据库引擎里MySQL是最佳选择,而论查询功能,尤其是全文查询功能,自然是非ElasticSearch不可了。
MySQL数据库设计
数据库名称,福哥写的是“tfse”,即:tongfu search engine,大家可以根据自己的喜好取名。数据库的编码福哥使用的是主流的UTF-8编码。
create database tfse default charset utf8;
选择数据库“tfse”,将当前数据库切换为“tfse”。
use tfse;
MySQL数据表设计
网站信息表
网站信息这个数据表名称福哥取名“websites”。
网站信息的数据表字段,福哥初步规划如下:
- websiteId,int,auto,primary(自增列)
- domainName,varchar,unique(网站域名)
- title,varchar(网站标题)
- descript,varchar(网站描述)
- weight,smallint(权重)
- createDT,datetime(建立时间)
- lastFetchDT,datetime(最后采集时间)
- nextFetchDT,datetime(下次采集时间)
create table websites (websiteId int not null auto_increment,domainName varchar(100) not null,title varchar(100) null,descript varchar(500) null,weight smallint not null default 1,createDT datetime not null,lastFetchDT datetime null,nextFetchDT datetime null,primary key (websiteId),unique u_domainName (domainName));
网页信息表
网页信息这个数据表名称福哥取名“webpages”。
网页信息的数据表字段,福哥初步规划如下:
- webpageId,int,auto,primary(自增列)
- url,varchar,unique(网页URL)
- statusCode,smallint(服务器状态码)
- charset,tinyint(网页编码,用数字表示,0 - GBK,1 - UTF-8,2 - BIG5,3 - ISO)
- title,varchar(网页标题)
- keywords,varchar(网页关键字)
- description,varchar(网页描述)
- createDT,datetime(建立时间)
- lastFetchDT,datetime(最后采集时间)
create table webpages (webpageId int not null auto_increment,url varchar(254) not null,statusCode smallint not null,charset tinyint not null default 1,title varchar(100) null,keywords varchar(300) null,description varchar(500) null,createDT datetime not null,lastFetchDT datetime null,primary key (webpageId),unique u_url (url));
网页数据表
网页数据这个数据表名称福哥取名“webpage_data”。这个表是webpages表的附属表,目的是将网页源代码这样的大型字段从网页信息表分离开。
网页数据的数据表字段,福哥初步规划如下:
- webpageId,int(关联键,关联webpages.webpageId字段)
- sourceCode,longtext(网页源代码)
- pageText,longtext(网页文字,将源代码去掉html标签后的部分)
create table webpage_data (webpageId int not null,sourceCode longtext not null,pageText longtext not null,primary key (webpageId));
名词解释
字段类型
MySQL数据表字段和编程语言一样,是分不同类型的,这里我们把常用的介绍一下
- int,整型,可存储整型数据
- char,定长字符类型,可以存储字符串数据
- varchar,变长字符类型,可以存储字符串数据
- text,文本类型,可以存储大量的字符串数据
- tinyint,微整型
- smallint,小整型
- longtext,长文本类型
字段索引
MySQL数据表可以利用数据表的索引提高检索速度,或者控制数据表中的数据格式等等
- primary key,主键,规定为主键的字段是不能有重复数据的,一个数据表只能有一个主键
- unique,约束,规定为约束的字段也是不能有重复数据的
- auto,自增列,这个字段比较特殊,在新增数据的时候,这个字段会字段填充数据,其值是在当前数据表中自增列值里最大的那个值加一的值,从而可以保证这个自增列数据唯一
总结
MySQL数据库是关系型数据库,它的特点体现在“关系”两个字上面,我们建立的websites表是网站表,而webpages表则是基于websites表的,然后webpage_data表是webpages表的附属表,从数据表的关系就可以看出模型之间的关系。
而我们在后面进行数据检索的时候,也是要依据这样的关系进行的。
这样的关系型数据库特别适合做基础数据库,将所有模型的数据都依据设计好的关系存储起来,便于我们今后进行管理,分析,统计工作。
https://m.tongfu.net/home/35/blog/512795.html