■文/宋凌宇 張樹勇 闞景森
淺談媒體協(xié)同數(shù)據(jù)庫設(shè)計(jì)
■文/宋凌宇 張樹勇 闞景森
數(shù)據(jù)庫是信息系統(tǒng)的核心和基礎(chǔ),一個(gè)好的數(shù)據(jù)庫設(shè)計(jì)在實(shí)現(xiàn)信息系統(tǒng)方便、及時(shí)、準(zhǔn)確地獲得所需的信息之外,還要滿足易維護(hù)、易擴(kuò)充等要求,并考慮到數(shù)據(jù)的一致性、冗余性、訪問效率等。
數(shù)據(jù)庫;表;檢索;索引
2015年3月起,隨著國家數(shù)字復(fù)合出版系統(tǒng)工程——媒體協(xié)同(即07包)系統(tǒng)的設(shè)計(jì)和研發(fā)逐步展開,數(shù)據(jù)庫的設(shè)計(jì)變得尤為關(guān)鍵。通過對以往一些應(yīng)用系統(tǒng)開發(fā)過程出現(xiàn)的問題進(jìn)行分析,然后規(guī)避這些問題,設(shè)計(jì)出一個(gè)規(guī)范、高性能、易維護(hù)、易擴(kuò)展的數(shù)據(jù)庫,以實(shí)現(xiàn)07包的功能需求及后期的擴(kuò)展。
筆者參與過一些應(yīng)用系統(tǒng)的設(shè)計(jì)和研發(fā)工作,經(jīng)歷過項(xiàng)目研發(fā)過程中的瓶頸和問題,這些問題表現(xiàn)在以下幾個(gè)方面。
有些項(xiàng)目的數(shù)據(jù)表和字段命名不規(guī)范,往往難以找到所需要的庫表,給開發(fā)人員帶來很多不便,甚至困惑。
有些項(xiàng)目的數(shù)據(jù)表字段數(shù)量剛好符合開始設(shè)計(jì)時(shí)的功能需求,那么在開發(fā)過程中有功能擴(kuò)充時(shí),就要增加數(shù)據(jù)表字段、數(shù)據(jù)表,有可能會(huì)造成程序的修改,甚至重新開發(fā),這樣就會(huì)加大開發(fā)人員工作量,也有可能造成項(xiàng)目的延期;再者項(xiàng)目交付多個(gè)用戶后,會(huì)造成項(xiàng)目多版本維護(hù),增加維護(hù)的難度。
有些項(xiàng)目在設(shè)計(jì)之初,考慮得相當(dāng)完善,規(guī)避了許多數(shù)據(jù)庫設(shè)計(jì)時(shí)的問題。但隨著用戶使用數(shù)據(jù)的增漲,尤其達(dá)到百萬級以上,數(shù)據(jù)的檢索速度明顯變慢,勢必給用戶帶來不便,甚至厭煩。
如:部分用戶應(yīng)用系統(tǒng)情況
用戶 稿件表記錄 日志表記錄 檢索耗時(shí)半島都市報(bào) 30多萬條 180多萬條 5分鐘大眾日報(bào) 40多萬條 200多萬條 5分鐘…
數(shù)據(jù)庫的設(shè)計(jì)是07包的各功能能否緊密地結(jié)合在一起以及如何結(jié)合的關(guān)鍵所在,是07包開發(fā)和建設(shè)的重要組成部分。從以下幾個(gè)方面對數(shù)據(jù)庫的設(shè)計(jì)進(jìn)行規(guī)范和優(yōu)化設(shè)計(jì)。
表:T+代表字母+表名 。數(shù)據(jù)表名由具有能描述表內(nèi)容等特殊含義的單詞或縮寫組成。如:TISTORYSOURCE稿件來源表。
字段:類型前綴+字段名。必須以有特征含義的單詞或縮寫組成。
主鍵:PK_。主鍵名稱應(yīng)是 前綴+表名+構(gòu)成的字段名。如果復(fù)合主鍵的構(gòu)成字段較多,則只包含第一個(gè)字段。表名可以去掉前綴。
外鍵:FK_。外鍵名稱應(yīng)是 前綴+外鍵表名+主鍵表名+外鍵表構(gòu)成的字段名。表名可以去掉前綴。
索引:IDX_。索引名稱應(yīng)是 前綴+表名+構(gòu)成的字段名。如果復(fù)合索引的構(gòu)成字段較多,則只包含第一個(gè)字段,并添加序號。表名可以去掉前綴。
根據(jù)07包功能數(shù)據(jù)的邏輯進(jìn)行分塊設(shè)計(jì)。
TI_(TableInfo_縮寫)。 是跟系統(tǒng)中參數(shù)設(shè)置相關(guān)的數(shù)據(jù)表,如:稿件體裁、來源、分類等。
TB_(TableBase_縮寫)。 是跟系統(tǒng)中基礎(chǔ)信息設(shè)置相關(guān)的數(shù)據(jù)表, 如:部門、人員、作者、角色、共享范圍等。
TW_(TableWork _縮寫)是跟07包實(shí)際業(yè)務(wù)相關(guān)的數(shù)據(jù)表,如:稿件、報(bào)題、任務(wù)、選題等。
TR_(TableRole_縮寫)。是跟角色權(quán)限相關(guān)的數(shù)據(jù)表。
應(yīng)07包業(yè)務(wù)要求,有很多關(guān)聯(lián)查詢需求,在設(shè)計(jì)之初就有必要正確處理多對多的關(guān)系。盡量消除多對多情況,將一個(gè)多對多的關(guān)系,變?yōu)閮蓚€(gè)一對多的關(guān)系。
如圖1:一個(gè)人員有可能有多個(gè)角色,反之一個(gè)角色賦值多個(gè)人員。在角色和人員表中增加一個(gè)角色人員表,就變?yōu)閮蓚€(gè)一對多的關(guān)系了。
圖1
再有,因用戶個(gè)性需求而易改變的關(guān)鍵數(shù)據(jù),增加“名值表”設(shè)計(jì)?!懊当怼?,顧名思義就是,那些鍵被其他數(shù)據(jù)關(guān)聯(lián)著的值修改時(shí),不會(huì)造成數(shù)據(jù)存放的混亂,便于多表關(guān)聯(lián)查詢。
第三,為實(shí)現(xiàn)數(shù)據(jù)的完整性,在設(shè)計(jì)數(shù)據(jù)表時(shí)就考慮了數(shù)據(jù)冗余,以及事務(wù)的添加、級聯(lián)刪除和級聯(lián)更新等。
07包數(shù)據(jù)庫的設(shè)計(jì)不但滿足當(dāng)前的功能需求,還要考慮未來功能的擴(kuò)展,增加07包的靈活性。
預(yù)留數(shù)據(jù)表。在設(shè)計(jì)時(shí)考慮未來可能的業(yè)務(wù),預(yù)設(shè)計(jì)一些數(shù)據(jù)表。如:音視頻信息擴(kuò)展表,擬記錄音視頻的碼率、時(shí)長等信息。
預(yù)留字段。在設(shè)計(jì)時(shí)針對系統(tǒng)業(yè)務(wù)數(shù)據(jù)表,基本都預(yù)留1-2個(gè)字段,便于功能的擴(kuò)展和后續(xù)的業(yè)務(wù)拓展。如果這些預(yù)留字段不能滿足未來業(yè)務(wù)的需求,那么就通過添加數(shù)據(jù)表,實(shí)現(xiàn)更高的可擴(kuò)充性要求。
對于大的數(shù)據(jù)庫表,合理的索引能夠提高整個(gè)數(shù)據(jù)庫的操作效率。索引在數(shù)據(jù)庫優(yōu)化中占有一個(gè)非常大的比例,在設(shè)計(jì)數(shù)據(jù)表時(shí),充分考慮到當(dāng)單表數(shù)據(jù)量很大時(shí),比如說是百萬數(shù)量級,如果我們使用普通的查詢語句,耗時(shí)會(huì)非常多。給這些表建上好的索引,能將檢索效率提高幾十甚至幾百倍。
在設(shè)計(jì)索引時(shí),遵循以下規(guī)則:
①主鍵(sguid)的數(shù)據(jù)列、有外鍵的數(shù)據(jù)列(fk_sguid)一定要建立索引。
②對于經(jīng)常查詢的數(shù)據(jù)列根據(jù)需要建立索引。
③對于需要在指定范圍內(nèi)快速或頻繁查詢的數(shù)據(jù)列,如“**name LIKE ‘a(chǎn)%’”,最好建立索引。
④經(jīng)常用在WHERE子句中的數(shù)據(jù)列,建立索引。
⑤經(jīng)常出現(xiàn)在關(guān)鍵字order by、group by、distinct后面的字段,建立索引。如果建立的是復(fù)合索引,索引的字段順序要和這些關(guān)鍵字后面的字段順序一致,否則索引不會(huì)被使用。
⑥對于那些查詢中很少涉及的列,重復(fù)值比較多的列不要建立索引。
⑦對于定義為text、image、blob和bit數(shù)據(jù)類型的列不要建立索引。
⑧對于經(jīng)常存取的列避免建立索引 。
⑨限制表上的索引數(shù)目。對一個(gè)存在大量更新操作的表,所建索引的數(shù)目一般不要超過3個(gè),最多不要超過5個(gè)。索引雖說提高了訪問速度,但太多索引會(huì)影響數(shù)據(jù)的更新操作。
⑩對復(fù)合索引,按照字段在查詢條件中出現(xiàn)的頻度建立索引。在復(fù)合索引中,記錄首先按照第一個(gè)字段排序。對于在第一個(gè)字段上取值相同的記錄,系統(tǒng)再按照第二個(gè)字段的取值排序,以此類推。只有復(fù)合索引的第一個(gè)字段出現(xiàn)在查詢條件中,該索引才可能被使用,因此將應(yīng)用頻度高的字段,放置在復(fù)合索引的前面,會(huì)使系統(tǒng)最大可能地使用此索引,發(fā)揮索引的作用。
?在Join查詢時(shí),兩個(gè)表中Join的字段建立索引。
遵循以上規(guī)則對07包中稿件表和日志表、操作歷史表等關(guān)鍵列增加索引設(shè)置。
附:用戶數(shù)據(jù)庫優(yōu)化后應(yīng)用系統(tǒng)檢索情況,如下表:
用戶稿件表記錄日志表記錄索引前檢索耗時(shí)索引后檢索耗時(shí) 備注半島都市報(bào) 30多萬條 180多萬條 5分鐘 1-3秒大眾日本 40多萬條 200多萬條 5分鐘 1-3秒 服務(wù)器性能好…
本文通過論述一些應(yīng)用系統(tǒng)的現(xiàn)存問題,得出數(shù)據(jù)庫設(shè)計(jì)的重要性。提出07包的數(shù)據(jù)庫設(shè)計(jì)時(shí)要遵循的原則和規(guī)范,從而設(shè)計(jì)出一個(gè)滿足07包功能需求和未來擴(kuò)展的高性能、易維護(hù)、易擴(kuò)展的數(shù)據(jù)庫。
[1]勵(lì)文杰.大型數(shù)據(jù)庫ORACLE數(shù)據(jù)庫的優(yōu)化設(shè)計(jì)方案[J].科技風(fēng),2011(19).
[2]趙靜宇.?dāng)?shù)據(jù)庫設(shè)計(jì)規(guī)范化的理論研究與應(yīng)用[J].電子技術(shù)與軟件工程,2013(21).
[3]汪輝.基于大數(shù)據(jù)應(yīng)用系統(tǒng)架構(gòu)的設(shè)計(jì)與實(shí)現(xiàn)[J].電子技術(shù)與軟件工程,2015(20).
(作者單位:濰坊北大青鳥華光照排有限公司;東營日報(bào)社)
G202
A
1671-0134(2017)08-081-02
10.19483/j.cnki.11-4653/n.2017.08.029
本文受國家數(shù)字復(fù)合出版系統(tǒng)工程-媒體協(xié)同工作系統(tǒng)(1141STC40519/07)項(xiàng)目資助。