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用戶所有權限,防止系統被人攻擊后沒有一個人可以登錄系統。

 

七,索引設計

在提取某個用戶個人歷史查詢記錄時除了使用存儲過程可以實現也可以將用戶名設置為索引實現加快搜索速度,而且如果設置為唯一索引,既保證了昵稱的唯一性,也減少了一個觸發器

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM