Dé dap ứng nhu cầu của một người quản lý ứng dụng thì diễn đàn được xây dựng giúp quản lý các nội dung có trên ứng dụng, cấu hình các quyền và vai trò phù hợp cho các người dùng hay cấu
Trang 1ĐẠI HỌC QUOC GIA TP HO CHÍ MINH TRUONG DAI HOC CONG NGHE THONG TIN
KHOA HE THONG THONG TIN
NGUYEN DUY HIEU TRINH NGOC VINH
KHOA LUAN TOT NGHIEP
XAY DUNG WEBSITE DIEN DAN CHIA SE BAI VIET
VA SU DUNG KY THUAT TIM KIEM TOAN VAN
(FULL-TEXT SEARCH) Build a forum website to share articles and using
full-text search
KY SU NGANH HE THONG THONG TIN
TP HO CHi MINH, 2022
Trang 2ĐẠI HỌC QUOC GIA TP HO CHÍ MINH
TRUONG DAI HOC CONG NGHE THONG TIN
KHOA HE THONG THONG TIN
NGUYEN DUY HIEU - 18520746
TRINH NGOC VĨNH - 18521660
KHOA LUAN TOT NGHIEP
XAY DUNG WEBSITE DIEN DAN CHIA SE BAI VIET
VA SU DUNG KY THUAT TIM KIEM TOAN VAN
(FULL-TEXT SEARCH)
Build a forum website to share articles and using
full-text search
KY SU NGANH HE THONG THONG TIN
GIANG VIEN HUONG DAN
ThS Mai Xuân Hùng
TP HÒ CHÍ MINH, 2022
Trang 3DANH SÁCH HOI DONG BẢO VỆ KHÓA LUẬN
Hội đồng chấm khóa luận tốt nghiệp, thành lập theo Quyết định 86
ngày của Hiệu trưởng Trường Đại học Công nghệ Thông tin.
——— — Chủ tịch.
— == ~ Thư ký.
— — Ủy viên.
—Uy viên.
Trang 4LỜI CẢM ƠN Đầu tiên, nhóm xin gửi lời cảm ơn chân thành đến thầy Mai Xuân Hùng (Giảng viên hướng dẫn) đã giúp cho nhóm thực hiện đề tài này Thầy đã trực tiếp hướng dẫn tận tình, sửa chữa và đóng góp nhiều ý kiến quý báu giúp nhóm hoàn thành tốt báo cáo của mình Trong thời gian thực hiện đề tài, nhóm đã vận dụng những kiến thức nền tảng đã tích lũy đồng thời kết hợp với việc học hỏi và nghiên cứu những kiến thức mới Từ đó, nhóm vận dụng tối đa những gì đã thu thập được đề hoàn thành một báo
cáo tốt nhất Tuy nhiên, trong quá trình thực hiện, nhóm không tránh khỏi những thiếu sót, các việc làm sơ ý Chính vì vậy, nhóm rất mong nhận được những sự góp ý từ phía
thầy nhằm hoàn thiện những kiến thức mà nhóm đã học tập và là hành trang để nhóm bước tiếp trong tương lai.
Xin chân thành cảm ơn thay.
Trang 5MỤC LỤC
Chương I Tổng quan đề tài 222:-222222 2 vttEEEEELrrrirrrrrrrrrrrrrree 1.1 Phân tích khảo sát các nhu cau từ trải nghiệm thực tế -+ 1.1.1 _ Các tính năng can thiết đối với người dùng thường -
1.1.2 Các tính năng cần thiết đối với người dùng thường quản trị
1.2 Chức năng của diễn đàn -22-©22++ 22+ 22221222112221122211 2211211 E1 crrrve+
1.3 Các quy trình của người dùng có trong diễn đàn ¿©2ccccccccsrsccee
1.3.1 Quy trình tạo bài viẾt .ccc222 2x cSEEEvrrrEEEErrrrrtkrrrrrrrrrrrrrree
1.3.2 Quy trình xác thực tài khoản ¿- ¿+ ¿+ + St key
1.3.3 Quy trình sửa, đặt lại mật khẩu -.-:-+c222vsvcetcrxerrcrrrvee 1.3.4 Quy trình báo cáo nội dung không phù hợp, góp ý cho diễn đàn 1.4 Các công nghệ được lựa chọn trong dé phát triển ứng dụng
1.4.1 Cấu trúc của ứng dụng và dự án -ccc2222cvvvccrrrrrrrex
1.4.2 _ Single-Page Application (SPA) -c-c-cccccterrerreerererree
1.43 — Angular.
1.4.4 Node Package Manager (NPM|) - «5c Se St
1.4.5 ASP.NET Core API
1.4.6 Entity framework (E) c: + + sseheeerieeereree
1.4.7 Language-Integrated Query (LinQ)
1.4.8 _ PostgreSQL Ăn HH ưệp
1.4.9 Tìm kiếm toàn văn (Full-text search)
1.4.10 Tìm kiếm toàn văn trong PostgreSQL -ccccccccc+
1.4.11 Kiểu dữ liệu JSON trong PostgreSQL -.-: cczcc5scccscz
1.4.12 PostgreSQL va Entity framewOrk - ¿5555 Sc+c+ccserreererer
Trang 6Chương 2.
2.1 Sơ đồ Usecase.
Thiết kế hệ thong - 2 2222222222+222ESE2tEEESEEttEEEErrrtrrrrrrrrrrrree 20
2.2 Đặc tả S€CaS€ - 2L SH H9 H9 nh ng Tu TH Thu nu ng nh Hà 22
Chương3 Cơ sở dữ liệu
3.1 Mô hình cơ sở dit liệu và Chi tIỄ( ¿5+ Sc St +t 2 xSxEkekekerrerrrrrevee 23
3.1.7 Chỉ tiết bảng admin_user_role_ OŸ_ S€T - ¿c5 5cxs+s£*c++see 29 3.1.8 Chỉ tiết bảng session_admin_ uS€T- ¿+5 5+s++x£+zererexsee 30 3.1.9 Chỉ tiết bảng session_ sOcial_ USeT -5- 52 c+s<<++c+csce ce SO) 3.1.10 Chi tiết bảng social_audi(_ ÏOg - +5+55+c+c+csceeseceesre .3 Í
3.1.11 Chi tiết bảng social_categOrV 22cccc222vztceEcvvrrrrrrrvrrerrrrrrrrrr 32 3.1.12 Chi tiết bang social_commMentt 00.0 cece <5 5S S‡E+‡keEexerrkrkeree 33 3.1.13 Chi tiết bảng social_notification .cc-c-522cccvcerrsrrrrrrrreerree 34 3.1.14 Chỉ tiết bảng social_post ¿-22222cvccstrEErrtrrrrrrrrrrrrrrrree 35
3.1.15 Chi tiết bảng social_post_cate gory cccccscssssessessssesssssseesessssessssssseeseessees 36 3.1.16 Chi tiết bang social_post_tag ccccscssssssssssesssssssesssssssessesssesesssseesesssseeeee 36
3.1.17 Chi tiết bảng social_report sccccccsssesssssssescsssseescsssuesssssisecesssieeeesssnees 37 3.1.18 Chi tiết bang social_tag ccccccccssssssssssesssssssescsssueescssssecssssseeesssueeeessnneees 38 3.1.19 Chỉ tiết bảng social_user sccccccsssssssssssssccssssecsssssessssssesecsssuscessseesesssess 39
Trang 73.1.20 Chi tiết bảng social_user_action_with_category -c- - 40 3.1.21 Chitiết bảng social_user_action_with_comment.
3.1.22 Chi tiết bảng social_user_action_ with_ pOSỂ c+c<<c<cccsee 40 3.1.23 Chi tiết bảng social_user_action_with_tag.
3.1.24 Chitiết bảng social_user_action_ with_ uS€T «55c 41
3.1.25 Chi tiét bang social_user_audit_log
3.1.26 Chi tiét bang social_user_right 00.0 ceeeeeeseeeeseeeseeeeeeeneeeeereeeeeeneeeeeeeee 42 3.1.27 Chi tiét bang social_user_role
3.1.28 Chi tiét bảng social_user_role_ detail ‹ - < s5++++x+csxererzxecee 43 3.1.29 Chitiết bảng social_user_rol€_ OŸ_ US€T - ¿5-5-5 <2 <5++++x2ss< 43 3.1.30 Chi tiết bảng redirect_url -¿:¿222222vvvv+etttEEEkkxrrrrrrrrrrrrrrerree 44 3.2 Thiết kế “search vector” trên bảng social_post -cccc cccccvcee 44
3.3 Thiết kế “search vector” trên bảng social_ user -cc5ccsscc2 45 3.4 Thiết kế “search vector” trên bảng social_audit_log, admin_audit_log,
SOCIal_ uS€T_ aUdi(_ ÏOE es 6xx S11 1 1 1E ngư 45 3.5 Áp dụng tìm kiếm toàn văn và ứng dụng khác của PostgreSQL 46 3.5.1 Tìm kiếm bài viết 222222cc2 22222 trtEEEEEErrrrrrrrrrrrrrrrrerrrreg 46 3.5.2 Tìm kiếm vài viết đã thích, xem gần đây -ccccce+ccez 46
3.5.3 Gợi ý bài viết cho người dùng -:©222ccsc2cvvrrerrrrvrrerrrrrrrcre 48 3.5.4 Gợi ý bài viết cho các bài viết cccc222vctceccrvrrrrrrrtrrerrrrrrrerr 50
3.5.5 Thiết kế câu truy vấn thống kê bài viết theo thời gian - 51
Chương 4 Giao diện Ứng dung eeeccceeeceseeseseseeteneseseseeeeseseseseseeseasssseaneeesensees 52
4.1 Giao diện trang người dùng - - + thư 52
4.1.1 _ Trang chủ - Ăn HH HH ưy55
Trang 84.1.2 Trang đăng nhập, đăng ky 5 Ăn HH HH ghe62
4.1.3 Trang xác nhận email, quên mật khâu ¿ -¿z +22 654.1.4 _ Trang bài viẾt -©c + E21 212122111011211211 11111111111.664.1.5 _ Trang chỉ tiết bài viẾt - cSe tk EEEEEE112112112121 11111.674.1.6 _ Trang tạo bài Vidt oo eeeeceeccccccesseesessessessessessssecsssessessessessssessessessessesessees 704.1.7 Trang chỉnh sửa bài Viét c.ceceeesessessessesesesessessessessessessesesessesseseessees 734.1.8 _ Trang tìm kiếm c-©+++2kSEkCEEEEEEEEEEEEEEEEerkrerkrrrrees 744.1.9 Trang danh sách bài viết theo thẻ, danh mục: -««- 76
4.1.10 Trang thông tin người dùng - - 5 + sư nrưy77
4.1.11 Trang quan lí của người dùng - -. 5 - << «+ ret78
4.1.12 Trang thay đôi mật khâu - 2 2+ 2E +k+EE£EE£EE+EE£EEzEerkerkerxrrsres 80
4.1.13 Các trang báo 16: eecccccccccceccesteseeseeseeseesessesseseeseeseeseesesssausateseeseeseeseesees 84
4.2 Giao diện trang QUAN ẦTỊ - + - + E120 1E 91011 9101991 1 He rvrg S6
4.2.1 _ Trang đăng nhập - Ăn HH ngư 87 4.2.2 Trang chủ quản tTỊ - -c- Ăn nh ng ngư 88
4.2.3 Quản lí bài ViGtL cece cececcccccessessesssssessesseesessuesseesessessussusssessessessseeseesess 894.2.4 Thống kê bài ViẾt ¿ 2¿©2++22+2Ek22E2212211221221 21121 22crree 91
4.2.5 Quản lí danh mục, thẻ - c5 55 c2 1113113222111 E£EE5EEExeessee 93
4.2.6 Quản lí vai trò, quyền của vai trò cho người quản trị và người dùng 27
4.2.7 Quản lí người dùng - ch HH HH giết 104
4.2.9 Quản lí cấu hình ứng dụng -¿- 5+ ©2+©+++x++zxtzxevrxesrxesred 107
4.2.10 Quan lí tài khoản của người QUAN fTỊ - - 5 55 + xssssveseeseeres 109
4.2.11 Trang không có quyền quản tị - 2 2 2+s£+s+E+£x+E++E+zEzxzeered 110
Trang 94.3 Cài đặt và triển khai dự ấn -¿-¿- St St+E+EEtSESEEEEEESEEEEEESESEEEESEEEEEkrkrkrrrreea 111
4.3.1 Amazon Elastic Compute Cloud (Amazon EC2) - «<- 111
4.3.2 Github ACION HH9 TH Thu HH nh 112
Chương 5 Tổng kết - ¿2-52 SE EESEEEEEEEE2E12E2171717111211 1.1 eU 114
5.1 Các hướng phát triển và khả năng mở rộng - + ¿+ + ++sz+£zzxzzxe+ 114
5.1.1 _ Hỗ trợ nhiều ngôn ngữ - :- 2 2+S2+E£+E£EESEEEEEEEEEEEEEkrrrrrerrees 114
5.1.2 _ Thống kê, xếp hạng người dùng - 2-2 2+ £+zx+rx+zEezxerrxees 1155.1.3 Mở rộng cấu hình ứng dung -¿- 2+++xz+E++Exerxerxezrerrsees 115
5.2 Kết QUA Gat QUOC 1n 1165.3 Khó khăn trong việc thực hiện đề tài -¿- 2-5 E2£+zEtzxerxrrresrxrred 116
PHU LUC 954 /.ểể << ` 118
Trang 10DANH MỤC HÌNH ẢNH
Hình 1.2.1: Sơ đồ Use-case mô tả chức năng chính của diễn đàn 5Hình 1.3.1: Các trạng thái và hành động thay đổi trạng thái của bài viết 6Hình 1.4.1: Mô hình ứng dụng trién khai - - 2 2 s52 22 E£+E££EeEEeEEerxerxzrszes 8
Hình 2.1.1: Use case chính của ứng dụng - - «+ xsxnnnn ng nrikt 20
Hình 2.1.2: Chi tiết usecase của người dùng khách 2: s©sz+2s+cx+zxezsz 21Hình 2.1.3: Chi tiết usecase của người dng ceccecscsssessseessecssesseessecssecstesseessecsseess 21
Hình 2.1.4: Chi tiết usecase của người dùng quản trị - 2 sc+sz+cs+cssrxczez 22
Hình 3.1.1: Mô hình cơ sở dữ liệu của người dùng quan trỊ ‹++-«++s+ 23
Hình 3.1.2: Mô hình cơ sở dữ liệu của người dùng thường, bài viết, danh mục, thẻ,
bình luận - 2E E22 1162231161153 11 9311111931 11 8051 1 191kg KH KH ky 24
Hình 3.1.3: Mô hình cơ sở dữ liệu về người dung thường, quyền và vai trò 25Hình 3.1.4: Mô hình co sở dit liệu về bang lưu cấu hình và các đường dẫn truy cập
có trong bài VIẾT s22 2k 1521121157171121121111111211111111111 21101111 x re.26
Hình 4.1.1: Giao diện trang chủ chế độ sáng, ngôn ngữ tiếng Anh (chưa đăng nhập)
Hình 4.1.3: Giao diện trang chủ chế độ tối, ngôn ngữ tiếng Anh (chưa đăng nhập) 56
Hình 4.1.4: Giao diện trang chủ chế độ sáng, ngôn ngữ tiếng Anh (đã đăng nhập).57
Hình 4.1.5: Giao diện trang chủ chế độ xem cỘP -¿- - tsx+xvEvE+EeEerxrkerereree 57
Hình 4.1.6: Giao diện trang chủ trên thiết bị di động -c + s+ssseeeesee 58Hình 4.1.7: Giao diện thanh điều hướng ở màn hình nhỏ (đã đăng nhập) 59Hình 4.1.8: Giao diện thanh điều hướng ở màn hình nhỏ (chưa đăng nhập) 59
Hình 4.1.9: Giao diện cửa số tìm kiếm -¿ cccccrtrtirrrrirrrrirrrrirrriririio 60
Hình 4.1.10: Giao điện đăng XuẤt - 2-2 2S SE9SEEEEEEEEEEEEEEEE21221 21212 EEcree 61Hình 4.1.11: Giao điện cửa sỐ ðÓp Ý -¿- 2 252 SESEEEEEEEEEEEEE2E2EEEEEEEEEEerkrree 62Hình 4.1.12: Giao diện trang đăng nhập chế độ sáng 2 ¿2 5 s+cs2 +2 63Hình 4.1.13: Giao diện trang đăng nhập chế độ tối - 2 25c 5 s2 s+£s2 +2 63
Trang 11Giao d
Giao d Giao d Giao
Giao d
Giao d Giao d
Giao d
Giao d Giao d Giao
Giao d
Giao Giao d Giao d Giao d Giao d Giao d Giao d Giao Giao d Giao d
Giao
Giao d Giao d
iện phiên đăng nhập hết hạn -: +£©++zsscez 64
liện trang đăng KY St stvsteerkrrrrrerrrrkerrkrrrd 64
iện trang quên mật khẩu người dùng - 65 IbNirif 0 1 07 66
iện trang chỉ tiết bài viết chế độ sáng -. -cc¿ 67
ién trang chỉ tiết bài viết chế độ tối - -c 67 iện trang chỉ tiết trên thiết bị di động - - 68 iện trang bài viết (bình luận, bài viết liên quan) 69
liện báo cáo bài viết, bình luận, người dùng - 69
iện trang tạo bài viết l .c¿222vz+c2crvrrrerrrkrrrrrrrsvee 70 liện trang tạo bài VICE 2 à 00L THỰ 112121 71
liện trang tạo bai viết 3 (trình chỉnh sửa HTML) 71
liện trang tạo bài viết 3 (trình chỉnh sửa Markdown) „72 iện trang chỉnh sửa bài viết
liện xác nhận chỉnh sửa bài việt
iện trang tìm kiếm «74
iện trang tìm kiếm bai viết 75 iện trang tìm kiếm người dùng -¿- z2 75
in trang danh sách bài viết theo thẻ - 76
iện trang danh sách bài viết theo danh mục 76
liện trang thông tin người dùng -c+-cccx+cccxcce T7
iện trang hồ sơ cá nhân ¿-++2+++++2v+zr+rzssree 78
iện trang chỉnh sửa hồ sơ cá nhân . - 79
liện trang bảo mật tài khoản - ¿+ +++s+x+x+x+vrerereee 79
iện trang thay đổi mật khẩu - -¿-c++2++c+cczvscee 80
iện trang quản lí bài viết c+++2222cvvvzrrrrrrrrrxxee §0 liện trang danh sách bài viết đã lưu, đã thích, đã xem và đang
Trang 12Hình 4.1.42: Giao diện trang danh sách người dùng đang theo dõi bạn 82
Hình 4.1.43: Giao diện trang thông báo ¿+ ¿5+ St *v£vxeEeketeterrrererrrevee 83 Hình 4.1.44: Giao diện trang lỗi không tìm thay -¿©zcz+22sscez 84 Hình 4.1.45: Giao diện trang từ chối truy cập - ::©vz++2ccvvrrecrvsrrrrr 85 Hình 4.1.46: Giao diện trang lỗi hệ thống - ¿¿©2+++22++zt+22+zerrrrrscez 85 Hình 4.2.1: Giao diện trang đăng nhập người quản tr] -. -‹-5-<++ 87 Hình 4.2.2: Giao diện trang chủ quản tTỊ ¿-¿- - + ++++k+£xekeEkrkekererrkrkrkeree 88 Hình 4.2.3: Giao diện trang quản lí bài ViẾP - ¿-222z+222vvzreevvvvrrerrrrrrrrrr 89 Hình 4.2.4: Giao diện xem và duyệt bài VIẾT, à ng erey90 Hình 4.2.5: Giao diện xem nội dung chỉnh sửa của bài VIẾK sccccccccccrreeecerrree 90 Hình 4.2.6: Giao diện trang thống kê số lượng bài viết (dạng cộ) 91
Hình 4.2.7: Giao diện trang thống kê số lượng bài viết (dạng đường) 92
Hình 4.2.§: Giao diện trang thống kê bài viết dạng cột nhóm theo tuần Hình 4.2.9: Giao diện trang quan lí danh mục
Hình 4.2.10: Giao diện chỉnh sửa danh mục 94 Hình 4.2.11: Giao diện tạo mới danh mục 94 Hình 4.2.12: Giao diện trang quan lí thẻ 95
Hình 4.2.13: Giao diện chỉnh sửa thẻ - (2S S222 SE££E+E£vE+eEeEeexetrexrvrerevxes 95 Hình 4.2.14: Giao diện tạo mới thẻ - ¿+ 23c 23t S3 EvE+vEetxrxerrrsrrxetrrrrrrrrsrrr 96 Hình 4.2.15: Giao diện trang quản lí vai trò của người quản tTỊ ‹ -+97
Hình 4.2.16: Giao diện chỉnh sửa vai trò của người quản trị -. -+ 98
Hình 4.2.17: Giao diện tạo mới vai trò cho người quản tTỊ - - 5+ <<98 Hình 4.2.18: Giao diện trang quản lí quyền của vai trò cho người quan trị 99
Hình 4.2.19: Giao diện chỉnh sửa quyền của vai trò cho người quản trị 99
Hình 4.2.20: Giao diện tạo mới quyền của vai trò cho người quan trị 100
Hình 4.2.21: Giao diện trang quan lí vai trò cho người dùng 100
Hình 4.2.22: Giao diện chỉnh sửa vai trò cho người dùng - + + 101
Hình 4.2.23: Giao diện tạo mới vai trò cho người ding -:-+ 101
Hình 4.2.24: Giao diện trang quản lí quyền của vai trò cho người dùng 102
Trang 13Hình 4.2.25:
Hình 4.2.26:
Hình 4.2.27:
Hình 4.2.28:
Hình 4.2.29:
Hình 4.2.30:
Hình 4.2.31:
Hình 4.2.32:
Hình 4.2.33:
Hình 4.2.34:
Hình 4.2.35:
Hình 4.2.36:
Giao d Giao d
Giao d
Giao d Giao d Giao
Giao d
Giao d Giao d
Giao d
Giao d
iện chỉnh sửa quyền của vai trò cho người dùng
iện tạo mới quyền của vai trò cho người dùng
lện trang quản lí người dùng - + + ++++<+xexeree lện chỉnh sửa người dùng - ¿+ - c5 ssx+eexsrsree liện trang quản lí người QUAN tTỊ «+ s=e<+x+s+++z++ liện chỉnh sửa người quản tTỊ -. -‹- +5: 5+5<+<+x++ec++ liện tạo mới người QUAN tT] - - 5< + ++x+x+xexerxrkexereree iện trang quan lí cấu hình của ứng
dụng . én chỉnh sửa cấu hình ứng dụng -++
iện trang đổi mật khẩu dành cho người quản trị
lện trang bảo mật tài khoản cho người quản trị
Giao d iện trang không có quyền truy cập quản
trị -02
04
04 05 05
06
07 08
09
09 10
Trang 14DANH MỤC BANG
Bang 3.1: Cau trúc dữ liệu của bảng admin_audit_ log : 5c©5z25scs+zxc>sz 27 Bang 3.2: Cau trúc dữ liệu của bảng admin_base_cOnfig 2- 2 s52 27
Bảng 3.3: Cấu trúc dit liệu của bảng admin_ user - 2 252 se x+£x+zzzszse2 28 Bảng 3.4: Cau trúc dữ liệu của bảng admin_user_right .2- ¿55255552 28 Bảng 3.5: Cấu trúc dữ liệu của bảng admin_ user_ rỌ€ - «+ +s«++s<++e+sex++ 29
Bảng 3.6: Cấu trúc dữ liệu của bảng admin_user_role_ detail ‹++- 29
Bảng 3.7: Cấu trúc dữ liệu của bảng admin_user_role_ OŸ_ use€r - -‹ 29
Bảng 3.8: Cấu trúc dữ liệu của bang session_admin_ uS€T «-+ «<+s<s++ 30 Bảng 3.9: Cấu trúc dữ liệu của bang session_ sOCIal_ US€T «<++<s<+<<ss+ 30 Bảng 3.10: Cấu trúc dit liệu của bảng social_audit_log -: -: -5: 3l Bảng 3.11: Cấu trúc dữ liệu của bảng social_€ategOrV -©¿csc©cscxsccsz 32 Bảng 3.12: Cấu trúc dữ liệu của bảng admin_user_role_ OŸ_ uS€r - ‹‹ 33
Bảng 3.13: Cấu trúc dữ liệu của bảng social_notification . ¿-s¿s-=5+ 34 Bang 3.14: Cấu trúc dữ liệu của bảng social_pOSỂ -2 22 2 ++x+zEe+zs+rxerxcrez 35 Bang 3.15: Cấu trúc dit liệu của bảng social_post_€af€ðOFY -. -5- 555552 36 Bảng 3.16: Cấu trúc dữ liệu của bảng social_post_ tag -¿ 5¿©csc55+ccs+ 36 Bảng 3.17: Cấu trúc dit liệu của bảng sOcial_ report :s¿©5¿©csz+cs+zssscsz 37 Bang 3.18: Cấu trúc dữ liệu của bảng social_ tag -5- 2 2 z+cecxezxerxerxerszree 38 Bảng 3.19: Cấu trúc dữ liệu của bảng SOCIaÏ_ US€T - 5 + +ssssessseeesee 39 Bảng 3.20: Cấu trúc dữ liệu của bảng social_user_action_with_category 40
Bang 3.21: Cấu trúc dữ liệu của bảng social_user_action_with_comment 40
Bang 3.22: Cấu trúc dữ liệu của bảng social_user_action_with_post - 40
Bảng 3.23: Cấu trúc dữ liệu của bang social_user_action_with_tag - 41
Bang 3.24: Cấu trúc dữ liệu của bảng social_user_action_with_user - 41
Bang 3.25: Cấu trúc dữ liệu của bang social_user_audit_ ÏOg -««+-<«+ 42 Bang 3.26: Cấu trúc dữ liệu của bảng social_user _right 5-55 secszss2 42 Bảng 3.27: Cấu trúc dữ liệu của bảng socIal_ user_rỌÌ€ - -«++s<x+++sx+s+ 43 Bảng 3.28: Cấu trúc dữ liệu của bang social_user_role_ detaIl -«+ 43
Trang 15Bảng 3.29: Cấu trúc dữ liệu của bảng social_user_role_ OŸ_S€T
-«-Bảng 3.30: Cấu trúc dữ liệu của bảng redirect_url - -.-«+- «<< £++se+seeeesee
Trang 16DANH MỤC TU VIET TAT
STT Tên viết tắt Tên đầy đủ Dich ra tie ng Việt(Nêu là tiêng Anh)
1 BE Back-End Máy chủ web
2 |FE Front-End Giao diện người dùng
3 SPA Singlel-Page Application
4 |EF Entity Framework
5 | NPM Node Package Manager
6 |FTS Full-text search Tim kiém toan van
7 Amazon EC2, EC2 | Amazon Elastic Compute Cloud
Trang 17TÓM TÁT KHÓA LUẬN
Nhắm tới việc phát triển của các mạng xã hội, các diễn đàn, diễn đàn cá nhân
nơi mọi người có thé chia sẻ kiến thức, kinh nghiệm, trải nghiệm khác trong đời sống Mục đích của đề tài xây dựng một diễn đàn chia sẻ các kinh nghiệm, kiến
thức về ngành công nghệ thông tin Gồm các tinh năng hỗ trợ người dùng như tìm
kiếm, lưu trữ, chia sẻ thông tin và tính năng giúp quản lý diễn đàn như quản lý quyền kiểm soát các thông tin nội dung trên diễn đàn.
Rõ ràng hơn với các tính năng trên, diễn đàn được xây dựng giúp người dùng
tương tác với nhau qua việc chia sẻ kiến thức, kinh nghiệm và bàn luận giúp nhau
giải quyết các vấn để là nơi mọi người có thể tìm kiếm và truy cập lại những thông tin cần thiết Ngoài ra diễn đàn còn hỗ trợ người dùng quản lý các nội dung bản thân
đã chia sẻ, nội dung ưa thích Dé dap ứng nhu cầu của một người quản lý ứng dụng
thì diễn đàn được xây dựng giúp quản lý các nội dung có trên ứng dụng, cấu hình các quyền và vai trò phù hợp cho các người dùng hay cấu hình người diễn đàn cho
phù hợp với người dùng.
Diễn đàn được xây dựng và hoàn thiện các tinh năng cơ bản và can thiết dé
có thể đáp ứng được nhu cầu của người dùng và người dùng quản trị Tuy còn các hạn chế như thiếu các cách giao tiếp giữa các người dùng với nhau, thiếu các báo
cáo trực quan về hành vi của người hỗ trợ cho việc quan trị diễn đàn nhưng diễn đàn
trên được xây dựng và đáp ứng tốt các nhu cầu cơ bản.
Trang 18Chương 1 Tổng quan đề tài 1.1 Phân tích khảo sát các nhu cầu từ trải nghiệm thực tế
- Để có thể liệt kê các tính năng cần thiết và cơ bản cho một diễn đàn, nhóm
đã trải nghiệm các diễn đàn nồi tiếng về chia sẻ kiến thức, van đề, giải pháp
trong ngành công nghệ thông tin như: Stack Overflow, Database Admintractors Stack Exchange, Unix & Linux Stack Exchange, Stack
Exchange Network Tham khảo các thiết kế một số trang diễn đàn cá nhân
về lĩnh vực công nghệ thông tin có nhiều lượt xem ở Việt Nam như How Kteam, Tôi đi code đạo, Tinh tế, TECHRUM.VN Ngoài ra còn các diễn đàn
nổi tiếng với nhiều lĩnh vực như Cookpad, Reddit và các mạng xã hội với
mục tiêu tìm hiểu các thói quen, yêu cầu nào cần thiết và dư thừa đối với một diễn dan chia sẻ kinh nghiệm.
1.1.1 Các tính năng cần thiết đối với người dùng thường
- Với việc khảo sát các diễn đàn chia sẻ kiến thức, giải pháp trong ngành công
nghệ thông tin thu được các tính năng cơ bản sau:
e - Đăng nội dung, câu hỏi (bài viết)
© - Giải đáp phản hồi các bài viết (bình luận)
e _ Thể hiện sự yêu thích, đồng tình của bản thân với các nội dung
e Truy xuất, tìm kiếm các nội dung đã thích, đã xem, nội dung tương tự
- Về tính năng của các diễn đàn, diễn đàn nồi tiếng ở Việt Nam không có thay
đổi nhiều với các tính năng kể trên nhưng có thể tham khảo và lựa chọn
hướng thiết kế giao diện phù hợp với người dùng hiện thời.
- Tham khảo qua các diễn đàn, mạng xã hội nổi tiếng với nhiều lĩnh vực, rút ra
được các yêu cầu của một diễn đàn là cần quan tâm đến trải nghiệm người dùng:
e Tw thiết kế thân thiện
© _ Có hướng dẫn chỉ tiết về các bước hay các logic của dién đàn
© _ Có tùy biến theo từng người dùng
Trang 19- Và yêu cầu khác về kết nối người dùng với nhau nhưng đối với một diễn đàn
chia sẽ kinh nghiệm trong lĩnh vực công nghệ thông tin thì các yêu về kết nối
người dùng với nhau là khá dư thừa
- Sau các tham khảo và tự trải nghiệm thì diễn đàn mà nhóm xây dựng sẽ tập
trung vào:
e_ Tiếp cận nội dung dé dàng:
"_ Hỗ trợ tìm kiếm truy vấn với các bộ lọc đặc biệt
" Gợi ý các nội dung tương tự hay dựa vào hành động của người
dùng
" Các giao diện thân thiện va dé dùng
e Dễ dàng quản lý các nội dung:
= Các hướng dẫn gợi về việc quản lý nội dung phải chỉ tiết
= Người dùng có toàn quyền với những nội dung của riêng tư
© Các quy trình phải đơn giản và dễ hiểu đối với người dùng
© C6 các thông báo kịp thời cho người dùng có thé cập nhật và theo dõi
se Quản lý các thông tin cá nhân
1.1.2 Các tính năng cần thiết đối với người dùng thường quản trị
- Để khảo sát khi với vai trò là một người quản trị diễn đàn thì sẽ cần các tính
năng nào, nhóm đã chọn giải pháp tham khảo các mô tả về các dự án mã nguồn mở xây dựng diễn đàn, mạng xã hội và có kết hợp với các tính năng
cần thiết của người dùng dé đưa ra kết quả mong muốn.
- Chức năng can thiết dé quản trị diễn đàn mà nhóm tổng hợp lại và đưa ra
được:
e Quản lý người dùng (người dùng quản tri)
e Vai trò của người dùng, quyền của các vai trò
© Quan lý các bài viết, nội dung khác được công khai trên diễn dan
© Quan lý các danh mục và các thẻ bài viết
Trang 20e Diễn đàn phải đưa ra được các cấu hình giúp người quản trị thiết kế
diễn đàn cho phù hợp với hơn với người dùng (cấu hình về mẫu gửi
mail, hệ số tính bài viết xu hướng, gợi ý bài viết)
© H6 trợ truy vấn các hành động, thay đổi diễn ra trên diễn đàn 1.2 Chức năng của diễn đàn
- Được khảo sát và liệt kê từ phần trước nhóm sẽ tập trung xây các chức năng
chính cho diễn đàn như sau:
e - Với người dùng bình thường:
= Đăng ký tài khoản
"=_ Tìm kiếm các nội dung công khai
" Xem các nội dung công khai
" Quản lý bài đăng của bản thân
= Quản lý bình luận cua bản thân
= Quản lý thông tin của ban thân
= Bao cáo các nội dung không phù hop
" Tương tác với các nội dung công khai
" Quản lý phiên đăng nhập
= Gópý
e Với người dùng quản trị:
" Quản lý thông tin của bản thân
" Quản lý nội dung công khai
= Quan lý các bài đăng công khai
= Quan lý phiên đăng nhập quản tri
Trang 21- Sơ dé Use Case:
Quản lý phiên đăng nhập quản trị
Quan lý các bai đăng
công khai Quản lý danh mục.
Tim kiếm các nội dung
công khai ‘Bang ký tài khoản
‘Quan lý bai đăng của
'Xem các nội dung
Quan lý thông tin ly thong công khaicủa bản thân
“Người dùng
Báo cáo các nội dung
không phủ hợp
Tương tác với các nội dung công khai
Quân lý phiên
dang nhập.
Hình 1.2.1: Sơ đồ Use-case mô tả chức năng chính của diễn đàn
Trang 221.3 Các quy trình của người dùng có trong diễn đàn
1.3.1 Quy trình tạo bài viết
- Trạng thái của bài viết:
© Cho duyệt (Pending): trạng thái khi người dùng tao bài viết và đang
chờ được phê duyệt đề thành bài viết công khai
© Chấp thuận (Approved): trạng thái khi bài viết đã thành bài viết công
khai
© Tw chối (Rejected): trạng thái khi bài viết bị từ chối chấp thuận thành
bài viết công khai
e Riéng tư (Private): bài viết có trạng thái này khi chủ sở hữu tạo bài
viết riêng tư hoặc là chủ sở hữu chuyền bài viết từ các trạng thái khác
về trạng thái riêng tư
© Đã xóa (Deleted): bài viết có trang thái này khi chủ sở hữu xóa (khi
bài viết bị xóa không ai có thể truy cập được.
- Những hành động chuyên trạng thái cho phép:
Private
Hình 1.3.1: Các trạng thái và hành động thay đổi trang thái của bai viết
Trang 23Tạo bài viết:
¢ Nguoi dùng có thể tạo bài viết ở trạng thái riêng tư hoặc chờ duyệt.
© Sau khi tao bài viết người dùng cần được chờ duyệt dé bài viết được
công khai.
Thay đổi bài viết:
¢ Khi bài viết ở trạng thái chờ duyệt hoặc riêng tư các thay đổi của
người dùng lên bài viết sẽ lập tức được cập nhật.
© Néu trạng thái bài viết đã là chấp thuận khi người dùng thay đổi bài
viết những thay đổi đó cần được phê duyệt lần nữa dé có thể cập nhật lên bài viết (Nếu thay thay đổi của người dùng bị từ chối thì bài viết
vẫn không bị từ chối và vẫn là bài viết công khai với nội dung chưa thay đổi).
Chuyển trạng thái bài viết về riêng tư:
e_ Bất cứ khi nào khi bài viết chưa bị từ chối hoặc xóa người dùng có thé
chuyền trạng thái bài viết về riêng tư.
Công khai bài viết riêng tư:
© Khi trạng thái bài viết là riêng tư và người dùng muốn công khai bài
viết đó thì cần chuyền trạng thái chờ duyệt và chờ người quản trị phê
duyệt.
1.3.2.Quy trình xác thực tài khoản
Mỗi người dùng khi đăng ký tài khoản cần phải xác thực tài khoản, quy trình
nhằm xác thực email của người dùng, người dùng sau khi xác nhận email sẽ không được thay đôi email.
Email sau khi đăng ký tài khoản (nếu không nhận được email người dùng có thể yêu cầu gửi thư xác thực trong thông tin người dùng).
Khi nhắn vào đường dẫn hướng dẫn trang web xác thực người cần nhập lại mật khâu đề tiến hành xác thực tài khoản.
Trang 241.3.3 Quy trình sửa, đặt lại mật khẩu
- Người có thể sửa mật khẩu hoặc ép buộc phải sửa mật khẩu nếu mật khẩu
của người dùng hết hạn do chính sách mật khâu của trang diễn đàn Ngoài ra người ding có thể đặt lại mật khâu khi quên.
- Khi sửa mật khẩu người dùng cần điền mật khẩu cũ, mật khẩu mới và xác
nhận mật khâu mới.
- Khi đặt lại mật khâu người dùng sẽ nhận được email sau khi nhắn vào đường
dẫn người dùng sẽ nhập mật khẩu mới.
1.3.4 Quy trình báo cáo nội dung không phù hợp, góp ý cho diễn đàn
- Người dùng cần đăng nhập vào tài khoản của bản thân và có thể báo cáo về
các nội dung bài viết, bình luận, hành động của người dùng không phù hợp Ngoài ra người có thể nêu các góp ý cho diễn dàn.
- Sau khi báo cáo và báo cáo của người dùng được người quản trị dién đàn xử
lý sẽ có thông báo là báo cáo đã xử lý hay là bị bỏ qua.
1.4.Các công nghệ được lựa chọn trong dé phát triển ứng dung
Brower Web server
Hinh 1.4.1: M6 hinh tng dung trién khai
- Với mô hình ứng dụng trên nhóm đã tìm hiểu và quyết định triển khai phát
triển ứng dụng với các 2 dự án là thiết kế giao diện người dùng (Front-end)
và máy chủ web (Back-end) đảm nhiệm giao tiếp với cơ sở dữ liệu và xử các yêu cầu từ Front-end trả về.
- Front-end và Back-end giao tiếp với nhau qua RESTful APIs.
Trang 251.4.2 Single-Page Application (SPA)
Single-page application (SPA) [1] mô tả các trang web cập nhật lai nội dung
trang web bang dit liệu trả về từ máy chủ thay vì phải làm mới lại trang Mục
tiêu mang lại cảm giác sử dụng thoải máy khi các chuyên đổi của ứng dụng
web nhanh hơn.
Trong một trang web SPA, các đoạn mã HTML, JS, CSS được tải hết trongmột lần và trang web sẽ không bao giờ làm mới
Với việc phát triển một diễn đàn thì SPA là một phương án phù với các lợi
ích mang lại như nhanh và tối ưu về trải nghiệm đặc biệt là trải nghiệm trên
mobile.
Đối với việc triển khai SPA cho một diễn đàn thì nhược điểm là lần lầu truy
cập vào trang web sẽ rất nặng do phải tải tất cả các đoạn mã xuống nhưngsau đó lợi ích mang lại thì nhược điểm này không đáng quan tâm
1.4.3 Angular
Angular [2] là một framework thiét ké ung dung va nén tang phat trién dé tao
ra các ứng dung SPA, được xây dựng trên TypeScript (TypeScript là
JavaScript với các ràng buộc chặt chẽ về cú pháp là công cụ tốt hơn cho việc
phát triển ứng dụng)
Việc lựa chọn Angular dé phát triển cho dự án có các lý do sau:
e_ Một framework lớn với cộng đồng hỗ trợ vô cùng đông
e Là lựa chọn hàng đầu cho việc xây dựng SPA
e Được xây dựng trên TypeScript giúp việc phát triển tối ưu hơn
e_ Có một lượng lớn các thư viện, tiện ích từ cộng đồng hỗ trợ giúp việc
tập sử dụng Angular không quá khó hay nói cách khác là tương đối
đơn giản
Trang 261.4.4 Node Package Manager (NPM)
- Node Package Manager (NPM) là công cụ tạo và quản lý các thư viện lập
trình Javascript cho Node.js Các lập trình viên khắp nơi trên thé giới chia sẻ
hàng trăm nghìn các thư viện với các đoạn mã đã thực hiện sẵn một chức
năng nào đó Nó giúp cho các dự án mới tránh phải việt lại các thành phân cơ
bản, các thư viện lập trình hay thậm chí các framework.
- Uudiém:
Thực hiện việc quản lý đơn giản hơn rất nhiều Các thư viện đều cósẵn chỉ cần cài đặt và sử dụng, bạn chỉ cần chạy một dòng lệnh dé càiđặt và dé dàng sử dung chúng trong dự án của mình hơn.
Việc sử dụng thư viện có sẵn giúp tối ưu hóa các đoạn mã của chúng
ta hơn vì thư viện sẽ thay ta tối ưu.
- Nhược điểm:
Mỗi đoạn code có thé phụ thuộc rất nhiều các mã nguồn mở khác nên
có NPM sẽ giúp dễ quản lý các thư viện sẽ đỡ tốn nhiều thời gian và
công sức trong việc quản lý
Việc các thư viện cập nhật phiên bản của nhau dễ xảy ra xung đột
trong tương lai.
- Cac thư viện nồi bật được sử dụng trong dự án:
primeng: Thư viện cung cấp các thành phần có sẵn trên giao diện
trang web Kèm theo thư viện này còn có thư viện primeicons và
primeflex.
dayjs: Thư viện giúp tối giản hóa cú pháp hiển thị ngày giờ
lodash: Thư viện cung câp mô-đun, hiệu suât và các tính năng bô
sung, cung cấp các phương thức đã được đơn giản hóa về mặc hiệu
năng.
ngx-translate: Thư viện hỗ trợ đa ngôn ngữ giúp dễ dàng tạo nhiều
ngôn ngữ cho trang web.
10
Trang 271.4.5 ASP.NET Core API
ASP.NET Core là một web framework mã nguồn mở miễn phi được pháttriển bởi Microsoft là phiên bản kế nhiệm của ASP.NET
Với việc sử dụng ASP.NET Core phía máy chủ sẽ xây dựng một dịch vụ
cung cấp các RESTful APIs đáp ứng cho ứng dụng
Các lợi ích của việc sử dụng ASP.NET Core:
e_ Một framework đa nền tang
e Việc phát hành, triển khai một dịch vụ đơn giản
e_ Có một cộng đồng người dùng lớn với nhiều diễn đàn giải đáp các
thắc mắc Đặc biệt đứng sau được phát hành bởi ông lớn Microsoft
e_ Có hỗ trợ cơ chế chia sẽ mã nguồn là Nuget, nơi mà các nhà phát triển
có thê tìm thấy các mã nguồn hữu ích phù hợp cho dự án hay chia sẻ
mã nguồn của bản thân
1.4.6 Entity framework (EF)
Entity framework (EF) hỗ trợ các nhà phát triển có thé truy xuất đến cơ sở ditliệu dưới các đối tượng cụ thể mà không phải truy xuất đến các bảng, cột trên
cơ sở dữ liệu.
Với entity framework nhà phát triển sẽ giảm thiếu được các không cần thiết
và làm việc với mức độ trừu tượng cao hơn
Enity framework hỗ trợ lâp trình:
e_ Đa nền tảng, mô hình hóa: mô hình hóa các bảng trong cơ sở dit liệu
với thuộc tính được định nghĩa trước và sử dụng các mô hình dé truyvan hoặc lưu trữ vào cơ sở dữ liệu
e_ Truy vấn: hỗ trợ các câu truy vấn LINQ dé lấy dữ liệu bên dưới
e Nâng cap và cập nhật cơ sở dit liệu: nếu nhà phát triển cần phải nâng
cấp, cập nhật lại các mô hình cấu trúc dt liệu thay vì viết các câu lệnh
SQL thì nhà phát triển có thể dùng EF viết mã mô tả các hành động vàcòn lại dùng các câu lệnh dé thực thi đoạn mã đó
11
Trang 281.4.7 Language-Integrated Query (LinQ)
LINQ là tên của một tập hợp các công nghệ dựa trên việc tích hợp các khả
năng truy vấn trực tiếp vào ngôn ngữ C# Theo truyền thống, các truy vấn
đối với dữ liệu được biểu thị dưới dạng chuỗi đơn giản mà không cần kiểm
tra kiểu tại thời điểm biên dịch Hơn nữa, nhà phát triển phải học một ngônngữ truy vấn khác nhau cho từng loại nguồn dữ liệu: cơ sở dữ liệu SQL, tài
liệu XML, các dịch vụ Web khác nhau.
Với LINQ chỉ với một cú pháp truy van nhà phát triển có thé dùng và truycập đến các nguồn dữ liệu khác nhau như SQL, XML
Lợi ích khác của LINQ khi kết hợp với Entity Framework là giúp cho mãnguồn của nhà phát triển thích ứng được với nhiều phiên bản ứng dụng
Vi dụ như theo truyền thống dé truy vấn đến các cơ sở dit liệu SQL nhà phattriển cần viết các câu truy vấn thuần và nhà phát triển cần phải chú ý đến cácphiên bản cơ sở dit liệu dé câu tránh trường hợp câu truy vấn không được hỗ
trợ ở các phiên bản cũ nhưng với LINQ nhà phát triển chỉ cần viết truy vấn
với trực tiếp trong mã nguồn với cú pháp mà C# hỗ trợ và không cần lo lắng
về việc tương thích giữa các phiên bản ứng dụng
Nhờ đó mã nguồn của nhà phát triển sẽ dễ dàng cập nhật và tương thích với
các phiên bản khác của ứng dụng.
1.4.8 PostgreSQL
Một cơ so dữ liệu mã nguồn mở, miễn phí, mạnh mẽ, sử dụng và mở rộngcác ngôn ngữ SQL kếp hợp với nhiều tính năng giúp lưu trữ và làm việc vớicác dữ liệu phức tạp nhất
PostgreSQL đã tạo được danh tiếng mạnh mẽ về kiến trúc đã được chứng
minh, độ tin cậy, tính toàn vẹn của dữ liệu, bộ tính năng mạnh mẽ, kha năng
mở rộng va sự cống hiến của cộng đồng nguồn mở dang sau phần mềm dé
liên tục cung câp các giải pháp hiệu quả và sáng tạo.
12
Trang 29PostgreSQL chạy trên tất cả các hệ điều hành chính , đã tuân thủ ACID.
PostgreSQL đã trở thành cơ sở dữ liệu quan hệ nguồn mở được nhiều người
và tổ chức lựa chọn
Việc lựa chon PostgreSQL làm cơ sở dữ liệu thay vi SQL Server có độ tương
tính cao với các ứng dụng ASP.NET:
e Là một cơ sở dữ liệu miễn phí và mã nguồn mở
e SQL Server tập trung lưu trữ dtr liệu cho các tính năng phân tích, báo
cáo phục vụ thương mại như (data warehouse, data analysis) điều đó
là dư thừa với ứng dụng mà nhóm chọn phát triển
e PostgreSQL hỗ trợ entity framework bao gồm các kiểu dữ liệu phức
1.4.9 Tìm kiếm toàn văn (Full-text search)
Tìm kiếm toàn văn bản cung cấp khả năng xác định các tài liệu ngôn ngữ tựnhiên đáp ứng truy van và tùy chọn dé sắp xếp chúng theo mức độ liên quanđến truy vấn Loại tìm kiếm phô biến nhất là tìm tat cả các tài liệu có chứacác cụm từ truy van nhất định và trả về chúng theo thứ tự tương tự với truyvan Các khái niệm về truy van và sự tương tự rất linh hoạt và phụ thuộc vàoứng dụng cụ thé Tìm kiếm đơn giản nhất coi truy van là một tập hợp các từ
và độ tương tự là tần suất xuất hiện của các từ truy van trong tai liéu
Với co sở dữ liệu PostgreSQL đã hỗ trợ các toán tử ~, ~*, LIKE, ILIKE cho
các xử lý trên các dữ liệu text, nhưng có các han chế như:
e Không hỗ trợ ngôn ngữ ngay với tiếng anh, có thé ví dụ là: categrory,
categories Người dùng sẽ có thé bỏ qua các tài liệu ‘categories’ khichỉ sử dụng từ khóa “category' trong mệnh đề WHERE
13
Trang 30e Không cung cấp việc sắp xếp thứ tự tìm kiếm
e Cham vì không có các chỉ mục trên các dữ liệu văn bản được tìm
kiếm
Lập chỉ mục toàn văn bản cho phép các tài liệu được xử lý trước và lưu một
chỉ mục dé tìm kiếm nhanh chóng sau này Tiền xử lý bao gồm:
e Phan tích cú pháp tài liệu thành mã thông báo Sẽ rất hữu ích khi
xác định các lớp mã thông báo khác nhau, ví dụ: số, từ, tir phức, địachỉ email dé chúng có thé được xử lý theo cách khác nhau Về nguyên
tắc, các lớp mã thông báo phụ thuộc vào ứng dụng cụ thể, nhưng đối
với hầu hết các mục đích, sử dụng một tập hợp các lớp được xác địnhtrước là đủ PostgreSQL sử dụng trình phân tích cú pháp dé thực hiệnbước nay Trình phân tích cú pháp tiêu chuẩn được cung cấp và có thétạo trình phân tích cú pháp tùy chỉnh cho các nhu cầu cụ thể
e Chuyển đổi mã thông báo thành lexemes Lexeme là một đơn vị có
nghĩa từ vựng làm nền tảng cho một tập hợp các từ có liên quan vớinhau, ví dụ: run, running, ran, runs là các dạng giống nhau có chunglexeme là run PostgreSQL sử dụng từ điển để thực hiện bước này.Nhiều từ điển tiêu chuẩn khác nhau được cung cấp và những từ điểntùy chỉnh có thé được tao cho các nhu cầu cụ thé
e Lưu trữ các tài liệu được xử lý trước được tối ưu hóa cho việc tim
kiếm Ví dụ, mỗi tài liệu có thé được biểu diễn dưới dạng một manglexemes chuân hóa đã được sắp xếp Cùng với các từ vựng, người tathường mong muốn lưu trữ thông tin vị trí để sử dụng cho xếp hạngvùng lân cận, do đó, tài liệu chứa vùng từ truy vấn “dày đặc” hơn
được chỉ định xếp hạng cao hơn tài liệu có các từ truy vẫn rải rác
Hiện tai PostgreSQL đang hỗ trợ từ dién tích hợp san là tiếng anh, nên vớicác ngôn ngữ khác như tiếng việt thì các bước tiền xử lý ở trên cần được thựchiện thủ công trước khi được lưu trữ xuống PostgreSQL
14
Trang 311.4.10 Tìm kiếm toàn văn trong PostgreSQL
- Các cách sử dụng tìm kiếm toàn văn trong PostgreSQL: [3]
e Sử dụng không cần chỉ mục, ví dụ mô tả việc tìm kiếm nội dung của
trang web có chứa từ ‘friend’ với tìm kiếm toan văn Với việc này khiđối với dữ liệu lớn sẽ tốn tài nguyên và chậm dé có thể thực thi xong
SELECT title
FROM pgweb
WHERE to tsvector('english', body) @@ to_tsquery('english', 'friend');
e Dé khắc phục việc truy van chậm can tạo chi mục và truy vân theo chi
mục đó Cú pháp tạo chỉ mục cho câu truy vân trên:
CREATE INDEX pgweb idx ON pgweb USING GIN (to tsvector('english', body));
e Ngoài ra còn một cách tiép cận khác là tạo ra cột dữ liệu với kiêu dữ
liệu là ‘tsvector’ và tao chỉ mục trên cột dữ liệu đó và sử dụng trong
mệnh dé ‘where’:
ALTER TABLE pgweb
ADD COLUMN textsearchable index col tsvector GENERATED ALWAYS AS
(to_tsvector('english', coalesce(title, '') || ' ' || coalesce(body, ''))) STORED;
CREATE INDEX textsearch idx ON pgweb USING GIN (textsearchable index col);
SELECT title
FROM pgweb
WHERE textsearchable index col @@ to tsquery('create & table');
- Trong PostgreSQL hỗ trợ hai dang chỉ mục dé hỗ trợ tăng tốc tìm kiếm toàn
văn là GIN, GIST: [4]
e Với GIN nên được sử dụng với các dữ liệu ‘tinh’ là các dữ liệu có ít
thay đổi, là các loại dữ liệu như nhật ký ứng dụng Sử dụng GIN nên
các dữ liệu tĩnh sẽ cho hiệu năng tìm kiếm nhanh hơn
e GiST phù hợp cho các dữ liệu “động” là các dữ liệu được lưu trữ và có
thay đôi nhiều GiST phù hợp cho các loại dit liệu động vi được thiết
kế để cập nhật các chỉ mục nhanh hơn
- _ Hiện thực trong dự án nhóm chọn cách thứ 3 là ở các bảng nào có các dtr liệu
cần áp dụng tìm kiếm toàn văn thì sẽ tạo cột “seach_vecfor” và chỉ mục tưng
r
ung.
15
Trang 321.4.11 Kiểu dữ liệu JSON trong PostgreSQL
- Ngoài các kiểu dữ liệu cơ ban PostgreSQL còn hỗ trợ các kiểu dữ liệu phức
tạp như JSON và ngoài ra PostgresSQL còn hỗ trợ các hàm dé xử lý kiểu dữ
liệu JSON.
- Với việc cơ sở dit liệu hỗ các các kiểu dữ liệu phức tạp như JSON, XML,
HTML Giúp tránh sai lệnh dữ liệu do người dùng gây ra, ví dụ lưu tệp
JSON vào một cột trong cơ sở đữ liệu có kiểu là TEXT nêu ứng dụng hoặcngười dùng gây ra lỗi lầm cho dữ liệu được lưu bi thay đổi làm kiểu dữ liệumong muốn là JSON và gây ra các hệ quả khác như ứng dụng hoạt động
không đúng.
- _ Trong PostgreSQL với kiêu dữ liệu JSON ngoài việc lưu trữ và kiểm tra dit
liệu khi có thay đôi (trách việc thay đôi làm sai lệch dữ liệu) thì PostgresSQLcòn hỗ trợ các hàm và phương pháp dé truy van như: [5]
e Truy vấn JSON với mệnh đề điều kiện:
The array on the right side is contained within the one on the left:
SELECT '[1, 2, uM: : jsenb C “SE, „ la’ teen] Sond;
This array contains the primitive string value:
SELECT '["foo", "bar"]'::Jsonb @> '"bar"'::jsonb;
A top-level key and an empty object is contained:
SELECT '{"foo"; {"bar": "baz"}}'::jsonb @> '{"foo": {}}'::jsonb;
String exists as object key:
SELECT '{"foo": "bar"}'::jsonb ? 'foo';
16
Trang 33e_ Các hàm áp dụng trên kiểu dữ liệu JSON:
Search in JSON with JSON path
jsonb_path_ query first (
Create a JSON array
Json build array(1, 2, 'foo', 4, 5) —>[1, 2, "foo", 4, 5]
Create a JSON object
json_build_object('foo', 1, 2, row(3,'bar')
— {"foo" ; 1, "2" ; ("£1:3,"£2"2"bar"})}
Check JSON contains JSON path
jsonb path exists (
'{"a":[1,2,3,3,5]}";
"S.a[*] ? (@ >= $min && @ <= Smax)',
'{"min":2, "max":4}!
) > true
- Kiểu dit liệu JSON sẽ phù hop cho các trường tùy chọn ví dụ như người
dùng sẽ có các tương tác với bài viết thay vì mỗi tương tác cơ sở dữ liệu phải
lưu các dòng khác nhau thì cơ sở dữ liệu chỉ cần lưu một dòng với cột tương
tác là kiểu JSON
Multiple line to save action user with post
post_id user_id action | timestamp |
Trang 341.4.12 PostgreSQL và Entity framework
Đã dé cập ở trên thì với Entity framework sẽ hỗ trợ nhà phát triển truy xuấtđến cơ sở dữ liệu dưới các đối tượng cụ thé vậy với các kiêu dit liệu đặc biệt
đã đề cập ở trên như “ts_vector” ‘json’ trong cơ sở dữ liệu PostgreSQL thì cóđược hỗ trợ và cách sử dụng như thế nào
Với kiểu dữ liệu JSON thì tương ứng với kiểu dit liệu ‘string’ trong C# và
Entity framework cũng có hỗ trợ các hàm tương ứng với PostgreSQL: [6]
.NET SQL
customer.Name customer- > >'Name'
customer.Orders[1].Price customer# > > '{Orders,0,Price}'[1]
jsonb array
length(customer->'Orders') customer.Orders.Length (or Count)
EF.Functions.JsonContains(customer, @"{""Name"": ""Joe"",
EF.Functions.JsonExists(e.Customer, "Age") customer ? 'Age'
EF.Functions.JsonExistsAny(e.Customer, "Age", "Address") customer ?| ARRAY['Age','Address ]
EF.Functions.JsonExistsAll(e.Customer, "Age", "Address") customer ?& ARRAY[ Age','Address']
EF.Functions.JsonTypeof(e.Customer.Age) jsonb typeof(customer->'Age')
18
Trang 35- Con với kiểu dit liệu ‘ts vector” và tìm kiếm toàn văn trên PostgreSQL thì
Entity framework có hỗ các hàm tương ứng sau: [6]
EF.Functions.PlainToTsQuery("english", string) plainto_tsquery(‘english'::regconfig, string)
tsvector.Matches(string) tsvector @@ plainto_tsquery(string)
tsvector.Matches(tsquery) tsvector tsquer
tsvector.Rank(tsquery) ts_rank(tsvector, tsquery)
tsvector.ToStripped() strip(tsvector)
19
Trang 36Chương 2 Thiết kế hệ thống
2.1.Sơ đồ Usecase
- _ Các usecase chính cua ứng dụng
Quản lý phiên đảng nhập quản trị
Quản lý các bải đăng
Người dùng
quản trị
Quản lý nội dung
Quản lý các quyền,
vai trò
Quản lý thông tin
của bản thân
Tim kiếm các nội dung
công khai Đăng ky tải khoản
Quản lý bải đăng của
Xem các nội dung
Quản lý thông tin az B
Trang 37Tim kiếm bài viết theo
Tim kiếm các nội Gung \ -xteng»› { Tim kiếm bai viétcông khai
Đăng ky tải khoản
Xem chỉ tiết về danh
<s<extend=>:-{ tương tac đã thực hiện
(luu, thích, bai viet)
Chuyén trang thái Tương tac với
Tải lên hình ảnh Tạo bải viết mới Xóa bãi viết
bai viet thé, danh mục, người dùng,
bai viết
Sửa, đất lai mật khâu Tương tác với các
nôi dung công khai
Xác minh tải khoản ssextend>= ° 9
f ev sain ‘Quan lý bình luận của Quân lý phiên ề Báo cáo binh luận
k Xóa tải khoản h " À ^
<<extend>> `: bản thân đăng nhập 235026 không phù hợp
Gửi yêu cầu xác minh = # i e htải khoản <<extend=> <exfend>> <<exfend>> <<extend>> <<extend>>
Truy van các phiênrần các | Báo cáo người dùng
đăng nhập
Xóa bình luận Chỉnh sửa bình luận Viết bình luận ce ự
không phù hợp.
Xóa phiên đăng nhập
Hình 2.1.3: Chi tiết usecase của người dùng
21
Trang 38Từ chối bai viết có
nội dung thay doi
- Chi tiêt usecase của người dùng quan tri
“Xác nhân bai viết đang.
Từ chối bai viết
Truy van các bai viết
không phải bai viết
riêng tư
Quản lý hình ảnh, các dữ liêu công khai
<<erdend=>
Tải lại cầu hình.
<<include>>
Tao mới, sửa, vô hiệu.
mê Quản lý danh mục.
Tạo mới, sửa, vô hiệu Quan lý phiên
danh mục đăng nhập quản trị
Thêm, xóa vai trò của.
Truy van người dùng người dùng
Quản lý thông tin của bản thân
Quản lý các quyền,
vai trồ
<<etend>>
Tạo mới, sửa, xóa
quyền, vai trò của
Xóa phiên đăng nhập
Truy van các phiên
đăng nhập
Chỉnh sửa thông tin
cá nhân
Sửa, đặt lại mật khẩu
Tạo mới, sửa, xóa
quyền, vai trò của
người dùng thường
"Thêm, xôa vai trò của người dùng
Khóa, mở khoá người dùng
22
Trang 39table character varying(50)
table_key character varying(100)
action character varying(50)
table character varying(50)
table_key character varying(100)
action character varying(50)
status character varying(15)
right_name character varying(50)
display_name character varying(50) describe character varying(150)
status character varying(15)
uuid integer
jsonb
integer 1
character varying(50) character varying(50)
character varying(150) character varying(15)
boolean
dbdiagrar
Hình 3.1.1: Mô hình cơ sở dữ liệu của người dùng quản trị
23
Trang 40- _ Các bảng và quan hệ vê người dùng:
social user action with category
1 ia bigint
-Ha by parent_id bigint
sctons = name character varying(20)
display_name character varying(50) describe character varying(300)
user_id uuid — thumbnail text
post_id bigint 1 ia status character varying(15)
actions jsonb owner uid search_vector tsvector
title text created_timestamp timestamp
slug text last_modified_timestamp timestamp thumbnail text
character varying(25) content_search text
character varying(50) content text
character varying(50) pending_content jsonb character varying(32) short_content text
character varying(8) content_type character varying(15) character varying(320) search_vector tsvector
character varying(2048) created timestamp timestamp
sex character varying(10) approved_timestamp timestamp
phone character varying(20) last_modified_timestamp timestamp
country character varying(20)
character varying(20) character varying(20)
id bigint 1
parent_id bigint
last_access_timestamp timestamp created_timestamp timestamp
last_modified timestamp timestamp
Hình 3.1.2: Mô hình cơ sở dữ liệu của người dùng thường, bài viết, danh mục, thẻ,
bình luận
24