hiểu về Firebase Realtime Database
Tổng quan về hệ quản trị cơ sở dữ liệu Firebase Realtime
Firebase được thành lập vào tháng 9 năm 2011 bởi James Tamplin và Andrew Lee, xuất phát từ Envolve, một công ty khởi nghiệp chuyên cung cấp API cho tính năng chat trên web Envolve không chỉ hỗ trợ nhắn tin trực tuyến mà còn cho phép truyền và đồng bộ hóa dữ liệu cho các ứng dụng khác, dẫn đến việc tách biệt hệ thống nhắn tin và đồng bộ dữ liệu Firebase Realtime Database, một trong hai sản phẩm đầu tiên của Firebase, ra mắt công chúng vào tháng 4 năm 2012, cung cấp API đồng bộ hóa dữ liệu cho các thiết bị iOS, Android và Web, hỗ trợ các nhà phát triển xây dựng ứng dụng cộng tác theo thời gian thực Bản beta của Firebase Realtime Database đã được công bố và tiếp tục phát triển qua nhiều phiên bản sau đó.
Vào tháng 10 năm 2014, Firebase đã được Google mua lại Từ đó Firebase cũng như Firebase Realtime Databsse thuộc sở hữu của Google và được hoàn thiện và phát triển
Firebase is a powerful platform for developing mobile and web applications, offering simple APIs without the need for backend or server management As a leading Backend as a Service (BaaS), Firebase allows developers to focus on application development while ensuring seamless backend operations This results in the creation of high-quality web and mobile applications Key features of Firebase include Firebase Analytics, Firebase Hosting, Firebase Cloud Messaging, Firebase Authentication, Firebase Cloud Storage, Firebase Remote Config, Firebase Test Lab, Firebase Crashlytics, Firebase App Indexing, Firebase Dynamic Links, and the Firebase Console.
3 Giới thiệu Firebase Realtime Database
Firebase Realtime Database (FRD) là một trong những tính năng chính của Firebase, hoạt động như một hệ quản trị cơ sở dữ liệu phi quan hệ (NoSQL) với cơ chế lưu trữ dữ liệu dạng Key-Value trên Cloud Dữ liệu được lưu trữ dưới dạng JSON và đồng bộ hóa trong thời gian thực cho tất cả các máy khách kết nối Khái niệm "Realtime" trong FRD thể hiện sự cập nhật liên tục và ngay lập tức dựa trên các tương tác giữa thiết bị khách và máy chủ Firebase Khi một thiết bị gửi thông tin về sự thay đổi, bao gồm vị trí (key) và nội dung (value), Firebase Realtime Database nhanh chóng phân tích và áp dụng các thay đổi, đồng thời gửi cập nhật ngay lập tức đến các thiết bị khác đang lắng nghe cơ sở dữ liệu đó.
Đồng bộ dữ liệu thời gian thực với Firebase Realtime Database cho phép các ứng dụng đa nền tảng sử dụng chung một cơ sở dữ liệu, tự động cập nhật dữ liệu mới nhất khi lập trình viên phát triển ứng dụng Dữ liệu được truyền qua kết nối an toàn SSL với chứng nhận 2048 bit, đảm bảo tính bảo mật Trong trường hợp mất mạng, dữ liệu sẽ được lưu trữ cục bộ và tự động cập nhật lên Server của Firebase khi có kết nối Đồng thời, các dữ liệu cũ hơn ở local cũng sẽ được tự động cập nhật để đảm bảo luôn có dữ liệu mới nhất.
FRD hiện được cung cấp miễn phí qua gói định giá Spark trên [Firebase](https://firebase.google.com/), nhưng sẽ bị giới hạn tài nguyên Nếu vượt quá tài nguyên gói Spark trong một tháng, ứng dụng sẽ bị ngừng hoạt động cho đến cuối tháng Để tiếp tục sử dụng FRD, người dùng cần đăng ký gói Blaze.
Trước tháng 1 năm 2020, gói đăng ký Flame với mức giá 25 USD mỗi tháng đã từng có sẵn, nhưng hiện nay gói này không còn khả dụng cho các đăng ký mới cũng như các đăng ký cũ.
Theo thống kê từ https://db-engines.com/, FRD đã có sự phát triển đáng kể, xếp hạng 80 trong số các DBMS phổ biến nhất vào năm 2016, tăng lên vị trí 40 vào năm 2019 và hiện nay đứng ở vị trí 37 Sự gia tăng này cho thấy FRD đang trở nên phổ biến nhanh chóng trong cộng đồng người dùng.
Các đặc trưng cơ bản của Firebase Realtime Database
1 Mô hình phi quan hệ với Key-Value
SQL Database hiện nay đã trở nên quen thuộc với nhiều người, được tổ chức dưới dạng các bảng với hàng và cột Các cột biểu thị thuộc tính của đối tượng, trong khi các hàng đại diện cho từng đối tượng cụ thể Chẳng hạn, trong bảng quản lý sinh viên, các cột bao gồm STT, Họ, Tên, Giới tính, Ngày sinh và Địa chỉ liên hệ, với mỗi hàng tương ứng với một sinh viên Số lượng sinh viên sẽ tương ứng với số hàng trong bảng.
Firebase Realtime Database được tổ chức theo dạng cây (trees), tương tự như cây thư mục trong Windows Explorer Tuy nhiên, mỗi nhánh (branch) chỉ có thể chứa một loại dữ liệu duy nhất, không giống như trong Windows Explorer, nơi một thư mục mẹ có thể chứa nhiều thư mục con và tập tin Trong Firebase, mỗi nhánh hoạt động như một container, chỉ chứa dữ liệu tương ứng với nhánh đó hoặc một tập hợp các nhánh con được tổ chức theo cách tương tự.
Ví dụ về dữ liệu được lưu trữ dưới dạng Key-Value của FRD
Mỗi nhánh trong cấu trúc dữ liệu được đại diện bởi một key và value tương ứng, trong đó các keys luôn ở dạng String Các values có thể là một đối tượng String, một đối tượng Int, hoặc một Object chứa nhiều thông tin, được thể hiện dưới dạng nhánh con Nhánh con này đóng vai trò quan trọng trong việc tổ chức và quản lý dữ liệu.
Dữ liệu được gửi về các thiết bị khách sẽ tự động có định dạng JSON nhờ vào cách tổ chức theo hình thức này, tạo ra 7 giá trị tương ứng với khóa đó.
FRD cho phép dữ liệu lồng nhau tối đa 32 tầng, trong đó các key cùng tầng phải duy nhất, trong khi các key ở các tầng khác có thể trùng lặp Để đảm bảo tính duy nhất của các key cùng tầng, “Ngọn lửa” cung cấp các hàm yêu cầu server Firebase tạo ra các giá trị key ngẫu nhiên, như các key “KI2” trong hình minh họa Các hàm này bao gồm push() trên Android và Web, cùng với childByAutoId() trên iOS.
Thay vì sử dụng các yêu cầu HTTP thông thường, Firebase Realtime Database (FRD) áp dụng đồng bộ hóa dữ liệu, cho phép mọi thiết bị kết nối nhận được cập nhật ngay lập tức khi có thay đổi Điều này mang lại cho người dùng trải nghiệm mượt mà và gần như không có sự gián đoạn.
3 Độ tin cậy và khôi phục dữ liệu
FRD lưu trữ dữ liệu trên cloud với khả năng cập nhật liên tục, đảm bảo tính toàn vẹn và tránh mất mát dữ liệu Gói Blaze của FRD cung cấp tính năng sao lưu tự động dữ liệu và các quy tắc dưới dạng JSON vào một Cloud Storage bucket, cho phép người dùng kiểm soát và khôi phục các bản sao lưu dễ dàng Nhờ đó, FRD giúp người dùng yên tâm hơn về việc bảo vệ dữ liệu sau mỗi lần cập nhật.
4 Khả năng ngoại tuyến Ứng dụng Firebase tự động xử lý các gián đoạn mạng tạm thời Dữ liệu được lưu trữ trong bộ nhớ Cache khả dụng khi ngoại tuyến và Firebase sẽ đồng bộ hóa dữ liệu ngay khi kết nối mạng được khôi phục Theo mặc định thì có 10MB dữ liệu sẽ được lưu trữ vào bộ nhớ đệm Nếu dữ liệu là lớn hơn thì sẽ tự động xóa những dữ liệu được sử dụng ít nhất gần đây
FRD cho phép kích hoạt tính năng duy trì ổ đĩa, giúp ứng dụng ghi dữ liệu cục bộ để duy trì trạng thái ngoại tuyến, ngay cả khi khởi động lại Cách kích hoạt tương tự trên iOS và Android với một câu lệnh đơn giản, ví dụ: FirebaseDatabase.getInstance().setPersistenceEnabled(true); Ứng dụng FRD của Firebase tự động lưu hàng đợi các thao tác ghi khi ngoại tuyến, và hàng đợi này được lưu vào đĩa để đảm bảo mọi ghi đều sẵn có sau khi khởi động lại Khi có kết nối trở lại, tất cả hoạt động sẽ được gửi đến máy chủ FRD của Firebase Đối với truy vấn dữ liệu ngoại tuyến, FRD sử dụng dữ liệu đã tải trước đó và sẽ tải từ bộ nhớ cache cục bộ cho những truy vấn chưa được tải, đảm bảo rằng dữ liệu sẽ được cập nhật khi mạng khả dụng.
FRD hiện chỉ hỗ trợ tính năng ngoại tuyến cho các ứng dụng iOS và Android, trong khi đó, các ứng dụng Web vẫn chưa được hỗ trợ ngoại tuyến.
5 Có thể truy cập từ thiết bị khách
Cơ sở dữ liệu thời gian thực của Firebase cho phép truy cập trực tiếp từ thiết bị di động hoặc trình duyệt web mà không cần máy chủ ứng dụng Bảo mật và xác thực dữ liệu được đảm bảo thông qua các quy tắc bảo mật của Firebase Realtime Database, với các quy tắc dựa trên biểu thức được thực thi khi dữ liệu được đọc hoặc ghi.
6 Quy mô trên nhiều cơ sở dữ liệu
Với gói định giá Blaze của FRD, bạn có thể mở rộng khả năng xử lý dữ liệu ứng dụng trên quy mô lớn bằng cách phân tách dữ liệu qua nhiều phiên bản cơ sở dữ liệu trong cùng một dự án Firebase Hệ thống xác thực người dùng được tối ưu hóa với Firebase Authentication, cho phép bạn xác thực người dùng trên các phiên bản cơ sở dữ liệu khác nhau Đồng thời, bạn có thể kiểm soát quyền truy cập dữ liệu trong từng cơ sở dữ liệu thông qua các quy tắc tùy chỉnh của Firebase Realtime Database.
Cài đặt Firebase Realtime Database và một số thao tác đơn giản
1.Tạo Firebase Project và Realtime Database
Truy cập vào trang web https://console.firebase.google.com/ Màn hình sẽ hiện ra như sau:
Điền tên dự án vào ô "Project name" và chọn "Continue" để tiến đến bước tiếp theo Tại đây, bạn có thể chọn "Enable Google Analytics for this project" Mặc dù bạn có thể từ chối, nhưng khuyến cáo là nên đồng ý để tận dụng các tính năng phân tích Nếu đồng ý, hãy nhấn "Continue" để tiếp tục; nếu không, dự án Firebase sẽ được tạo theo cách thông thường ở bước cuối cùng.
At this stage, you will either select an existing Google Analytics account or create a new one, with the latter being a straightforward process Once you have made your selection, click on "Create Project" to establish your Firebase Project Next, navigate to the "Build" section and choose "Realtime Database" to create your Firebase Realtime Database (FRD).
To create a database, click on "Create Database" which will open the "Set up database" window At this stage, you can select the location for your Realtime Database, choosing either the default option of the United States or customizing it to another location After making your selection, click "Next" to proceed.
In this step, we customize the security rules for Firebase Realtime Database (FRD) by choosing between "Start in locked mode" and "Start in test mode." For ease of database operations, we temporarily select "Start in test mode." After clicking Enable, your Firebase Realtime Database is initialized The FRD interface consists of four windows: Data, Rules, Backups, and Usage The Data window displays the database content as Key-Value pairs, while the Rules window outlines the usage rules for FRD The Backups window shows automatic backups (available only with the Blaze plan), and the Usage window provides insights into FRD usage, including connection counts, data volume, download size, and the percentage of data processing real-time queries.
2 Tạo ứng dụng trên Firebase
Trên Firebase, bạn có thể thêm các ứng dụng cho iOS, Android, Web hoặc Unity Bài viết này sẽ tập trung vào việc hướng dẫn thêm ứng dụng web, trong khi các ứng dụng khác cũng được thực hiện theo cách tương tự.
Trong phần Project Overview, chúng ta click vào ô web như hình sau:
Một cửa sổ mới hiện ra
Chúng ta đặt tên App và click vào Register app để đến bước tiếp theo là Add Firebase SDK
Chúng ta có hai phương pháp để sử dụng: "sử dụng npm" hoặc "sử dụng thẻ " Bạn có thể sao chép phần trong ô để sử dụng sau Sau đó, hãy nhấp vào "Continue to console" để hoàn tất quá trình.
15 thông tin của Web app trên sẽ được cập nhật ở phần Project Setting
Integrating Firebase Realtime Database into your app project is essential for managing data effectively At this stage, it's advisable to implement an Authenticator for data protection; however, since our focus is solely on the Firebase Realtime Database, we will temporarily set aside the Authenticator To bypass the need for an Authenticator, we can update the Database Rules via the Firebase Console accordingly.
1 Đối với Android Để thông báo cho Gradle compile thêm bộ thư viện Realtime Database, bạn chỉ việc thêm dòng sau vào tập tin build.gradle:app :
Ta tiếp tục khai báo các instance như bên dưới Các event sẽ được handle bởi DatabaseReference myRef
Path là đường dẫn đến khu vực bạn muốn thao tác trong FRD, với vị trí mặc định là “brilliant-fire-3159” như hình minh họa.
Nếu bạn muốn truy cập vào “users” ngay dưới “” thì bạn chỉ việc gán cho path là
“users” mà thôi, nghĩa là:
Nếu bạn muốn truy cập trực tiếp vào “b797bdd4-a193…”, bạn chỉ cần thao tác từ đó trở vào bên trong Để thực hiện điều này, hãy gán giá trị cho biến path như sau:
Tốt nhất là bạn nên sử dụng hàm child(String child), và chúng tôi sẽ trình bày hàm này trong các bài viết tiếp theo Dưới đây là một ví dụ minh họa.
Sau khi đã xác định địa chỉ mong muốn, bạn có thể sử dụng hàm setValue để gán giá trị tương ứng với key đó Ví dụ, nếu bạn muốn gán giá trị là một chuỗi "This is my value", bạn chỉ cần thực hiện theo cách sau.
If you want to create an object with a random key to wrap your object (fieldName, text) using the push() function, you can do so as follows: For ValueEventListener, you should also assign the listener to myRef specifically.
Trước tiên chúng ta sử dụng CocoaPods để thêm các thư viện Firebase vào Xcode project của mình :
Tiếp tục, ta tạo các instances như sau:
Mặc định, FRD sẽ đưa bạn đến vị trí gốc là “brilliant-fire-3159” như hình minh họa Để truy cập vào bên trong, bạn cần sử dụng hàm child().
Nếu bạn muốn truy cập vào “users” ngay dưới “brilliant-fire-3159” thì bạn chỉ việc gán ref như bên dưới:
Nếu bạn muốn truy cập trực tiếp vào “b797bdd4-a193…”, bạn có thể sử dụng hàm referenceWithPath(path) cho ref, bên cạnh hàm child().
Sau khi đã chỉ định địa chỉ mong muốn, bạn có thể sử dụng setValue để gán giá trị cho key tương ứng Ví dụ, nếu bạn muốn gán giá trị là một chuỗi “This is my value”, bạn thực hiện như sau:
19 Để quan sát sự thay đổi của value, ta cũng sẽ thao tác với biến ref Cụ thể là như bên dưới:
Phiên bản nâng cấp của Firebase Realtime Database
Trên nền tảng realtime của FRD, Firebase đã phát triển và đưa ra bản nâng cấp của FRD là Cloud Firestore
Cloud Firestore, giống như FRD, lưu trữ dữ liệu người dùng trên nền tảng đám mây theo dạng noSQL, cho phép đồng bộ dữ liệu tới tất cả các máy khách kết nối theo thời gian thực và vẫn khả dụng khi ứng dụng ngoại tuyến Tuy nhiên, Cloud Firestore có nhiều cải tiến so với FRD.
Cả Cloud Firestore và FRD đều là cơ sở dữ liệu NoSQL, nhưng Cloud Firestore lưu trữ dữ liệu dưới dạng các document tương tự như cây JSON, giúp tổ chức dữ liệu dễ dàng hơn trên quy mô lớn Điều này cũng đồng nghĩa với việc Cloud Firestore yêu cầu ít chuẩn hóa và làm phẳng dữ liệu hơn so với FRD, nơi dữ liệu được lưu dưới dạng một cây JSON lớn.
Trong Cloud Firestore, các tài liệu có khả năng mã hóa cả các tập hợp con và các đối tượng lồng nhau, ví dụ như trường "phone" Những tài liệu này có thể chứa các trường nguyên thủy như chuỗi (chẳng hạn như "name" và "email") hoặc các đối tượng phức tạp như danh sách.
Cloud Firestore không chỉ hỗ trợ ngoại tuyến cho ứng dụng iOS và Android như FRD, mà còn cung cấp khả năng ngoại tuyến cho các ứng dụng web, giúp nâng cao trải nghiệm người dùng và đảm bảo tính linh hoạt trong việc truy cập dữ liệu.
Khả năng truy vấn của Realtime Database và Cloud Firestore có sự khác biệt rõ rệt Realtime Database chỉ hỗ trợ sắp xếp hoặc lọc trong một truy vấn duy nhất, trong khi Cloud Firestore cho phép sử dụng đồng thời cả hai chức năng này trên một thuộc tính Điều này giúp Cloud Firestore thực hiện các truy vấn chỉ mục kết hợp hiệu quả hơn, với hiệu suất truy vấn tỷ lệ thuận với kích thước của tập kết quả.
Realitime Database có khả năng mở rộng tốt hơn với khoảng 200.000 kết nối đồng thời và 1.000 lần ghi mỗi giây trong một cơ sở dữ liệu duy nhất Trong khi đó, Cloud Firestore hỗ trợ lên đến 1 triệu kết nối đồng thời và 10.000 lần ghi mỗi giây.
Khả năng bảo mật của Realtime Database dựa trên quy tắc xác thực thông thường, trong khi Cloud Firestore cung cấp một giải pháp bảo mật đơn giản nhưng mạnh mẽ hơn, giúp ứng dụng di động hoạt động an toàn và hiệu quả.
26 động và web sử dụng Quy tắc bảo mật của Cloud Firestore trong khi máy chủ sử dụng Quản lý nhận dạng và truy cập (IAM)
While Cloud Firestore offers several advantages over Firebase Realtime Database, it does have some drawbacks, notably a higher latency compared to FRD.
500 miligiây Và đặc biệt là tính phí của Cloud Firestore cao hơn khá nhiều so với FRD
V Ưu điểm và khuyết điểm của Firebase Realtime Database.So sánh với các hệ quản trị khác
1.Ưu điểm và khuyết điểm của Firebase Realtime Database
-Dữ liệu cập nhật trong thời gian thực
-Tính linh hoạt cao đối với dữ liệu
-Tính bảo toàn và bảo mật cao đối với dữ liệu
-Dữ liệu lưu trên Cloud, tiết kiệm bộ nhớ máy tính
-Không cho phép truy vấn bộ lọc và sắp xếp cùng nhau trên một thuộc tính
-Thiếu sự liên hệ tương đối giữa các đối tượng
2.So sánh Firebase Realtime Database với các hệ quản trị khác
+Đều là NoSQL Document Database
+Đều không có khóa ngoại
Cơ sở dữ liệu được lưu trữ trên đám mây, cho phép các ứng dụng khách iOS, Android và Web chia sẻ một phiên bản duy nhất Hệ thống này cung cấp dữ liệu thời gian thực và tự động cập nhật với thông tin mới nhất.
Là một cơ sở dữ liệu giao dịch,
RavenDB được thiết kế để giữ thông tin chính, cấu trúc ít Tính linh hoạt của nó cho phép mở rộng quy mô một cách liền mạch,
Một trong những cơ sở dữ liệu dịch vụ đám mây được quản lý hoàn toàn và có thể triển khai trên hạ tầng tự quản lý phổ biến nhất hiện nay.
MarkLogic là cơ sở dữ liệu
Enterprise NoQuery duy nhất, mang tất cả các tính năng bạn cần vào một hệ thống thống nhất: một trung tâm tài liệu,
27 trong khi ACID của nó đảm bảo rằng trạng thái hiện tại của dữ liệu là chính xác
Cấu trúc co giãn được thiết kế để tối ưu hóa việc tìm kiếm thông tin, hỗ trợ nhận biết cấu trúc và phân cụm dữ liệu Hệ thống này đảm bảo giao dịch an toàn và bảo mật, tích hợp máy chủ cơ sở dữ liệu với một bộ dịch vụ ứng dụng toàn diện, phục vụ nhu cầu của các nhà phát triển.
Giấy phép Thương mại Mã nguồn mở Mã nguồn mở Phiên bản miễn phí bị giới hạn Xếp hạng
API và các phương thức truy cập khác
API JavaScript của Android, iOS, API
Giao thức độc quyền sử dụng JSON
Java API Node.js Client API ODBC Optic API RESTful HTTP API SPARQL WebDAV XDBC XQuery XSLTthông tin
Các ngôn ngữ lập trình được hỗ trợ
JavaScript (Node.js), Python, Ruby
Actionscript, C, C#, C++, Clojure, ColdFusion, D, Dart, Delphi, Erlang, Go, Groovy, Haskell, Java, JavaScript, Lisp, Lua, MatLab, Perl, PHP, PowerShell, Prolog, Python, R, Ruby, Rust, Scala, Smalltalk, Swift
Java JavaScript (Node.js) Perl PHP Python Ruby
Hệ điều hành máy chủ
OS X Windows Lưu trữ dữ liệu trên
Có Không Lưu trữ dữ liệu đa đám mấy với MongoDB Atlas
Không Ngôn ngữ truy vấn giống SQL (RQL)
Truy vấn SQL chỉ đọc thông qua Trình kết nối MongoDB cho BI
FRD lưu trữ dữ liệu trên cloud và tự động cập nhật khi có thay đổi, đảm bảo tính toàn vẹn và ngăn ngừa mất mát dữ liệu.
RavenDB là một ACID và cơ sở dữ liệu giao dịch đầy đủ, bảo đảm toàn vẹn cho dữ liệu
Tuân thủ quy tắc ACID trong MongoDB đảm bảo rằng mọi tài liệu được cập nhật đều được cách ly hoàn toàn, giúp ngăn chặn các lỗi có thể xảy ra Nhờ đó, khách hàng luôn nhận được chế độ xem tài liệu nhất quán, ngay cả khi có sự cố xảy ra.
Tất cả dữ liệu trong FRD được truyền qua kết nối an toàn SSL với chứng nhận 2048 bit, đảm bảo bảo mật và xác thực Bảo mật dữ liệu được quản lý thông qua các quy tắc bảo mật của Firebase Realtime Database, nơi các quy tắc dựa trên biểu thức được thực thi khi dữ liệu được đọc hoặc ghi.
RavenDB hỗ trợ mã hóa toàn bộ dữ liệu trong bộ nhớ bằng thuật toán ChaCha20 với độ bảo mật 256-bit, đảm bảo an toàn cho thông tin lưu trữ.
RavenDB sẽ chỉ giữ dữ liệu chưa được mã hóa trong bộ nhớ cho các giao dịch đang hoạt động, sau đó nó sẽ bị xóa ngay lập tức
MongoDB cung cấp các tính năng khác nhau, chẳng hạn như xác thực, kiểm soát truy cập, mã hóa, để bảo mật việc triển khai MongoDB của người dùng
Kiểm soát và kiểm tra phiên bản Đối với gói Blaze, FRD hỗ trợ sao lưu tự động dữ liệu và các rules ở dạng JSON vào một Cloud
Từ đó các bạn có thể kiểm soát hoặc khôi phục các bản sao lưu
Phân tích thiết kế Website bán sách
Mô tả tổng quan hệ thống
Trong bối cảnh toàn cầu hóa và nhu cầu trao đổi hàng hóa ngày càng tăng, việc sử dụng Internet và các hình thức kinh doanh trực tuyến trở nên phổ biến hơn bao giờ hết Nhiều cửa hàng sách đã chuyển sang hình thức bán hàng online, giúp khách hàng dễ dàng tìm kiếm thông tin mà không tốn nhiều thời gian và chi phí Website của chúng tôi được phát triển với mục tiêu mang đến cho khách hàng trải nghiệm đặt mua sách trực tuyến nhanh chóng, tiện lợi và tiết kiệm.
Sơ đồ chức năng chính :
Công nghệ dự kiến sử dụng
-Front-end: HTML, CSS, JS
Các chức năng dự kiến
1 Chức năng của người dùng
-Tìm kiếm và xem thông tin các loại sách theo tên, thể loại, tác giả
-Thêm sách vào giỏ hàng và mua hàng
-Thêm bình luận vào sản phẩm
2 Chức năng của quản trị viên
-Quản lý tài khoản khách hàng
-Quản lý thông tin sản phẩm
-Quản lý các đơn hàng.
Thiết kế CSDL
2.Mô tả các bảng dữ liệu
Thuộc tính Kiểu Diễn giải
MAKH Char(10) Mã khách hàng
TENKH Char(30) Tên khách hàng
SDT Char(10) Số điện thoại khách hàng
DIACHI Varchar(50) Địa chỉ khách hàng
EMAIL Char(30) Email khách hàng
Thuộc tính Kiểu Diễn giải
TENTACGIA Char(30) Tên tác giả
TENNXB Varchar(30) Tên nhà xuất bản
TTSACH Varchar(200) Miêu tả về sách
Thuộc tính Kiểu Diễn giải
MALOAI Char(10) Mã loại sách
TENLOAI Varchar(30) Tên loại sách
Thuộc tính Kiểu Diễn giải
MATT Char(10) Mã thanh toán
Mã khách hàng thanh toán được lưu trữ dưới dạng ký tự 10 (MAKH), trong khi tên khách hàng thanh toán được ghi nhận với độ dài tối đa 30 ký tự (TENKH) Số điện thoại của khách hàng được lưu dưới dạng ký tự 1 (SDT), và địa chỉ giao hàng của khách hàng được ghi lại với chiều dài tối đa 50 ký tự (DIACHI) Cuối cùng, kiểu thanh toán của khách hàng được xác định thông qua trường dữ liệu có độ dài 30 ký tự (KIEUTHANHTOAN).
Thuộc tính Kiểu Diễn giải
MADH Char(10) Mã đơn hàng
MAKH Char(10) Mã khách đặt hàng
TENKH Varchar(30) Tên khách đặt hàng
NGAYDH Char(10) Ngày đặt hàng
MASACH Char(50) Mã sách khách đặt
SOLUONG Int(10) Số lượng sách đặt hàng
TONGGIA Int(10) Tống giá tiền đơn hàng
Thuộc tính Kiểu Diễn giải
MADON Char(10) Mã đơn đặt hàng
SOLUONG Int(10) Số lượng đặt hàng
NGAYDAT Char(10) Ngày đặt hàng
Thuộc tính Kiểu Diễn giải
MANXB Char(10) Mã nhà xuất bản
TENNXB Char(10) Tên nhà xuất bản
DIACHI Varchar(30) Địa chỉ nhà nhà xuất bản SDT Char(10) Số điện thoại liên lạc EMAIL Char(50) Địa chỉ mail nhà cung cấp
Thuộc tính Kiểu Diễn giải
MANHANXET Char(10) Mã nhận xét
MAKH Char(10) Mã khách hàng nhận xét TENKH Varchar(30) Tên khách hàng nhận xét NOIDUNG Varchar(300) Nôi dung nhận xét
NGAYNX Char(10) Ngày giởi nhận xét
Thuộc tính Kiểu Diễn giải
MANV Char(10) Mã quản trị viên
TENNV Varchar(30) Tên quản trị viên
Thuộc tính Kiểu Diễn giải
MADOITRA Char(10) Mã đơn hàng bị đổi trả
NOIDUNGDOITRA Varchar(200) Nội dung khách hàng muốn đổi trả
KIEUDOITRA Varchar(50) Cách khách hàng đổi trả
3.Mô tả các ràng buộc dữ liệu
[1] KHACHHANG( MAKH, TENKH, SDT, DIACHI, EMAIL )
[2] DONHANG( MADH, MAKH, NGAYDH, TINHTRANG, MASACH,
[3] SACH( MASACH, TENSACH, THELOAI, TENTACGIA, THELOAI,
[4] THANHTOAN( MATT, MAKH, SDT, DIACHI, KIEUTHANHTOAN, MADH )
[5] NHANXET( MANX, MAKH, NGAYNHANXET, NOIDUNG, MASACH)
[7] NHAXUATBAN( MANXB, TENNXB, DIACHI, SDT, EMAL)
[8] DONDATHANG( MADON, SOLUONG, NGAYDAT, MASACH, MANV,
[10] TRAHANG( MADOITRA, NOIDUNGDOITRA, KIEUDOITRA,MAKH, MANV)
Mô tả các Module chính
Sơ đồ mô tả module đăng nhập Định dạng dữ liệu vào:
Nếu dữ liệu rỗng thì thông báo cho người dùng biết
Ngược lại, lưu thông tin vào các biến $username, $password Định dạng dữ liệu ra: So sánh $username, $password với dữ liệu lưu trong database
Nếu kết quả của truy vấn không bằng 0, người dùng sẽ được phép đăng nhập, sau đó hệ thống sẽ chuyển hướng đến trang chủ và tạo phiên làm việc phù hợp với vai trò của họ.
Ngược lại, thông báo tài khoản hoặc mật khẩu người dùng nhập vào không đúng
Module tìm kiếm sách sử dụng từ khóa mà người dùng nhập vào để thực hiện tìm kiếm Dữ liệu đầu vào là từ khóa, trong khi dữ liệu đầu ra là kết quả tìm kiếm từ khóa đó trong các trường như TENSACH, TENTACGIA và THELOAI.
Nếu kết quả câu truy vấn trả về thành công thì hiển thị danh sách các sách tìm được
Ngược lại, thông báo không có kết quả phù hợp
3 Sơ đồ module thêm sách vào giỏ hàng Định dạng dữ liệu vào: là id của đơn hàng cần mua Định dạng dữ liểu ra: Thêm đơn hàng vào Database
Nếu kết quả câu truy vấn trả về thành công thì thông báo “Mua hàng thành công!” cho người dùng
40 Định dạng dữ liệu vào: là id của sách cần thêm vào giỏ hàng Định dạng dữ liểu ra: Thêm sách vào giỏ hàng và thêm vào Database
Nếu kết quả câu truy vấn trả về thành công thì thông báo “Thêm vào giỏ hàng thành công!” cho người dùng
Ngược lại, thông báo “Thêm vào giỏ hàng thất thất bại!”
4 Sơ đồ module mua hàng
Sơ đồ module mua hàng Định dạng dữ liệu vào: là id của đơn hàng cần mua Định dạng dữ liểu ra: Thêm đơn hàng vào Database
Nếu kết quả câu truy vấn trả về thành công thì thông báo “Mua hàng thành công!” cho người dùng
Ngược lại, thông báo “Mua hàng thất thất bại!”
5 Module thêm sách vào cơ sở dữ liệu
Sơ đồ module thêm sách vào cửa hàng Định dạng dữ liệu vào: là file sách mới Định dạng dữ liểu ra: Thêm sách mới vào database
Nếu kết quả câu truy vấn trả về thành công thì thông báo “Thêm mới thành công!” cho người dùng
Ngược lại, thông báo “Thêm mới thất bại!”