1. 程式人生 > 其它 >mysql 長整型_【201005】做個搜尋引擎(2)——MySQL資料庫設計

mysql 長整型_【201005】做個搜尋引擎(2)——MySQL資料庫設計

技術標籤:mysql 長整型

介紹

介紹

昨天我們已經設計好了搜尋引擎的模型,搜尋引擎包括兩個基本模型即:網站和網頁。那麼接下來我們就要針對這兩個模型進行資料庫的設計了。

設計資料庫要考慮的問題很多,包括資料的大小、欄位的數量、讀取場景,寫入場景等等。

除此之外還要考慮使用什麼資料庫引擎,因為不同的資料庫引擎的特長是不一樣的,我們要充分利用它們的這些特長之處,來將我們的專案的效率調整到最優狀態。

這個搜尋引擎福哥會使用兩個資料庫引擎,即:MySQL和ElasticSearch。因為儲存資料來講我們學過的資料庫引擎裡MySQL是最佳選擇,而論查詢功能,尤其是全文查詢功能,自然是非ElasticSearch不可了。

MySQL資料庫設計

資料庫名稱,福哥寫的是“tfse”,即:tongfu search engine,大家可以根據自己的喜好取名。資料庫的編碼福哥使用的是主流的UTF-8編碼。

createdatabasetfsedefaultcharsetutf8;

選擇資料庫“tfse”,將當前資料庫切換為“tfse”。

usetfse;
9e8b5872aa94b89a4e1b20d64c32d88f.png

MySQL資料表設計

網站資訊表

網站資訊這個資料表名稱福哥取名“websites”。

網站資訊的資料表字段,福哥初步規劃如下:

  • websiteId,int,auto,primary(自增列)
  • domainName,varchar,unique(網站域名)
  • title,varchar(網站標題)
  • descript,varchar(網站描述)
  • weight,smallint(權重)
  • createDT,datetime(建立時間)
  • lastFetchDT,datetime(最後採集時間)
  • nextFetchDT,datetime(下次採集時間)
createtablewebsites(websiteIdintnotnullauto_increment,domainNamevarchar(100)notnull,titlevarchar(100)null,descriptvarchar(500)null,weightsmallintnotnulldefault1,createDTdatetimenotnull,lastFetchDTdatetimenull,nextFetchDTdatetimenull,primarykey(websiteId),uniqueu_domainName(domainName));
1dd24a484c95984cc9129b3fdaf5b798.png

網頁資訊表

網頁資訊這個資料表名稱福哥取名“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(最後採集時間)
createtablewebpages(webpageIdintnotnullauto_increment,urlvarchar(254)notnull,statusCodesmallintnotnull,charsettinyintnotnulldefault1,titlevarchar(100)null,keywordsvarchar(300)null,descriptionvarchar(500)null,createDTdatetimenotnull,lastFetchDTdatetimenull,primarykey(webpageId),uniqueu_url(url));
79a46632ed6be52355a8579569f3e585.png

網頁資料表

網頁資料這個資料表名稱福哥取名“webpage_data”。這個表是webpages表的附屬表,目的是將網頁原始碼這樣的大型欄位從網頁資訊表分離開。

網頁資料的資料表字段,福哥初步規劃如下:

  • webpageId,int(關聯鍵,關聯webpages.webpageId欄位)
  • sourceCode,longtext(網頁原始碼)
  • pageText,longtext(網頁文字,將原始碼去掉html標籤後的部分)
createtablewebpage_data(webpageIdintnotnull,sourceCodelongtextnotnull,pageTextlongtextnotnull,primarykey(webpageId));
0eeb07b1a73f1d464f64f520ced24104.png

名詞解釋

欄位型別

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