1. Trang chủ
  2. » Công Nghệ Thông Tin

Giáo trình Cơ sở dữ liệu nâng cao (Ngành: Hệ thống thông tin) - CĐ Kinh tế Kỹ thuật TP.HCM

77 10 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Giáo trình Cơ Sở Dữ Liệu Nâng Cao
Tác giả Nguyễn Thị Kim Nga
Trường học Trường Cao Đẳng Kinh Tế Kỹ Thuật Thành Phố Hồ Chí Minh
Chuyên ngành Hệ thống thông tin
Thể loại Giáo trình
Năm xuất bản 2020
Thành phố Thành phố Hồ Chí Minh
Định dạng
Số trang 77
Dung lượng 2,27 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Cấu trúc

  • CHƯƠNG 1: MỞ ĐÂU (7)
    • 1.1 Các khái niệm cơ sở (7)
    • 1.2 Phân loại cơ sở dữ liệu (7)
    • 1.3 Mô hình hóa dữ liệu (8)
    • 1.4 Hệ quản trị cơ sở dữ liệu (8)
  • CHƯƠNG 2: TỐI ƯU HÓA TRUY VẤN (12)
    • 2.1 Giới thiệu (12)
    • 2.2 Quá trình thực hiện một câu truy vấn (0)
    • 2.3 Cây đại số quan hệ (13)
    • 2.4 Quá trình tối ưu (0)
    • 2.5 Thuật toán tối ưu (18)
  • CHƯƠNG 3: QUẢN TRỊ NGƯỜI DÙNG (20)
    • 3.1 Giới thiệu (20)
    • 3.2 Tạo tài khoản và người sử dụng (21)
    • 3.3 Tạo nhóm người dùng (25)
    • 3.4 Phân quyền người dùng trên role (26)
    • 3.5 Hủy quyền truy cập user (27)
  • CHƯƠNG 4: HỆ CƠ SỞ DỮ LIỆU PHÂN TÁN (29)
    • 4.1 Dẫn nhập về kiến trúc client/server và giải pháp cho kiến trúc client/server (29)
    • 4.2 Kiến trúc phân tán (31)
    • 4.3 Tổng quan về cơ sở dữ liệu phân tán (31)
    • 4.4 Thiết kế cơ sở dữ liệu phân tán (34)
    • 4.5 Phân mảnh dữ liệu (35)
    • 4.6 Nhân bản dữ liệu (36)
    • 4.7 Cài đặt (37)
  • TÀI LIỆU THAM KHẢO (74)

Nội dung

Giáo trình Cơ sở dữ liệu nâng cao giúp người đọc có thể trình bày được các khái niệm cơ bản về cơ sở dữ liệu. Trình bày được khái niệm quy trình thực hiện tối ưu hóa truy vấn. Trình bày được các khái niệm phân quyền, quản trị người dùng. Trình bày được khái niệm về cơ sở dữ liệu phân tán, hệ cơ sở dữ liệu phân tán. Phân biệt được cơ sở dữ liệu phân tán và cơ sở dữ liệu tập trung. Nhận biết các tính chất và đặc điểm của hệ cơ sở dữ liệu phân tán

MỞ ĐÂU

Các khái niệm cơ sở

Cơ sở dữ liệu là tập hợp có cấu trúc của các dữ liệu tác nghiệp, được lưu trữ và sử dụng bởi các hệ ứng dụng cụ thể.

Ví dụ: ứng dụng quản lý kho hàng, hệ thống đặt chỗ máy bay, quản lý nguồn nhân lực

1.1.2 Hệ cơ sở dữ liệu

Hệ cơ sở dữ liệu (database system) là một hệ thống bao gồm 4 thành phần

- Cơ sở dữ liệu hợp nhất:

Cơ sở dữ liệu của hệ có hai tính chất tối thiểu hóa dư thừa và được chia sẻ

Mọi cá nhân có nhu cầu truy cập vào cơ sở dữ liệu, bao gồm người dùng cuối, lập trình viên ứng dụng và quản trị viên hệ thống, đều cần hiểu rõ vai trò của mình trong việc quản lý và sử dụng thông tin hiệu quả.

- Phần mềm quản trị cơ sở dữ liệu

Bao gồm các thiết bị nhớ thứ cấp được sử dụng để lưu trữ cơ sở dữ liệu

Phân loại cơ sở dữ liệu

- Cơ sở dữ liệu hướng đối tượng:

Tích hợp khái niệm đối tượng vào hệ quản trị cơ sở dữ liệu như: lớp, kế thừa…

- Cơ sở dữ liệu suy diễn:

Tăng khả năng suy diễn cho hệ quản trị cơ sở dữ liệu

- Cơ sở dữ liệu multimedia:

Tích hợp vào hệ quản trị cơ sở dữ liệu khả năng quản lý văn bản, ảnh, âm thanh, vidéo…

- Cơ sở dữ liệu phân tán:

Cho phép truy vấn và cập nhật dữ liệu từ các sites phân tán (địa lý)

Mô hình hóa dữ liệu

Khó tích hợp kiểu dữ liệu mới

Mô hình đơn giản: phân cấp của các liên kết chặt có thể bị bẻ gãy

Không phân biệt giữa các khái niệm khác nhau trong khi mô hình hóa: chỉ có khái niệm quan hệ

Không mô hình hóa xử lý thông tin

Hệ quản trị cơ sở dữ liệu

Hệ quản trị cơ sở dữ liệu (DBMS) là phần mềm cho phép tạo lập và quản lý cơ sở dữ liệu, điều khiển mọi truy cập vào dữ liệu DBMS được chia thành bốn loại chính.

- Hệ quản trị cơ sở dữ liệu phân cấp:

Mô hình phân cấp, ra đời vào những năm 1960, tổ chức dữ liệu theo cấu trúc cây Trong mô hình này, các nút (node) đại diện cho tập hợp các thực thể, trong khi các cành thể hiện mối quan hệ cứng nhắc giữa hai nút theo một quy tắc nhất định.

Là mô hình dữ liệu trong đó các bản ghi được sắp xếp theo cấ trúc top-down (tree)

Một con chỉ có một cha , chỉ có một đường truy nhập tới dữ liệu đó trước

Tập dữ liệu được tổ chức theo cấ u trúc của mô hình dữ liệu phân cấp gọi là cơ sở dữ liệu phân cấp

Hình 1.1 Mô hình phân cấp quản lý nhân sự của một công ty

Mô hình mạng, ra đời vào cuối những năm 1960, tổ chức dữ liệu dưới dạng đồ thị có hướng Trong đó, các đỉnh đại diện cho các thực thể và các cung thể hiện mối quan hệ giữa các thực thể, cho phép một kiểu bản ghi liên kết với nhiều kiểu bản ghi khác.

Một cơ sở dữ liệu mạng cho phép một con có thể có nhiều cha và nhiều đường truy nhập, tổ chức dữ liệu theo cấu trúc mô hình mạng.

Hình 1.2 Mô hình mạng quản lý nhân sự của một công ty

- Hệ quản trị cơ sở dữ liệu quan hệ:

Mô hình dữ liệu quan hệ, được E.F Codd giới thiệu vào đầu những năm 1970, dựa trên lý thuyết tập hợp và đại số quan hệ, cung cấp một cách mô tả dữ liệu rõ ràng và linh hoạt Với tính chất chặt chẽ của toán học, mô hình này trở thành tiêu chuẩn phổ biến nhất hiện nay trong tổ chức dữ liệu Hầu hết các hệ quản trị cơ sở dữ liệu đều áp dụng mô hình này, trong đó dữ liệu được sắp xếp dưới dạng bảng và các phép toán thao tác trên dữ liệu dựa trên lý thuyết tập hợp Cấu trúc dữ liệu theo mô hình này được gọi là cơ sở dữ liệu quan hệ.

Hình 1.3 Mô hình quan hệ mô tả dữ liệu bảng

Record (bảng ghi) Field (trường)

Tuple (bộ) Attribute (thuộc tính)

- Hệ quản trị cơ sở dữ liệu nâng cao:

Mô hình dữ liệu này tập trung vào việc đóng gói các thuộc tính dữ liệu và các phương thức thao tác trên chúng trong các cấu trúc được gọi là đối tượng.

Tập dữ liệu được tổ chức theo cấu trúc của mô hình dữ liệu hướng đối tượng gọi là cơ sở dữ liệu hướng đối tượng

