Tải bản đầy đủ (.pdf) (113 trang)

Đồ án xây dựng hệ thống hỗ trợ tổ chức các cuộc thi lập trình

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (8.18 MB, 113 trang )

ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
KHOA HỆ KỸ THUẬT PHẦN MỀM

BÁO CÁO ĐỒ ÁN THỰC HÀNH MÔN HỌC
ĐỒ ÁN 1
ĐỀ TÀI:

XÂY DỰNG HỆ THỐNG
HỖ TRỢ TỔ CHỨC CÁC CUỘC THI LẬP TRÌNH
Giảng viên hướng dẫn: Nguyễn Tấn Tồn
Sinh viên thực hiện:
1. Trương Xuân Vương

MSSV: 20520353

2. Bùi Đoàn Khánh Ân

MSSV: 20520369

TP. HỒ CHÍ MINH, NĂM 2023


NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................


...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
……., ngày……...tháng……năm 2023
Người nhận xét
(Ký tên và ghi rõ họ tên)


LỜI CẢM ƠN
Để hồn thành đề tài này và có kiến thức như ngày hơm nay, nhóm chúng em xin
gửi lời cảm ơn đến thầy Tồn đã tận tình hỗ trợ, truyền đạt kiến thức cũng như
kinh nghiệm quý báu cho chúng em trong suốt quá trình học tập và nghiên cứu.
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à tiếp thu những kiến thức mới.
Chúng em đã cố gắng vận dụng những gì đã thu thập được để hồn thành đồ án
tốt nhất có thể. Tuy nhiên, trong q trình thực hiện, vẫn khơng tránh khỏi những
thiếu sót, chúng em mong nhận được sự thơng cảm và góp ý chân thành từ các
thầy.
Cuối cùng, chúng em xin gửi lời chúc thân ái nhất đến thầy



PHỤ LỤC

LỜI CẢM ƠN ....................................................................................................... 3
PHỤ LỤC .............................................................................................................. 4
MỞ ĐẦU ............................................................................................................... 1
I. GIỚI THIỆU TỔNG QUAN ......................................................................... 2
1. TỔNG QUAN ĐỀ TÀI .................................................................................. 2
1.1.

Giới thiệu đề tài .................................................................................................... 2

1.2.

Công cụ sử dụng ................................................................................................... 3

II.

CÔNG NGHỆ.............................................................................................. 4

1. REACTJS ....................................................................................................... 4
1. Giới thiệu chung ...................................................................................................... 4
2. Các khái niệm quan trọng ...................................................................................... 4
3. Các ưu điểm của ReactJS ....................................................................................... 7

2. SUPABASE ..................................................................................................... 8


2.1.


Giới thiệu chung ................................................................................................... 8

2.2.

Kiến trúc ............................................................................................................... 8

2.3.

Tính năng ............................................................................................................ 10

2.3.1.

Database ................................................................................................................. 10

2.3.2.

Serverless Api ..........................................................................................................11

2.3.3.

Auth ........................................................................................................................ 12

2.3.4.

Realtime .................................................................................................................. 12

2.3.5.

Storage: ................................................................................................................... 12


2.3.6.

Client Library Reference ........................................................................................ 13

3. JAVASCRIPT ............................................................................................... 13
4. POSTGRESQL ............................................................................................ 14
4.1.

Định nghĩa ........................................................................................................... 14

4.2.

Tính năng ............................................................................................................ 15

III. WEBSITE HỖ TRỢ TỔ CHỨC CUỘC THI LẬP TRÌNH ................. 16
1. GIỚI THIỆU ĐỀ TÀI .................................................................................. 16
1. Đặt vấn đề............................................................................................................... 16
2. Mục tiêu và chức năng .......................................................................................... 17
3. Định hướng giải quyết vấn đề .............................................................................. 18
4. Yêu cầu bài toán .................................................................................................... 18
1.

Tổng quan ...................................................................................................................... 18


2.

Các hoạt động của hệ thống ........................................................................................... 19

3.


Yêu cầu phi chức năng ................................................................................................... 19

2. PHÂN TÍCH KIẾN TRÚC HỆ THỐNG ................................................... 20
1. Kiến trúc hệ thống ................................................................................................. 20
1.

Khái niệm ....................................................................................................................... 20

2.

Nguyên tắc hoạt động .................................................................................................... 21

3.

Ưu điểm ......................................................................................................................... 22

2. Đặc tả use case ....................................................................................................... 23
1.

Sơ đồ Use case ............................................................................................................... 23

2.

Đặc tả Use-Case và sơ đồ hoạt động ............................................................................. 26

3. Thiết kế cơ sở dữ liệu ............................................................................................ 81
I.
II.


Sơ đồ cơ sở dữ liệu ........................................................................................................ 81
Mô tả chi tiết các bảng dữ liệu ................................................................................... 81

3. THIẾT KẾ GIAO DIỆN ............................................................................. 84
1. Quản trị viên .......................................................................................................... 84
2. Ban tổ chức ............................................................................................................. 91
3. Thí sinh ................................................................................................................... 96

IV.

NHẬN XÉT VÀ KẾT LUẬN ................................................................. 104

1. Nhận xét ................................................................................................................ 104
2. Kết luận ................................................................................................................ 104


3. Hướng phát triển ................................................................................................. 104

V.

BẢNG PHÂN CÔNG CÔNG VIỆC: .................................................... 105

VI. PHỤ LỤC................................................................................................. 105


MỞ ĐẦU
Trong thế giới kỹ thuật ngày càng phát triển, cuộc thi lập trình đóng vai trị quan trọng
trong việc khám phá, khuyến khích và đánh giá tài năng lập trình của cộng đồng. Tuy
nhiên, tổ chức một cuộc thi lập trình đáp ứng nhu cầu và đảm bảo hiệu quả vẫn là một
thách thức. Đó là lý do tại sao việc xây dựng một hệ thống hỗ trợ tổ chức cuộc thi lập

trình đáng tin cậy và tiện ích là vô cùng quan trọng.
Hệ thống hỗ trợ này nhằm mục tiêu cung cấp một nền tảng toàn diện cho việc tổ chức
và quản lý cuộc thi lập trình. Với việc tập trung vào các yếu tố quan trọng như quản lý
thông tin cuộc thi, đăng ký tham gia, nộp bài dự thi và đánh giá, hệ thống sẽ tạo ra một
môi trường thuận lợi và công bằng cho các thí sinh và tổ chức cuộc thi.
Với hệ thống hỗ trợ tổ chức cuộc thi lập trình, chúng ta hy vọng sẽ đem lại một nền
tảng đáng tin cậy và tiện ích cho việc tổ chức cuộc thi lập trình. Sự kết hợp giữa tính
linh hoạt, tiện lợi và hiệu quả của hệ thống này sẽ giúp cho việc tổ chức cuộc thi trở
nên dễ dàng hơn, từ quản lý thơng tin, đăng ký, nộp bài, cho đến q trình đánh giá và
công bố kết quả.
Chúng ta tin rằng hệ thống hỗ trợ tổ chức cuộc thi lập trình sẽ mang lại nhiều lợi ích
cho cả tổ chức cuộc thi và thí sinh. Sẽ có một quy trình tổ chức cuộc thi mượt mà hơn,
giúp tiết kiệm thời gian và cơng sức của ban tổ chức. Thí sinh cũng sẽ được trải nghiệm
một giao diện đơn giản và thuận tiện để tham gia và gửi bài dự thi. Đồng thời, việc
đánh giá và công bố kết quả cũng sẽ được thực hiện một cách công bằng và minh bạch.
Với hệ thống hỗ trợ tổ chức cuộc thi lập trình, chúng ta sẽ tạo ra một môi trường đáng
tin cậy và chuyên nghiệp, góp phần thúc đẩy sự phát triển và khám phá tài năng lập
trình trong cộng đồng.

1


I. GIỚI THIỆU TỔNG QUAN
1. Tổng quan đề tài
1.1. Giới thiệu đề tài
Việc tổ chức các cuộc thi lập trình là một hoạt động phổ biến trong cộng đồng
lập trình viên hiện nay, đặc biệt là trong các trường đại học và công ty công
nghệ. Tuy nhiên, việc tổ chức các cuộc thi này cũng đặt ra một số thách thức
và vấn đề cho các bên chịu trách nhiệm tổ chức cuộc thi cần giải quyết. Vì
vậy, nhóm chúng em quyết định thực hiện một hệ thống hỗ trợ tổ chức các

