KIẾN THỨC NỀN TẢNG
Flutter
Flutter là một SDK phát triển ứng dụng di động mã nguồn mở do Google phát triển, ra mắt vào năm 2017 Nó cung cấp một thư viện mạnh mẽ cho việc phát triển ứng dụng đa nền tảng trên các hệ điều hành như Android, iOS, Mac, Windows và Linux Điểm nổi bật của Flutter là hiệu năng cao nhờ vào việc sử dụng ngôn ngữ Dart, giúp tối ưu hóa quá trình phát triển các thành phần ứng dụng.
Flutter vượt trội hơn các nền tảng trước như React Native về hiệu năng nhờ khả năng chạy gần như native Ngôn ngữ Dart được sử dụng để viết cả giao diện người dùng và logic ứng dụng, với mã nguồn được Flutter SDK biên dịch sang mã native và thực thi trực tiếp trên hệ điều hành Flutter có khả năng quét 60 lần mỗi giây để kiểm tra và cập nhật giao diện mà không tiêu tốn nhiều tài nguyên Bằng cách so sánh sự thay đổi giữa các widget trong RenderTree, Flutter tối ưu hóa quá trình render hiệu quả Trước khi bắt tay vào cài đặt và cấu hình, chúng ta cần tìm hiểu một số khái niệm cơ bản.
- Giới thiệu về Widget Tree:
Widget Tree là tập hợp tất cả các Widget được sử dụng để xây dựng ứng dụng, trong đó mã code chúng ta viết sẽ tạo ra cấu trúc Widget Tree Chúng ta hoàn toàn kiểm soát quá trình này bằng cách khai báo và lồng ghép các widget để tạo nên bố cục mong muốn.
Cây widget trong Flutter được tạo ra khi phương thức build() được gọi từ mã nguồn của chúng ta, và nó bao gồm các cài đặt cấu hình mà Flutter sẽ xử lý.
Widget tree không chỉ đơn thuần xuất hiện trên màn hình mà còn cung cấp thông tin cho Flutter về những gì sẽ được vẽ trong lần tiếp theo Nó thường xuyên được rebuild, cho thấy tính linh hoạt và khả năng cập nhật của Flutter.
- Giới thiệu về Element Tree:
Element Tree liên kết với Widget Tree, chứa thông tin về các đối tượng hiển thị thực tế và hiếm khi được tái tạo Quá trình quản lý Element Tree khác với Widget Tree, và nó không tái tạo khi phương thức build() được gọi Mỗi Widget trong Widget Tree sẽ tự động tạo một element khi Flutter xử lý lần đầu Element là đối tượng được Flutter quản lý trong bộ nhớ, liên quan đến Widget trong Widget Tree và chỉ giữ một tham chiếu tới Widget đang chứa các thông số giao diện.
- Giới thiệu về Render Tree:
Render Tree đại diện cho các đối tượng thực sự hiển thị trên màn hình và không được xây dựng lại thường xuyên Element Tree liên kết với Render Tree, trong đó các element trong Element Tree tham chiếu đến các đối tượng render mà người dùng thấy Khi Flutter phát hiện một element chưa được render, nó sẽ tham chiếu đến Widget trong Widget Tree để thiết lập và tạo một element trong Element Tree Flutter cũng trải qua một giai đoạn layout, trong đó nó tính toán không gian, chiều, kích thước và hướng có sẵn trên màn hình.
Nó cũng có một phase khác để thiết lập các listeners với các Widget để chúng ta có thể thao tác các sự kiện, v.v
Widget là các thành phần giao diện của ứng dụng, được thiết kế dưới dạng lớp (class) có khả năng lồng ghép tạo thành một cây Widget (Widget Tree) Trong Flutter, có hai loại Widget chính: StatelessWidget và StatefulWidget.
State: thể hiện trạng thái của ứng dụng, khi state thay đồi thì Widget đồng thời render lại để cập nhật UI (chỉ có ở StatefulWidget).
Dart
Hình 2.2: Ngôn ngữ lập trình Dart
Dart là một ngôn ngữ lập trình hiện đại do Google phát triển, ra mắt lần đầu vào năm 2011 và phiên bản ổn định được phát hành vào tháng 6 năm 2017 Mặc dù không phổ biến ngay từ đầu, Dart đã thu hút sự chú ý khi trở thành ngôn ngữ chính cho việc phát triển ứng dụng với Flutter.
Dart là một ngôn ngữ lập trình động, hướng đối tượng và dựa trên lớp, có cú pháp tương tự như Java, C và JavaScript Nếu bạn đã quen thuộc với một trong những ngôn ngữ này, việc học Dart sẽ trở nên dễ dàng hơn.
Dart là ngôn ngữ lập trình mã nguồn mở phổ biến cho phát triển ứng dụng di động, web hiện đại, ứng dụng máy tính để bàn và Internet of Things (IoT) thông qua khung Flutter Ngôn ngữ này hỗ trợ các khái niệm nâng cao như Interface, mixin, lớp trừu tượng và generic type Dart là một ngôn ngữ biên dịch, cung cấp hai kỹ thuật biên dịch khác nhau.
Ahead Of Time (AOT) là phương pháp biên dịch mà ngôn ngữ Dart được chuyển đổi trực tiếp sang mã gốc, mang lại hiệu suất tối ưu cho ứng dụng Khi chạy chương trình, AOT thực hiện biên dịch toàn bộ mã từ đầu đến cuối, giúp cải thiện tốc độ và hiệu quả hoạt động.
Just In Time (JIT) cho phép tính năng hot reloading hoạt động hiệu quả, giúp cải thiện tốc độ phát triển sản phẩm Điều này tương tự như quá trình debug trong các ngôn ngữ lập trình khác, nơi mà khi gọi hàm, hệ thống sẽ biên dịch ngay lập tức đến vị trí cần thiết.
Một số khái niệm quan trọng cần nắm khi học Dart:
- Do Dart là ngô ngữ thuần OOP nên tất cả những thứ bạn gán cho biến đều là object, mọi object đều là instance (thể hiện) của một class
- Kể cả số, method (hàm) và null cũng đều là object Tất cả các object đều kế thừa từ Object class
- Type của 1 variable (biến) là optional bởi vì Dart có thể tự suy ra type dựa trên giá trị truyền vào cho biến
Biến number thường được hiểu là kiểu int trong lập trình Khi bạn cần khai báo một biến mà loại của nó không được xác định và có khả năng thay đổi, bạn nên sử dụng kiểu dynamic để linh hoạt hơn trong việc xử lý dữ liệu.
Dart hỗ trợ kiểu dữ liệu tổng quát (generic type) tương tự như nhiều ngôn ngữ lập trình khác, cho phép tạo ra các danh sách như List (danh sách số nguyên) hoặc List (danh sách các đối tượng với kiểu không xác định), giúp Dart linh hoạt trong việc chấp nhận mọi loại kiểu dữ liệu.
Dart hỗ trợ hàm cấp cao (top-level function), cho phép bạn sử dụng hàm mà không cần phải thông qua tên lớp hay bất kỳ thể hiện nào của lớp.
- Bạn cũng có thể tạo một hàm bên trong hàm (còn gọi là nested function hoặc local function)
- Tương tự Dart cũng hỗ trợ top-level variable
Dart khác với Java ở chỗ không hỗ trợ các mức độ truy cập như public, protected và private Trong Dart, nếu một identifier (tên biến, hàm, ) bắt đầu bằng dấu gạch dưới (_), nó sẽ được coi là private trong thư viện của nó.
- Mỗi file dart được coi là 1 library Identifier có thể bắt đầu bằng một chữ cái hoặc dấu gạch dưới (_)
- Dart tools có thể báo cho bạn 2 loại vấn đề: warning và errors.
ASP.Net Core
ASP.NET Core, một sản phẩm phát triển từ NET Framework, đã được cộng đồng ủng hộ và phát triển ổn định trong thời gian dài Sự ra đời của ASP.NET Core đánh dấu một bước chuyển mình mạnh mẽ, mang đến những đặc tính nổi bật của công nghệ lập trình hiện đại.
ASP.NET Core là một framework hiện đại, được phát triển dựa trên kinh nghiệm từ các framework module hóa khác Nó sử dụng Nuget Packages, cho phép tối ưu hóa thiết kế ứng dụng bằng cách chỉ bao gồm các thành phần cần thiết Nhờ đó, ứng dụng ASP.NET có dung lượng nhỏ hơn, bảo mật tốt hơn và hiệu suất ổn định hơn Quá trình xây dựng ứng dụng cũng trở nên đơn giản hơn, giúp việc phát triển và bảo trì dễ dàng hơn trong tương lai.
Khi làm việc với ASP.NET core bạn đã được những cải tiến đáng kể như:
- Tương thích hệ thống xây dựng Web UI và Web APIs
- Tích hợp những client – side frameworks hiện đại và những luồng phát triển
- Hệ thống cấu hình dựa trên mô hình đám mây
- Dependency injection được xây dựng sẵn
- HTTP request được tối ưu nhẹ hơn
- Có thể host trên IIS hoặc self- host trong process của riêng mình
- Được xây dựng trên NET Core, hỗ trợ app vesioning
- Chuyển thực thể, thành phần, module như những NuGet packages
- Các công cụ mới để đơn giản hóa quá trình phát triển web hiện đại
- Xây dựng và chạy đa nền tảng, mã nguồn mở, tập trung vào cộng đồng
C#
Hình 2.4: Ngôn ngữ lập trình C#
C# là một ngôn ngữ lập trình hướng đối tượng do Microsoft phát triển, hoạt động trên nền tảng NET Framework Ngôn ngữ này có nguồn gốc từ C và tương tự như các ngôn ngữ phổ biến khác như C++ và Java.
Phiên bản đầu tiên được phát hành vào năm 2002 Phiên bản mới nhất, C# 11, được phát hành vào tháng 11 năm 2022
Ngôn ngữ lập trình C# có những đặc trưng cơ bản sau:
- Là một ngôn ngữ thuần hướng đối tượng
- Là ngôn ngữ khá đơn giản, chỉ có khoảng 80 từ khóa và hơn mười mấy kiểu dữ liệu được dựng sẵn
- Cung cấp những đặc tính hướng thành phần (component-oriented) như là Property, Event
- C# không khuyến khích sử dụng con trỏ như trong C++ nhưng nếu bạn thực sự muốn sử dụng thì phải đánh dấu đây là mã không an toàn (unsafe)
- C# có bộ Garbage Collector sẽ tự động thu gom vùng nhớ khi không còn sử dụng nữa
- C# đã loại bỏ đa kế thừa trong C++ mà thay vào đó C# sẽ hỗ trợ thực thi giao diện
Một số ưu điểm nổi bật của C#:
- Gần gũi với các ngôn ngữ lập trình thông dụng (C++, Java, Pascal)
- Xây dựng dựa trên nền tảng của các ngôn ngữ lập trình mạnh nên thừa hưởng những ưu điểm của những ngôn ngữ đó
- Cải tiến các khuyết điểm của C/C++ như con trỏ, các hiệu ứng phụ
- Dễ tiếp cận, dễ phát triển.
MS SQL Server
SQL Server là hệ quản trị cơ sở dữ liệu quan hệ do Microsoft phát triển, được sử dụng rộng rãi để lưu trữ và quản lý dữ liệu trong các ứng dụng doanh nghiệp và web Nó có khả năng thực hiện nhiều tác vụ liên quan đến cơ sở dữ liệu như tạo, xóa, sửa đổi và truy vấn dữ liệu một cách hiệu quả.
SQL Server được phát triển để phục vụ các ứng dụng với nhiều người dùng đồng thời và có khả năng mở rộng, đáp ứng nhu cầu tăng trưởng của doanh nghiệp Nó cũng tích hợp các tính năng bảo mật cao, giúp bảo vệ dữ liệu khỏi các cuộc tấn công từ bên ngoài và đảm bảo tính toàn vẹn của thông tin.
SQL Server hỗ trợ nhiều ngôn ngữ lập trình như C++, Java, Python và NET, đồng thời có khả năng tích hợp với các hệ thống khác nhau, bao gồm ứng dụng doanh nghiệp, hệ thống quản lý nội dung, hệ thống quản lý quan hệ khách hàng và hệ thống phân tích dữ liệu.
SQL Server cung cấp nhiều tính năng nâng cao, bao gồm sao lưu và khôi phục dữ liệu, phân tích và báo cáo, phân vùng dữ liệu, và xử lý dữ liệu phân tán Ngoài ra, nó hỗ trợ in-memory OLTP và AlwaysOn, giúp tăng tốc độ xử lý và đảm bảo tính sẵn sàng cao cho các ứng dụng quan trọng.
Microsoft-ML
Microsoft-ML là thư viện machine learning mã nguồn mở do Microsoft phát triển, cung cấp các công cụ và thuật toán tiên tiến giúp người dùng xây dựng mô hình dự đoán và phân tích dữ liệu hiệu quả.
Microsoft-ML hỗ trợ ngôn ngữ lập trình R và Python, giúp người dùng áp dụng các công cụ và thuật toán machine learning trong các môi trường lập trình phổ biến Thư viện này cũng tích hợp tốt với các sản phẩm của Microsoft như SQL Server và Azure, cho phép người dùng triển khai machine learning trong môi trường đám mây.
Microsoft-ML cung cấp đa dạng thuật toán machine learning như hồi quy, phân loại, phân cụm và gợi ý Nó cũng trang bị các công cụ và thuật toán hỗ trợ xử lý dữ liệu, giúp người dùng chuẩn bị dữ liệu trước khi áp dụng thuật toán machine learning Các công cụ này bao gồm kỹ thuật tiền xử lý dữ liệu như loại bỏ dữ liệu thiếu, chuẩn hóa và mã hóa dữ liệu.
Microsoft-ML cung cấp các tính năng tiên tiến như học máy trên dữ liệu lớn và dữ liệu phân tán, cho phép người dùng xử lý hiệu quả các tập dữ liệu khổng lồ Điều này không chỉ tăng tốc độ xử lý mà còn giảm thiểu thời gian huấn luyện mô hình.
Microsoft-ML cung cấp các công cụ và tính năng đánh giá mô hình, cho phép người dùng kiểm tra hiệu suất và điều chỉnh các tham số để phù hợp với mục đích sử dụng của mình.
Microsoft-ML cung cấp các gói cài đặt cho R và Python, hỗ trợ cài đặt trên Windows, Linux và macOS Thư viện này tích hợp với các công cụ phát triển như Visual Studio và Jupyter Notebook, giúp người dùng dễ dàng phát triển và sử dụng các mô hình machine learning.
HỆ THỐNG GỢI Ý RECOMMENDER SYSTEM
Khái niệm
Hệ thống gợi ý (Recommender System) là công cụ tự động đề xuất sản phẩm phù hợp với sở thích của người dùng, vượt trội hơn so với các thuật toán tìm kiếm truyền thống Bằng cách phân tích dữ liệu người dùng đã thu thập, hệ thống có khả năng dự đoán và gợi ý các sản phẩm, tính năng hay dịch vụ liên quan, ngay cả khi người dùng không thực hiện tìm kiếm Điều này không chỉ nâng cao chất lượng dịch vụ ứng dụng mà còn giúp tăng lợi nhuận, đặc biệt trong lĩnh vực thương mại điện tử.
Hệ thống gợi ý (Recommender System) là một lĩnh vực quan trọng trong Học Máy với lịch sử lâu dài, được Jussi Karlgren đề cập lần đầu trong một báo cáo kỹ thuật năm 1990 tại Đại Học Columbia Tuy nhiên, sự bùng nổ thực sự của các hệ thống gợi ý chỉ diễn ra trong 10-15 năm qua, nhờ vào sự gia tăng tương tác trực tuyến của người dùng và sự phát triển mạnh mẽ của các sàn thương mại điện tử, cùng với những tiến bộ trong ngành Khoa học dữ liệu.
Các thuật ngữ sau đây sẽ thường được sử dụng,
- Đối tượng, hay người dùng mà hệ thống gợi ý hướng đến được gọi là users,
- Sản phẩm mà hệ thống đưa ra gợi ý được gọi là items
- Sự tương quan giữa các đối tượng và sản phẩm, mức độ quan tâm của đối tượng đối với sản phẩm đó được gọi là rating
Về phân loại, các Recommender Systems thường được chia thành hai nhóm lớn:
- Content-based systems: hoạt động dựa vào đặc điểm của items
- Collaborative filtering: hoạt động với sự cộng tác của users và rating
Trong đề tài này, nhóm chúng em tập trung phát triển hệ thống gợi ý, Recommender System theo hướng thứ hai: Collaborative filtering
Lọc cộng tác (Collaborative filtering) là một phương pháp trong hệ thống gợi ý, hoạt động dựa trên sự tương quan giữa người dùng, sản phẩm và đánh giá Phương pháp này giúp xác định sản phẩm mà người dùng có khả năng yêu thích dựa trên lựa chọn của những người dùng có hành vi tương tự trước đó Ưu điểm của lọc cộng tác là khả năng cung cấp gợi ý chính xác và cá nhân hóa cho người dùng.
Hệ thống sử dụng thông tin từ người dùng để phân tích hành vi Bằng cách nhận diện các đặc điểm hành vi của những người dùng tương tự, hệ thống có khả năng suy luận hành vi của các người dùng khác, từ đó cải thiện trải nghiệm người dùng và tối ưu hóa dịch vụ.
- Đơn giản, không cần phải mô tả đặc điểm mỗi item như Content-base
Nhược điểm của Collaborative filtering,
Hệ thống gặp khó khăn trong việc xử lý vấn đề khởi đầu lạnh (cold-start problem) khi người dùng mới không có thông tin hành vi hoặc chưa đánh giá sản phẩm nào, cũng như khi các sản phẩm mới chưa nhận được đánh giá từ người dùng.
Khi ma trận đánh giá có quy mô lớn với nhiều người dùng và sản phẩm, thời gian tính toán sẽ tăng lên đáng kể, gây khó khăn trong việc cung cấp tư vấn theo thời gian thực hoặc gần thời gian thực.
Khi hai người dùng A và B cùng đánh giá cao các sản phẩm với điểm từ 4 đến 5, hệ thống sẽ phân tích dữ liệu của người dùng A để xác định những sản phẩm khác mà A yêu thích Dựa vào sở thích này, hệ thống sẽ gợi ý những sản phẩm tương tự cho người dùng B, vì có khả năng B cũng sẽ thích những sản phẩm đó.
Hình 3.1: Cách thức hoạt động của Collaborative filtering
User -user Collaborative Filtering là phương pháp xác định mức độ quan tâm của từng người dùng đối với một sản phẩm dựa trên sự quan tâm của những người dùng tương tự.
Trên thực tế, User-user Collaboration filtering cũng tồn tại mặt hạn chế
Số lượng người dùng thường vượt xa số lượng sản phẩm, dẫn đến việc tính toán trở nên phức tạp và khối lượng dữ liệu cần lưu trữ cũng tăng cao.
- Khi một user thay đổi rating, hoặc rating thêm items, toàn bộ tính toán sẽ phải thực hiện lại
Một phương pháp tiếp cận khác trong hệ thống gợi ý là xác định sự tương đồng giữa các mục, được gọi là Item-Item Collaborative Filtering Phương pháp này có thể khắc phục những hạn chế của User-user và thường được áp dụng rộng rãi trong thực tế.
Trong đề tài này, nhóm chúng em phát triển hệ thống gợi ý, Collaborative filtering Recommender System theo hướng thứ nhất: User-user
Các thành phần chính
Trong các hệ thống gợi ý, có hai thực thể chính là người dùng (users) và sản phẩm (items) Mỗi người dùng sẽ thể hiện mức độ quan tâm khác nhau đối với từng sản phẩm, được gọi là rating, và gán cho mỗi cặp người dùng-sản phẩm một giá trị cụ thể Tất cả các rating, bao gồm cả những giá trị chưa biết cần được dự đoán, tạo thành một ma trận được gọi là ma trận utility.
Người dùng đánh giá các mục từ 1 đến 3 với điểm số từ 0 đến 5 dựa trên mức độ quan tâm Các dấu '?' biểu thị cho dữ liệu chưa có trong cơ sở dữ liệu, do đó, hệ thống gợi ý cần thực hiện tính toán để dự đoán giá trị cho những vị trí này.
Trong hệ thống có nhiều người dùng và sản phẩm, mỗi người chỉ đánh giá một số ít sản phẩm, thậm chí có người không đánh giá sản phẩm nào Sự chính xác của hệ thống gợi ý tăng lên khi số lượng đánh giá được nhiều hơn, vì vậy, các hệ thống luôn khuyến khích người dùng đánh giá nhiều sản phẩm Việc đánh giá không chỉ giúp người dùng khác nhận biết chất lượng sản phẩm mà còn giúp hệ thống nắm bắt sở thích của người dùng, từ đó đưa ra những gợi ý chính xác hơn cho những người dùng sau.
Phân tích ma trận thành nhân tử, hay còn gọi là Matrix Factorization, hoặc Matrix Decomposition là một thuật toán của phương pháp Collaborative Filtering Recommendation System
Thuật toán Matrix Factorization trong hệ thống gợi ý dựa trên giả định rằng tồn tại các tính chất ẩn mô tả mối quan hệ giữa items và users Những tính chất ẩn này có thể là đặc điểm riêng của từng item hoặc là sự kết hợp của nhiều đặc điểm khác nhau Mỗi item sẽ có một mức độ tính chất ẩn nhất định, được biểu thị qua các hệ số trong vector 𝑿, với hệ số cao hơn tương ứng với tính chất mạnh hơn Tương tự, mỗi user cũng có những sở thích về các tính chất ẩn, được mô tả bởi các hệ số trong vector 𝑾 của họ.
Hình 3.4: Hình minh họa thuật toán Matrix Factorization dưới dạng biểu thức
Sau khi tìm được các ma trận items 𝑿 và ma trận users 𝑾, giá trị ước lượng rating của một user 𝒋 lên mt item 𝒊 bằng biểu thức 𝑦̂ = 𝑥 𝑖𝑗 𝑖 𝑇 𝑤 𝑗
Giá trị của biểu thức sẽ tăng lên khi các thành phần của 𝑿 và 𝑾 đều cao, cho thấy item có những đặc điểm mà người dùng ưa thích Do đó, việc gợi ý item này cho người dùng là hợp lý.
Xây dựng hàm mất mát
Việc xây dựng hàm mất mát cũng được dựa trên các thành phần đã được điền của Utility Matrix 𝒀 dựa trên biểu thức sau:
Hình 3.5: Hàm mất mát của thuật toán Matrix Factorization
Trong đó, r mn = 1 nếu item thứ m đã được đánh giá bởi user thứ n, và giá trị này là căn bậc hai của tổng bình phương tất cả các phần tử trong ma trận, với s là tổng số ratings đã có.
Việc tối ưu đồng thời các ma trận 𝑿 và 𝑾 khá phức tạp, vì vậy phương pháp hiệu quả hơn là tối ưu từng ma trận một trong khi giữ ma trận kia cố định, cho đến khi đạt được sự hội tụ.
Khi cố định X, việc tối ưu W đưa về việc tối ưu hàm:
Hình 3.6: Hàm tối ưu W khi cố định X
Khi cố định W, việc tối ưu X đưa về viêc tối ưu hàm:
Hình 3.7: Hàm tối ưu X khi cố định W
Áp dụng vào đề tài
Sau khi hệ thống xác định người dùng dựa trên thông tin về các bộ phim đã xem và đánh giá, kết quả sẽ được gửi đến Hệ thống Gợi ý (Recommender System) Tại đây, Hệ thống Gợi ý sử dụng bộ dữ liệu từ Movielens kết hợp với dữ liệu mới và áp dụng thuật toán Matrix Factorization Collaborative Filtering để xử lý dữ liệu, từ đó đưa ra danh sách các bộ phim được đề xuất mà những người dùng trước đó cũng đã đánh giá cao.
3.3.2 Phân tích bộ dữ liệu
Nhóm lấy bộ dữ liệu từ Movielens, bao gồm:
- Bộ dữ liệu train với 100836 dòng dữ liệu, gồm 610 users, 9724 bộ phim được đánh giá, mỗi user đều rating giá trị từ 0 đến 5, bước giá trị 0,5
- Bộ dữ liệu test với 500 dòng dữ liệu, gồm các dữ liệu được lọc random từ bộ dữ liệu train
Hình 3.8: Hình minh họa bộ dữ liệu train
The team developed a Recommender System utilizing Matrix Factorization algorithms through the Microsoft.ML and Microsoft.ML.Recommender libraries, integrated within a web API using ASP.NET Core version 6.0.
3.3.4 Thử nghiệm và đánh giá
Hình 3.9: Đánh giá mô hình và kết quả dự đoán của từng mã khóa học-thời gian
Trong đó, xét theo thang giá trị từ 0 -> 1:
Sai số dự đoán, hay còn gọi là Root Mean Squared Error (RMS hoặc RMSE), là chỉ số đánh giá sự khác biệt giữa giá trị dự đoán của mô hình và giá trị thực tế trong bộ dữ liệu Test RMSE được tính bằng căn bậc hai của trung bình các sai số bình phương Sai số dự đoán càng thấp, độ chính xác của hệ thống gợi ý (Recommender System) càng cao.
R bình phương (R Squared) là chỉ số đánh giá mức độ phù hợp của bộ dữ liệu với mô hình nghiên cứu, được tính dựa trên tỷ lệ phần biến thiên do hồi quy so với phần biến thiên do phần dư Giá trị R bình phương càng cao, mô hình nghiên cứu càng thể hiện sự phù hợp tốt hơn với dữ liệu.
XÂY DỰNG HỆ THỐNG
Kiến trúc hệ thống tổng quan
TMDB là nền tảng lưu trữ dữ liệu gốc về phim và các tài nguyên liên quan, trong khi máy chủ đóng vai trò xử lý các truy vấn cơ sở dữ liệu và lưu trữ thông tin xuống cơ sở dữ liệu.
MS SQL: Cơ sở dữ liệu lưu trữ tất cả thông tin hệ thống ứng dụng
Ứng dụng là phần mà người dùng tương tác trực tiếp, gửi yêu cầu đến server dựa trên hành vi của họ và nhận dữ liệu tương ứng Giao tiếp giữa client và server diễn ra thông qua chuẩn Restful API.
Firebase: Nơi lưu trữ các cài đặt, cấu hình ứng dụng để ứng dụng được hoạt động mượt mà nhất
Hình 4.1: Sơ đồ kiến trúc hệ thống tổng quan
Kiến trúc phía Client
Hình 4.2: Sơ đồ kiến trúc hệ thống phía client
4.2.2 Chi tiết các thành phần trong hệ thống
STT Thành phần Chi tiết
Service locator là một mẫu thiết kế giúp quản lý và cung cấp tất cả các phụ thuộc cần thiết cho các module trong hệ thống Nó hoạt động như một kho chứa, cho phép các module khác truy cập và sử dụng các phụ thuộc thông qua cơ chế dependency injection.
2 Presentation Module Đây là nơi trực tiếp quản lý các hành vi tương tác của người dùng
When a user interface receives an interaction from a user, it triggers an event known as a Bloc Event, which is sent to the BloC (UI Logic) block This BloC processes the necessary logic by calling the Usecase and then emits a state referred to as Bloc State The user interface then receives this state and renders the corresponding interface.
3 Domain Module Đây là nơi chủ chốt xử lý các business logic của ứng dụng
Entity sẽ là các thực thể dùng để lưu trữ dữ liệu nhận từ Repository và UI sẽ dùng các entity này để render
A use case serves as the framework for writing business logic and interacting with the Repository The Abstract Repository is an interface within the domain module, which is inherited and implemented by the Repository class in the Data module This design aims to eliminate dependencies between the two major modules: Domain and Data.
4 Data Module Đây là nơi chủ chốt để xử lý các thao tác lưu trữ dữ liệu, thao tác gọi API
The article discusses the integration of remote data, which includes API services, and local data, represented by Local Storage Additionally, it highlights the use of RemoteConfig for retrieving configuration settings.
Một thành phần quan trọng trong hệ thống là Model, chịu trách nhiệm lưu trữ dữ liệu từ cơ sở dữ liệu, trong khi quá trình phân tích dữ liệu sẽ được thực hiện bởi Data Mapper.
Module chia sẻ là thành phần chứa các chức năng chung thiết yếu cho toàn hệ thống, bao gồm cấu hình đa ngôn ngữ, hàm trợ giúp tính toán, các component phổ biến, cùng với các hằng số và cài đặt tổng quát.
Bảng 4.1: Các thành phần trong hệ thống phía client
Kiến trúc phía Server
Hình 4.3: Sơ đồ kiến trúc hệ thống phía server
4.3.2 Chi tiết các thành phần trong hệ thống
STT Thành phần Chi tiết
Máy chủ Web dùng để hosting API Nó dùng để nhận và xử lý các yêu cầu HTTP đến, chuyển hướng đến endpoint phù hợp
Hai bộ điều khiển Web API đóng vai trò là điểm vào cho các endpoint, chịu trách nhiệm xử lý các yêu cầu HTTP, thực hiện các logic liên quan và tạo ra các phản hồi phù hợp.
Là các đối tượng cung cấp định dạng cấu trúc để trao đổi thông tin giữa Controller và Unit of Work
Unit of Work (UoW) là một phần quan trọng trong việc xử lý các thao tác đọc, thêm, xóa và sửa dữ liệu Bằng cách kết hợp mẫu UoW với mẫu Repository, chúng ta tạo ra một cấu trúc rõ ràng và dễ dàng cho các thao tác CRUD Điều này cung cấp một lớp trung gian giúp truy xuất dữ liệu một cách trừu tượng và hiệu quả.
MlContext sử dụng mô hình đã được huấn luyện kết hợp với các thành phần khác trong UoW để thực hiện tính toán, xuất kết quả và cung cấp gợi ý cho người dùng.
5 EF 6 Đây là Object-Relational Mapping cung cấp lớp trừu tượng cấp cao chịu trách nhiệm tương tác với cơ sở dữ liệu
Là mô hình đã được dạy để hỗ trợ cho việc gợi ý phim cho người dùng đã tồn tại trong dataset
7 TMDB API Là API ngoài cung cấp thông tin các phim như: Tên phim, hình ảnh, diễn viên
Là thành phần quản lý các phụ thuộc, quản lý phạm vi và cung cấp các phụ thuộc qua cơ chế Dependency Injection
Lớp trừu tượng cấp cao hoạt động như một ổ đĩa lớn, được tạo thành từ nhiều ổ đĩa nhỏ hơn, nhằm nâng cao khả năng mở rộng chiều ngang cho hệ thống.
10 Indexing Đánh chỉ mục cho các file có trong hệ thống để dễ dàng tìm kiếm và quản lý các tập tin
Stream Processing đóng vai trò quan trọng trong việc tương tác với các file do RAID Storage cung cấp, giúp chia nhỏ và chuyển đổi dữ liệu để phù hợp với kích thước và nhu cầu của khách hàng.
12 Controllers đóng vai trò là điểm vào cho các endpoint, chịu trách nhiệm xử lý các yêu cầu HTTP đến, kiểm tra các tập tin và trả về tập tin (Stream) phù hợp.
Là một loại máy chủ tệp tin cho phép người dùng truy cập và chia sẻ tệp qua giao thức HTTP
Là công cụ tạo đường hầm (tunnel) hỗ trợ việc kết nối giữa localhost và internet giúp cho người dùng trên internet có thể truy cập được vào localhost
Bảng 4.2: Các thành phần trong hệ thống phía server
Sơ đồ Use case
Hình 4.4: Sơ đồ Use case
4.4.1 Danh sách các tác nhân
- User (người dùng): Có quyền truy cập tất cả các tính năng
STT Use case chính Phân rã Use case Ý nghĩa/Ghi chú
1 Đăng nhập Đăng nhập Người dùng đăng nhập vào hệ thống bằng tài khoản
Xác nhận sẽ đăng ký tài khoản với các thông tin mà người dùng đã nhập
Xác thực email mà người dùng sử dụng để đăng ký là hợp lệ
Kiểm tra xem tài khoản đang yêu cầu có tồn tại trong hệ thống không
Xác minh người đang yêu cầu khôi phục là chủ của tài khoản
Lập mật khẩu mới Thiết lập mật khẩu mới cho người dùng
Tra cứu phim Duyệt phim theo các tiêu chuẩn tra cứu Tra cứu diễn viên Duyệt diễn viên theo các tiêu chuẩn tra cứu
Yêu thích phim Lưu phim vào danh sách yêu thích Đánh giá phim Để lại bình luận và đánh giá phim
Xem phim Trình chiếu phim đang được chọn
Tải phim Tải phim về máy cục bộ
Chia sẻ phim qua tin nhắn văn bản hoặc QR (Chưa phát triển)
Lưu lịch sử Lưu lịch sử xem phim của người dùng Đánh giá phim Để lại bình luận và đánh giá phim
7 Xem thông tin diễn viên Xem thông tin Xem thông tin diễn viên cụ thể
8 Quản lý tài khoản Đổi mật khẩu Đổi mật khẩu tài khoản
Quản lý yêu thích Tra cứu hoặc xoá phim yêu thích Quản lý lịch sử Tra cứu, xoá phim đã xem
Quản lý đánh giá Tra cứu, xoá, sửa các đánh giá trong quá khứ
Cài đặt ứng dụng Đổi ngôn ngữ hoặc chủ đề ứng dụng
Bảng 4.3: Danh sách các Use case
4.4.3 Mô tả chi tiết Use case
Để tham gia vào hệ thống, người dùng cần thực hiện việc đăng nhập, trong đó tính năng này giúp xác thực danh tính người dùng thông qua tài khoản và mật khẩu.
Pre-Condition 1 Đã được cung cấp sẵn tài khoản
2 Hệ thống đang vận hành ổn định Post-Condition 1 Hệ thống hiển thị màn hình làm việc chính
2 Hệ thống ghi nhận hoạt động của người dùng Main Flow 1 Người dùng khởi động ứng dụng
3 Người dùng nhập mật khẩu
4 Người dùng Click Button Đăng nhập trên màn hình
5 Hệ thống xác nhận thông tin đăng nhập cho người dùng
6 Hệ thống ghi nhận thông tin đăng nhập người dùng
7 Kết thúc Use-case Alternative Flow 5a Hệ thống kiểm tra tài khoản người dùng nhập có tồn tại trong hệ thống hay không
5a1 Hệ thống hiển thị thông báo “Người dùng không tồn tại”
5a2 Kết thúc Use-case 5b Hệ thống kiểm tra tài khoản người dùng có mật khẩu không chính xác
5b1 Hệ thống hiển thị thông báo “Sai mật khẩu”
Bảng 4.4: Đặc tả use case dăng nhập
4.4.3.1 Use case Quên mật khẩu
Tên Use-case Khôi phục mật khẩu
Tóm tắt Cho phép người dùng truy cập lại tài khoản khi quên mật khẩu đăng nhập
Pre-Condition Hệ thống đang ở trạng thái hoạt động
Main Flow 1 Người dùng nhấn vào tuỳ chọn “Quên mật khẩu”
2 Hệ thống hiển thị giao diện khôi phục mật khẩu
3 Người dùng nhập tài khoản mail liên kết với tài khoản cần khôi phục
4 Nếu tài khoản hợp lệ thì hệ thống tiến hành gửi mã xác thực và chuyển sang giao diện nhập mã
5 Người dùng nhập mã xác thực được gửi tới mail trước đó và nhấn “Xác thực”
6 Nếu mã hợp lệ thì hệ thống chuyển sang màn hình nhập mật khẩu
7 Người dùng nhập mật khẩu mới và sau đó nhấn “Xác nhận”
8 Nếu mật khẩu hợp lệ thì hệ thống chuyển sang màn hình Trang chủ
Alternative Flow 3a Hệ thống kiểm tra email vừa nhập Nếu không tồn tại email thì báo lỗi và kết thúc Usecase
5a Hệ thống kiểm tra mã vừa nhập Nếu không hợp lệ thì báo lỗi và kết thúc Usecase
6a Hệ thống kiểm tra mật khẩu vừa nhập Nếu xảy ra các trường hợp sau đây thì kết thúc Usecase
6a1 Mật khẩu mới (New password) và nhập lại mật khẩu mới (Re-enter new password) không khớp thì báo lỗi
6a2 Mật khẩu mới ngắn hơn 6 ký tự thì báo lỗi
Bảng 4.5: Đặc tả use case quên mật khẩu
4.4.3.2 Use case Đăng ký tài khoản
Tên Use-case Đăng ký tài khoản
Tóm tắt Cho phép người dùng tạo tài khoản mới
Pre-Condition Hệ thống đang ở trạng thái hoạt động
Main Flow 1 Người dùng nhấn vào tuỳ chọn “Đăng ký”
2 Hệ thống hiển thị giao diện đăng ký tài khoản
3 Người dùng nhập tài khoản email và mật khẩu
4 Nếu tài khoản hợp lệ thì hệ thống tiến hành gửi mã xác thực và chuyển sang giao diện nhập mã
5 Người dùng nhập mã xác thực được gửi tới mail trước đó và nhấn “Xác thực”
6 Nếu mã hợp lệ thì hệ thống chuyển sang màn hình Trang chủ
Alternative Flow 3a1 Hệ thống kiểm tra email vừa nhập Nếu đã tồn tại email thì báo lỗi và kết thúc Usecase
3a2 Hệ thống kiểm tra mật khẩu, nếu không khớp hoặc ngắn hơn 6 ký tự thì báo lỗi và kết thúc Usecase
5a Hệ thống kiểm tra mã vừa nhập Nếu không hợp lệ thì báo lỗi và kết thúc Usecase
Bảng 4.6: Đặc tả use case đăng ký tài khoản
4.4.3.3 Use case Tra cứu phim – diễn viên
Tên Use-case Tra cứu phim – diễn viên
Tóm tắt Cho phép người dùng tìm kiếm thông tin về phim hoặc diễn viên
Pre-Condition Hệ thống đang ở trạng thái hoạt động
Main Flow 1 Người dùng nhấn vào tuỳ chọn tìm kiếm
2 Hệ thống hiển thị giao diện tìm kiếm
3 Người dùng có thể chọn phim tìm theo hoặc diễn viên (thao tác tương tự nhau)
4 Người dùng nhập chuỗi ký tự cần tìm kiếm
5 Người dùng nhấn xác nhận “Tìm kiếm”
6 Hệ thống trả về danh sách kết quả phù hợp
Alternative Flow 3a1 Hệ thống kiểm tra chuỗi vừa nhập Nếu chuỗi rỗng thì kết thúc Usecase
Bảng 4.7: Đặc tả use case tra cứu phim, diễn viên
4.4.3.4 Use case Yêu thích phim
Tên Use-case Yêu thích phim
Tóm tắt Cho phép người dùng lưu hoặc xoá phim đang chọn vào danh sách yêu thích
Pre-Condition Hệ thống đang ở trạng thái hoạt động
Main Flow 1 Người dùng nhấn vào một bộ phim
2 Tại màn hình thông tin phim, người dùng nhấn vào biểu tượng Trái tim (yêu thích)
3 Hệ thống cập nhật phim vào danh sách phim yêu thích
Alternative Flow 3a Hệ thống kiểm tra nếu danh sách phim yêu thích, nếy đã tồn tại phim thì xoá, ngược lại thêm vào danh sách Kết thúc use case
Bảng 4.8: Đặc tả use case yêu thích phim
4.4.3.5 Use case Đánh giá phim
Tên Use-case Đánh giá phim
Tóm tắt Cho phép người dùng bình luận và đánh giá phim
Pre-Condition Hệ thống đang ở trạng thái hoạt động
Main Flow 1 Người dùng nhấn vào một bộ phim
2 Tại màn hình thông tin phim, người dùng điền bình luận vào ô nội dung, chọn mức đánh giá từ 1 đến 5
3 Người dùng nhấn vào nút Xác nhận
4 Hệ thống lưu bình luận của người dùng
Alternative Flow 3a Hệ thống kiểm tra nếu bình luận trống hoặc đánh giá
= 0 thì báo lỗi Kết thúc use case
Bảng 4.9: Đặc tả use case đánh giá phim
Tên Use-case Xem phim
Tóm tắt Cho phép người dùng xem phim
Pre-Condition Hệ thống đang ở trạng thái hoạt động
Main Flow 1 Người dùng nhấn vào một bộ phim
2 Tại màn hình thông tin phim, người dùng nhấn vào áp phích của bộ phim
3 Hệ thống chuyển sang màn hình xem phim
4 Hệ thống lưu phim hiện tại vào lịch sử xem phim của người dùng
5 Hệ thống khởi tạo và lấy dữ liệu phim
6 Hệ thống trình chiếu phim lên giao diện
Alternative Flow 5a Hệ thống thử lấy dữ liệu về phim, nếu lấy thất bại thì báo lỗi Kết thúc use case
Bảng 4.10: Đặc tả use case xem phim
Tên Use-case Tải phim
Tóm tắt Cho phép người dùng tải phim đang xem
Pre-Condition Hệ thống đang ở trạng thái hoạt động
Main Flow 1 Tại màn hình xem phim, người dùng nhấn vào biểu tượng Tải xuống
2 Hệ thống khởi tạo phiên tải xuống và thông báo ra giao diện
3 Khi tải xuống hoàn tất, hệ thống lưu tệp phim vào thư mục ứng dụng
4 Kết thúc use case Alternative Flow 1a Nếu đã trong quá trình tải xuống, hệ thống sẽ huỷ phiên tải hiện tại Kết thúc use case
Bảng 4.11: Đặc tả use case tải phim
4.4.3.8 Use case Xem thông tin phim
Tên Use-case Xem thông tin phim
Tóm tắt Cho phép người dùng xem thông tin chi tiết một bộ phim
Pre-Condition Hệ thống đang ở trạng thái hoạt động
Main Flow 1 Tại màn hình bất kỳ nếu có thể điều hướng tới màn chi tiết phim, người dùng nhấn vào phim cần xem thông tin
2 Hệ thống tải tất cả thông tin cần thiết về phim
3 Người dùng có thể thao tác các trường hợp như xem phim, đánh giá, xem diễn viên trong phim, cảnh nổi bật
4 Kết thúc use case Alternative Flow 2a Nếu trong quá trình lấy thông tin lỗi, hệ thống sẽ trở về màn trước và thông báo lỗi Kết thúc use case
Bảng 4.12: Đặc tả use case xem thông tin phim
4.4.3.9 Use case Xem thông tin diễn viên
Tên Use-case Xem thông tin phim
Tóm tắt Cho phép người dùng xem thông tin chi tiết một diễn viên
Pre-Condition Hệ thống đang ở trạng thái hoạt động
Main Flow 1 Tại màn hình bất kỳ nếu có thể điều hướng tới màn chi tiết diễn viên, người dùng nhấn vào diễn viên cần xem thông tin
2 Hệ thống tải tất cả thông tin cần thiết về diễn viên
3 Người dùng có thể thao tác các trường hợp như xem tiểu sử, các phim diễn viên này tham gia
Alternative Flow 2a Nếu trong quá trình lấy thông tin lỗi, hệ thống sẽ trở về màn trước và thông báo lỗi Kết thúc use case
Bảng 4.13: Đặc tả use case xem thông tin diễn viên
4.4.3.10 Use case Đổi mật khẩu
Tên Use-case Đổi mật khẩu
Tóm tắt Cho phép người dùng đổi mật khẩu tài khoản
Pre-Condition Hệ thống đang ở trạng thái hoạt động
Main Flow 1 Tại màn hình Profile, người dùng nhấn tuỳ chọn Đổi mật khẩu
2 Hệ thống hiển thị hộp thoại mật khẩu mới
3 Người dùng nhập mật khẩu cũ, mật khẩu mới và nhập lại mật khẩu mới
4 Người dùng nhấn xác nhận
5 Hệ thống cập nhật dữ liệu mới
6 Kết thúc Use case Alternative Flow 5a Hệ thống kiểm tra mật khẩu cũ tài khoản, nếu không khớp thì báo lỗi và kết thúc use case
5b Hệ thống kiểm tra mật khẩu mới, nếu không trùng khớp hoặc ngắn hơn 6 ký tự thì báo lỗi và kết thúc use case
Bảng 4.14: Đặc tả use case đổi mật khẩu
4.4.3.11 Use case Quản lý yêu thích
Tên Use-case Quản lý yêu thích
Tóm tắt Cho phép người dùng quản lý các bộ phim đã lưu
Pre-Condition Hệ thống đang ở trạng thái hoạt động
Main Flow 1 Tại màn hình Profile, người dùng nhấn tuỳ chọn
2 Hệ thống chuyển sang giao diện Saved
3 Người dùng nhấn vào một mục phim trong danh sách, sau đó nhấn huỷ yêu thích
4 Hệ thống cập nhật dữ liệu mới
5 Kết thúc Use case Alternative Flow
Bảng 4.15: Đặc tả use case quản lý yêu thích
4.4.3.12 Use case Quản lý lịch sử
Tên Use-case Quản lý lịch sử
Tóm tắt Cho phép người dùng quản lý lịch sử các phim đã xem
Pre-Condition Hệ thống đang ở trạng thái hoạt động
Main Flow 1 Tại màn hình Profile, người dùng nhấn tuỳ chọn
2 Hệ thống chuyển sang giao diện History
3 Người dùng nhấn giữ một mục trong danh sách
4 Hệ thống hiển thị hộp thoại xác nhận xoá mục
5 Kết thúc Use case Alternative Flow 4a Nếu người dùng nhấn đồng ý thì hệ thống thực hiện xoá mục phim ra khỏi danh sách, kết thúc use case
Bảng 4.16: Đặc tả use case quản lý lịch sử
4.4.3.13 Use case Quản lý đánh giá
Tên Use-case Quản lý đánh giá
Tóm tắt Cho phép người dùng quản lý các bình luận của bản thân của tất cả các phim
Pre-Condition Hệ thống đang ở trạng thái hoạt động
Main Flow 1 Tại màn hình Profile, người dùng nhấn tuỳ chọn
2 Hệ thống chuyển sang giao diện Review
3 Người dùng nhấn giữ một mục trong danh sách
4 Hệ thống hiển thị hộp thoại xác nhận xoá mục
5 Người dùng nhấn vào một mục trong danh sách
6 Hệ thống hiển thị thông tin chi tiết của mục đó
7 Người dùng nhấn vào biểu tượng chỉnh sửa
8 Hệ thống hiển thị hộp thoại chỉnh sửa đánh giá
Alternative Flow 4a Nếu người dùng nhấn đồng ý thì hệ thống thực hiện xoá mục ra khỏi danh sách, kết thúc use case
6a Nếu người dùng nhấn vào áp phích phim trong đánh giá thì hệ thống chuyển sang màn hình xem phim, kết thúc use case
8a Người dùng nhập thông tin cần chỉnh sửa và nhấn xác nhận
8b Hệ thống kiểm tra điều kiện nhập và cập nhật lại đánh giá Kết thúc use case
Bảng 4.17: Đặc tả use case quản lý đánh giá
4.4.3.14 Use case Cài đặt ứng dụng
Tên Use-case Cài đặt ứng dụng
Tóm tắt Cho phép người dùng thay đổi ngôn ngữ hoặc chủ đề của ứng dụng
Pre-Condition Hệ thống đang ở trạng thái hoạt động
Main Flow 1 Tại màn hình Profile, người dùng nhấn tuỳ chọn
2 Hệ thống chuyển sang giao diện Settings
3 Người dùng nhấn vào mục Ngôn ngữ
4 Hệ thống hiển thị hộp thoại chọn ngôn ngữ
5 Người dùng nhấn vào công tắc Chủ đề
6 Hệ thống cập nhật giao diện tương ứng với chủ đề
7 Kết thúc Use case Alternative Flow 3a Nếu người dùng nhất chọn một ngôn ngữ mới, hệ thống sẽ cập nhật lại giao diện tương ứng Kết thúc use case
Bảng 4.18: Đặc tả use case cài đặt ứng dụng
Sơ đồ hoạt động
4.5.1 Sơ đồ hoạt động cho Xem thông tin phim
Hình 4.5: Xem thông tin phim Activity Diagram
4.5.2 Sơ đồ hoạt động cho Xem phim
Hình 4.6: Xem phim Activity Diagram
4.5.3 Sơ đồ hoạt động cho Gợi ý phim
Thiết kế cơ sở dữ liệu
Hình 4.8: Sơ đồ liên kết các màn hình
4.6.2 Danh sách các bảng dữ liệu
Thứ tự Tên bảng dữ liệu Diễn giải
Mô tả thông tin người dùng gồm Mã người dùng, Tên hiển thị, Email, Mật khẩu, Mã quốc gia
2 COUNTRY Mô tả thông tin quốc gia gồm Mã quốc gia,
Tên quốc gia, Mã quốc gia trên thế giới
71 theo tiêu chuẩn ISO-3166-2, Tên quốc gia theo tiếng Việt
Bài viết này mô tả thông tin đánh giá phim, bao gồm các yếu tố quan trọng như Mã đánh giá, Mã người dùng, Mã phim, thời gian Đánh giá phim, Điểm số đánh giá và Nội dung đánh giá của người dùng.
Mô tả thông tin lịch sử xem phim của người dùng gồm Mã người dùng, Mã phim, Xem phim vào lúc
5 FAVOURITE Mô tả thông tin phim yêu thích gồm Mã người dùng, Mã phim, Thời gian thêm
Mô tả tiêu đề và mô tả phịm theo từng quốc gia gồm Mã phim, Mã quốc gia, Tiêu đề, Miêu tả
Mã phim, ngôn ngữ chính, điểm số phổ biến, ngày ra mắt, ngân sách sản xuất, doanh thu và độ dài phim là những thông tin quan trọng cần được mô tả để hiểu rõ hơn về bộ phim.
Mã trạng thái của phim, Điểm đánh giá trung bình, Số lượng đánh giá
8 MOVIE_STATUS Mô tả thông tin trạng thái của phim gồm
Mã trạng thái, Tên trạng thái
9 DEPARTMENT Mô tả thông tin vai trò của diễn viên trong phim gồm Mã vai trò, Tên vai trò
Mô tả thông tin diễn viên tham gia vào phim gồm Mã vai trò, Mã phim, Mã diễn viên, Tên nhân vật
Mô tả thông tin các mã định danh trên các cơ sở dữ liệu khác gồm Mã phim, Mã định danh trên TMDB, Mã định danh trên IMDB
12 MOVIE_GENRES Mô tả thông tin phim thuộc về thể loại phim gồm Mã phim, Mã thể loại
13 MOVIE_VIDEO Mô tả thông tin về các tư liệu video của phim gồm Mã phim, Mã nguồn phim
14 MOVIE_IMAGE Mô tả thông tin về các tư liệu hình ảnh của phim gồm Mã phim, Mã nguồn ảnh
Diễn viên được mô tả với các thông tin quan trọng như mã diễn viên và mã định danh trên IMDB, tên, ngày sinh, ngày mất, nơi sinh, giới tính, và tổng quan về sự nghiệp Ngoài ra, diễn viên còn được biết đến với các vai trò cụ thể và mã vai trò tương ứng, kèm theo đường dẫn chân dung để người hâm mộ dễ dàng tìm hiểu thêm.
16 GENRES Mô tả thông tin thể loại phim gồm Mã thể loại, Tên thể loại
17 VIDEO Mô tả thông tin tư liệu phim gồm Mã tư liệu phim, Mã loại tư liệu phim, Mã tập tin
18 IMAGE Mô tả thông tin tư liệu hình ảnh gồm Mã tư liệu ảnh, Mã loại tư liệu ảnh, Mã tập tin
Mô tả thông tin tập tin gồm Mã tập tin, Đường dẫn trên hệ thống, Thời gian chỉnh sửa cuối cùng, Kích thước của tập tin
20 MOVIE_VIDEO_TYPE Mô tả loại tư liệu phim gồm Mã tư liệu phim, Tên loại tự liệu phim
21 MOVIE_IMAGE_TYPE Mô tả loại tư liệu hình ảnh gồm Mã tư liệu ảnh, Tên loại tư liệu ảnh
Mô tả thông tin dữ liệu thô trước khi đem đi dạy mô hình gồm Mã người dùng, Mã phim, Điểm số đánh giá
23 PARAMS Mô tả các tham số của hệ thóng gồm Mã tham số, giá trị của tham số
Bảng 4.19: Danh sách các bảng
4.6.3 Mô tả chi tiết các bảng dữ liệu
Thứ tự Thuộc tính Kiểu dữ liệu Ràng buộc Diễn giải
Thuộc tính định danh cho mỗi bảng ghi trong bảng USER
2 Username NVARCHAR(200) Tên người dùng/Tên hiển thị
Thuộc tính là khóa ngoại tham chiếu đến
Bảng 4.20: Mô tả bảng USER
Thứ tự Thuộc tính Kiểu dữ liệu Ràng buộc Diễn giải
Thuộc tính định danh cho mỗi bảng ghi trong bảng
2 Name NVARCHAR(50) Tên quốc gia
3 Code VARCHAR (10) Mã quốc gia theo tiêu chuẩn quốc tế
4 Name_Vi NVARCHAR(100) Tên quốc gia theo tiếng Việt
Bảng 4.21: Mô tả bảng COUNTRY
Thứ tự Thuộc tính Kiểu dữ liệu Ràng buộc Diễn giải
Thuộc tính định danh cho mỗi bảng ghi trong bảng REVIEW
Thuộc tính là khóa ngoại tham chiếu đến
Thuộc tính là khóa ngoại tham chiếu đến
4 Timestamp DATETIME Dấu thời gian
5 Rating DECIMAL(3,1) Điểm đánh giá
6 Content NVARCHAR(MAX) Nội dung đánh giá
Bảng 4.22: Mô tả bảng REVIEW
Thứ tự Thuộc tính Kiểu dữ liệu Ràng buộc Diễn giải
PRIMARY KEY, FOREIGN KEY, NOT NULL
Thuộc tính vừa tham gia làm khóa chính vừa là khóa ngoại tham chiếu đến khóa chính Id của bảng USER
PRIMARY KEY, FOREIGN KEY, NOT NULL
Thuộc tính vừa tham gia làm khóa chính vừa là khóa ngoại tham chiếu đến khóa chính Id của bảng MOVIE
3 Timestamp DATETIME Dấu thời gian
Bảng 4.23: Mô tả bảng HISTORY
Thứ tự Thuộc tính Kiểu dữ liệu Ràng buộc Diễn giải
PRIMARY KEY, FOREIGN KEY, NOT NULL
Thuộc tính vừa tham gia làm khóa chính vừa là khóa ngoại tham chiếu đến khóa chính Id của bảng USER
PRIMARY KEY, FOREIGN KEY, NOT NULL
Thuộc tính vừa tham gia làm khóa chính vừa là khóa ngoại tham chiếu đến khóa chính Id của bảng MOVIE
3 Timestamp DATETIME Dấu thời gian
Bảng 4.24: Mô tả bảng FAVOURITE
Thứ tự Thuộc tính Kiểu dữ liệu Ràng buộc Diễn giải
PRIMARY KEY, FOREIGN KEY, NOT NULL
Thuộc tính vừa tham gia làm khóa chính vừa là khóa ngoại tham chiếu đến khóa chính Id của bảng MOVIE
Thuộc tính vừa tham gia làm khóa chính
FOREIGN KEY, NOT NULL vừa là khóa ngoại tham chiếu đến khóa chính Id của bảng COUNTRY
3 Title NVARCHAR(MAX) Tiêu đề
4 Overview NVARCHAR(MAX) Mô tả
Bảng 4.25: Mô tả bảng MOVIE_LANGUAGE
Thứ tự Thuộc tính Kiểu dữ liệu Ràng buộc Diễn giải
Thuộc tính định danh cho mỗi bảng ghi trong bảng MOVIE
Thuộc tính là khóa ngoại tham chiếu đến Id của bảng COUNTRY
3 Popularity DECIMAL(5,3) Điểm bổ biến
4 ReleaseDate DATETIME Ngày ra mắt
7 Runtime INT Thời lượng phim
Thuộc tính là khóa ngoại tham chiếu
78 đến Id của bảng MOVIE_STATUS
9 VoteAverage DECIMAL(3,1) Điểm đánh giá trung bình
10 VoteCount INT Mẫu số đánh giá
Bảng 4.26: Mô tả bảng MOVIE
Thứ tự Thuộc tính Kiểu dữ liệu Ràng buộc Diễn giải
Thuộc tính định danh cho mỗi bảng ghi trong bảng
Bảng 4.27: Mô tả bảng MOVIE_STATUS
Thứ tự Thuộc tính Kiểu dữ liệu Ràng buộc Diễn giải
Thuộc tính định danh cho mỗi bảng ghi trong bảng
Bảng 4.28: Mô tả bảng DEPARTMENT
Thứ tự Thuộc tính Kiểu dữ liệu Ràng buộc Diễn giải
PRIMARY KEY, FOREIGN KEY, NOT NULL
Thuộc tính vừa tham gia làm khóa chính vừa là khóa ngoại tham chiếu đến khóa chính Id của bảng DEPARTMENT
PRIMARY KEY, FOREIGN KEY, NOT NULL
Thuộc tính vừa tham gia làm khóa chính vừa là khóa ngoại tham chiếu đến khóa chính Id của bảng MOVIE
PRIMARY KEY, FOREIGN KEY, NOT NULL
Thuộc tính vừa tham gia làm khóa chính vừa là khóa ngoại tham chiếu đến khóa chính Id của bảng PERSON
4 Character VARCHAR(100) Đóng trong vai
Bảng 4.29: Mô tả bảng MOVIE_CREDIT
Thuộc tính Kiểu dữ liệu Ràng buộc Diễn giải
Thuộc tính định danh cho mỗi bảng ghi trong bảng MOVIE_EXTENAL_IDS
2 IdTmdb INT Mã số định danh trên
3 IdImdb VARCHAR(100) Mã số định danh trên
Bảng 4.30: Mô tả bảng MOVIE_EXTERNAL_IDS
Thứ tự Thuộc tính Kiểu dữ liệu Ràng buộc Diễn giải
PRIMARY KEY, FOREIGN KEY, NOT NULL
Thuộc tính vừa tham gia làm khóa chính vừa là khóa ngoại tham chiếu đến khóa chính Id của bảng MOVIE
PRIMARY KEY, FOREIGN KEY, NOT NULL
Thuộc tính vừa tham gia làm khóa chính vừa là khóa ngoại tham chiếu đến khóa chính Id của bảng GENRES
Bảng 4.31: Mô tả bảng MOVIE_GENRES
Thứ tự Thuộc tính Kiểu dữ liệu Ràng buộc Diễn giải
Thuộc tính vừa tham gia làm khóa chính
FOREIGN KEY, NOT NULL vừa là khóa ngoại tham chiếu đến khóa chính Id của bảng MOVIE
PRIMARY KEY, FOREIGN KEY, NOT NULL
Thuộc tính vừa tham gia làm khóa chính vừa là khóa ngoại tham chiếu đến khóa chính Id của bảng VIDEO
Bảng 4.32: Mô tả bảng MOVIE_VIDEO
Thứ tự Thuộc tính Kiểu dữ liệu Ràng buộc Diễn giải
PRIMARY KEY, FOREIGN KEY, NOT NULL
Thuộc tính vừa tham gia làm khóa chính vừa là khóa ngoại tham chiếu đến khóa chính Id của bảng MOVIE
PRIMARY KEY, FOREIGN KEY, NOT NULL
Thuộc tính vừa tham gia làm khóa chính vừa là khóa ngoại tham chiếu đến khóa chính Id của bảng IMAGE
Bảng 4.33: Mô tả bảng MOVIE_IMAGE
Thứ tự Thuộc tính Kiểu dữ liệu Ràng buộc Diễn giải
Thuộc tính định danh cho mỗi bảng ghi trong bảng PERSON
Mã số định danh trên IMDB
7 Gender SMALLINT Giới tính (1: Nữ, 2: Nam)
(MAX) Tổng quan diễn viên
Thuộc tính là khóa ngoại tham chiếu đến Id của bảng DEPARTMENT
(MAX) Đường dẫn chân dung
Bảng 4.34: Mô tả bảng PERSON
Thứ tự Thuộc tính Kiểu dữ liệu Ràng buộc Diễn giải
Thuộc tính định danh cho mỗi bảng ghi trong bảng GENRES
2 Name VARCHAR(100) Tên thể loại
Bảng 4.35: Mô tả bảng GENRES
Thứ tự Thuộc tính Kiểu dữ liệu Ràng buộc Diễn giải
Thuộc tính định danh cho mỗi bảng ghi trong bảng VIDEO
Thuộc tính là khóa ngoại tham chiếu đến Id của bảng
Thuộc tính là khóa ngoại tham chiếu đến Id của bảng FILE
Bảng 4.36: Mô tả bảng VIDEO
Thứ tự Thuộc tính Kiểu dữ liệu Ràng buộc Diễn giải
Thuộc tính định danh cho mỗi bảng ghi trong bảng IMAGE
Thuộc tính là khóa ngoại tham chiếu đến Id của bảng
Thuộc tính là khóa ngoại tham chiếu đến Id của bảng FILE
Bảng 4.37: Mô tả bảng IMAGE
Thứ tự Thuộc tính Kiểu dữ liệu Ràng buộc Diễn giải
Thuộc tính định danh cho mỗi bảng ghi trong bảng FILE
2 Path NVARCHAR(MAX) Đường dẫn tập tin trên hệ thống
3 LastModified DATETIME Thời gian chỉnh sửa cuối cùng
4 Size INT Kích thước tập tin
Bảng 4.38: Mô tả bảng FILE
Thứ tự Thuộc tính Kiểu dữ liệu Ràng buộc Diễn giải
Thuộc tính định danh cho mỗi bảng ghi trong
Bảng 4.39: Mô tả bảng MOVIE_VIDEO_TYPE
Thứ tự Thuộc tính Kiểu dữ liệu Ràng buộc Diễn giải
Thuộc tính định danh cho mỗi bảng ghi trong bảng MOVIE_IMAGE_TYPE
2 Name VARCHAR(100) Loại hình ảnh
Bảng 4.40: Mô tả bảng MOVIE_IMAGE_TYPE
Thứ tự Thuộc tính Kiểu dữ liệu Ràng buộc Diễn giải
PRIMARY KEY, FOREIGN KEY, NOT NULL
Thuộc tính vừa tham gia làm khóa chính vừa là khóa ngoại tham chiếu đến khóa chính Id của bảng USER
PRIMARY KEY, FOREIGN KEY, NOT NULL
Thuộc tính vừa tham gia làm khóa chính vừa là khóa ngoại tham chiếu đến khóa chính Id của bảng MOVIE
3 Rating DECIMAL(3,1) Điểm số đánh giá
Bảng 4.41: Mô tả bảng TRAINING
Thứ tự Thuộc tính Kiểu dữ liệu Ràng buộc Diễn giải
Thuộc tính định danh cho mỗi bảng ghi trong bảng PARAMS
2 Value NVARCHAR(MAX) Giá trị của tham số
Bảng 4.42: Mô tả bảng PARAMS