RDF搜索引擎——數據庫具體設計

數據庫的設計是一個項目的基石,數據庫的設計質量直接影響着後期代碼開發的進度,因此咱們組在本項目數據庫設計中考慮了不少。這學期同步進行的數據庫課程上老師曾經講過數據庫的設計包括表格設計,視圖,存儲過程,觸發器,用戶(權限),索引多個方面,一個項目若是隻作了表格那麼它的數據庫至關於只作了六分之一的任務,因此咱們組嚴格按照數據庫設計思路對這六個部分都進行了不少的思考,這篇博文思路也主要分爲這六大塊。前端

 

一,項目簡介算法

首先在講數據庫具體設計前,先簡單講解下咱們組的項目,咱們組的項目是一個研究型項目,是作一款基於RDF的搜索引擎,項目難度主要集中於算法部分:好比如何將天然語言轉換爲結構化查詢語言SPARQL語句,如何在分佈式數據庫中查詢處理併合並結果等等,並且搜索數據集不是創建在常規的數據庫上的,因此咱們這個項目的數據庫表格僅是爲前端頁面,權限管理等設計的;接下來簡單講解下咱們項目的需求:最開始用戶能夠在首頁選擇註冊或直接登錄,也能夠以遊客身份直接進入搜索界面開始輸入搜索關鍵詞進行搜索。同時和百度谷歌同樣,用戶還能夠進入查詢日誌頁面查找本身的歷史記錄,登陸用戶還能夠進入我的中心修改一些我的信息,而管理員能夠瀏覽全部用戶的歷史記錄(這一點主要基於優化搜索算法考慮),還能夠操做修改用戶權限。數據庫

二,表格設計安全

1)首先咱們須要解決剛纔需求中講到的權限管理,也就是不一樣類型用戶擁有不一樣功能,這裏咱們討論了不少最終遵從了老師的建議採用了用戶組表與用戶表的形式,賦權是給用戶組賦權,這樣相較於將不一樣等級用戶分表存儲的思路有不少好處,這種思路使得系統有很好的可拓展性,避免了用戶按組存儲方式致使的用戶組表格過多或新加用戶類型時頻繁新建表格的缺陷(假如一個系統有100中不一樣用戶類型,就得增長100張不一樣類型的用戶表。。。)數據庫設計

在這裏用戶表添加狀態與上次登錄時間兩個字段是基於安全考慮,由於登陸系統能夠查看的我的歷史記錄屬於比較隱私敏感的內容,因此須要判斷諸如帳號短期重複登陸之類帳號異常行爲分佈式

 2)用戶被分入不一樣用戶組後,具體的模塊是分配給用戶組,由於用戶組表與模塊信息表直接是多對多關係,因此須要一張關係錶鏈接優化

3)由於權限是比較敏感的信息,因此咱們組吸收了數據庫老師課堂上審計的想法,專門創建了一個表格存儲修改權限的每一次記錄,若是系統實際運行過程當中出現異常權限改動,能夠在這個審計表中來尋找攻擊者的蹤影。搜索引擎

 4)接下來還須要解決搜索歷史記錄問題,由於關鍵詞與結果表均是一對多的關係,不須要專門創建聯繫表。同時爲了改進算法使搜索結果更精確,還會記錄搜索用時和每一個結果的點擊時間。spa

 

5)由於RDF三元組中的URI會不斷打上各類屬性標籤,每個都如上圖中這麼長,中間搜索查詢處理過程當中爲了加快速度減小負擔,因此咱們組又創建了實體結點表和屬性表。同時爲了描述圖的結構,咱們也創建了一張表(知識圖譜RDF會構建一張圖來實現搜索)設計

 

6)總結:所有表格以下圖物理模型所示,同時由於咱們設計的表格中的主鍵基本都是編號,ID類型,因此除了用戶ID外基本均可以設置爲自增

三,視圖設計

1)在用戶中心顯示某用戶搜索歷史記錄,我的信息時可使用視圖

2)在管理員管理中心查看每一個用戶的權限時可使用視圖

 

四,存儲過程設計

1)在提取某個用戶我的歷史查詢記錄時咱們可使用存儲過程生成對應的視圖:參數是用戶名或ID

2)當我的歷史記錄太多時咱們提供了直接查找關鍵詞來快速鎖定歷史記錄,這個過程也使用了存儲過程:參數是用戶名/用戶ID和關鍵詞

3)當我的歷史記錄太多時咱們還提供了經過輸入時間段來鎖定歷史記錄,這個過程也使用了存儲過程:參數是用戶名/用戶ID和時間段

(雖而後來得知存儲過程調試很麻煩,小項目最好不要使用,但咱們組以爲以前的一些討論思考仍是頗有價值的)

 

 五,觸發器設計

觸發器經常使用的地方有兩處,一是用來進行業務規則約束,二能夠用來審計,因此應用到咱們項目

1)用戶註冊提交後會複查填入手機號是否已註冊,這裏會有一個觸發器;.....................................................................................實現業務規則約束

2)用戶註冊暱稱(用戶名)或修改暱稱時也會複查是否已存在,一樣須要加一個觸發器;........................................................實現業務規則約束

3)用戶登陸爲了確保帳號安全,會檢查狀態與上次登陸時間帳號查看是否存在短時間重複登陸,也須要一個觸發器;...........實現審計

 

六,權限管理設計

1)咱們這個項目不一樣用戶權限集中在查看內容範圍不一樣,因此這一塊暫時不能直接用課堂的知識。

2)這個地方咱們吸收了尹庚老師的一些建議,系統訪問用戶表若是發現爲空時,會自動添加一個root用戶,並賦給root用戶全部權限,防止系統被人攻擊後沒有一我的能夠登陸系統。

 

七,索引設計

在提取某個用戶我的歷史查詢記錄時除了使用存儲過程能夠實現也能夠將用戶名設置爲索引實現加快搜索速度,並且若是設置爲惟一索引,既保證了暱稱的惟一性,也減小了一個觸發器

相關文章
相關標籤/搜索