cuộc thi lập trình để giúp cho việc tổ chức các cuộc thi lập trình được tổ chức
thuận lợi và dễ dàng hơn.
Nhóm chúng em bắt đầu thực hiện các bước đầu tiên là phân tích và xác định
các quy trình nghiệp vụ của một cuộc thi lập trình, tìm hiểu xem nó diễn ra
như thế nào. Và sau q trình tìm hiểu, nhóm chúng em cũng đã nắm bắt
được những điều đó và bắt tay vào việc xây dựng một hệ thống hỗ trợ các bên
tổ chức các cuộc thi lập trình và cho thi sinh có thể tham gia các cuộc thi lập
trình đó cùng với đội của mình. Hệ thống sẽ hỗ trợ cho ban tổ chức các cuộc
thi một cách tối ưu nhất, đơn giản và dễ sử dụng. Hệ thống cung cấp các tính
năng quản lý cuộc thi, đội tham gia thi giúp các bên tổ chức có thể dễ dàng
theo dõi tiến độ của việc tổ chức cuộc thi. Hệ thống có thể chấm điểm bài nộp
của đội thi dựa vào các bộ dữ liệu được cung cấp sẵn và có trình biên dịch để
tự động tính tốn số điểm làm bài thi của thí sinh. Thí sinh có thể vào xem
các cuộc thi có trong hệ thống và đăng ký tham gia, quản lý thơng tin cá nhân
của mình, làm bài thi, nộp bài và sau đó xem bảng xếp hạng. Đối với quản trị

2


viên, là người có quyền cao nhất trong hệ thống, sẽ có quyền thực hiện các
chức năng mà thí sinh và ban tổ chức. Ngồi ra, quản trị viên cịn quản lý các
tài khoản có trong hệ thống, tạo tài khoản cho ban tổ chức và có thể xố một
tài khoản bất kỳ nếu tài khoản đó vi phạm các quy định hoạt động của hệ
thống.

1.2. Công cụ sử dụng
Trong q trình xây dựng phần mềm, nhóm đã sử dụng phần mềm sau:
● WebStorm: IDE hỗ trợ xây dựng ứng dụng phía frontend
● Visual Studio Code: hỗ trợ xây dựng giao diện người dùng
● Postman: hỗ trợ nhóm test các api để lấy dữ liệu từ phía server.

● PostgreSQL: hỗ trợ nhóm lưu trữ cơ sở dữ liệu.
● Figma: hỗ trợ nhóm thiết kế giao diện.
● Supabase: một Baas, giúp thể hiện các vai trị phía server của hệ
thống

3


II. CÔNG NGHỆ
1. ReactJs

1. Giới thiệu chung
ReactJS là một thư viện JavaScript mã nguồn mở phổ biến được sử dụng rộng
rãi để xây dựng giao diện người dùng hiện đại và tương tác trên nền tảng web. Được
phát triển bởi Facebook, ReactJS tập trung vào việc xây dựng các thành phần giao diện
mang tính tái sử dụng, giúp phát triển ứng dụng web linh hoạt, dễ bảo trì và có hiệu
suất cao. ReactJS là một thư viện JavaScript mạnh mẽ và linh hoạt, được sử dụng rộng
rãi trong việc xây dựng giao diện người dùng tương tác trên web. Với tính năng như
JSX, Virtual DOM và khả năng tái sử dụng thành phần, ReactJS giúp tăng hiệu suất, dễ
bảo trì và phát triển ứng dụng web hiện đại.

2. Các khái niệm quan trọng
1. Components
ReactJS dựa trên kiến trúc component, trong đó mọi giao diện người dùng được xem
như một component độc lập. Components trong ReactJS có thể là các thành phần nhỏ

4


hơn hoặc kết hợp thành các thành phần lớn hơn. Việc phân chia giao diện thành các

component giúp tái sử dụng các đoạn mã và quản lý giao diện một cách hiệu quả. Có
hai loại component trong ReactJS: class component và functional component.

2. JSX
JSX là ngôn ngữ kết hợp giữa JavaScript và HTML, cho phép viết mã HTML trong
JavaScript. JSX giúp tạo ra cấu trúc giao diện người dùng dễ đọc và dễ bảo trì, cũng
như nhúng mã JavaScript vào trong mã HTML một cách linh hoạt.
3. State (trạng thái)
State là các dữ liệu động mà các component trong ReactJS có thể lưu trữ và sử dụng.
Thay đổi state trong một component sẽ gây ra việc cập nhật lại giao diện của

