团队项目——数据库设计心得

一、项目简介

该系统旨在设计一款基于联邦型RDF数据库的能充分理解用户输入关键词语义的关键词检索引擎,通过构建索引以支持在线阶段的关键词检索,理解用户语义,让用户能自由表达自己的查询需求,提供精准符合要求的答案,以精简友好的界面、方便的操作为用户提供一种信息搜索的快速定位的功能,特别是为局域网用户提供更有针对性的、更方便的资源,从而提高资源的共享目标,让用户可以高效,快捷的获得想要的信息,区别于普通搜索引擎,效果更加友好,方便快捷。

二、系统的功能描述

要想设计好数据库,首先,我们应明确项目的需求,明确功能需求。

上图为根据需求画出的大致流程图。

三、确定实体

通过对搜索引擎各方面的分析,我们可以知道搜索引擎中的实体包括:用户,用户组,模块,关键词,结果。各实体包含的数据项分别如下:

1)用户:用户id、用户名、密码、手机号、状态、加入时间、上次登录            时间、上次登录地点、用户组。

2)用户组:用户组id、用户组名称。

3)模块:模块id、模块名称。

4)关键词:关键词id、用户id、关键词、搜索时间。

5)结果:结果id、关键词id、结果url、是否点击、点击时间。

另外,为了后期算法方便,我们还将我们用到的数据集中的uri进行了编号,因为uri太长,如果不用编号的话,可能会很费时。

四、确定联系

通过以上分析,我们作如下规定:

1)一个用户可以属于一个用户组,一个用户组可以包含多个用户;

2)一个用户组可以绑定多个模块,一个模块可以被多个用户组绑定;

3)一个关键词可以搜索到多个结果,一个结果对应一个关键词;

4)一个用户可以输入多个关键词,一个关键词对应一个用户;

实体之间的联系有:

1)用户与用户组之间(M:1)

2)用户组与模块之间(M:N)

3)关键词与结果之间(1:M)

4)用户与关键词之间(1:M)

五、最终设计结果

(1)  关键词表(key_info表)

属性名

数据类型

是否为空

含义

是否为主键

Key_id

int

not null

关键词id

primary key

User_id

int

not null

用户id

Foreign key

Keyword

varchar(100)

not null

用户输入的关键词

 

Search_t

Datetime

Not null

搜索时间

 

 

(2)图结构表(schema_dir表)

属性名

数据类型

是否为空

含义

是否为主键

Start

Int

not null

起点

primary key

End

Int

not null

终点

Primary key

Path

Int

not null

路径条数

 

 

(3)属性表(pre_info表)

属性名

数据类型

是否为空

含义

是否为主键

pre_id

Int

not null

属性编号

primary key

pre_uri

varchar(20)

not null

属性uri

 

 

(4)权限表(power_info表)

属性名

数据类型

是否为空

含义

是否为主键

User_id

char(6)

not null

用户编号

primary key

privilege

char(15)

not null

权限名

primary key

modifier

Varchar(5)

Not null

修改人

 

modi_time

datetime

Not null

修改时间

primary key

 

(5)模块信息表(module_info表)

属性名

数据类型

是否为空

含义

是否为主键

module_id

Int

not null

模块编号

primary key

Module_name

varchar(20)

not null

模块名

 

 

(6)用户组与模块关系表(group_module_r表)

属性名

数据类型

是否为空

含义

是否为主键

rela_id

int

not null

关系编号

primary key

group_id

int

not null

用户组id

foreign key

module_id

int

not null

模块id

foreign key

 

(7)用户组表(group_info表)

属性名

数据类型

是否为空

含义

是否为主键

group_id

int

not null

用户组id

primary key

group_name

varchar(10)

not null

用户组名称

 

 

(8)用户表(usr_info表)

属性名

数据类型

是否为空

含义

是否为主键

user_id

varchar(5)

not null

用户id编号

primary key

user_name

varchar(20)

not null

用户账号

 

password

varchar(20)

not null

密码

 

phone

varchar(11)

 

电话号码

 

state

bool

not null

登陆状态

 

last_login_t

datetime

not null

上次登陆时间

 

last_login_loc

varchar(20)

not null

上次登陆地点

 

signup_t

date

not null

注册时间

 

group_id

int

 

用户组id

foreign key

 

(9)结果表(result_info表)

属性名

数据类型

是否为空

含义

是否为主键

res_id

int

not null

结果id

primary key

keyword_id

int

not null

关键词id

foreign key

res_url

varchar(300)

not null

搜索结果url

 

clickon

bool

not null

是否被点击

 

clicktime

datetime

not null

点击时间

 

 

(10)结点表(class_info表)

属性名

数据类型

是否为空

含义

是否为主键

node_id

int

not null

结点编号

primary key

node_url

varchar(255)

not null

结点url

 

out_deg

int

not null

结点出度

 

in_deg

int

not null

结点入读

 

node_rank

int

not null

结点排序

 

 六、心得

这次的数据库设计,小组同学内部积极讨论,积极提出意见,改进数据库。在数据库设计中,我们要考虑全面,先设计概念模型,然后生成物理模型。

在设计过程中要注意:

若两个实体之间存在多对多的关系,则应消除这种关系。消除的办法是,在两者之间增加第三个实体。这样,原来一个多对多的关系,现在变为两个一对多的关系。要将原来两个实体的属性合理地分配到三个实体中去。这里的第三个实体,实质上是一个较复杂的关系,它对应一张基本表。一般来讲,数据库设计工具不能识别多对多的关系,但能处理多对多的关系。

猜你喜欢

转载自www.cnblogs.com/ttyape/p/10005989.html