數據庫

(由資料庫跳轉過嚟)

電算上,數據庫粵拼sou3 geoi3 fu3英文databaseDB),又叫資料庫,係指俾電腦有系統性噉儲住啲資料嘅地方:「有系統性」意思即係話個數據庫唔淨只曉儲住啲數據,仲會設計到方便啲用家搵資料;舉個簡單例子,廿一世紀初嘅數據庫最起碼仲會包埋某啲形式嘅搜尋功能,俾用家靠打關鍵字等嘅方法摷資料,而喺實際應用上,(例如)一間企業可以用個數據庫儲住一間佢哋啲員工嘅資料,等間企業嘅管理者可以隨時靠打員工嘅名或者姓嚟搵到有關嗰位員工嘅資料[1][2]

一部電腦顯示佢儲住嗰啲數據

電腦科學裏面,數據庫係相當專門嘅領域:「由個數據庫嗰度搵件數據出嚟」呢家嘢就噉睇好似好簡單;不過到咗廿一世紀初,一個商業用嘅數據庫閒閒哋可以儲咗成幾千億至幾萬億個位元組咁多嘅數據,而由呢啲噉嘅數據庫當中搵數據(同埋做第啲作業)用到嘅演算法可以複雜得好交關;因為數據庫技術嘅專業性,有好多企業甚至仲會專登請個職位,淨係幫手應付數據庫相關嘅工作[3][4]

數據庫同相關嘅技術喺現代資訊科技當中舉足輕重:數據庫技術令到企業能夠儲嘅數據量大增,於是有唔少資訊系統方面嘅工作者就著手研究「呢啲數據可以點樣用嚟達致商業目的」,形成咗大數據(big data)同數據科學(data science)等嘅領域-可以(例如)量度分析消費者用一件電子產品嗰陣嘅行為[5];電腦科學工作者仲會將機械學習等嘅人工智能技術結合落去數據庫嗰度-令數據庫技術同相關嘅資訊科技係噉互相刺激同引發創新[6][7]

概論

睇埋:資訊系統實體關係表同埋關係數據庫

正式嚟講,數據庫係指一柞彼此之間有啦掕嘅數據,仲有係呢柞數據點樣組織埋一齊。舉個例說明,好似係維基百科嘅營運噉,就會用到以下噉嘅數據庫(可以睇維基數據):

  • 儲住啲數據:維基百科日常運作嗰陣要記住大量嘅數據,好似係啲用家嘅數據(user;每位用家嘅名、個戶口邊年邊月邊日開、同埋做咗幾多吓編輯... 呀噉)、啲維基頁嘅數據(page;每頁嘅標題同埋有幾多隻呀噉)同埋係啲修改嘅數據(revision;每次修改係由邊位用家做同埋喺邊年邊月邊日發生呀噉)... 等等嘅大量數據。一個數據庫通常會分做若干張,例如用家數據一張、維基頁數據一張、修改數據一張噉。
  • 組織埋一齊:不過,齋係記住啲數據係唔夠嘅,個數據庫跟住仲要將唔同嘅表嘅數據連繫埋一齊,簡單嘅例子有每位用家都俾個 ID 冧把佢,然後修改數據當中嘅每吓修改都有掕住做嗰吓修改嗰位用家嘅 ID 冧把,噉用個數據庫嘅人就有得攞住記用家數據嗰張表,叫部電腦去修改數據表嗰度,摷嗮嗰位用家做過嘅修改出嚟-啲數據之間有組織性[8]

上述講嘅例子可以用好似下圖噉嘅實體關係表(entity-relationship diagram)畫出嚟[9]。下圖裏面每個視窗都表示一張專記住某種數據嘅表(例:user 係記用家數據嗰張表),個視窗入面每行字都係一個描述嗰種嘢嘅變數(例:user_id 係位用家嘅 ID 冧把、user_name 係嗰位用家嘅名、user_password 係嗰位用家嘅密碼... 等等)而且唔同表之間仲有某啲特定方法將唔同表嘅數據掕埋一齊。

關係數據庫

內文:關係數據庫
睇埋:主匙

喺廿一世紀初,數據庫入面嘅一幅試算表幾乎實會係以關係數據庫(relational database)嘅形式表達嘅,即係話幅表會以表格嘅方式出現,有若干行打橫嘅同埋若干行打戙嘅,每列表示一個個案,每行表示一款數據。舉個簡單嘅例子說明,家陣整個數據庫,專門用嚟記住有關啲學生嘅數據,出好似下圖噉嘅表,每一行都表示一個學生可以有嘅一個特性,包括係Name)同主修嘅學科Major)呀噉,而每一列都表示某一個學生嘅數據,包括嗰個學生嘅冧把,仲有係嗰個學生嘅 NameMajor 呀噉,做到清清楚楚噉表達嗮一柞個案同每個個案嘅特性[10]

Number Name Major
1 Jack 生物學
2 Kate 社會學
3 Claire 語言學
4 John 化學
5 John 化學
... ... ...

