RDF搜索引擎——数据库具体设计

数据库的设计是一个项目的基石,数据库的设计质量直接影响着后期代码开发的进度,所以我们组在本项目数据库设计中考虑了很多。这学期同步进行的数据库课程上老师曾经讲过数据库的设计包括表格设计,视图,存储过程,触发器,用户(权限),索引多个方面,一个项目如果只做了表格那么它的数据库相当于只做了六分之一的任务,所以我们组严格按照数据库设计思路对这六个部分都进行了很多的思考,这篇博文思路也主要分为这六大块。

一,项目简介

首先在讲数据库具体设计前,先简单讲解下我们组的项目,我们组的项目是一个研究型项目,是做一款基于RDF的搜索引擎,项目难度主要集中于算法部分:比如如何将自然语言转换为结构化查询语言SPARQL语句,如何在分布式数据库中查询处理并合并结果等等,而且搜索数据集不是建立在常规的数据库上的,所以我们这个项目的数据库表格仅是为前端页面,权限管理等设计的;接下来简单讲解下我们项目的需求:最开始用户可以在首页选择注册或直接登陆,也可以以游客身份直接进入搜索界面开始输入搜索关键词进行搜索。同时和百度谷歌一样,用户还可以进入查询日志页面查找自己的历史记录,登录用户还可以进入个人中心修改一些个人信息,而管理员可以浏览所有用户的历史记录(这一点主要基于优化搜索算法考虑),还可以操作修改用户权限。

二,表格设计

1)首先我们需要解决刚才需求中讲到的权限管理,也就是不同类型用户拥有不同功能,这里我们讨论了很多最终听从了老师的建议采用了用户组表与用户表的形式,赋权是给用户组赋权,这样相较于将不同等级用户分表存储的思路有很多好处,这种思路使得系统有很好的可拓展性,避免了用户按组存储方式导致的用户组表格过多或新加用户类型时频繁新建表格的缺陷(假如一个系统有100中不同用户类型,就得增加100张不同类型的用户表。。。)

在这里用户表添加状态与上次登陆时间两个字段是基于安全考虑,因为登录系统可以查看的个人历史记录属于比较隐私敏感的内容,所以需要判断诸如账号短时间重复登录之类账号异常行为

2)用户被分入不同用户组后,具体的模块是分配给用户组,因为用户组表与模块信息表直接是多对多关系,所以需要一张关系表连接

3)因为权限是比较敏感的信息,所以我们组吸取了数据库老师课堂上审计的想法,专门建立了一个表格存储修改权限的每一次记录,如果系统实际运行过程中出现异常权限改动,可以在这个审计表中来寻找攻击者的踪迹。

4)接下来还需要解决搜索历史记录问题,因为关键词与结果表均是一对多的关系,不需要专门建立联系表。同时为了改进算法使搜索结果更精确,还会记录搜索用时和每个结果的点击时间。

5)因为RDF三元组中的URI会不断打上各种属性标签,每一个都如上图中这么长,中间搜索查询处理过程中为了加快速度减少负担,所以我们组又建立了实体结点表和属性表。同时为了描述图的结构,我们也建立了一张表(知识图谱RDF会构建一张图来实现搜索)

6)总结:全部表格如下图物理模型所示,同时因为我们设计的表格中的主键基本都是编号,ID类型,所以除了用户ID外基本都可以设置为自增

三,视图设计

1)在用户中心显示某用户搜索历史记录,个人信息时可以使用视图

2)在管理员管理中心查看每个用户的权限时可以使用视图

四,存储过程设计

1)在提取某个用户个人历史查询记录时我们可以使用存储过程生成对应的视图:参数是用户名或ID

2)当个人历史记录太多时我们提供了直接查找关键词来快速锁定历史记录,这个过程也使用了存储过程:参数是用户名/用户ID和关键词

3)当个人历史记录太多时我们还提供了通过输入时间段来锁定历史记录,这个过程也使用了存储过程:参数是用户名/用户ID和时间段

(虽然后来得知存储过程调试很麻烦,小项目最好不要使用,但我们组觉得之前的一些讨论思考还是很有价值的)

五,触发器设计

触发器常用的地方有两处,一是用来进行业务规则约束,二可以用来审计,所以应用到我们项目

1)用户注册提交后会复查填入手机号是否已注册,这里会有一个触发器;.....................................................................................实现业务规则约束

2)用户注册昵称(用户名)或修改昵称时也会复查是否已存在,同样需要加一个触发器;........................................................实现业务规则约束

3)用户登录为了确保账号安全,会检查状态与上次登录时间账号查看是否存在短期重复登录,也需要一个触发器;...........实现审计

六,权限管理设计

1)我们这个项目不同用户权限集中在查看内容范围不同,所以这一块暂时不能直接用课堂的知识。

2)这个地方我们吸取了尹庚老师的一些建议,系统访问用户表如果发现为空时,会自动添加一个root用户,并赋给root用户所有权限,防止系统被人攻击后没有一个人可以登录系统。

七,索引设计

在提取某个用户个人历史查询记录时除了使用存储过程可以实现也可以将用户名设置为索引实现加快搜索速度,而且如果设置为唯一索引,既保证了昵称的唯一性,也减少了一个触发器

原文地址:https://www.cnblogs.com/xia-hao/p/9983729.html

时间: 2024-11-13 09:56:27

RDF搜索引擎——数据库具体设计的相关文章

Google搜索排名优化-面向搜索引擎的网站设计

内容摘要:网站在搜索营销方面最主要的缺点: 行业知识:不知道搜索引擎对吸引的新用户的重要性,在搜索引擎排名服务中追求“傻瓜相关”,购买一些其实没有太多实际意义的行业关键词.其实能够用户输入的关键词越多,其目标性越强,这样的客户价值越高.用户能够直接定位到产品具体内容页比到网站首页有价值的多: 发布技术:网站的网页进入Google的索引量非常小,主要是由于大量使用动态网页造成的.需要将动态页面链接改写成静态 链接: 页面设计:页面标题重复,关键词不突出,过渡使用JavaScript脚本/图片/Fl

定向数据爬虫和搜索引擎(Directional Spider)设计文档

  定向数据网络爬虫和搜索引擎项目设计 (新闻数据抓取.分析.加工.检索) 版本号:            v 1.0.0 编写人:          张  文  豪 日  期:       2014年6月10日 文档说明:这个文档还在编写之中,文章中很多写在“保留”二字的不是每月东西,而是没有写.虽然没有具体实现,但是我觉得我把我的经验和思考都写进去了.虽然对于读者来说这个文档相当粗糙,但是是我一个很看重的东西.如果真的有人愿意认真阅读这篇文章,我会很开心和大家交流探讨,欢迎留言和联系我. [

Java Web项目实战记录(数据库表设计)

又是忙到这个点 虽然累,但是看着自己的项目在一点一点的成长,心里满满的成就感>_< 今天上了一下午的cep(职场社交礼仪规划课程),是不是职场就像cep老师说的那么的勾心斗角呢? 所以今天并没有做了多少东西,数据库的文档已经出来了,但是不是太详细,表之间的关系并没有说的太清(数据库的设计我并没有参与) 以下是数据库的文档: --------------------------------------------------------------------------------------

20170105数据库表设计知识点

20170105数据库表设计知识点 ------指导老师    星哥 1.PHP(MYSQL)擅长单表操作,不要做过多无谓的连接查询 2.表字段名不要使用大驼峰命名方式,最好采用下划线,命名要和团队习惯一致,通俗易懂. 3.表级.字段都要有注释 4.MyISAM 适合于一些需要大量查询的应用,但其对于有大量写操作并不是很好.甚至你只是需要update一个字段,整个表都会被锁起来,而别的进程,就算是读进程都无法操作直到读操作完成.另外,MyISAM 对于 SELECT COUNT(*) 这类的计算

MySQL性能调优与架构设计——第9章 MySQL数据库Schema设计的性能优化

MySQL性能调优与架构设计——第9章 MySQL数据库Schema设计的性能优化 前言: 很多人都认为性能是在通过编写代码(程序代码或者是数据库代码)的过程中优化出来的,其实这是一个非常大的误区.真正影响性能最大的部分是在设计中就已经产生了的,后期的优化很多时候所能够带来的改善都只是在解决前妻设计所遗留下来的一些问题而已,而且能够解决的问题通常也比较有限.本章将就如何在 MySQL 数据库 Schema 设计的时候保证尽可能的高效,尽可能减少后期的烦恼. 9.1 高效的模型设计 最规范的就一定

数据库课程设计--“茶咖啡”销售管理系统总结

为期一周的数据库课程设计终于完工, 总结一些经验和教训.发现基础的知识还是要时刻记在心中,知识不基础,何谈去开发?因为做什么东西都首先要一定的目标,计划,以及做到东西要做到那个程度,这方面一点要先在脑子里有一个印象,然后才能用所学的知识点去发挥, 因此知识点一点要掌握牢固,自己在设计课程设计的过程中,发现写好的数据库语言一点运行,就会出现这个那个的问题.然后从头去寻找问题的源头,才发现表的主键和外键设置出了问题.然后琢磨半天,突然意识到到底是什么主键和外键? 两个的定义和作用到底是什么?,这才发

无限树形结构的数据库表设计

前言: 无限树形结构的数据库表设计的是否合理,直接影响到UI层是否方便根据树来查询关联的数据. 1.表字段: F_BtEd2kTypeId int Unchecked F_Name nvarchar(50) Checked F_ParentTypeId nvarchar(50) Checked F_Code nvarchar(50) Checked F_RecordStatus int Checked 2.表数据: 3.说明: 如2所示, 1)如果上表的数据关联上了一张表A,通过BtEd2kTy

数据库的设计范式知识

为了建立冗余较小.结构合理的数据库,设计数据库时必须遵循一定的规则.在关系型数据库中这种规则就称为范式.范式是符合某一种设计要求的总结.要想设计一个结构合理的关系型数据库,必须满足一定的范式. 在实际开发中最为常见的设计范式有三个: 1.第一范式 第一范式是最基本的范式.如果数据库表中的所有字段值都是不可分解的原子值,就说明该数据库表满足了第一范式. 第一范式的合理遵循需要根据系统的实际需求来定.比如某些数据库系统中需要用到“地址”这个属性,本来直接将“地址”属性设计成一个数据库表的字段就行.但

Django开发笔记之数据库的设计

后台采用Django开发,可以体会到开发的便利之处,对于一个项目来说,首先最重要的是数据库的设计,那么在Django下数据库设计主要是如下步骤: 1,需求分析,这点子不用多说,而我也深刻体会到了没有原型的时候就开始开发的困难之处,每次需求更改就会带来后台的数据和对应接口的一次变更.费时费精力 2.有了需求,那么开始数据库的设计,在Django中,并不需要直接去操作数据库,而且使用继承modesl.Model的类,在类中定义自己的模型,然后使用Python manage.py syncdb就可看到