Hình 1.4 Mô hình đối tượng quản lý nhân sự của một công ty

Họ tên Phòng ban Ngày vào làm Tính thâm niên

Số giờ LV Tính lương

NV làm theo hợp đồng

Lượng lắm cổ phần Tính lương

Chương 1: Mở đầu CÂU HỎI LÝ THUYẾT

Câu hỏi 1: Cơ sở dữ liệu là gì? Một hệ cơ sở dữ liệu gồm những thành phần gì?

Câu hỏi 2: Mô hình hóa dữ liệu là gì? Cho ví dụ một mô hình của cơ sở dữ liệu?

Câu hỏi 3: Trình bày tiêu chuẩn hóa hệ quản trị cơ sở dữ liệu bằng tiếp cận dựa vào các thành phần

TỐI ƯU HÓA TRUY VẤN

Giới thiệu

Truy vấn là một biểu thức được diễn đạt bằng ngôn ngữ phù hợp, nhằm xác định một phần dữ liệu trong cơ sở dữ liệu.

Một truy vấn có thể xác định ngữ nghĩa của một ứng dụng hoặc công việc mà ứng dụng thực hiện để truy xuất dữ liệu từ cơ sở dữ liệu.

2.1.2 Tối ưu hóa truy vấn

Tối ưu hóa truy vấn, hay còn gọi là tối ưu hóa vấn tin, là quá trình lựa chọn kế hoạch thực thi câu truy vấn một cách hiệu quả nhất.

Tối ưu hóa truy vấn giúp tốn ít tài nguyên nhất và hồi đáp nhanh nhất

2.2 Quá trình thực hiện một câu truy vấn

Quá trình thực hiện một câu truy vấn/ vấn tin gồm 5 bước:

- Bước 1: Kiểm tra ngữ pháp (syntax checking)

Trong bước này, hệ quản trị cơ sở dữ liệu (DBMS) sẽ kiểm tra ngữ pháp của truy vấn SQL Nếu truy vấn sai ngữ pháp, DBMS sẽ thông báo lỗi và không thực hiện truy vấn Ngược lại, nếu truy vấn đúng ngữ pháp, DBMS sẽ tiến hành bước tiếp theo.

- Bước 2: Kiểm tra sự hợp lệ (validation)

Trong bước này, DBMS sẽ thực hiện các công việc:

+ Kiểm tra sự tồn tại của các đối tượng dữ liệu (các cột, các biến, các bảng, …) của truy vấn trong cơ sở dữ liệu

Chương 2: Tối ưu hóa truy vấn

- Bước 3: Đưa về dạng biểu diễn trong đại số quan hệ

Truy vấn ban đầu được biến đổi thành một biểu thức đại số quan hệ hay còn gọi là truy vấn đại số quan hệ (relational algebra query)

- Bước 4: Tối ưu hóa biểu thức đại số quan hệ (relational algebra optimization)

Trong bước này, hệ quản trị cơ sở dữ liệu (DBMS) sử dụng các phép biến đổi tương đương của đại số quan hệ để chuyển đổi biểu thức đại số có được từ bước 3 thành một biểu thức tương đương nhưng hiệu quả hơn Quá trình này giúp loại bỏ các phép toán không cần thiết và giảm thiểu vùng nhớ trung gian Cuối cùng, DBMS tạo ra một truy vấn đại số quan hệ đã được tối ưu hoá.

- Bước 5: Sinh mã (code genesite)

Viết ra ngôn ngữ chủ của hệ quản trị cơ sở dữ liệu

Ví dụ: Thuật toán cài đặt 3 hàm gồm:

Hàm Projection (x, q, r) -> trả phép chiếu

Hàm Selection (e, q, k) -> trả phép chọn

Hàm Join (s, r, t) -> trả phép nối

2.3 Cây đại số quan hệ

2.3.1 Đại số quan hệ là gì? Đại số quan hệ (relational algebra) là một bộ các toán tử và quy tắc được sử dụng để thao tác trên các quan hệ và kết quả trả về là một quan hệ mới Sau khi Edgar