5


component đó. ReactJS quản lý và điều khiển trạng thái của component một cách thông
minh để đảm bảo giao diện ln đồng bộ với dữ liệu.
4. Props (thuộc tính)
Props là các thuộc tính được truyền từ component cha sang component con. Props giúp
truyền dữ liệu và cấu hình giữa component khác nhau. Thay đổi props của một
component cha sẽ dẫn đến cập nhật lại giao diện của component con.
5. Virtual DOM
Virtual DOM là một bản sao của DOM thực tế, tồn tại trong bộ nhớ. ReactJS sử dụng
Virtual DOM để quản lý và cập nhật giao diện người dùng một cách hiệu quả. Sử dụng
Virtual DOM giúp tối ưu hóa hiệu suất và tăng tốc độ ứng dụng.
6. Lifecycle (Vòng đời)
ReactJS cung cấp các phương thức lifecycle cho các component, cho phép thực hiện
các hành động tại các giai đoạn khác nhau trong quá trình tồn tại của component. Các
phương thức lifecycle bao gồm:
• componentDidMount
• componentDidUpdate

• componentWillUnmount và nhiều phương thức khác.
Điều này giúp quản lý và kiểm soát các hành động của thành phần trong suốt quá trình
hoạt động của nó.

6


3. Các ưu điểm của ReactJS
Hiệu xuất cao
ReactJS sử dụng Virtual DOM (DOM ảo) để tối ưu hóa việc cập nhật giao diện người
dùng. Thay vì cập nhật tồn bộ DOM, ReactJS chỉ cập nhật những phần cần thay đổi,
từ đó giảm thiểu tải cho trình duyệt và tăng hiệu suất ứng dụng.
Tính tái sử dụng cao
ReactJS hỗ trợ việc xây dựng các thành phần tái sử dụng (reusable components). Việc
tái sử dụng các thành phần giúp giảm thiểu việc viết mã lặp lại, tăng năng suất phát
triển và bảo trì ứng dụng.
Hệ sinh thái mạnh mẽ
ReactJS được hỗ trợ bởi một hệ sinh thái đa dạng của các thư viện, công cụ và tài liệu.
Các thư viện bổ trợ như React Router, Redux, hoặc Material-UI cung cấp giải pháp cho
các tình huống phát triển phức tạp.

7


Cộng đồng lớn
ReactJS có một cộng đồng phát triển mạnh mẽ và rộng lớn. Điều này có nghĩa là bạn
có thể tìm thấy nhiều tài liệu, hướng dẫn và giúp đỡ từ cộng đồng, cũng như được hỗ
trợ bởi nhiều công cụ và thư viện phát triển bên thứ ba.
Dễ học và sử dụng
ReactJS có cú pháp gần gũi với HTML, JavaScript và JSX (một biến thể của

JavaScript). Điều này giúp cho việc học và sử dụng ReactJS trở nên dễ dàng đối với
các nhà phát triển web.

2. Supabase
2.1. Giới thiệu chung
Supabase là một Baas (Backend as a service) open source được coi là có thể thay thế được cho
Firebase. Supabase cung cấp đầy đủ và tốt các tính năng cơ bản và nâng cao để có thể xây dựng một
ứng dụng hồn chỉnh, có khả năng mở rộng và bảo trì tốt sau này. Trên đà phát triển thần tốc của thế
giới công nghệ hiện nay, tốc độ và sự tin cậy được đặt lên hàng đầu, vì thế khi ta có thể vận dụng được
những cơng nghệ mới tiện lợi một cách hiệu quả sẽ đem lại kết quả rất đáng mong đợi

2.2. Kiến trúc
Supabase là sự kết hợp của nhiều cơng cụ open source khác nhau, nó xây dựng những tính năng của
Firebase thành những open soure product. Mục tiêu của supabase là cung cấp cho lập trình viên một
trải nghiệm giống như Firebase nhưng là bằng các open source tool.

8


Supabase là một hosted-platform. Chúng ta chỉ cần đăng ký và sử dụng mà không cần phải cài đặt bất
cứ điều gì. Ngồi ra Supabase cịn hỗ trợ ta self-host và develop-locally.
Mỗi project của supabse sẽ có cấu trúc như trên, trong đó:
1. PostgreSQL: Đây là trung tâm của Supabase, mỗi một project là một full
Postgres database. Supabse sẽ cung cấp cho ta một bộ công cụ để quản lý
database đó dễ dàng như chúng ta sử dụng Firebase.
2. GoTrue: Một JWT-based API hỗ trợ việc quản lý user và các vấn đề liên quan
đến access tokens.
3. PostRest: Là một standalone web server biến đổi trực tiếp PostgreSQL
database thành một RESTful API.
4. RealTime: Là một websocket engine có khả năng mở rộng cao để có thể quản

lí được các việc như Presence, broadcasting messages, streaming database
changes của người dùng.
5. Storage: Một dịch vụ lưu trữ tương thích với S3 để lưu trữ các metadata của
Postgres.
6. Postgres-meta: Một RESTful API để quản lý Postgres, cho phép ta lấy dữ liệu
của các bảng, thêm các vai trò , chạy các queries,…
7. Kong: là một cloud-native API gateway cho các API nêu trên,

9


2.3. Tính năng
2.3.1. Database
Mỗi project Supabase sẽ là một full Postgres database. Supabase cung cấp cho ta các api và cơng
cụ để có thể sử dụng database dễ dàng nhất có thể mà khơng cần q am hiểu về database.
Một số tính năng nổi bật như là:
1. Table View
Đây là nơi để ta quản lý các bảng như: thêm, xóa, chỉnh sửa các bảng, các cột
trong bảng, thêm dữ liệu cho bảng,….

2. The SQL Editor
Bên cạnh cung cấp Dashboard để cho người dùng có thể làm việc với
database dễ dàng hơn, Supabase cũng cung cấp cho nhưng lập trình viên lâu
năm hay muốn làm việc bằng các câu lệnh nhiều hơn qua việc cung cấp một
SQL Editor sử dụng plpqsql làm ngôn ngữ truy vấn

10


3. Additional Features

Ngồi các tính năng giúp quản lý database cơ bản trên, supabase cịn cung
cấp các tính năng năng cao như: giúp việc tạo functions, trigger dễ dàng hơn,
hỗ trợ backup và migration, nhập dữ liệu trực tiếp từ CSV hoặc excel
spreadsheet, cài các extensions khác vào để thực thi các công việc dễ dàng
và tiện lợi hơn.

2.3.2. Serverless Api
Supabase tự động tạo ra cho chúng ta 3 loại api dựa trên cấu trúc database của chúng ta.Mỗi khi ta
chỉnh sửa gì trên database thì Supabase sẽ cập nhập api lại ngay lập tức cho phụ hợp với chỉnh sửa
của chúng ta, ngoài việc tự động tạo ra api, Supabase còn tự động tạo ra các bản hướng dẫn sử
dụng api cho người dùng. Các loại api mà Supabase cung cấp bao gồm:
1. REST API: Supabase cung cấp một RESTful API sử dụng PostgREST server để
cung cấp các CRUD api cơ bản và một số tính năng nâng qua thông qua URL
https://.supabase.co/rest/v1/.

11


2. GraphQL API: Cũng như REST API, Supabase cũng cung cấp các api cơ bản cho
người dùng thông qua pq_graphql (là một mở rộng giúp ta truy vấn cơ sở dữ liệu
với GraphQL thông qua một hàm SQL đơn).
3. Realtime API: Sử dụng Reatime server sẽ được đề cập sau để có thển tạo ra các
api dùng để thực hiện các công việc realtime.

2.3.3. Auth
Authentication: Supabase cung cấp nhiều phương thức xác thực khác nhau như: Email-Password,
Magic links (one-click logins), Scocial login(Apple, Azure, Github, Google,…), Phone logins. Với
mỗi provider khác nhau Supabase sẽ cung cấp các phương thức xác thực khác nhau.
Authorization: Supabase sử dụng PostgreSQL's Row Level Security (RLS) để thiết lập các luật lệ
phân quyền và Policies (PostgresSQL’s rule engine) để viết các câu lệnh phân quyền phức tạp.


2.3.4. Realtime
Supabase cung cấp một hệ thống các Realtime servers cho phép ta thực hiện các chức năng như:
Broadcast: Gửi các ephemeral messages từ client này đến các client khác với độ trễ thấp
Presence: Theo dõi và đồng bộ chia sẻ các trạng thái của các clients.
Postgres Changes: Bắt các sự thay đổi trên Postgres database và gửi chúng đến client
Channel: là phần tử chung tâm khi xây dựng Realtime, nó giống như một chat room, nơi mà
những người khi tam gia có thể gửi các thơng điệp đến nhau và có thể xem trạng thái của nhau

2.3.5. Storage:
Supabase Storage giúp chúng ta lưu trữ và phục vụ các meta file một cách dễ dàng.
Files: là bất kì các loại file phương tiện nào như image, GIFs, videos.
Folders: Giúp ta tổ chức các files, khi muốn phân bổ các file đến nơi phù hợp với chúng.
Buckets: Là một container cho các file và folder, mỗi bucket là duy nhất và có những luật bảo mật
và phân quyền riêng

12


2.3.6. Client Library Reference
Hiển nhiên supabase cũng cung cấp các library để tiện dụng nhất cho các frontend developer hiện
nay. Các ngôn ngữ và các công nghệ liên quan mà Supabase cung cấp là: Javascript, Flutter,
Python, C#, Swift, Kotlin.

3. JavaScript

JavaScript là một ngơn ngữ lập trình kịch bản đa nền tảng (crossplatform), hướng đối tượng. Nó chủ yếu được sử dụng để tăng cường cung
cấp trải nghiệm thân thiện hơn với người dùng website như là bao gồm các
trang web cập nhật tự động, cải tiến giao diện người dùng như menu và
hộp thoại, hình động, đồ họa 2D và 3D, bản đồ tương tác, trình phát

video... JavaScript là một ngôn ngữ nhỏ và nhẹ, chạy trong môi trường
máy chủ lưu trữ (trình duyệt web). Nó có thể được kết nối với các đối
tượng của môi trường để cung cấp kiểm sốt chương trình đối với chúng.
JavaScript là ngơn ngữ kịch bản phía máy khách (client-side) duy nhất. Do
đó, nó được sử dụng trên hầu hết các trang web mà bạn nhìn thấy trên
internet. Tuy nhiên cú pháp của nó vơ cùng lộn xộn và khó làm chủ, do đó
Jquery – một thư viện của JavaScript ra đời nhằm giúp lập trình viên xây

13


dựng những chức năng có sử dụng Javascript trở nên dễ dàng hơn như:
đơn giản hóa việc duyệt tài liệu HTML, xử lý sự kiện, hoạt ảnh và tương
tác Ajax để phát triển web nhanh chóng... jQuery là một bộ công cụ
JavaScript gọn nhẹ nhưng đầy mạnh mẽ, được chứng minh qua hơn 90%
các website trên thế giới sử dụng (trừ các website chạy bằng JavaScript
Framework).

4. PostgreSQL

4.1.

Định nghĩa

PostgreSQL là hệ thống quản trị cơ sở dữ liệu quan hệ và đối tượng
(Object – Relational Database Management System) có mục đích chung,
là hệ thống cơ sở dữ liệu mã nguồn mở miễn phí tiên tiến nhất hiện nay.
Ban đầu, PostgreSQL được phát triển dựa trên POSTGRES 4.2 bởi nhóm
Nghiên cứu Cơ sở dữ liệu tại phịng khoa học máy tính Berkeley, Đại học
California.

PostgreSQL thiết kế để chạy trên các nền tảng tương tự UNIX. Tuy nhiên,
nhà sản xuất đã điều chỉnh linh động để có thể chạy trên nhiều nền tảng
khác như Mac OS X, Solaris hay Windows. Ngoài ra, hiện tại thì bạn cũng
có thể cài đặt và sử dụng PostgreSQL trên Ubuntu 20.04.

14


Mã nguồn của phần mềm sử dụng theo license của PostgreSQL, đây là
một license mã nguồn mở tự do. Vì vậy, bạn sẽ được tự do sử dụng, sửa
đổi và phân phối PostgreSQL dưới nhiều hình thức.
PostgreSQL có tính ổn định cao, chính vì vậy khơng u cầu q nhiều
cơng tác bảo trì. Do đó, nếu bạn đang phát triển các ứng dụng mà muốn
tiết kiệm chi phí để sở hữu một hệ thống quản trị dữ liệu thì PostgreSQL
là một sự lựa chọn sáng suốt.

4.2.

Tính năng