廿一世紀初嘅關係數據庫嘅設計可以好複雜:

  • 首先一個數據庫通常要有最少一行攞嚟做主匙(primary key);一條主匙係指個數據庫入面俾人揀嚟做到「每個個案都有自己獨有一個數值」嘅匙,例如好似上圖噉,上圖個數據庫記住咗啲學生嘅數據,不過 Name 同埋 Major 唔會做到主匙-呢個世上的確有可能會有學生真係咁啱得咁橋同名又讀同一個學科,好似响上圖入面學生 4 同學生 5 都係個名叫阿 John 而且一樣係讀化學嘅,因為噉,設計個數據庫嘅人就整咗一行叫 Number 表示學生號碼,同每個學生俾個獨一無二嘅號碼佢,嗰兩個讀化學嘅阿 John 號碼唔同,於是用個數據庫嘅人就有得靠住檢驗手上個學生嘅 Number,確保自己搵到嗰個學生真係自己想搵嗰個,而唔係一個咁啱同名同姓嘅人-Number 就係呢個數據庫條主匙[11]。主匙仲可以再細分做[12]
    • 自然匙(natural key):指條匙嘅數值係對應住某啲會喺數據庫以外嘅特性嘅。假想家陣設計個數據庫嘅人想每個學生都俾條主匙佢,但佢用嘅主匙係身份證號碼-佢喺每個學生登記嗰陣都叫佢哋填自己嘅身份證號碼,並且喺個數據庫入面入咗每個學生嘅身份證號碼,因為身份證號碼正路嚟講係每個人都保證獨一無二嘅,而呢種用「喺個數據庫以外嘅地方都有可能會用到嘅特性」嚟做嘅匙就係所謂嘅自然匙。
    • 代理匙(surrogate key):自然匙嘅相對,指條匙喺個數據庫以外完全係冇意義嘅。假想家陣設計個數據庫嘅人可能唔想個數據庫入面記住好似身份證號碼呢啲咁敏感嘅個人資料,所以佢就改改自己個做法-喺一個學生登記嗰時,佢都用擬亂數產生等嘅方法隨機噉產生一個有返咁上下長嘅號碼(例如 72108526761 噉),攞呢個數字嚟做嗰個學生嘅學生號碼;呢啲學生號碼喺個數據庫以外嘅地方係完全冇用嘅,而好似呢種用「喺個數據庫以外嘅地方唔會用到嘅特性」嚟做嘅匙就係所謂嘅代理匙[12]
  • 外匙(foreign key):指條匙會連去第張表嘅主匙度;舉個例,家陣個學生數據庫要擴張,要記埋每一個學生係由邊位導師(Tutor)主要負責教嘅,間學校嘅數據庫仲另外有張表係記住有關啲導師嘅數據嘅(下面冇擺出嚟睇),而每位導師都有個 5 個位嘅數字表示佢嘅導師號碼(導師號碼係導師數據嗰張表嘅主匙),而學生張表嘅 Tutor 就係用導師號碼嚟表示每個學生由邊位導師負責,例如阿 Jack 嘅導師係號碼 83026 嗰位,而嗰兩個讀化學嘅阿 John 咁啱由同一位導師負責。喺學生呢張表入面,Tutor 就係一條外匙[13]
Number Name Major Tutor
1 Jack 生物學 83026
2 Kate 社會學 87949
3 Claire 語言學 52641
4 John 化學 76867
5 John 化學 76867
... ... ...
  • 複合匙(composite key):指一種主匙嘅做法,指條匙由兩個或者以上嘅特性(行)組成[14]。舉個例說明,想像家陣有間企業想整個數據庫,記住自己同啲客做過嘅交易,於是佢就整咗個噉嘅數據庫-個數據庫每一列都記住咗一串交易,會包含以下嘅重要數據:
    • Employee_id 指做嗰單交易嘅員工嘅號碼(記員工數據嗰張表條主匙)、
    • Client_id 指做嗰單交易嘅客嘅號碼(記住啲客嘅數據嗰張表條主匙)、
    • Total_sales 指嗰位員工同嗰位客之間嘅交易總共賺咗幾多錢,以美元計。
  • 即係例如員工號碼 107 嗰位員工同客戶號碼 400 嗰個客之間做咗嘅交易總共值 55,000 文美元咁多。喺呢個表當中,Employee_idClient_id 一齊扮演咗主匙嘅角色-一位員工可能同時要應付多個客,所以齋靠 Employee_id 做唔到主匙,而一個客又可能會由幾位員工同時處理,所以齋靠 Client_id 都係做唔到主匙,不過 Employee_idClient_id 一齊用就能夠做到每個個案都有佢嘅獨有數值。呢種用兩個或者以上嘅特性結合而成嘅主匙就係複合匙[14]
Employee_id Client_id Total_sales
107 400 55,000
101 401 267,000
105 402 22,500
104 403 5,000
... ... ...

硬件

內文:數據中心

硬件上,有返咁上下規模嘅組織用嘅數據庫通常都會儲响數據中心(data center)嗰度-呢啲組織會有若干個數據中心,每個數據中心嗰度都會有啲伺服器喺度。呢啲伺服器通常會係行多元處理電腦記憶體充裕,可以儲到極大量嘅數據;除此之外,呢啲伺服器都會受到嚴密保護,因為呢啲系統好多時都會儲住啲重要嘅個人資料(例如係一間企業啲員工地址或者電話號碼呀噉),又或者係有嗰間企業研發緊嘅新產品嘅詳情,唔俾得同行知。正路嚟講,淨係得嗰啲有權限嘅人(例如係間企業嘅高層噉)先至可以睇或者攞數據庫入面嘅數據,而且有陣時唔同用家嘅權限可能都唔同(例如高層同研發部嘅人可以睇研發緊嘅新產品嘅數據,但間企業嘅其餘員工就唔得)[15]

 
2014 年一個數據中心;
呢啲電腦儲住咗好多重要嘅數據喺入面。

管理系統

內文:數據庫管理系統
睇埋:SQL

數據庫管理系統(database management system,DBMS)泛指一啲專門設計嚟俾用家攞嚟管理數據庫嘅軟件,最少會有齊增查改刪(CRUD)嘅功能。增查改刪包括:

  • 增加Create)指加新嘅數據個案落個數據庫嗰度;
  • 查閱Read)指俾用家查同睇數據庫入面嘅數據;
  • 更改Update)指俾用家改嘅數據庫嘅數據;
  • 刪除Delete)指俾用家剷走唔想要嘅數據。

序列化

內文:序列化

序列化(serialization)喺資訊科技上係指將一個數據結構或者物件轉化成一個可以儲起嘅格式,等呢啲數據可以傳去第度而且收數據嗰方可以重新砌返啲數據出嚟。有好多程式語言(例如 PythonC#)都會有特定嘅陳述式做序列化[16]

做序列化可能嘅用意包括係想將啲數據傳去數據庫嗰度,例如行為分析上就成日會將自己嘅軟件設計成曉將描述用家行為嘅數據傳返去間企業嘅數據庫嗰度。

例如 C# 就有類似噉嘅做法:

   [SerializeField] InputField feedback1; // feedback1 會做序列化。

  1. Kroenke, David M. and David J. Auer (2007). Database Concepts. 3rd ed. New York: Prentice.
  2. Post, G. V. (1999). Database management systems: designing and building business applications. Irwin/McGraw-Hill.
  3. Ganti, V., Gehrke, J., & Ramakrishnan, R. (1999). Mining very large databases. Computer, 32(8), 38-45.
  4. Cardoso, J. M., Assirati, L., & Setti, J. R. (2021). Calibration of the empirical fundamental relationship using very large databases. TRANSPORTES, 29(1), 212-228.
  5. Tossell, C., Kortum, P., Shepard, C., Rahmati, A., & Zhong, L. (2015). Exploring smartphone addiction: insights from long-term telemetric behavioral measures. International Journal of Interactive Mobile Technologies, 9(2).
  6. Guruvayur, S. R., & Suchithra, R. (2017, May). A detailed study on machine learning techniques for data mining (PDF). In 2017 International Conference on Trends in Electronics and Informatics (ICEI) (pp. 1187-1192). IEEE.
  7. Bose, I., & Mahapatra, R. K. (2001). Business data mining—a machine learning perspective. Information & management, 39(3), 211-225.
  8. Ullman, Jeffrey; Widom, Jennifer (1997). A First Course in Database Systems. Prentice-Hall.
  9. Chen, Peter (March 1976). "The Entity-Relationship Model - Toward a Unified View of Data". ACM Transactions on Database Systems. 1 (1): 9-36.
  10. Codd, E. F. (1970). "A Relational Model of Data for Large Shared Data Banks". Communications of the ACM. 13 (6): 377-387.
  11. Bahmani, A. H., Naghibzadeh, M., & Bahmani, B. (2008, May). Automatic database normalization and primary key generation. In 2008 Canadian Conference on Electrical and Computer Engineering (pp. 000011-000016). IEEE.
  12. 12.0 12.1 Link, S., Luković, I., & Mogin, P. (2010). Performance evaluation of natural and surrogate key database architectures. School of Engineering and Computer Science, Victoria University of Wellington.
  13. Coronel, Carlos (2010). Database Systems: Design, Implementation, and Management. Independence KY: South-Western/Cengage Learning. p. 65.
  14. 14.0 14.1 Sismanis, Y., Brown, P., Haas, P. J., & Reinwald, B. (2006, September). Gordian: efficient and scalable discovery of composite keys. In Proceedings of the 32nd international conference on Very large data bases (pp. 691-702).
  15. "Google announces London cloud computing data centre". BBC.com. July 13, 2017.
  16. Sumaray, A., & Makki, S. K. (2012, February). A comparison of data serialization formats for optimal efficiency on a mobile platform. In Proceedings of the 6th international conference on ubiquitous information management and communication (pp. 1-6).