React là gì
React (hay còn được gọi là React.js hoặc ReactJS) là một thư viện JavaScript front-end mã nguồn mở và miễn phí để xây dựng giao diện người dùng dựa trên các thành phần UI riêng lẻ Nó được phát triển và duy trì bởi Meta (trước đây là
Facebook) và cộng đồng các nhà phát triển và công ty cá nhân React có thể được sử dụng làm cơ sở để phát triển các ứng dụng SPA (Single-page), thiết bị di động hoặc ứng dụng được kết xuất bằng máy chủ với các thư viện khác như Next.js Tuy nhiên, React chỉ hướng tới việc quản lý trạng thái và hiển thị trạng thái đó cho DOM, vì vậy việc tạo ứng dụng bằng React thường yêu cầu sử dụng thêm các thư viện bổ sung để thực hiện định tuyến trang, cũng như thêm một số chức năng ở phía máy khách.
Lịch sử React
ReactJS là một thư viện JavaScript mã nguồn mở được phát triển bởi Facebook
Nó ra mắt lần đầu vào năm 2013 và đã nhanh chóng trở thành một trong những công nghệ phát triển ứng dụng web phổ biến nhất trên thế giới Dưới đây là một cái nhìn tổng quan về lịch sử của ReactJS:
● Năm 2011: Jordan Walke, một nhân viên của Facebook, phát triển ReactJS ban đầu để giúp cải thiện hiệu suất của Facebook Ads Manager ReactJS được sử dụng nội bộ trong Facebook và được gọi là "React".
● Năm 2013: Facebook công bố ReactJS cho cộng đồng phát triển Phiên bản đầu tiên được công bố là ReactJS 0.3, và sau đó, các phiên bản tiếp theo được phát triển và công bố liên tục.
● Năm 2015: ReactJS được Facebook giới thiệu cùng với khái niệm "React
Native", một framework để phát triển ứng dụng di động sử dụng ReactJS React Native cho phép các nhà phát triển sử dụng ReactJS để xây dựng ứng dụng di động đa nền tảng.
● Năm 2016: ReactJS trở thành mã nguồn mở hoàn toàn khi Facebook chuyển giao dự án cho tổ chức mã nguồn mở chung là "Facebook Open Source" Điều này tạo điều kiện thuận lợi cho cộng đồng phát triển đóng góp vào việc cải thiện ReactJS và tạo ra các thư viện hỗ trợ phát triển mở rộng.
● Năm 2017: ReactJS 16 được ra mắt với một số tính năng quan trọng, bao gồm hỗ trợ cho React Fiber (một kiến trúc nâng cao giúp cải thiện hiệu suất) và React Portal (cho phép phát triển đưa các phần tử React vào nút DOM bên ngoài).
● Từ năm 2018 đến nay: ReactJS tiếp tục phát triển với các phiên bản mới, cải tiến hiệu suất và tính năng Cộng đồng React đã tạo ra nhiều thư viện và công cụ phát triển hữu ích như Redux, React Router, Next.js, Create React App và nhiều hơn nữa.
Kiến trúc React
ReactJS là một thư viện JavaScript phổ biến được sử dụng để xây dựng giao diện người dùng (UI) tương tác trong các ứng dụng web Dưới đây là một số khái niệm và thành phần chính trong kiến trúc của ReactJS:
● Components (Các thành phần): ReactJS sử dụng kiến trúc dựa trên thành phần Các thành phần là những khối xây dựng độc lập và có thể tái sử dụng trong một ứng dụng React Có hai loại thành phần chính trong React: Thành phần lớp (Class Components) và Thành phần hàm (Function Components) Thành phần lớp là các lớp JavaScript được viết theo cú pháp của ES6 và kế thừa từ lớp cơ sở React.Component Thành phần hàm là các hàm JavaScript thông thường.
● Virtual DOM (DOM ảo) là một phiên bản nhẹ của DOM thực tế (Document
Object Model) được React duy trì trong bộ nhớ Nó là một biểu diễn của giao diện người dùng được lưu trữ trong bộ nhớ Khi có sự thay đổi trong trạng thái của một thành phần, React cập nhật Virtual DOM và thực hiện thuật toán diffing để xác định số lượng thay đổi tối thiểu cần thiết để cập nhật DOM thực tế Phương pháp này cải thiện hiệu suất bằng cách giảm thiểu việc tương tác trực tiếp với DOM thực tế.
● JSX (JavaScript XML là một phần mở rộng cú pháp cho JavaScript, cho phép bạn viết mã HTML tương tự trong JavaScript JSX cho phép kết hợp cấu trúc HTML và logic JavaScript trong một tệp tin đơn JSX được biên dịch thành mã JavaScript thông qua các công cụ như Babel, giúp tương thích với trình duyệt.
● State (Trạng thái): State đại diện cho dữ liệu hiện tại hoặc trạng thái của một thành phần Nó là dữ liệu có thể thay đổi theo thời gian React cung cấp một đối tượng state để quản lý trạng thái của các thành phần Khi trạng thái thay đổi, React tự động cập nhật và render lại các phần tử giao diện người dùng tương ứng.
● Lifecycle Methods (Phương thức vòng đời): Các thành phần React có một số phương thức vòng đời, cung cấp các điểm kết nối vào các giai đoạn khác nhau của vòng đời của một thành phần Một số phương thức vòng đời phổ biến bao gồm componentDidMount (được gọi sau khi thành phần đã được render lần đầu tiên), componentDidUpdate (được gọi sau khi thành phần đã được cập nhật), và componentWillUnmount (được gọi trước khi thành phần bị gỡ bỏ khỏi DOM) Các phương thức vòng đời này cho phép thực thi mã để thực hiện các hoạt động như lấy dữ liệu, đăng ký sự kiện, hoặc giải phóng tài nguyên.
● Props (Thuộc tính): Props là các thuộc tính chỉ đọc được truyền từ thành phần cha đến các thành phần con Props cho phép dữ liệu chảy từ thành phần cha xuống các thành phần con Props giúp tạo ra các thành phần có thể tái sử dụng và modul hóa, vì chúng cho phép tùy chỉnh hành vi và dữ liệu của các thành phần.
● Data Flow (Luồng dữ liệu): Trong React, dữ liệu chảy theo hướng một chiều, thường được gọi là "one-way data binding" hoặc "uni-directional data flow" Dữ liệu thường chảy từ thành phần cha xuống các thành phần con thông qua props Để thay đổi dữ liệu, các thành phần con có thể gọi các callback được cung cấp bởi thành phần cha Phương pháp này giúp duy trì một trạng thái ứng dụng dễ dàng hiểu và giảm khả năng xảy ra xung đột dữ liệu.
● Styling: React cho phép viết CSS cho các thành phần bằng cách sử dụng các tệp tin CSS truyền thống hoặc sử dụng inline styles bằng cách sử dụng các đối tượng JavaScript Ngoài ra, có các thư viện phổ biến như styled- components và các giải pháp CSS-in-JS khác cung cấp các tùy chọn tạo kiểu tiên tiến hơn
Ưu điểm React
● Thư viện JavaScript mạnh mẽ: ReactJS là một thư viện JavaScript mạnh mẽ và phổ biến Nó được phát triển bởi Facebook và được cộng đồng lập trình viên rộng lớn hỗ trợ ReactJS cung cấp nhiều tính năng và công cụ giúp xây dựng giao diện người dùng tương tác phức tạp một cách dễ dàng và hiệu quả.
● Virtual DOM và hiệu suất cao: ReactJS sử dụng Virtual DOM, một biến thể nhẹ của DOM, để tối ưu hóa việc cập nhật giao diện người dùng Khi có sự thay đổi trong trạng thái của một thành phần, React sẽ cập nhật Virtual DOM và áp dụng thuật toán diffing để chỉ cập nhật những phần tử thay đổi trong DOM thực tế Điều này giúp cải thiện hiệu suất và tăng tốc độ render của ứng dụng.
● Khả năng tái sử dụng cao: ReactJS khuyến khích việc xây dựng các thành phần có thể tái sử dụng Các thành phần có thể được sử dụng lại trong các phần của ứng dụng khác nhau, giúp tăng tính modul hóa và giảm sự lặp lại của mã Điều này giúp cải thiện năng suất phát triển và bảo trì mã nguồn.
● JSX - Kết hợp mã HTML và JavaScript: ReactJS sử dụng JSX, một phần mở rộng cú pháp cho JavaScript, cho phép kết hợp mã HTML và JavaScript trong cùng một tệp tin JSX giúp việc viết mã giao diện trở nên dễ hiểu và dễ đọc hơn Nó cung cấp một cách tiện lợi để định nghĩa các thành phần UI và tạo ra cú pháp gần gũi với HTML.
● Hỗ trợ rộng rãi và cộng đồng phát triển mạnh mẽ: ReactJS có một cộng đồng lập trình viên rộng lớn và tích cực Cộng đồng này cung cấp nhiều tài liệu, ví dụ và thư viện bổ sung cho ReactJS Ngoài ra, có nhiều công cụ hỗ trợ và framework xây dựng trên nền React như Next.js, Redux, và React Router, giúp mở rộng khả năng phát triển và triển khai ứng dụng React.
● Thân thiện với SEO: Mặc dù ứng dụng ReactJS là một ứng dụng đơn trang
(Single Page Application - SPA), nhưng React cung cấp các công cụ và cách tiếp cận để tối ưu hóa SEO Các trang React có thể được render trước và gửi đến trình duyệt với nội dung được tối ưu cho các công cụ tìm kiếm, giúp cải thiện khả năng tìm thấy và xếp hạng trên các công cụ tìm kiếm.
Nhược điểm React
● Khả năng học tập ban đầu: Với những người mới bắt đầu hoặc người không quen với cú pháp JSX và khái niệm về kiến trúc component-based, việc học và hiểu ReactJS ban đầu có thể tốn nhiều thời gian và đòi hỏi sự quen thuộc với các khái niệm mới.
● Mức độ phức tạp: Mặc dù ReactJS cung cấp một cách tiếp cận mạnh mẽ cho việc xây dựng giao diện người dùng, nhưng nó có thể trở nên phức tạp đối với các ứng dụng lớn và phức tạp Quản lý trạng thái, tương tác giữa các thành phần và điều phối dữ liệu có thể trở thành thách thức đối với các dự án phức tạp.
● Học công nghệ liên quan: Để sử dụng ReactJS một cách hiệu quả, thường cần học thêm các công nghệ khác như JSX, Babel, Webpack và các thư viện quản lý trạng thái như Redux hoặc MobX Điều này đòi hỏi sự đầu tư thêm thời gian và công sức để nắm vững và sử dụng tốt các công nghệ kết hợp.
● Tương thích ngược với các phiên bản cũ: Với việc ReactJS thường có các phiên bản mới và phát triển nhanh chóng, các phiên bản cũ có thể không tương thích ngược hoàn toàn với nhau Điều này có thể gây ra sự bất tiện cho việc nâng cấp và bảo trì các ứng dụng ReactJS đã tồn tại.
● Tài nguyên và kích thước ứng dụng: Một ứng dụng ReactJS có thể có kích thước lớn do việc sử dụng thư viện và công cụ bổ sung Điều này có thể ảnh hưởng đến tốc độ tải trang ban đầu và tăng dung lượng tải về cho người dùng.
● Không hỗ trợ đầy đủ cho ứng dụng di động: Mặc dù React Native là một dự án phát triển ứng dụng di động dựa trên ReactJS, nhưng ReactJS chính thức tập trung vào phát triển ứng dụng web Việc xây dựng ứng dụng di động đa nền tảng có thể đòi hỏi sử dụng các công nghệ khác như React Native hoặc Flutter.
SpringBoot 20
Giới thiệu Spring Boot
Spring Boot là một framework phát triển ứng dụng Java dựa trên Spring
Framework Nó được thiết kế để giúp đơn giản hóa việc xây dựng các ứng dụng Java độc lập và dễ dàng triển khai Spring Boot giúp giảm bớt sự phức tạp và công việc cấu hình trong quá trình phát triển ứng dụng, tạo điều kiện thuận lợi cho các nhà phát triển tập trung vào việc triển khai chức năng của ứng dụng thay vì quản lý các cấu hình phức tạp.
Dưới đây là một số điểm nổi bật và đặc điểm chính của Spring Boot:
● Quản lý cấu hình tự động: Spring Boot cung cấp khả năng quản lý cấu hình tự động một cách thông minh Nó sử dụng các quy ước mặc định để cấu hình ứng dụng, giảm bớt công việc cấu hình thủ công Spring Boot cũng hỗ trợ nhiều nguồn cấu hình khác nhau như file properties, YAML, environment variables, và cấu hình trên máy chủ.
● Tích hợp dễ dàng: Spring Boot tích hợp tốt với các công nghệ và thư viện phổ biến trong cộng đồng Java Nó hỗ trợ tích hợp với Spring Framework, JDBC, JPA, Thymeleaf, Hibernate, RESTful Web Services, Security, và nhiều thư viện khác Điều này giúp nhà phát triển dễ dàng xây dựng các ứng dụng phức tạp và hiệu quả.
● Cung cấp Embedded Server: Spring Boot đi kèm với một máy chủ web nhúng
(embedded server) như Tomcat, Jetty hoặc Undertow Điều này cho phép triển khai và chạy ứng dụng một cách đơn giản chỉ với một tệp JAR hoặc WAR Không cần cài đặt và cấu hình máy chủ riêng biệt, việc triển khai ứng dụng trở nên đơn giản và tiện lợi.
● Hỗ trợ Spring Ecosystem: Spring Boot được tích hợp một cách tốt với Spring
Ecosystem, bao gồm Spring Data, Spring Security, Spring Cloud, và Spring Integration Điều này cho phép nhà phát triển sử dụng các công nghệ mạnh mẽ này để xây dựng các ứng dụng phức tạp và phân tán.
● Hiệu suất và quản lý lỗi: Spring Boot cung cấp các công cụ và tính năng để quản lý hiệu suất ứng dụng và xử lý lỗi một cách hiệu quả Nó hỗ trợ điều chỉnh và giám sát hiệu suất ứng dụng, quản lý các lỗi và ngoại lệ, và cung cấp các công cụ hỗ trợ gỡ lỗi và theo dõi.
● Cộng đồng phát triển mạnh mẽ: Spring Boot có một cộng đồng phát triển rộng lớn và tích cực Cộng đồng này cung cấp nhiều tài liệu, ví dụ, và thư viện bổ sung Ngoài ra, có nhiều công cụ hỗ trợ và framework xây dựng trên nền Spring Boot như Spring Cloud, Spring Batch, và Spring Data, giúp mở rộng khả năng phát triển và triển khai ứng dụng.
Kiến trúc Spring Boot
Kiến trúc của Spring Boot tuân theo mô hình kiến trúc MVC (Model-View- Controller) và sử dụng các thành phần của Spring Framework để xây dựng ứng dụng Dưới đây là các thành phần và khái niệm chính trong kiến trúc của Spring Boot:
Model: Model đại diện cho dữ liệu và logic xử lý dữ liệu trong ứng dụng Spring
Boot hỗ trợ sử dụng các công nghệ như Spring Data để quản lý truy vấn cơ sở dữ liệu và xử lý dữ liệu.
View: View là giao diện người dùng hiển thị dữ liệu cho người dùng Spring
Boot hỗ trợ sử dụng các công nghệ như Thymeleaf, FreeMarker, hoặc AngularJS để xây dựng giao diện người dùng.
Controller: Controller nhận các yêu cầu từ người dùng thông qua giao diện người dùng và xử lý các yêu cầu đó Nó tương tác với Model để truy xuất và cung cấp dữ liệu cho View Trong Spring Boot, Controller được triển khai bằng cách sử dụng các annotation như @Controller, @RestController và @RequestMapping để xác định các endpoint và xử lý các yêu cầu HTTP.
Dependency Injection (DI): Spring Boot sử dụng Dependency Injection để quản lý và cung cấp các thành phần và phụ thuộc của ứng dụng DI giúp giảm sự phụ thuộc giữa các thành phần, tạo ra sự linh hoạt và dễ dàng kiểm thử.
Auto-configuration: Spring Boot cung cấp khả năng tự động cấu hình (auto- configuration) cho ứng dụng Điều này cho phép Spring Boot tự động phát hiện các thành phần có sẵn trong classpath và cấu hình chúng một cách tự động Ví dụ, khi bạn thêm thư viện JDBC vào classpath của ứng dụng, Spring Boot sẽ tự động cấu hình một DataSource để truy cập cơ sở dữ liệu.
Embedded Server: Spring Boot đi kèm với các máy chủ web nhúng như
Tomcat, Jetty hoặc Undertow Điều này cho phép triển khai ứng dụng một cách đơn giản chỉ cần chạy ứng dụng như một tệp JAR hoặc WAR mà không cần cài đặt và cấu hình máy chủ web riêng biệt.
Actuator: Spring Boot Actuator cung cấp các công cụ để quản lý, giám sát và theo dõi ứng dụng Nó cung cấp các endpoint để kiểm tra sức khỏe ứng dụng, thu thập thông tin về các thành phần của ứng dụng và quản lý các hành động như khởi động lại ứng dụng.
Hình 2.3 Kiến trúc Spring framework
Ưu điểm Spring Boot
Dễ sử dụng: Spring Boot giúp đơn giản hóa quá trình phát triển ứng dụng Java
Nó cung cấp một cấu hình mặc định tự động, giảm thiểu công việc cấu hình và giúp bạn tập trung vào việc viết mã logic chức năng chính của ứng dụng.
Tự động cấu hình: Spring Boot sử dụng khả năng tự động cấu hình để cấu hình ứng dụng dựa trên các quy ước mặc định Nó tự động phát hiện các thành phần có sẵn trong classpath và cấu hình chúng một cách tự động, giúp tiết kiệm thời gian và công sức trong việc cấu hình thủ công.
Tích hợp tốt: Spring Boot tích hợp tốt với các công nghệ và thư viện phổ biến trong cộng đồng Java Nó hỗ trợ tích hợp với Spring Framework, Spring Data, Spring Security, Hibernate, Thymeleaf và nhiều công nghệ khác, giúp bạn xây dựng các ứng dụng phức tạp một cách dễ dàng và hiệu quả.
Embedded Server: Spring Boot đi kèm với các máy chủ web nhúng như Tomcat, Jetty hoặc Undertow Điều này cho phép bạn triển khai và chạy ứng dụng một cách đơn giản chỉ với một tệp JAR hoặc WAR, mà không cần cài đặt và cấu hình máy chủ web riêng biệt.
Quản lý phụ thuộc: Spring Boot sử dụng Dependency Injection để quản lý và cung cấp các phụ thuộc của ứng dụng Điều này giúp giảm sự phụ thuộc giữa các thành phần, tạo ra sự linh hoạt và dễ dàng kiểm thử trong quá trình phát triển ứng dụng.
Cộng đồng và tài liệu phong phú: Spring Boot có một cộng đồng phát triển mạnh mẽ và tích cực Cộng đồng này cung cấp nhiều tài liệu, ví dụ, và hỗ trợ thông qua các diễn đàn, trang web, và khoá học trực tuyến Bạn có thể dễ dàng tìm kiếm thông tin và giải đáp các câu hỏi trong quá trình sử dụng Spring Boot.
Hỗ trợ Actuator: Spring Boot Actuator cung cấp các công cụ và endpoints để quản lý, giám sát và theo dõi ứng dụng Nó cho phép bạn kiểm tra sức khỏe của ứng dụng, thu thập thông tin về hiệu suất và lỗi, và quản lý các hành động như khởi động lại ứng dụng.
Nhược điểm Spring Boot
Tính phức tạp: Mặc dù Spring Boot giúp đơn giản hóa việc phát triển ứng dụng Java, nhưng nó vẫn có độ phức tạp Cấu hình và tùy chỉnh một số tính năng cụ thể có thể gây khó khăn cho những người mới làm quen với Spring Boot.
Hiệu suất: Mặc dù Spring Boot nhanh và hiệu quả, nhưng khi xây dựng các ứng dụng lớn và phức tạp, hiệu suất có thể trở thành một vấn đề Cấu hình không tốt và sử dụng sai cách các tính năng của Spring Boot có thể dẫn đến hiệu suất kém.
Dung lượng: Spring Boot cung cấp một số tính năng mạnh mẽ và tiện ích, nhưng điều này đồng nghĩa với việc nó cũng có dung lượng lớn Khi triển khai ứng dụng, kích thước gói jar hoặc war có thể lớn hơn so với các ứng dụng không sử dụng Spring Boot.
Khả năng mở rộng: Mặc dù Spring Boot có nhiều tính năng mạnh mẽ, nhưng việc mở rộng và tùy chỉnh một số tính năng có thể gặp khó khăn Điều này đặc biệt đúng khi bạn cần tuỳ chỉnh một số khía cạnh của Spring Boot để phù hợp với nhu cầu cụ thể của dự án.
Hạn chế của Java: Spring Boot dựa trên ngôn ngữ lập trình Java, điều này có thể là một hạn chế đối với những người muốn sử dụng ngôn ngữ lập trình khác Nếu bạn muốn sử dụng một ngôn ngữ khác, bạn có thể gặp khó khăn trong việc sử dụng Spring Boot hoặc phải tìm các phiên bản không chính thức của Spring Boot hỗ trợ ngôn ngữ đó.
Giới thiệu PostgresSQL
PostgreSQL có một lịch sử phát triển dài và hình thành từ dự án POSTGRES tại Đại học California, Berkeley vào những năm 1980 POSTGRES ban đầu được phát triển như một nghiên cứu để nghiên cứu các vấn đề trong hệ quản trị cơ sở dữ liệu quan hệ truyền thống Điều này đã dẫn đến sự tập trung vào tính năng mở rộng và khả năng mở rộng của hệ thống.
Năm 1989, POSTGRES được công bố lần đầu tiên, và từ đó, nó đã tiếp tục được phát triển và mở rộng bởi cộng đồng người dùng và các nhà phát triển Năm 1996, phiên bản PostgreSQL đầu tiên chính thức được phát hành, đánh dấu bước đầu tiên trong việc trở thành một hệ quản trị cơ sở dữ liệu đầy đủ và hoàn chỉnh.
Kể từ đó, PostgreSQL đã trải qua nhiều phiên bản và cải tiến đáng kể Với sự hỗ trợ từ cộng đồng người dùng rộng lớn và sự cam kết của các nhà phát triển,
PostgreSQL đã ngày càng trở nên phổ biến và được sử dụng rộng rãi trên toàn thế giới.
Tại sao lại là PostgresSQL
Độ tin cậy và ổn định: PostgreSQL được đánh giá cao về độ tin cậy và ổn định
Nó tuân theo các tiêu chuẩn ACID (Atomicity, Consistency, Isolation, Durability) và cung cấp các công cụ và tính năng để đảm bảo tính toàn vẹn dữ liệu và khả năng phục hồi.
Tính mở và tiêu chuẩn: PostgreSQL là một hệ quản trị cơ sở dữ liệu mã nguồn mở và tuân thủ các tiêu chuẩn SQL Nó hỗ trợ các tính năng tiên tiến như truy vấn phức tạp, khóa ngoại, giao dịch, chế độ xem và các tính năng phong phú khác. Hiệu suất cao: PostgreSQL được tối ưu hóa để cung cấp hiệu suất cao Nó sử dụng các kỹ thuật như truy vấn song song, chỉ mục thông minh, và bộ nhớ cache để tối ưu hóa truy vấn và thời gian phản hồi.
Hỗ trợ đa nền tảng: PostgreSQL hỗ trợ đa nền tảng, cho phép bạn triển khai ứng dụng trên nhiều hệ điều hành như Windows, Linux và macOS Điều này đem lại sự linh hoạt cho các dự án phát triển.
Hỗ trợ mở rộng và tích hợp: PostgreSQL cung cấp các tính năng và công cụ để hỗ trợ mở rộng và tích hợp với các công nghệ và ngôn ngữ lập trình khác Nó hỗ trợ các kết nối JDBC, ODBC, và các ngôn ngữ như Java, Python, PHP và nhiều ngôn ngữ lập trình khác.
Cộng đồng phát triển mạnh mẽ: PostgreSQL có một cộng đồng phát triển đông đảo và tích cực Cộng đồng này cung cấp sự hỗ trợ, bản vá lỗi, và cập nhật thường xuyên, đảm bảo rằng PostgreSQL luôn phát triển và cải tiến.
Nhược điểm PostgresSQL
Khả năng mở rộng: Mặc dù PostgreSQL hỗ trợ khả năng mở rộng và có thể xử lý các tải công việc lớn, nhưng trong một số trường hợp đặc biệt, hiệu suất của nó có thể bị giới hạn Điều này có thể xảy ra khi quá trình mở rộng gặp phải hạn chế của phần cứng hoặc khi cấu hình chưa được tối ưu.
Quản lý phụ thuộc và tương thích: PostgreSQL có sự phụ thuộc rất cao vào các phiên bản cụ thể của các thư viện và phần mềm khác như Java, Python, hoặc các thư viện mở rộng Điều này có thể gây khó khăn trong việc quản lý các phiên bản và đảm bảo tính tương thích.
Tài liệu hạn chế: Mặc dù PostgreSQL có một cộng đồng phát triển đông đảo, tài liệu chính thức của PostgreSQL có thể hạn chế và không đầy đủ so với một số hệ quản trị cơ sở dữ liệu khác Điều này có thể đòi hỏi người dùng phải tìm kiếm thông tin từ các nguồn khác nhau hoặc phải phụ thuộc vào cộng đồng để nhận được hỗ trợ. Quản lý công việc phức tạp: Với các công việc phức tạp như sao lưu, khôi phục, và quản lý cấu trúc dữ liệu phức tạp, việc quản lý và thực hiện các tác vụ này trong PostgreSQL có thể phức tạp và đòi hỏi kiến thức chuyên môn về hệ thống quản trị cơ sở dữ liệu.
Hiệu suất ở quy mô lớn: Trong một số trường hợp có khối lượng dữ liệu lớn và yêu cầu xử lý cực kỳ tải cao, PostgreSQL có thể gặp khó khăn trong việc duy trì hiệu suất ổn định Việc tối ưu hiệu suất và quản lý các yêu cầu tải lớn có thể đòi hỏi nỗ lực và kỹ năng kỹ thuật nâng cao.
Lưu ý khi sử dụng PostgresSQL
Quản lý tài nguyên: PostgreSQL sử dụng tài nguyên hệ thống như bộ nhớ và CPU Đảm bảo rằng hệ thống của bạn có đủ tài nguyên để chạy PostgreSQL một cách hiệu quả Cấu hình phù hợp cho bộ nhớ đệm, số lượng kết nối đồng thời và các thông số khác là quan trọng để tối ưu hóa hiệu suất của PostgreSQL.
Sao lưu và phục hồi dữ liệu: Đảm bảo rằng bạn thực hiện quá trình sao lưu dữ liệu định kỳ để đảm bảo an toàn và khả năng khôi phục dữ liệu trong trường hợp có sự cố xảy ra Nắm vững các công cụ và quy trình phục hồi dữ liệu để đảm bảo khả năng phục hồi tốt.
Quản lý quyền truy cập: PostgreSQL cung cấp các cơ chế quyền truy cập phong phú để kiểm soát quyền truy cập vào cơ sở dữ liệu Hãy đảm bảo rằng bạn cấu hình và quản lý các vai trò, người dùng và quyền truy cập một cách chặt chẽ để đảm bảo tính bảo mật của hệ thống.
Tối ưu hóa truy vấn: PostgreSQL cung cấp nhiều công cụ và cơ chế để tối ưu hóa truy vấn, bao gồm việc tạo chỉ mục, sử dụng câu lệnh EXPLAIN để phân tích kế hoạch truy vấn và điều chỉnh cấu hình truy vấn Hiểu rõ cách tối ưu hóa truy vấn sẽ giúp bạn nâng cao hiệu suất và thời gian phản hồi của hệ thống.
Bảo mật và bảo vệ dữ liệu: PostgreSQL cung cấp các tính năng bảo mật mạnh mẽ, nhưng cần đảm bảo rằng bạn cấu hình và triển khai các biện pháp bảo mật phù hợp Điều này bao gồm việc sử dụng kết nối an toàn, mã hóa dữ liệu nhạy cảm, và quản lý chứng chỉ và chứng thực.
3 CHƯƠNG 3: KHẢO SÁT VÀ XÁC ĐỊNH YÊU CẦU
Khảo sát và xác định yêu cầu: 29
Phương pháp khảo sát
Khảo sát trực tiếp: Tương tác trực tiếp với người dùng và các thành viên trong gia đình là một phương pháp quan trọng để hiểu rõ nhu cầu và mong muốn của họ
Có thể sử dụng các cuộc phỏng vấn, cuộc họp nhóm, hoặc thậm chí khảo sát trực tiếp tại gia đình để thu thập thông tin chi tiết về việc quản lý gia đình, các nhu cầu cụ thể, và các tính năng mong muốn trong ứng dụng.
Khảo sát trực tuyến: Sử dụng các công cụ khảo sát trực tuyến, như Google
Forms hoặc SurveyMonkey, để tạo các bảng câu hỏi và gửi cho người dùng Điều này cho phép thu thập phản hồi từ một số lượng lớn người dùng một cách thuận tiện và tạo ra dữ liệu để phân tích.
Phân tích các ứng dụng tương tự: Nghiên cứu và phân tích các ứng dụng quản lý gia đình tương tự đã có trên thị trường Điều này giúp hiểu về các tính năng, giao diện người dùng, và tiện ích mà người dùng mong đợi từ một ứng dụng quản lý gia đình. Đánh giá môi trường sử dụng: Khảo sát và đánh giá môi trường sử dụng, bao gồm các thiết bị, hệ điều hành và trình duyệt được sử dụng bởi người dùng, để đảm bảo rằn
Câu hỏi khảo sát
● Bạn mong muốn quản lý những khía cạnh nào của gia đình thông qua ứng dụng?
● Những tính năng nào là quan trọng nhất đối với bạn khi sử dụng một ứng dụng quản lý gia đình?
● Bạn có nhu cầu quản lý thông tin cá nhân của từng thành viên trong gia đình không? Nếu có, những thông tin nào là quan trọng?
● Bạn cần tính năng quản lý sự kiện, lịch trình và hoạt động của gia đình không?
Ví dụ: sinh nhật, cuộc họp gia đình, kế hoạch du lịch, vv.
● Bạn có mong muốn ghi chú và ghi nhớ các nội dung quan trọng trong gia đình không?
● Bạn có nhu cầu quản lý tài chính gia đình trong ứng dụng không? Ví dụ: ngân sách, theo dõi chi tiêu, vv.
● Bạn quan tâm đến tính năng bảo mật và quyền riêng tư trong ứng dụng không?
● Bạn mong muốn có tính năng chia sẻ thông tin và tương tác với các thành viên khác trong gia đình không?
● Bạn muốn giao diện người dùng đơn giản và dễ sử dụng hay bạn ưu tiên tính năng phức tạp và tùy chỉnh cao hơn?
Kết quả khảo sát
● Quản lý gia đình: Hầu hết người dùng mong muốn ứng dụng giúp quản lý các khía cạnh quan trọng của gia đình như thông tin cá nhân, lịch trình, sự kiện, hoạt động, tài chính và ghi chú.
● Tính năng quản lý thông tin cá nhân: Đa số người dùng quan tâm đến việc quản lý thông tin cá nhân của từng thành viên trong gia đình, bao gồm tên, ngày sinh, thông tin liên lạc, hình ảnh và sở thích cá nhân.
● Quản lý sự kiện và lịch trình: Người dùng muốn có tính năng quản lý sự kiện, lịch trình và hoạt động gia đình như sinh nhật, cuộc họp, kế hoạch du lịch Họ mong muốn ứng dụng cung cấp nhắc nhở, ghi chú và tính năng chia sẻ lịch trình.
● Quản lý tài chính gia đình: Một số người dùng quan tâm đến việc quản lý tài chính gia đình, bao gồm quản lý ngân sách, theo dõi chi tiêu, tạo báo cáo và phân loại các khoản thu/chi.
● Tính năng bảo mật và quyền riêng tư: Đa số người dùng đặc biệt quan tâm đến tính an toàn và bảo mật của thông tin gia đình Họ mong muốn có các cơ chế bảo vệ, quản lý quyền truy cập và tùy chọn riêng tư để bảo vệ thông tin cá nhân và gia đình.
● Chia sẻ thông tin và tương tác: Một số người dùng muốn có tính năng chia sẻ thông tin, hình ảnh và tương tác với các thành viên khác trong gia đình, bao gồm việc tạo nhóm, bình luận và chia sẻ kỷ niệm gia đình.
● Giao diện người dùng dễ sử dụng: Đa số người dùng mong đợi một giao diện người dùng đơn giản, thân thiện và dễ sử dụng Họ muốn có trải nghiệm tương tác mượt mà và truy cập dễ dàng vào các tính năng quan trọng.
Phân tích yêu cầu 31
Sơ đồ Use case
Đặc tả Use case
Mô tả tóm tắt Cho phép người dùng tạo family để sử dụng ứng dụng Người thực hiện Homeless
Sự kiện kích hoạt Bấm nút chọn create family Điều kiện tiên quyết Homeless phải đăng nhập vào ứng dụng Điều kiện kết quả Một gia đình mới được tạo ra với thành viên là
Homeless Kịch bản chính a Hệ thống hiển thị tùy chọn để tạo một gia đình mới. b Homeless chọn tùy chọn để tạo một gia đình mới. c Hệ thống nhắc Homeless cung cấp thông tin cần thiết, chẳng hạn như tên gia đình, địa chỉ và chi tiết liên lạc. d Người vô gia cư nhập các thông tin cần thiết. đ Hệ thống xác nhận thông tin được cung cấp. f Nếu thông tin hợp lệ, hệ thống sẽ tạo một gia đình mới và chỉ định Homeless làm thành viên. g Hệ thống hiển thị thông báo xác nhận cho biết gia đình đã được tạo thành công. h.Use case kết thúc.
Kịch bản thay thế Tại bất kỳ thời điểm nào, nếu hệ thống phát hiện thông tin không hợp lệ hoặc thiếu các trường: i Hệ thống hiển thị thông báo lỗi. ii Người vô gia cư được nhắc sửa thông tin. iii Usecase tiếp tục từ bước c.
Bảng 3.2 Join family UC
Mô tả tóm tắt Người dùng nhập mã code của family để tham gia Người thực hiện Homeless
Sự kiện kích hoạt Nhập mã code và nhấn nút gửi Điều kiện tiên quyết Homeless đã đăng nhập vào hệ thống Điều kiện kết quả Homeless gửi yêu cầu gia nhập gia đình thành công Kịch bản chính a Hệ thống hiển thị tùy chọn tham gia một gia đình. b Người vô gia cư chọn tùy chọn tham gia một gia đình bằng cách nhập mã code c.Hệ thống gửi thông báo yêu cầu đã được gửi thành công. d Hệ thống gửi yêu cầu tham gia đến gia đình để được phê duyệt. e Gia đình nhận yêu cầu và xem xét. f Nếu gia đình chấp nhận yêu cầu, hệ thống thêm người vô gia cư là thành viên của gia đình. g Hệ thống hiển thị thông báo xác nhận cho biết người vô gia cư đã tham gia gia đình thành công. h Kịch bản kết thúc.
Kịch bản thay thế Nếu, tại bất kỳ điểm nào, gia đình từ chối yêu cầu hoặc người vô gia cư hủy yêu cầu: i Hệ thống thông báo cho người vô gia cư biết rằng yêu cầu đã bị từ chối hoặc hủy. ii Kịch bản kết thúc.
Bảng 3.3 Update Info UC
Mô tả tóm tắt Người dùng nhập thông tinh vào form để cập nhật thông tin Người thực hiện Parent, Child
Sự kiện kích hoạt Nhập vào form và click vào nút update Điều kiện tiên quyết Người dùng phải đăng nhập vào hệ thống và tham gia vào gia đình Điều kiện kết quả Thông tin được cập nhật thành công
Kịch bản chính a Hệ thống hiển thị tùy chọn cập nhật thông tin cá nhân. b Người dùng chọn tùy chọn cập nhật thông tin cá nhân. c Hệ thống hiển thị mẫu biểu để cập nhật thông tin cá nhân. d Người dùng cung cấp thông tin cần cập nhật vào mẫu biểu. e Hệ thống kiểm tra tính hợp lệ của thông tin cập nhật. f Nếu thông tin hợp lệ, hệ thống cập nhật thông tin cá nhân người dùng. g Hệ thống hiển thị thông báo xác nhận cho biết thông tin đã được cập nhật thành công. h Kịch bản kết thúc.
Kịch bản thay thế Nếu, tại bất kỳ điểm nào, hệ thống phát hiện thông tin không hợp lệ hoặc thiếu trường: i Hệ thống hiển thị thông báo lỗi. ii Người dùng được yêu cầu sửa thông tin cần cập nhật. iii Kịch bản tiếp tục từ bước c.
Bảng 3.4 Manage task UC
Mô tả tóm tắt Người dùng quản lý công việc của bản thân và gia đình Người thực hiện Parent, Child
Sự kiện kích hoạt Người dùng chọn vào phần Manage task Điều kiện tiên quyết Người dùng phải đăng nhập vào hệ thống và gia nhập vào gia đình Điều kiện kết quả Các công việc được quản lý (cập nhật, thêm, xóa, tìm kiếm) thành công.
Kịch bản chính Hệ thống hiển thị tùy chọn quản lý công việc. b Người dùng chọn tùy chọn quản lý công việc. c Hệ thống hiển thị danh sách công việc hiện có. d Người dùng có thể thực hiện các hành động sau:
- Cập nhật thông tin công việc: Người dùng chọn một công việc từ danh sách và cập nhật thông tin liên quan.
- Thêm công việc mới: Người dùng cung cấp thông tin cần thiết và tạo một công việc mới Mọi người cũng có thể giao việc cho nhau.
- Xóa công việc: Người dùng chọn một công việc từ danh sách và xóa nó.
- Tìm kiếm công việc: Người dùng nhập thông tin tìm kiếm và hệ thống hiển thị kết quả phù hợp. e Hệ thống cập nhật các thay đổi vào danh sách công việc. f Kịch bản kết thúc.
Kịch bản thay thế Nếu, tại bất kỳ điểm nào, hệ thống gặp lỗi hoặc không thể thực hiện các hành động yêu cầu: i Hệ thống hiển thị thông báo lỗi. ii Người dùng được yêu cầu thực hiện lại các hành động hoặc thử lại sau. iii Kịch bản kết thúc.
Bảng 3.5 Manage schedule UC
Mô tả tóm tắt Người dùng quản lý lịch trình của gia đình
Người thực hiện Parent, Child
Sự kiện kích hoạt Chọn vào mục manage Schedule Điều kiện tiên quyết Người dùng phải đăng nhập vào hệ thống và phải gia nhập một gia đình Điều kiện kết quả Lịch trình được quản lý (cập nhật, thêm, xóa, tìm kiếm) thành công.
Kịch bản chính a Hệ thống hiển thị tùy chọn quản lý lịch trình. b Người dùng chọn tùy chọn quản lý lịch trình. c Hệ thống hiển thị lịch trình hiện tại của người dùng. d Người dùng có thể thực hiện các hành động sau:
● Cập nhật lịch trình: Người dùng chọn một sự kiện từ lịch trình và cập nhật thông tin liên quan.
● Thêm sự kiện mới: Người dùng cung cấp thông tin cần thiết và tạo một sự kiện mới.
● Xóa sự kiện: Người dùng chọn một sự kiện từ lịch trình và xóa nó.
● Tìm kiếm sự kiện: Người dùng nhập thông tin tìm kiếm và hệ thống hiển thị kết quả phù hợp. e Hệ thống cập nhật các thay đổi vào lịch trình. f Kịch bản kết thúc.
Thiết kế cơ sở dữ liệu 45
Khảo sát hiện trạng
● Ứng dụng quản lý gia đình cho phép người dùng quản lý thông tin về các thành viên trong gia đình và các hoạt động gia đình.
● Mỗi thành viên trong gia đình được đại diện bởi một tài khoản riêng, trong đó bao gồm thông tin cá nhân như hình ảnh, tên, tuổi và thông tin liên hệ.
● Ứng dụng cũng cung cấp chức năng để tạo, sửa đổi và xóa các thành viên gia đình từ hệ thống.
● Mỗi thành viên gia đình có thể được liên kết với các sự kiện, nhiệm vụ hoặc các mục tiêu gia đình cụ thể.
● Các chức năng và quyền hạn trong ứng dụng được phân chia dựa trên vai trò của từng thành viên gia đình, như cha mẹ, con cái, hoặc người quản lý gia đình.
● Ứng dụng cho phép thành viên lên kế hoạch bữa ăn và thực hiện nó Đồng thời cũng các thành viên cũng có thể kế hoạch và các món ăn
● Mỗi thành viên cũng có thể ghi chú hoặc công khai cho thành viên trong gia đình xem nó.
● Ứng dụng cũng cho phép xem các lịch trình dự định của gia đình.
Mô tả tân từ
● Mỗi tài khoản lưu trữ thông tin về thành viên trong gia đình Mỗi thành viên có một ID duy nhất để phân biệt và liên kết với gia đình Bảng này bao gồm các thuộc tính như tên thành viên , ảnh đại diện, ngày sinh, giới tính, mối quan hệ, số điện thoại, email và địa chỉ.
● Mỗi gia đình chứa thông tin về gia đình Mỗi gia đình có một ID duy nhất để phân biệt và chứa các thuộc tính như tên gia đình, ảnh đại diện, số điện thoại, địa chỉ và số thành viên
● Khi người dùng yêu cầu tham gia đình Mỗi yêu cầu có một ID duy nhất để phân biệt và liên kết với người dùng và gia đình Bảng này bao gồm các thuộc tính như nội dung tin nhắn, trạng thái, loại yêu cầu, ngày tạo và ngày cập nhật.
● Mỗi sự kiện có một ID duy nhất để phân biệt và chứa các thuộc tính như tên sự kiện, mô tả, ngày bắt đầu, ngày kết thúc, địa điểm, loại lặp lại, ngày kết thúc lặp lại, thông báo nhắc nhở, ngày tạo và ngày không xác định.
● Mỗi nhiệm vụ có một ID duy nhất để phân biệt và chứa các thuộc tính như tên nhiệm vụ, mô tả, ngày đến hạn, trạng thái, ưu tiên, người tham gia, ngày tạo và ngày cập nhật.
● Mỗi ghi chú có một ID duy nhất để phân biệt và liên kết với thành viên Bảng này bao gồm các thuộc tính như tiêu đề , nội dung, ngày tạo và ngày cập nhật.
● Mỗi danh bạ có một ID duy nhất để phân biệt và liên kết với người dùng Bảng này bao gồm các thuộc tính như tên, địa chỉ, email, ảnh đại diện và mức độ ưu tiên
● Mỗi kế hoạch có một ID duy nhất để phân biệt và chứa các thuộc tính như ID gia đình, tên kế hoạch, ngày bắt đầu, ngày kết thúc và trạng thái.
● phân biệt và chứa các thuộc tính như tên kế hoạch, ngày bắt đầu, ngày kết thúc, trạng thái, ID thành viên và ID công thức nấu ăn.
● Mỗi công thức có một ID duy nhất để phân biệt và chứa các thuộc tính như tên công thức, mô tả, thời gian chuẩn bị, thời gian nấu, số phần, ngày tạo và ngày cập nhật.
● Mỗi nguyên liệu có một ID duy nhất để phân biệt và chứa các thuộc tính như tên nguyên liệu và danh mục.
Sơ đồ cơ sở dữ liệu
Hình 3.2 Sơ đồ cơ sở dữ liệu
Danh sách các thực thể
Bảng 3.12 Danh sách các thực thể
Mô tả chi tiết các thực thể
Kiểu Ràng buộc Ý nghĩa/Ghi chú
1 joinRequestld String Primary ID của yêu cầu tham gia
2 userlD String Foreign ID người dùng gửi yêu cầu
3 familyld String Foreign ID gia đình liên quan đến yêu cầu
4 message string Nội dung tin nhắn yêu cầu
5 status string Trạng thái của yêu cầu (chưa xử lý, đã chấp nhận, đã từ chối, v.v.)
6 type string Loại yêu cầu (tham gia gia đình, rời khỏi gia đình, v.v.)
7 createAt datetime Ngày giờ tạo yêu cầu
8 updateAt datetime Ngày giờ cập nhật yêu cầu
STT Tên thuộc tính Kiểu Ràng buộc Ý nghĩa/Ghi chú
1 member_id string Primary ID của thành viên trong gia đình
2 familyID string Foreign ID của gia đình mà thành viên này thuộc về
3 name string Tên của thành viên
4 avatar image string Đường dẫn đến hình ảnh đại diện của thành viên
5 birthdate date Ngày sinh của thành viên
6 gender string Giới tính của thành viên
7 relationship string Mối quan hệ với chủ gia đình
8 phone string Số điện thoại của thành viên
9 email string Địa chỉ email của thành viên
10 address string Địa chỉ của thành viên
STT Tên thuộc tính Kiểu Ràng buộc Ý nghĩa/Ghi chú
1 familyID string Primary ID của gia đình
2 name string Tên của gia đình
3 avatar image string Đường dẫn đến hình ảnh đại diện của gia đình
4 phone string Số điện thoại của gia đình
5 address string Địa chỉ của gia đình
6 memberCount int Số lượng thành viên trong gia đình
STT Tên thuộc tính Kiểu Ràng buộc Ý nghĩa/Ghi chú
2 family_id string Foreign key ID của gia đình liên quan đến sự kiện
3 user_create_id string Foreign key
ID người tạo sự kiện
4 name string Tên của sự kiện
5 description string Mô tả về sự kiện
6 startDate date Ngày bắt đầu của sự kiện
7 endDate date Ngày kết thúc của sự kiện
0 location string Địa điểm diễn ra sự kiện
0 repeatType string Loại lặp lại của sự kiện (nếu có)
0 repeatUntil date Ngày kết thúc lặp lại của sự kiện
11 reminder string Thông báo nhắc nhở cho sự kiện
0 createdDate datetime Ngày giờ tạo sự kiện
0 updatedDate datetime Ngày giờ cập nhật sự kiện
STT Tên thuộc tính Kiểu Ràng buộc Ý nghĩa/Ghi chú
1 taskID string Primary ID của công việc
2 taskname string Tên của công việc
3 description string Mô tả về công việc
4 dueDate date Ngày hết hạn của công việc
5 status string Trạng thái của công việc (hoàn thành, đang tiến hành, chưa bắt đầu, v.v.)
6 priority string Độ ưu tiên của công việc
7 member_id String Foreign ID của thành viên được giao công việc
8 createdDate datetime Ngày giờ tạo công việc
9 updateDate datetime Ngày giờ cập nhật công việc
STT Tên thuộc tính Kiểu Ràng buộc Ý nghĩa/Ghi chú
1 noteID String Primary ID của ghi chú
2 memberID String Foreign ID của thành viên liên quan đến ghi chú
3 title string Tiêu đề của ghi chú
4 content string Nội dung của ghi chú
5 createdDate date date Ngày tạo ghi chú
6 updatedDate date date Ngày cập nhật ghi chú
STT Tên thuộc tính Kiểu Ràng buộc Ý nghĩa/Ghi chú
1 contactiD string Primary ID của liên hệ
2 userlD string Foreign ID người dùng liên quan đến liên hệ
3 name string Tên của liên hệ
4 address string Địa chỉ của liên hệ
5 email string Địa chỉ email của liên hệ
6 avatar string Đường dẫn đến hình ảnh đại diện của liên hệ
7 piority string Độ ưu tiên của liên hệ
STT Tên thuộc tính Kiểu Ràng buộc Ý nghĩa/Ghi chú
1 mealPlanId string Primary ID của kế hoạch bữa ăn
2 family_id string Foreign ID gia đình liên quan đến kế hoạch
3 planName string Tên của kế hoạch
4 startDate date Ngày bắt đầu kế hoạch
5 endDate date Ngày kết thúc kế hoạch
6 status string Trạng thái của kế hoạch (hoạt động, đã kết thúc, v.v.)
7 mealPlanId Foreign ID của kế hoạch bữa ăn cha (nếu có)
STT Tên thuộc tính Kiểu Ràng buộc Ý nghĩa/Ghi chú
1 foodID string Primary ID của món ăn
0 planName string Tên của kế hoạch
0 startDate date Ngày bắt đầu kế hoạch
0 endDate date Ngày kết thúc kế hoạch
0 status string Trạng thái của kế hoạch (hoạt động, đã kết thúc, v.v.)
0 memberlD string Foreign ID thành viên liên quan đến món ăn
0 recipelD string Foreign ID công thức liên quan đến món ăn
STT Tên thuộc tính Kiểu Ràng buộc Ý nghĩa/Ghi chú
1 recipelD string Primary ID của công thức
0 recipeName string Tên của công thức
0 description string Mô tả công thức
0 preparationTime string Thời gian chuẩn bị công thức (phút)
0 cookTime string Thời gian nấu công thức (phút)
0 servingSize string Số phần dùng cho công thức
0 createdDate date Ngày tạo công thức
0 updatedDate date Ngày cập nhật công thức
STT Tên thuộc tính Kiểu Ràng buộc Ý nghĩa/Ghi chú
1 ingredientiD string Primary ID của nguyên liệu
0 ingredientName string Tên của nguyên liệu
0 categoryName string Tên của danh mục nguyên liệu
STT Tên thuộc tính Kiểu Ràng buộc Ý nghĩa/Ghi chú
1 mealPlanRecipelD string Primary ID của mục kế hoạch bữa ăn và công thức
0 mealPlanID string ID của kế hoạch bữa ăn
0 meallD string ID của công thức
0 mealType string Loại bữa ăn (sáng, trưa, tối, vv.)
0 dayOfWeek string Ngày trong tuần (Thứ 2, Thứ 3, vv.)
STT Tên thuộc tính Kiểu Ràng buộc Ý nghĩa/Ghi chú
1 taskAssignmentID String Primary ID của phân công công việc
0 taskID String ID của công việc
0 memberID String ID của thành viên
0 start time datetime Thời gian bắt đầu thực hiện công việc
STT Tên thuộc tính Kiểu Ràng buộc Ý nghĩa/Ghi chú
1 participateEvenID String Primary ID của sự tham gia sự kiện
0 userID String Foreign ID của người dùng tham gia
0 eventID String Foreign ID của sự kiện được tham gia