PostgreSQL cung cấp cho người dùng nhiều tính năng hiện đại, khả năng ổn
định cao, tốc độ tuyệt vời, chính vì vậy mà PostgreSQL trở nên phổ biến, bạn có
thể dễ dàng nhiều dịch vụ thiết kế website khách sạn sử dụng nền tảng này để tạo
web, ngồi ra thì cịn có nhiều ứng dụng khác như:


Kiểu dữ liệu: nguyên hàm (các nguyên số, boolean, số, chuỗi); cấu trúc
(UUID, Phạm vi, Array, Date/time); Hình học; Tùy chỉnh; Document.




Tồn vẹn dữ liệu: Ràng buộc loại từ, Primary Keys, Foreign Keys,
UNIQUE, NOT NULL, Khóa khuyến nghị/ Advisory Locks, Khóa hàm
số/ Explicit Locks,…



Hiệu suất, đồng quy: Tính năng lập danh mục, lập danh mục nâng
cao, trình lập kế hoạch, trình tối ưu hóa truy cập phức tạp, thống kê số
liệu trên nhiều cột, quét index – only, giao tác – giao tác dạng test, điều
khiển đồng thời nhiều phiên bản (MVCC), phân vùng bảng, truy vấn
đọc song song, độ tin cậy, phục hồi sau thảm họa, nhật ký ghi trước
(Write-ahead Logging – WAL), replication, khôi phục điểm – thời gian,
bảng

15




Chức năng bảo mật: Bảo mật, xác thực (SCRAM-SHA-256, SSPI,
LDAP, GSSAPI, Certificate và các hình thức khác), hệ thống kiểm soát
truy cập mạnh mẽ, bảo mật cấp độ cột – hàng.



Khả năng mở rộng: phương pháp lưu trữ, ngơn ngữ thủ tục (PL /
PGSQL, Python, Perl, và nhiều ngôn ngữ khác), PostGIS, tính năng kết
nối cơ sở dữ liệu hoặc luồng khác với giao diện SQL chuẩn, cùng nhiều
tính năng mở rộng khác.




Tìm kiếm văn bản: Tìm kiếm văn bản đầy đủ, hệ thống các bộ ký tự
quốc tế (thông qua ICU collations).



Tính năng khác: Khả năng quản lý số lượng người dùng đang thao tác
cùng lúc, phù hợp với môi trường sản xuất quản lý nhiều terabyte và
petabyte.

III.

Website hỗ trợ tổ chức cuộc thi lập trình
1. Giới thiệu đề tài
1. Đặt vấn đề

Bối cảnh ngành Công nghệ thông tin (CNTT) tại Việt Nam đang trải qua một giai đoạn
phát triển nhanh chóng, đi kèm với sự gia tăng đáng kể trong nhu cầu tuyển dụng
nguồn nhân lực có chất lượng cao. Theo thống kê của các kênh tuyển dụng, nhu cầu
tuyển dụng trong ngành CNTT đã tăng gấp 4 lần. Tuy nhiên, việc tìm kiếm và thu hút
nhân tài CNTT phù hợp trở nên ngày càng khó khăn. Doanh nghiệp, đặc biệt là các
công ty vừa và nhỏ, gặp khó khăn trong việc tuyển dụng và giữ chân các kỹ sư CNTT
có trình độ và kỹ năng tốt. Các cơng ty lớn thường có khả năng tài chính mạnh mẽ và
có thể cung cấp mức lương hấp dẫn để thu hút nhân lực, trong khi các doanh nghiệp
vừa và nhỏ thường không thể cạnh tranh được với những mức lương cao đó. Điều này

16



tạo ra một thách thức lớn cho các doanh nghiệp vừa và nhỏ trong việc tuyển dụng và
giữ chân nhân sự chất lượng trong lĩnh vực CNTT.
Trong bối cảnh này, xây dựng một hệ thống hỗ trợ tổ chức cuộc thi lập trình trở thành
một giải pháp quan trọng để đáp ứng nhu cầu tuyển dụng và phát triển nguồn nhân lực
chất lượng trong ngành CNTT. Hệ thống này sẽ cung cấp một nền tảng chuyên nghiệp
và tiện ích để tổ chức các cuộc thi lập trình, thu hút sự quan tâm và tham gia của các kỹ
sư và sinh viên CNTT. Qua đó, nó khơng chỉ tạo ra một môi trường thúc đẩy sự cạnh
tranh và khám phá tài năng lập trình mà cịn làm việc như một cơng cụ tuyển dụng tiềm
năng cho các doanh nghiệp, nơi họ có thể tìm kiếm và tuyển dụng nhân sự chất lượng
đã được kiểm định thông qua các cuộc thi.
Với sự phát triển nhanh chóng của ngành CNTT và sự cạnh tranh gay gắt trong việc
thu hút nhân tài, việc xây dựng hệ thống hỗ trợ tổ chức cuộc thi lập trình khơng chỉ
giúp tăng cường tương tác và giao lưu giữa các chuyên gia, sinh viên và doanh nghiệp
trong ngành, mà cịn đóng vai trị quan trọng trong việc tạo điều kiện thuận lợi cho
tuyển dụng và phát triển nguồn nhân lực chất lượng trong lĩnh vực Công nghệ thông tin
tại Việt Nam.

2. Mục tiêu và chức năng
Mục tiêu của hệ thống hỗ trợ tổ chức cuộc thi lập trình là tạo ra một nền tảng đáng tin
cậy và hiệu quả để hỗ trợ tổ chức, quản lý và thúc đẩy các cuộc thi lập trình. Hệ thống
này sẽ đáp ứng nhu cầu của ba đối tượng chính: thí sinh, tổ chức cuộc thi và quản trị
viên hệ thống. Hệ thống cần có các tính năng cơ bản của một trang web thi lập trình
như là: tổ chức, quản lý các cuộc thi; quản lý bài tập của các đề thi; cơ chế tự động
biên dịch, thực thi chương trình để tiến hành chấm điểm. Bên cạnh đó hệ thống cịn
cung cấp các tính năng nổi bật khác như là: quản lý tài khoản, phê duyệt các đội tham
gia cuộc thi, tham gia các bài tập bên ngoài cuộc thi để rèn luyện nâng cao kỹ năng, tư
duy lập trình.

17



3. Định hướng giải quyết vấn đề
Để đáp ứng mục tiêu và chức năng chính của hệ thống tổ chức cuộc thi lập trình, chúng
em đã quyết định sử dụng ReactJS và Supabase để xây dựng thiết kế cốt lõi của hệ
thống.
ReactJS, một thư viện JavaScript phổ biến và mạnh mẽ, được chọn để xây dựng giao
diện người dùng tương tác. Với ReactJS, chúng em có thể xây dựng các thành phần
giao diện mang tính tái sử dụng, tạo ra một trải nghiệm người dùng mượt mà. Khả
năng tương thích cao của ReactJS với các trình duyệt và khả năng tối ưu hóa hiệu suất
giúp đảm bảo rằng hệ thống có thể xử lý một lượng lớn dữ liệu và đáp ứng nhanh
chóng đối với các yêu cầu tương tác của người dùng.
Supabase được sử dụng để xây dựng hệ thống quản lý dữ liệu cho cuộc thi lập trình.
Với Supabase, chúng em có thể tạo và quản lý cơ sở dữ liệu linh hoạt, tiện lợi và an
toàn. Việc sử dụng Supabase cung cấp cho chúng em một cách tiếp cận đơn giản và
hiệu quả để lưu trữ, truy vấn và cập nhật dữ liệu liên quan đến thí sinh, cuộc thi và bên
tổ chức cuộc thi.
Bằng việc sử dụng ReactJS và Supabase, chúng em tin rằng hệ thống tổ chức cuộc thi
lập trình sẽ đáp ứng hồn tồn các yêu cầu đặt ra. Sự kết hợp của hai công nghệ này
cho phép chúng em xây dựng giao diện người dùng tương tác mạnh mẽ và quản lý dữ
liệu một cách linh hoạt và hiệu quả.

4. Yêu cầu bài tốn
1. Tổng quan
Hệ thống được xây dựng dưới hình thức là một trang web nhằm cung cấp được tính
tiện lợi và hiệu quả cho người dùng. Hệ thống có các tính năng cơ bản cho ban tổ chức
như quản lý cuộc thi, quản lý bài tập cho cuộc thi, phê duyệt các đội tham gia; quản trị
viên hệ thống có thể quản lý tất cả các tài khoản có trong hệ thống bao gồm cả ban tổ

18



×