F Codd đưa ra mô hình dữ liệu quan hệ vào năm 1970, đại số quan hệ được xem là nền tảng cho các ngôn ngữ truy vấn dữ liệu nói chung và SQL nói riêng SQL cung cấp cú pháp đơn giản nhưng mạnh mẽ, giúp người dùng có được các kết quả mong muốn mà không cần nêu rõ cách thức để đạt được điều đó như thế nào Tuy nhiên, với những vấn đề và yêu cầu mang tính phức tạp, việc viết một câu truy vấn chính xác và hiệu quả đòi hỏi phải có hiểu biết về cấu trúc dữ liệu và cách thức hoạt động của ngôn ngữ truy vấn Vì vậy nắm vững các kiến thức về đại số quan hệ sẽ là nền tảng để việc tìm hiểu về SQL trở nên dễ dàng hơn

Các phép toán trong đại số quan hệ có thể được chia thành ba loại: Phép toán tập hợp, phép chọn và các phép toán mở rộng

Bao gồm: Phép hội (set union), phép giao (set intersection), phép hiệu (set defference) và phép tích (castesian product)

Các bộ trùng nhau sẽ bị loại đi

Phép hội được biểu diễn qua biểu thức sau:

R ∪ S = { t │t € R ∨ t € S } Với R và S là 2 quan hệ khả hợp

Một quan hệ mới chỉ bao gồm các bộ đồng thời thuộc hai qua hệ ban đầu Phép giao được biểu diễn qua biểu thức sau:

R ∩ S = { t │t € R ∧ t € S } Với R và S là 2 quan hệ khả giao

Phép hiệu trong đại số quan hệ có nét tương đồng với phép hiệu đại số thông thường

Phép hiệu của R và S tạo ra một quan hệ mới, bao gồm các phần tử thuộc R nhưng không thuộc S, dẫn đến kết quả chỉ có một bộ duy nhất.

R - S = { t │t € R ∧ t ∉ S } Với R và S là 2 quan hệ khả hiệu

Một quan hệ mới có số bộ bằng tích số giữa số bộ, điều này tạo nên sự khác biệt giữa phép tích và các phép hội, giao, cũng như hiệu.

Phép tích tạo ra tổ hợp theo "hai chiều", dẫn đến việc xuất hiện những bộ trong quan hệ kết quả có thể không mang nhiều ý nghĩa Vì vậy, phép tích thường đi kèm với các điều kiện nhằm loại trừ những kết quả không mong muốn.

2.3.1.2 Phép chọn/cắt ngang (select)

Phép chọn là công cụ dùng để lọc ra một tập hợp các bộ thỏa mãn điều kiện từ một quan hệ Nó hoạt động như một bộ lọc, chỉ giữ lại những bộ phù hợp với các tiêu chí đã được xác định.

Phép chọn được ký hiệu là: σ< điều kiện chọn>( R) Trong đó:

+ σ: là ký hiêu phép chọn

Điều kiện chọn là một biểu thức lôgic dựa trên các thuộc tính của R, có dạng: .

