D˙ liªu trong mÎt RDBMS ˜Òc l˜u tr˙ trong các Ëi t˜Òng cÏ s d˙ liªu ˜Òc gÂi là các b£ng (table). B£ng này v∑cÏ b£n là mÎt bÎs˜u t™p các mˆc nh™p d˙liªu có liên quan và nó bao gÁm nhi∑u cÎt và hàng. B£ng là hình th˘c l˜u tr˙ d˙ liªu phÍ bi∏n và Ïn gi£n nhßt trong mÎt cÏsd˙liªu quan hª. Sau ây là mÎt ví dˆv∑mÎt b£ng THONG_TIN_SINH_VIEN.
ID TEN TUOI DIA_CHI KHOA
1 Duong 22 Ho Chi Minh Vat lieu 2 Trang 21 Da Nang Moi truong
3 Khoa 22 Nha Trang Xay dung
B£ng 1: Ví dˆ v∑b£ng d˙liªu
Tr˜Ìng
MÈi b£ng ˜Òc chia thành các th¸c th∫nh‰gÂi là các tr˜Ìng (Field). Các tr˜Ìng trong b£ng THONG_TIN_SINH_VIEN bao gÁm ID, TEN, TUOI, DIA_CHI VÀ KHOA. Tr˜Ìng là mÎt cÎt
trong mÎt b£ng ˜Òc thi∏t k∏ ∫l˜u tr˙ thông tin cˆth∫v∑mÈi b£n ghi trong b£ng. Ví dˆ: mÎt cÎt trong b£ng THONG_TIN_SINH_VIEN là DIA_CHI, mô t£ ‡a chøc˜trú cıa sinh viên và
˜Òc th∫hiªn nh˜b£ng 3. DIA_CHI Ho Chi Minh Da Nang Nha Trang B£ng 2: Ví dˆ v∑tr˜Ìng trong b£ng d˙liªu B£n ghi ho∞c hàng
MÎt b£n ghi (record) cÙng ˜Òc gÂi là mÎt hàng (row) d˙ liªu là t¯ng mˆc riêng l¥tÁn t§i trong mÎt b£ng. Ví dˆ: có 3 b£n ghi trong b£ng THONG_TIN_SINH_VIEN trên. Sau ây là mÎt hàng d˙liªu ho∞c mÎt b£n ghi trong b£ng 4.
1 Duong 22 Ho Chi Minh Vat lieu B£ng 3: Ví dˆmÎt b£n ghi trong b£ng d˙ liªu
Ràng buÎc
Ràng buÎc (Constraint) là các quy t≠c ˜Òc thi hành trên các cÎt d˙ liªu trên mÎt b£ng. Chúng ˜Òc s˚dˆng ∫giÓi h§n lo§i d˙liªu có th∫insert vào mÎt b£ng. i∑u này £m b£o tính chính xác và Îtin c™y cıa d˙liªu trong cÏs d˙liªu.
Constraint có th∫là cßp ÎcÎt ho∞c cßp Îb£ng. Các ràng buÎc cßp ÎcÎt chø ˜Òc áp dˆng cho mÎt cÎt trong khi các ràng buÎc m˘c b£ng ˜Òc áp dˆng cho toàn bÎb£ng.
Sau ây là mÎt sË các ràng buÎc phÍ bi∏n nhßt ˜Òc s˚dˆng trong SQL: NOT NULL £m b£o r¨ng mÎt tr˜Ìng không th∫có giá tr‡NULL
DEFAULT Cung cßp mÎt giá tr‡m∞c ‡nh cho mÎt tr˜Ìng khi không có giá tr‡ chø ‡nh
UNIQUE £m b£o r¨ng tßt c£ các giá tr‡trong mÎt tr˜Ìng là khác nhau PRIMARY KEY Xác ‡nh mÈi b£n ghi là duy nhßt trong mÎt b£ng cÏ s d˙ liªu FOREIGN KEY Xác ‡nh mÈi b£n ghi là duy nhßt trong bßt k˝ b£ng cÏ s d˙ liªu
khác
CHECK CHECK ràng buÎc £m b£o r¨ng tßt c£ các giá tr‡trong cùng mÎt cÎt th‰a mãn mÎt sË i∑u kiªn
INDEX Dùng ∫t§o và lßy d˙liªu nhanh chóng t¯cÏs d˙liªu B£ng 4: MÎt sË ràng buÎc phÍbi∏n trong SQL
Toàn vµn d˙liªu
Các lo§i sau ây cıa toàn vµn d˙liªu tÁn t§i vÓi mÈi RDBMS:
• Th¸c th∫ toàn vµn: Không có hàng trùng l∞p trong mÎt b£ng.
• Domain Integrity: Th¸c thi ki∫m tra tính hÒp lªcho mÎt cÎt nhßt ‡nh b¨ngcách h§n ch∏ ki∫u, ‡nh d§ng ho∞c ph§m vi giá tr‡.
• Tính toàn vµn tham chi∏u: Các hàng không th∫b‡xóa, ˜Òc s˚ dˆng bi các b£n ghi khác.
• Tính toàn vµn do ng˜Ìi dùng ‡nh nghæa: Th¸c thi mÎt sËquy t≠c kinh doanh cˆth∫ không rÏi vào th¸c th∫, mi∑n ho∞c toàn vµn tham chi∏u.
Các hªqu£n tr‡ cÏ s d˙ liªu
Hiªn nay, có rßt nhi∑u RDBMS - hªqu£n tr‡cÏ sd˙liªu phÍ bi∏n có sÆn ∫làm viªc. MÎt sËcác RDBMS phÍbi∏n nhßt có th∫liªt kê ra nh˜sau
RDBMS GiÓi thiªu Tính n´ng & ∞c i∫m
MySQL MySQL là RDBMS SQL mã
nguÁn m, MySQL hÈ trÒ nhi∑u n∑n t£ng khác nhau bao gÁm MS.Windows, Linux, UNIX và Mac OS X. MySQL i kèm vÓi mÎt máy chı DB SQL rßt nhanh, a luÁng, nhi∑u ng˜Ìi dùng và m§nh m≥.
Hiªu sußt cao, Tính sÆn sàng cao, Kh£ n´ng m rÎng và Tính linh ho§t ch§y bßt c˘ i∑u gì, HÈ trÒ giao d‡ch m§nh m≥, i∫m m§nh cıa Web và Data Warehouse, B£o vª d˙ liªu m§nh m≥, Phát tri∫n ˘ng dˆng toàn diªn, Qu£n l˛ dπ dàng, nguÁn m và hÈ trÒ 24/7, TÍng chi phí s h˙u thßp nhßt.
MS SQL
Server MS SQL Server là RDBMSphát tri∫n bi MS.Inc Ngôn ng˙˜Òc truy vßn chính: T-SQL, ANSI SQL.
Hiªu n´ng cao, Tính sÆn sàng cao, Database mirroring, Database snapshots, Tích CLR, Service Broker, DDL triggers, Ranking, Row versionbased isolation levels, Tích hÒp XML, TRY. . . CATCH – x˚l˛ngo§i lª, Database Mail. PostgreSQL PostgreSQL là mÎt hªthËng qu£n
tr‡ cÏ s d˙ liªu quan hª- Ëi t˜Òng (objectrelational database management system) có mˆc ích chung.
PostgreSQL s h˙u mÎt hª tính n´ng a d§ng giúp hÈ trÒ các nhà phát tri∫n xây d¸ng app, các nhà qu£n tr‡ b£o vª toàn vµn d˙ liªu. Bên c§nh hªthËng nguÁn m và miπn phí, PostgreSQL cÙng có kh£n´ng mrÎng tuyªt vÌi. Post- greSQL tuân theo tiêu chu©n SQL nh˜ng không mâu thu®n vÓi các tính n´ng truy∑n thËng hay có th∫ d®n ∏n các quy∏t ‡nh ki∏n trúc gây h§i..
3.7.2 Hª cÏ s d˙liªu phi quan hª
HªcÏsd˙liªu phi quan hªlà cÏsd˙liªu không k∏t hÒp mô hình table/key mà các RDBMS khác. Nh˙ng lo§i cÏ s d˙ liªu này òi h‰i các kˇ thu™t và quy trình x˚l˛d˙ liªu ∫cung cßp các gi£i pháp cho các vßn ∑d˙liªu lÓn mà các công ty lÓn g∞p ph£i. CÏ sd˙liªu phi quan hª (Non-relational database) phÍbi∏n nhßt ˜Òc gÂi là NoSQL.
MÎt i∑u thú v‡ cıa NoSQL là kh£ n´ng m rÎng. NoSQL s˚ dˆng hªthËng BASE (v∑cÏ b£n là có sÆn, softstate, nhßt quán). Non-RDBMS t¯ b‰ d§ng b£ng cıa các hàng và cÎt cÏ sd˙ liªu quan hªs˚ dˆng có lÒi cho các khung chuyên dˆng ∫l˜u tr˙d˙liªu, có th∫ ˜Òc truy c™p b¨ng các API truy vßn ∞c biªt. S¸tÁn l˜u (Persistence) là mÎt y∏u tË quan trÂng trong các cÏ s d˙ liªu này. ∫cho phép thông l˜Òng nhanh vÓi sË l˜Òng lÓn d˙ liªu, tu˝ chÂn tËt nhßt cho hiªu sußt là "bÎnhÓtrong", thay vì Âc và ghi t¯ Í æa.
CÏsd˙liªu quan hªs˚dˆng hªACID, £m b£o tính thËng nhßt cıa d˙liªu trong mÂi tình huËng qu£n l˛d˙liªu nh˜ng rõ ràng mßt nhi∑u thÌi gian hÏn ∫x˚ l˛vì tßt c£ các mËi quan hª ó và tính chßt phân nhánh cıa nó. Tuy nhiên hª thËng BASE ã nÓi l‰ng các yêu c¶u v∑tính nhßt quán ∫ §t ˜Òc tính sÆn sàng và phân vùng tËt hÏn ∫có kh£n´ng m rÎng tËt hÏn.
Các Non-RDBMS phÍ bi∏n
• Document database (CouchDB, MongoDB) D˙ liªu thêm vào s≥ ˜Òc l˜u tr˙ d˜Ói d§ng cßu trúc JSON t¸ do ho∞c document, ó d˙ liªu có th∫ là bßt k˝ d§ng nào t¯ sË nguyên ∏n chuÈi d˙ liªu ∏n v´n b£n d§ng t¸ do.
• Key-value stores (Redis, Riak)Các giá tr‡d§ng t¸do - t¯các sËnguyên ho∞c chuÈi Ïn gi£n ∏n các tài liªu JSON ph˘c t§p — truy c™p ˜Òc trong cÏsd˙liªu s˚dˆng các phím.
• Wide column stores (HBase, Cassandra) D˙ liªu ˜Òc l˜u tr˙ d§ng cÎt thay vì theo hàng nh˜trong hªthËng SQL thông th˜Ìng. Bßt k˝sË cÎt nào (và do ó có nhi∑u lo§i d˙ liªu khác nhau) có th∫ ˜Òc nhóm ho∞c tÍng hÒp khi c¶n thi∏t cho các truy vßn ho∞c ch∏ Î xem d˙liªu.
• Graph database (Neo4j) D˙ liªu ˜Òc bi∫u diπn d˜Ói d§ng m§ng ho∞c Á th‡ các Ëi t˜Òng và mËi quan hªcıa các Ëi t˜Òng ó, vÓi mÈi node trong bi∫u Álà mÎt o§n d˙liªu d§ng t¸do.
3.7.3 So sánh
H§ng mˆc Relational Non-Relational
Ki∫u d˙ liªu Khó l˜u tr˙ ki∫u d˙ liªu phong
phú Có th∫nào l˜u tr˙bßt k˝lo§i d˙liªu Nhân rÎng Khó ∫nhân rÎng, chi phí không
r¥ Nhân rÎng là t¸ Îng và trongsuËt
Chi phí Chi phí xây d¸ng và b£o trì ≠t Kho£ng 10% chi phí so vÓi Rela- tional
Hi∫n th‡ Hi∫n th‡ d˙ liªu trong b£ng và
hàng Hi∫n th‡d˙liªu d˜Ói d§ng JSON
L˜Òc Á Yêu c¶u xác ‡nh b£ng và cÎt tr˜Óc khi l˜u tr˙. MÈi hàng có cùng cÎt
Không có l˜Òc Á, th£ trong tài liªu. Hai tài liªu trong cùng mÎt thu th™p có th∫ có các tr˜Ìng khác nhau
Truy vßn Ngôn ng˙ truy vßn có cßu trúc (SQL): làm cho kh£ n´ng tßn công là kh£ thi
Truy vßn Ëi t˜Òng: tr¸c quan, chuy∫n tài liªu ∫ gi£i thích nh˙ng gì b§n ang truy vßn a nguÁn gËc Th¸c thi JOIN: th¸c hiªn truy
vßn trên nhi∑u b£ng Ki∫u d˙m£ng và th™m chí các tài liªuliªu a chi∑u: hÈ trÒ khác
Toàn vµn d˙liªu £m b£o Không £m b£o
B£ng 6: So sánh cÏs d˙liªu quan hªvà phi quan hª
3.7.4 MongoDB
TÍng quan v∑MongoDB
Nh˜ ã ˜Òc ∑c™p ph¶n trên, MongoDB là mÎt document database (non-RDBMS) vÓi kh£ n´ng mrÎng và linh ho§t mà ta mong muËn vÓi truy vßn và l™p chømˆc mà ta c¶n.
• MongoDB l˜u tr˙ d˙ liªu trong các tài liªu linh ho§t, giËng nh˜ JSON, có nghæa là các tr˜Ìng có th∫thay Íi t¯tài liªu này sang tài liªu khác và cßu trúc d˙liªu có th∫ ˜Òc thay
Íi theo thÌi gian.
• Mô hình tài liªu ánh x§ tÓi các Ëi t˜Òng trong code, giúp d˙ liªu ˜Òc dπdàng làm viªc vÓi nó.
• Truy vßn ∞c biªt, l™p chømˆc và tÍng hÒp thÌi gian th¸c cung cßp cách m§nh m≥ ∫truy c™p và phân tích d˙ liªu.
• MongoDB là mÎt cÏ s d˙ liªu phân tán cËt lõi cıa nó, vì v™y tính sÆn sàng cao, nhân rÎng theo chi∑u ngang và phân phËi v‡trí ˜Òc xây d¸ng và dπs˚dˆng.
• MongoDB là miπn phí và là nguÁn m.
3.7.5 Oracle
TÍng quan v∑Oracle
Hình 11: Oracle
Trái ng˜Òc vÓi MongoDb, Oracle là mÎt RDBMS úng nghæa.
GiËng nh˜các ph¶n m∑m RDBMS khác, Oracle Database ˜Òc xây d¸ng d¸a trên SQL, mÎt ngôn ng˙l™p trình chu©n hóa ∫qu£n tr‡cÏs d˙ liªu, các nhà phân tích d˙ liªu và các chuyên gia công nghª thông tin th˜Ìng s˚ dˆng công cˆ này ∫ qu£n l˛ cÏ s d˙ liªu và truy vßn d˙ liªu ˜Òc l˜u tr˙trong ó. Ph¶n m∑m Oracle ˜Òc g≠n vÓi PL/SQL, mÎt ph¶n m∑m bÍtrÒ ˜Òc Oracle phát tri∫n nh¨m bÍsung mÎt sËextension Îc quy∑n cho SQL chu©n – khá phÍbi∏n trong các nhà cung cßp RDBMS.
CÏ s d˙ liªu Oracle cÙng hÈ trÒ l™p trình b¨ng Java và các ch˜Ïng trình ˜Òc vi∏t trên PL/SQL ho∞c l™p trình Java có th∫ ˜Òc gÂi t¯ ngôn ng˙khác.
3.7.6 S¸l¸a chÂn Oracle
D¸a vào Ëi t˜Òng mà ∑ tài h˜Óng tÓi, hª thËng c¶n ph£i l˜u mÎt l˜Òng lÓn d˙ liªu, bao gÁm các t™p d˙ liªu có thuÎc tính cË ‡nh l®n các t™p d˙ liªu có thuÎc tính thay Íi theo thÌi gian, chi phí xây d¸ng ˜Òc duy trìÍn ‡nh, thÌi gian truy vßn nhanh, Îchính xác và Ín ‡nh cao. Vì v™y, c¶n l¸a chÂn mÎt cÏ s d˙ liªu quan hª và có s¸ tin c™y cao s≥ là s¸ l¸a chÂn phù hÒp. VÓi nh˙ng phân tích và ánh giá trên, nhóm ã quy∏t ‡nh s˚dˆng Oracle làm cÏsd˙liªu cho hªthËng. VÓi ∞c i∫m cÙng nh˜nh˙ng tính n´ng cıa Oracle, nhóm s≥ti∏n hành thi∏t k∏hª cÏsd˙liªu phù hÒp vÓi yêu c¶u và tËi˜u hoá cho hªthËng.
3.8 Công nghª s˚ dˆng cho ch˘c n´ng i∑u khi∫n thi∏t b‡ trong phòngthí nghiªm thí nghiªm
3.8.1 Google Firebase (Real-time Database)
Hình 12: Google Firebase
Firebase là mÎt d‡ch vˆcÏs d˙liªu thÌi gian th¸c ˜Òc cung cßp bi Google và ho§t Îng trên n∑n t£ng ám mây. Nó giúp các l™p trình phát tri∫n nhanh các˘ng dˆng b¨ng cách Ïn gi£n hóa các thao tác vÓi cÏsd˙liªu.
Realtime Database cıa Firebase: l˜u tr˙ và Áng bÎd˙liªu ng˜Ìi dùng thÌi gian th¸c. Các ˘ng dˆng hÈ trÒ tính n´ng này có th∫l˜u tr˙và lßy d˙ liªu t¯ máy chı rßt nhanh. Các d˙ liªu ˜Òc l˜u tr˙trong hªthËng cÏsd˙liªu hÈtrÒNoSQL và ˜Òc ∞t trên n∑n t£ng máy chı ám mây. D˙ liªu ˜Òc ghi và Âc vÓi thÌi gian thßp nhßt tính b¨ng mili giây. N∑n t£ng này hÈ trÒ Áng bÎhóa d˙liªu cıa ng˜Ìi dùng k∫c£khi không có k∏t nËi m§ng. T§o nên tr£i nghiªm xuyên suËt bßt chßp tình tr§ng k∏t nËi internet cıa ng˜Ìi s˚dˆng.
3.8.2 NodeMCU ESP8266
Hình 13: NodeMCU ESP8266
ESP8266 là mÎt m§ch vi i∑u khi∫n có th∫giúp chúng ta i∑u khi∫n các thi∏t b‡ iªn t˚, ˜Òc tích hÒp wi-fi 2.4GHz có th∫ dùng cho l™p trình các ˘ng dˆng liên quan ∏n Internet of Things (IoT).
ESP8266 có mÎt cÎng Áng các nhà phát tri∫n trên th∏giÓi rßt lÓn, cung cßp nhi∑u Module l™p trình mã mgiúp nhi∑u ng˜Ìi có th∫ti∏p c™n và xây d¸ng˘ng dˆng rßt nhanh.
CH◊ÃNG 4
4 Thi∏t k∏ hª thËng
4.1 Ki∏n trúc hª thËng
Ki∏n trúc hª thËng ˜Òc thi∏t k∏ d¸a trên mô hình MVC, ngoài ra còn có thêm mÎt lÓp Service n¨m trong th˜ mˆc config ∫x˚l˛các ch˘c n´ng nh˜xác th¸c ng˜Ìi dùng, g˚i email t¸
Îng,...
∫ hÈ trÒ x˚ l˛tác vˆ realtime cho trang web, nhóm còn s˚ dˆng mÎt lÓp socket.io gi˙a t¶ng View và Controller.
LÓp Redux ˜Òc thi∏t k∏tách rÌi vÓi view giúp tËi ˜u hiªu n´ng vì tính chßt cıa Redux là l˜u tr˙ d˙liªu và th¸c hiªn các tác vˆthông qua Actions.
4.2 Nguyên t≠c hª thËng
VÓi thi∏t k∏ mÎt hª thËng ph˘c t§p qua nhi∑u quá trình nh˜ trên và nhóm làm viªc nhi∑u ng˜Ìi, vì v™y hªthËng c¶n ph£i có nh˙ng nguyên t≠c và thi∏t k∏chung.
4.2.1 Cßu trúc cây th˜mˆc cho mã nguÁn hª thËng
Viªc ¶u tiên và vô cùng quan trÂng nhßt ó chính là thi∏t k∏cßu trúc t™p tin và th˜ mˆc hªthËng. VÓi thi∏t k∏tËt, rõ ràng thì khi làm viªc nhóm s≥tránh ˜Òc viªc ˆng Î mã nguÁn vÓi các thành viên khác, tránh tình tr§ng trùng l∞p mã nguÁn và dπdàng trong viªc qu£n l˛cÙng nh˜ki∫m tra, rà soát mã nguÁn.
4.2.2 LuÁng x˚l˛ d˙ liªu phía ng˜Ìi dùng
Phía ng˜Ìi dùng s˚dˆng các công nghªnh˜Cookie, React vÓi Virtual DOM, Redux, Socket.io. VÓi thi∏t k∏ Model-View, mÂi d˙ liªu ∑u ˜Òc l˜u tr˙ Store cıa Redux và thông qua nh˙ng Actions ∫ Âc ghi d˙ liªu t¯ Store, nhÌ lÓp VirtualDOM cıa React giúp c™p nh™t l§i giao diªn khi d˙liªu Store thay Íi nhanh chóng và dπdàng hÏn.
Store cıa Redux không có ch˘c n´ng l˜u l§i tr§ng thái truy c™p mà mÈi Tab cıa trình duyªt là mÎt Store khác nhau cho nên c¶n s˚ dˆng thêm Cookie ê l˜u l§i tr§ng thái truy c™p.
Ngoài ra, còn s˚ dˆng Socket.io ∫x˚l˛nh˙ng s¸kiªn t¯Server.
4.2.3 LuÁng x˚l˛ d˙ liªu phía máy chı
Phía Server có hai luÁng x˚l˛chính ó là khi Îng Server và luÁng x˚l˛request t¯client. Do nhóm s˚dˆng Nodejs cho nên khi Îng Server chính là khi Îng node cùng vÓi các th˜viªn, các hàm ã hiªn th¸c và sau ó chÌuser g˚i request lên Server
Hình 16: Flowchart luÁng khi Îng server
Ëi vÓi luÁng x˚ l˛ request t¯ client .API server m bËn ph˜Ïng th˘c ó là GET, POST, PUT, DELETE. MÈi request cıa client bao gÁm link, method và d˙liªu (n∏u có), d¸a vào thông tin trên server s˚dˆng ∫th¸c hiªn nh˙ng ch˘c n´ng có sÆn trong hªthËng nh˜recommend, g˚i email, g˚i socket.io. Tuy nhiên ∫th¸c hiªn các ch˘c n´ng trên c¶n xác th¸c quy∑n truy c™p cıa user.
4.3 Thi∏t k∏ ch˘c n´ng theo Ëi t˜Òng ng˜Ìi dùng4.3.1 Qu£n tr‡ viên phòng KHCN&DA (Admin) 4.3.1 Qu£n tr‡ viên phòng KHCN&DA (Admin)
Hình 18: Usecase cho qu£n tr‡viên phòng KHCN&DA
Qu£n tr‡viên phòng KHCN&DA s≥qu£n l˛toàn bÎ hªthËng. Nh˙ng tính n´ng qu£n l˛s≥ bao gÁm qu£n l˛ các danh mˆc hªthËng, qu£n l˛thông báo, qu£n l˛ ´ng k˛thi∏t b‡ cÙng nh˜