Chương 2: Tối ưu hóa truy vấn

 : là một trong các phép toán so sánh { 3000>( NHÂNVIÊN).

Phép chọn là một phép toán một ngôi, áp dụng cho một quan hệ cụ thể Nó được thực hiện độc lập cho từng bộ, do đó, các điều kiện chọn không thể liên quan đến nhiều bộ khác nhau Quan hệ kết quả từ phép chọn có cấp tương tự như cấp của R, và số lượng bộ trong quan hệ kết quả luôn nhỏ hơn hoặc bằng số lượng bộ trong R.

Phép chọn là một phép toán có tính chất giao hoán, nghĩa là: σ < Điều kiện 1> (σ< Điều kiện 2>( R)) = σ< Điều kiện 2> (σ< Điều kiện 1>( R))

Hơn nữa ta có thể kết hợp một loạt các phép chọn thành một phép chọn đơn giản bằng cách sử dụng phép toán AND

Ví dụ: σ< Điều kiện 1> (σ< Điều kiện 2>( R)) = σ< Điều kiện 2>AND< Điều kiện 1>( R) 2.3.1.3 Phép chiếu/cắt dọc (project)

Phép chiếu là phép toán chọn một số cột của bảng Phép chiếu dùng để chiếu lên các thuộc tính đó

Phép chiếu được ký hiệu là: π( R) Trong đó:

+ π: là ký hiệu dùng để biểu diễn phép chiếu

+ : là một danh sách con các thuộc tính của quan hệ R

+ R: là một biểu thức đại số quan hệ

Cây đại số quan hệ

2.3.1 Đại số quan hệ là gì? Đại số quan hệ (relational algebra) là một bộ các toán tử và quy tắc được sử dụng để thao tác trên các quan hệ và kết quả trả về là một quan hệ mới Sau khi Edgar

F Codd đưa ra mô hình dữ liệu quan hệ vào năm 1970, đại số quan hệ được xem là nền tảng cho các ngôn ngữ truy vấn dữ liệu nói chung và SQL nói riêng SQL cung cấp cú pháp đơn giản nhưng mạnh mẽ, giúp người dùng có được các kết quả mong muốn mà không cần nêu rõ cách thức để đạt được điều đó như thế nào Tuy nhiên, với những vấn đề và yêu cầu mang tính phức tạp, việc viết một câu truy vấn chính xác và hiệu quả đòi hỏi phải có hiểu biết về cấu trúc dữ liệu và cách thức hoạt động của ngôn ngữ truy vấn Vì vậy nắm vững các kiến thức về đại số quan hệ sẽ là nền tảng để việc tìm hiểu về SQL trở nên dễ dàng hơn

Các phép toán trong đại số quan hệ có thể được chia thành ba loại: Phép toán tập hợp, phép chọn và các phép toán mở rộng

Bao gồm: Phép hội (set union), phép giao (set intersection), phép hiệu (set defference) và phép tích (castesian product)

Các bộ trùng nhau sẽ bị loại đi

Phép hội được biểu diễn qua biểu thức sau:

R ∪ S = { t │t € R ∨ t € S } Với R và S là 2 quan hệ khả hợp

Một quan hệ mới chỉ bao gồm các bộ đồng thời thuộc hai qua hệ ban đầu Phép giao được biểu diễn qua biểu thức sau:

R ∩ S = { t │t € R ∧ t € S } Với R và S là 2 quan hệ khả giao

Phép hiệu trong đại số quan hệ có nét tương đồng với phép hiệu đại số thông thường

Phép hiệu của R và S tạo ra một quan hệ mới, bao gồm các bộ thuộc R nhưng không thuộc S, dẫn đến việc quan hệ kết quả chỉ chứa một bộ duy nhất.

R - S = { t │t € R ∧ t ∉ S } Với R và S là 2 quan hệ khả hiệu

Một quan hệ mới có số bộ bằng tích số giữa số bộ, điều này tạo ra sự khác biệt rõ rệt giữa phép tích và các phép toán khác như phép hội, phép giao và phép hiệu.

Phép tích tạo ra tổ hợp theo cả hai chiều, dẫn đến việc xuất hiện những bộ kết quả không có ý nghĩa rõ ràng Vì vậy, phép tích thường được áp dụng kèm theo một điều kiện nhằm loại trừ các kết quả không mong muốn.

2.3.1.2 Phép chọn/cắt ngang (select)

Phép chọn là công cụ dùng để lọc ra các bộ thỏa mãn điều kiện từ một quan hệ, hoạt động như một bộ lọc giữ lại những bộ phù hợp với tiêu chí đã đặt ra.

Phép chọn được ký hiệu là: σ< điều kiện chọn>( R) Trong đó:

+ σ: là ký hiêu phép chọn

Điều kiện chọn là một biểu thức lôgic dựa trên các thuộc tính của R, có cấu trúc gồm tên thuộc tính, phép so sánh và giá trị hằng.

Chương 2: Tối ưu hóa truy vấn

 : là một trong các phép toán so sánh { 3000>( NHÂNVIÊN).

Phép chọn là một phép toán một ngôi, áp dụng cho một quan hệ cụ thể Nó được thực hiện độc lập cho từng bộ, do đó, các điều kiện chọn không thể liên quan đến nhiều bộ cùng lúc Quan hệ kết quả của phép chọn giữ cấp tương tự như cấp của R, và số lượng bộ trong quan hệ kết quả luôn nhỏ hơn hoặc bằng số bộ trong R.

Phép chọn là một phép toán có tính chất giao hoán, nghĩa là: σ < Điều kiện 1> (σ< Điều kiện 2>( R)) = σ< Điều kiện 2> (σ< Điều kiện 1>( R))

Hơn nữa ta có thể kết hợp một loạt các phép chọn thành một phép chọn đơn giản bằng cách sử dụng phép toán AND

Ví dụ: σ< Điều kiện 1> (σ< Điều kiện 2>( R)) = σ< Điều kiện 2>AND< Điều kiện 1>( R) 2.3.1.3 Phép chiếu/cắt dọc (project)

Phép chiếu là phép toán chọn một số cột của bảng Phép chiếu dùng để chiếu lên các thuộc tính đó

Phép chiếu được ký hiệu là: π( R) Trong đó:

+ π: là ký hiệu dùng để biểu diễn phép chiếu

+ : là một danh sách con các thuộc tính của quan hệ R

+ R: là một biểu thức đại số quan hệ

Kết quả của phép chiếu là một quan hệ với các thuộc tính nằm trong danh sách và theo thứ tự tương ứng Phép chiếu loại bỏ tất cả các bộ trùng lặp, tạo ra một tập hợp các bộ và đảm bảo tính chính xác của quan hệ.

Phép chiếu không có tính giao hoán, nghĩa là: π< danh sách1>(π< danh sách2> ( R)) = π< danh sách 1> ( R)

Kết quả chiếu từ quan hệ NHÂNVIÊN bao gồm các thuộc tính như MãsốNV, Họđệm, Tên, địa chỉ và Lương, được biểu diễn bằng cú pháp: π < MãsốNV, Họđệm, Tên, địa chỉ, Lương>(NHÂNVIÊN).

Phép nối là một kỹ thuật quan trọng trong cơ sở dữ liệu quan hệ, cho phép kết hợp các bộ dữ liệu có liên hệ từ hai quan hệ khác nhau thành một bộ duy nhất Phép toán này giúp xử lý hiệu quả các mối liên kết giữa các quan hệ, đặc biệt khi làm việc với nhiều bảng dữ liệu Dạng tổng quát của phép nối được áp dụng trên hai quan hệ R (A1, A2,…,An) và S (B1,B2,…, Bm).

Phép nối được ký hiệu là: ⋈ (R)< Điều kiện nối> (S) Trong đó:

Điều kiện nối giữa hai quan hệ R và S được xác định bởi các thuộc tính tương ứng Một điều kiện nối tổng quát có thể được biểu diễn dưới dạng: AND AND … AND .

Điều kiện có dạng Ai θ Bj, trong đó Ai là thuộc tính của R, Bj là thuộc tính của S Hai thuộc tính Ai và Bj có cùng miền, và θ là một trong các phép toán so sánh như {, ≠}.

Thuật toán tối ưu

Từ Select, from, where ban đầu

Xây dựng cây đại số quan hệ đầu tiên

SQL dựa vào từ khóa Select, From, Where

Sao đó đẩy các phép chọn xuống

Sao đó đẩy các phép chiếu xuống đến khi không đẩy được nữa thì được cây này là cây tối ưu

Kết luận: Từ đại số quan hệ viết được cây, từ cây viết lại đại số quan hệ được vì

Chương 2: Tối ưu hóa truy vấn

Câu hỏi 1: Trình bày 5 bước liên tiếp của tầng phân rã vấn tin

Câu hỏi 2: Trình bày các chiến lược tìm kiếm

Bài tập 1: Cho các quan hệ sau:

EMP (ENO, ENAME, TITLE) PROJ (PNO, PNAME, BUDGET) PAY (TITLE, SAL)

ASG (ENO, PNO, DUR, RESP) Xét câu vấn tin như sau:

SELECT ENAME, RESP FROM EMP, ASG, PROJ WHERE EMP.ENO = ASG.ENO AND PNAME = “CAD/CAM”

AND DUR>6 AND TITLE = “PROGRAMMER”

Yêu cầu: Hãy vẽ đồ thị vấn tin và chỉ ra chổ sai của vấn tin này

Bài tập 2: Cho các quan hệ sau:

EMP (ENO, ENAME, TITLE) PROJ (PNO, PNAME, BUDGET) PAY (TITLE, SAL)

ASG (ENO, PNO, DUR, RESP) Giả sử EMP và ASG được phân mảnh thành

EMPH1 = ENO

Ngày đăng: 18/05/2021, 11:54

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm