1. Trang chủ
  2. » Luận Văn - Báo Cáo

BÁO CÁO ĐỀ TÀI MÔN CƠ SỞ DỮ LIỆU_THI TRẮC NGHIỆM

50 284 2

Đ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

Định dạng
Số trang 50
Dung lượng 1,52 MB

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

Nội dung

Báo cáo đề tài môn Cơ sở dữ liệu: Quản lý hệ thống thi trắc nghiệm trên giấy. Đề tài làm đơn giản, dễ hiểu nhưng đầy đủ yêu cầu và logic của giảng viên đề ra, đã được chỉnh sửa sao cho hợp lý, đặc biệt có hơn 80 câu hỏi truy vấn bao gồm phép toán đại số của từng câu.

Trang 1

Báo Cáo Đề Tài:

HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG

cơ sở tại TP Hồ Chí Minh Khoa Công Nghệ Thông Tin 2

o0o

Trang 2

MỤC LỤC

1

Mô tả chi tiết bài toán 2

2 Phân tích và xác định các thực thể, thuộc tính và mối liên kết 3

3 Thiết kế

Sơ đồ ERD cho cơ sở dữ liệu thi trắc nghiệm 4

Chuyển đổi ERD sang mô hình dữ liệu quan hệ 5

Bảng cơ sở dữ liệu 6

4.Chuẩn hóa 7

5.Viết SQL tạo CSDL trong SQL SeVer 16

*Lược đồ Diagram cơ sở dữ liệu 19

6.Nhập dữ liệu: (Dùng lệnh INSERT) 20

7.Chạy các Truy vấn: (Dùng lệnh SELECT) 27

8 Báo cáo tổng hợp 48

Trang 3

Mô tả chi tiết bài toán

-Trường thì sẽ có nhiều khoa, mỗi khoa có mã khoa để phân biệt các khoa với nhau và tên khoa

- Mỗi khoa quản lý nhiều lớp, mỗi lớp chỉ thuộc một khoa Mỗi lớp có mã lớp dùng để phân biệt các lớp và tên lớp, năm nhập học Một sinh viên chỉ thuộc 1 lớp Thông tin về sinh viên gồm có mã sinh viên để phân biệt các sinh viên, họ, tên sinh viên, giới tính, địa chỉ

- Thông tin về giảng viên gồm mã giảng viên dùng để phân biệt các giảng viên, họtên giảng viên, giới tính, chuyên môn Một giảng viên chỉ thuộc duy nhất một khoa,

có thể dạy nhiều lớp nhưng chỉ dạy một môn

-Thông tin về môn học gồm mã môn học dùng để phân biệt các môn học, tên môn học, các tiết lý thuyết, các tiết thực hành

- Giảng viên là người chịu trách nhiệm soạn thảo câu hỏi các môn học để đưa vào

bộ đề thi sau đó nộp cho phòng khảo thí Một câu hỏi thi có dạng: chọn 1 trong nhiều lựa chọn

- Thông tin về phòng gồm mã phòng và tên phòng, mã phòng để phân biệt phòng giáo vụ và phòng khảo thí:

+ Phòng giáo vụ sẽ có nhân viên phụ trách tiến hành xếp lịch thi cho lớp: gồm môn học, lần thi và ngày thi

+ Phòng khảo thí sẽ có nhân viên phụ trách nhận bộ đề thi từ giảng viên sau đó

in ra cho sinh viên thi, nếu như sinh viên đã thi rồi thì không cho thi nữa

- Sau khi hết thời gian làm bài, giảng viên canh thi sẽ thu bài lại

Thực thể Thuộc tính Mối liên kết Tập thực thể

1 Sinh Viên - Mã sinh viên

+ Họ tên sinh viên + Giới tính + Địa chỉ

(1,n)(1,n)(n,n)

- Lớp

- Khoa

- Môn

Trang 4

2 Giảng Viên - Mã giảng viên

+ Họ tên giảng viên + Giới tính

+ Chuyên môn

(1,n)(1,n)(n,n)(n,1)

(n,n)(n,1)

- Giảng viên

- Sinh viên

5 Nhân Viên - Mã nhân viên

+ Họ tên nhân viên + Giới tính

(1,n) - Phòng

6 Lịch thi - Mã lịch thi

+ Ngày thi + Lần thi + Thời gian

(n,n)(n,n)

- Lớp

- Môn

7 Bộ đề thi - Mã đề thi

+ Tên bộ đề thi + Số đề thi

(1,1)(1,n)(n,1)

(n,1)(1,n)(n,n)(n,n)(n,n)

(1,1) - Câu hỏi

11 Phòng - Mã phòng

+ Tên phòng

(n,1) - Nhân viên

Trang 5

Thiết kế

Sơ đồ ERD cho cơ sở dữ liệu thi trắc nghiệm

Chuyển đổi ERD sang mô hình dữ liệu quan hệ

*Qui ước:

Primary Key: In đậm, gạch chân

Foreign Key: In nghiên

KHOA (IDKhoa, TenKhoa)

LOP (IDLop, TenLop, IDKhoa, NamNhapHoc)

GIANGVIEN (IDGiangVien, IDKhoa, HoTenGV, GioiTinh, ChuyenMon)

NHANVIEN (IDNhanVien , HoTenNV, GioiTinh)

PHONG (IDPhong, TenPhong)

SINHVIEN (IDSinhVien, IDLop, HoTenSV, GioiTinh, DiaChi)

CAUHOI (IDCauHoi, IDMonHoc,IDKetQua, IDGiangVien, IDBoDeThi,

SoCauHoi, NoiDung)

BODETHI (IDBoDeThi, IDNhanVien, IDGiangVien, TenBoDeThi, SoDeThi)

Trang 6

LICHTHI (IDLichThi, IDMon, IDNhanVien, LanThi, NgayThi, TimeThi)

KETQUA (IDKetQua, DapAn)

MONHOC (IDMonHoc, IDSinhVien, IDGiangVien, TenMonHoc, TietLyThuyet,

IDKhoa

nchar(20)

nvarchar(40)int

IDKhoa

nvarchar(20)

nvarchar(40)nvarchar(30)nchar(3)

DiaChi

IDLop

nchar(20)

nvarchar(40)nvarchar(3)

IDPhong

nchar(20)

nvarchar(40)nchar(3)nchar(20)

Trang 7

IDNhanVien IDGiangVien

nchar(20)

nvarchar(40)int

nchar(20) nvarchar(20)

Primary Key

Not Null

Foreign Key Foreign Key

SoCauHoiNoiDung

IDMon IDKetQua IDGiangVien IDBoDeThi

nchar(20)

inttext

nchar(20) nchar(20) nvarchar(20) nchar(20)

Primary Key

>=10 Not nullNot Null

Foreign Key Foreign Key Foreign Key Foreign Key

SoLanThiNgayThiTimeThi

IDSinhVien

nchar(20)

intnvarchar(20)nvarchar(20)

IDSinhVien IDGiangVien

nchar(20)

nvarchar(40)intint

nchar(20) nchar(20)

Primary Key

Not NullNot NullNot Null

Foreign Key Foreign Key

IDSinhVien

nchar(20) nchar(20)

Primary Key Primary Key

DANGKILICHTH

I

IDMon IDLichThi

nchar(20) nchar(20)

Primary Key Primary Key

Trang 8

=>> Phụ thuộc hàm: ( IDKhoa ) → { TenKhoa }

=> IDKhoa là Key của bảng KHOA

 Bao đóng: { IDKhoa }+ → {IDKhoa,TenKhoa}

 Lược đồ ở dạng chuẩn BCNF.

* LỚP

D16CQCN01 Công nghệ thông tin 1

Trang 9

=> IDLop là Key của bảng LỚP.

IDKhoa là Foreign Key của bảng Lớp

 Bao đóng: {IDKhoa}+ → {IDKhoa,TenKhoa}

VT Lê Duy Khánh Nam An ninh mạng viễn thông

Ta có: + IDGV → HoTenGV , IDKhoa , GioiTinh , ChuyenMon

=> IDGV là Key của bảng GIẢNG VIÊN

IDKhoa là Foreign Key của bảng GIẢNG VIÊN

 Bao đóng: {IDKhoa}+ → {IDKhoa,TenKhoa}

=>> {IDGV}+

Trang 10

→ {IDGV, HoTenGV,IDKhoa,TenKhoa,GioiTinh,ChuyenMon}

Lược đồ ở dạng chuẩn BCNF.

* SINH VIÊN

N16DCCN059 D16CQCN01 Bùi Xuân Toàn Nam Hà NộiN16DCCN122 D16CQCN02 Nguyễn Thị Lan Phương Nữ Quảng TrịN16DCCN130 D16CQCN03 Phạm Lý Quỳnh Nữ TP.HCMN15DCDT020 D15CQDT01 Tô Quang Huy Nam HuếN17DCQT098 D17CQQT01 Cao Thảo My Nữ Nha TrangN17DCQT001 D17CQQT02 Mai Sơn Nam Đà LạtN15DCVT025 D15CQVT01 Nguyễn Ngọc Luân Nam Đà Nẵng

Ta có: + IDSV → HoTenSV , IDLop , GioiTinh , DiaChi

=> IDSV là Key của bảng SINH VIÊN

IDLop là Foreign Key của bảng SINH VIÊN

Trang 11

Ta có: + IDPhong => TenPhong

+ TenPhong => TenPhong

=>> Phụ thuộc hàm: ( IDPhong ) => { TenPhong }

=> IDPhong là Key của bảng PHÒNG

 Bao đóng: { IDPhong }+ => { IDPhong,TenPhong}

=>> Phụ thuộc hàm : ( IDNV ) → { HoTenNV,IDPhong,GioiTinh }

=> IDNV là Key của bảng NHÂN VIÊN

IDPhong là Foreign Key của bảng NHÂN VIÊN

 Bao đóng: {IDPhong}+ → {IDPhong,TenPhong}

INT1313 Môn Cơ sở dữ liệu 40 5 N16DCCN059 0211018

Trang 12

INT1319 Môn Hệ điều hành 20 3 N16DCCN122 0244193INT1154 Môn Tin học cơ sở 2 30 4 N16DCCN130 0211012INT1330 Môn Kỹ thuật vi xử lí 40 0 N15DCDT020 0211044BSA1349 Môn Quản trị học 30 2 N17DCQT098 0211062BSA1412 Môn Tài chính tiền tệ 30 0 N17DCQT001 0211065TEL1414 Môn An ninh mạng

=> IDMon là Key của bảng MÔN HỌC

IDSV,IDGV là Foreign Key của bảng MÔN HỌC

 Bao đóng: {IDSV}+ → {IDSV,IDLop,HoTenSV,GioiTinh,DiaChi}

Trang 13

=> IDLichThi là Key của bảng LỊCH THI.

IDMon,IDNV là Foreign Key của bảng LỊCH THI

GioiTinh,ChuyenMon,NgayThi,SoLanThi,IDNV,IDPhong,TenPhong,

HoTenNV,GioiTinh,TimeThi}

Lược đồ ở dạng chuẩn BCNF.

*KẾT QUẢ

Trang 14

=>> Phụ thuộc hàm: ( IDKetQua ) → { IDKetQua,ĐapAn}

=> IDKetQua là Key của bảng KẾT QUẢ

 Bao đóng: { IDKetQua }+ → { IDKetQua,ĐapAn}

 Lược đồ ở dạng chuẩn BCNF.

*BỘ ĐỀ THI

BĐT1112 Bộ Cơ sở dữ liệu 1 1001 0211018BĐT1113 Bộ Hệ điều hành 1 1002 0244193BĐT1114 Bộ Tin học cơ sở 2 1 1003 0211012BĐT1115 Bộ Kỹ thuật vi xử lí 1 1004 0211044BĐT1116 Bộ Quản trị học 1 1002 0211062BĐT1117 Bộ Tài chính tiền tệ 1 1004 0211065BĐT1118 Bộ An ninh mạng viễn thông 1 1001 0211079

Ta có: + IDBoĐeThi → TenBoĐeThi , SoBoĐeThi , IDNV , IDGV

Trang 15

IDNV,IDGV là Foreign Key của bảng BỘ ĐỀ THI.

CH1112 10 Chương I+II+V INT1313 0211018 BĐT1112 A1112CH1113 15 Chương II+IV+V INT1319 0244193 BĐT1113 A1113CH1114 10 Chương V+VI INT1154 0211012 BĐT1114 A1114CH1115 10 Chương II+III+V INT1330 0211044 BĐT1115 A1115CH1116 15 Chương II+V+VI BSA1349 0211062 BĐT1116 A1116CH1117 10 Chương I+III+VI BSA1412 0211065 BĐT1117 A1117CH1118 10 Chương I+IV+V TEL1414 0211079 BĐT1118 A1118

Ta có: + IDCauHoi → SoCauHoi,NoiDung,IDMon , IDGV , IDBoĐeThi

Trang 18

Tạo table KHOA

IDKhoa nchar(20)primary key (IDKhoa)

,TenKhoa nvarchar(40)

)

Tạo table KẾT QUẢ

IDKetQua nchar(20)primary key (IDKetQua)

,ĐapAn nvarchar(40)

)

Tạo table PHÒNG

IDPhong nchar(20) primarykey (IDPhong)

,TenPhong nvarchar(40)

)

Tạo table LỚP

IDLop nchar(20) primarykey (IDLop)

Tạo table GIẢNG VIÊN

IDGiangVien nvarchar(20)primary key (IDGiangVien)

Tạo table SINH VIÊN

IDSinhVien nchar(20)primary key (IDSinhVien)

Trang 19

Tạo table NHÂN VIÊN

IDNhanVien nchar(20)primary key (IDNhanVien)

Tạo table BỘ ĐỀ THI

IDBoDeThi nchar(20)primary key (IDBoDeThi)

,TenBoDeThi nvarchar(40)

,SoBoDeThi int

,IDNhanVien nchar(20)

,IDGiangVien nvarchar(20)

)

Tạo table MÔN

IDMon nchar(20)primary key (IDMon)

)

Tạo table CÂU HỎI

IDCauHoi nchar(20)primary key (IDCauHoi)

Trang 20

,foreignkey (IDMon)references MON(IDMon)

)

Tạo table LỊCH THI

IDLichThi nchar(20) primarykey (IDLichThi)

)

Tạo table ĐĂNG KÍ MÔN

IDMon nchar(20)

IDSinhVien nchar(20),

)

Tạo table ĐĂNG LỊCH THI

IDMon nchar(20),

IDLichThi nchar(20),

)

Trang 21

*Lược đồ Diagram cơ sở dữ liệu.

6.Nhập dữ liệu: (Dùng lệnh INSERT)

use ThiTracNghiem

Nhập liệu cho BẢNG KHOA

Trang 22

=>> Kết quả:

('D15CQDT01','Dien Tu 1 Khoa 2015',2015,'DT'),

('D15CQVT01','Vien Thong 1 Khoa 2015',2015,'VT');

Kiểm tra

=>> Kết quả:

Nhập liệu cho BẢNG Giảng Viên

values ('0211018','Ho Manh Tai','Co So Du Lieu','Nam','CNTT'),

('0244193','Huynh Thanh Tam','He Dieu Hanh','Nam','CNTT'),

('0211012','Truong Dinh Huy','Tin hoc co so 2','Nam','CNTT'),

('0211044','Nguyen Trong Huan','Ky thuat vi xu li','Nam','DT'),

('0211062','Ho Thi Sang','Quan tri hoc','Nu','QTKD'),

('0211065','Nguyen Ngoc Thanh','Tai chinh tien te','Nu','QTKD'),

('0211079','Le Duy Khanh','An ninh mang Vien thong','Nam','VT');

Kiểm tra

=>>

Trang 23

Nhập liệu cho BẢNG Sinh Viên

('N17DCQT001','Mai Son','Nam','Da Lat','D17CQQT02'),

Kiểm tra

=>> Kết quả:

Nhập liệu cho BẢNG PHONG

values ('PKT','Phong Khao Thi'),

('PGV','Phong Giao Vu');

Kiểm tra

=>> Kết quả:

Trang 24

Nhập liệu cho BẢNG NHÂN VIÊN

values (1001,'Tran Minh Thu','Nu','PKT'),

(1002,'Pham Khanh Du','Nam','PKT'),

(1003,'Do Viet Nam','Nam','PKT'),

(1004,'Pham Quoc Hung','Nam','PKT'),

(1005,'Tran Thi An','Nu','PGV'),

(1006,'Tran Thi Lanh','Nu','PGV'),

(1007,'Nguyen Thi Giang','Nu','PGV');

Kiểm tra

=>> Kết quả:

Nhập liệu cho BẢNG MÔN HỌC

('INT1319','Mon He Dieu Hanh',20,3,'N16DCCN122','0244193'),

('INT1154','Mon Tin hoc co so 2',30,4,'N16DCCN130','0211012'),

('INT1330','Mon Ky Thuat vi xu li',40,0,'N15DCDT020','0211044'),

('BSA1349','Mon Quan Tri hoc',30,2,'N17DCQT098','0211062'),

('BSA1412','Mon Tai chinh tien te',30,0,'N17DCQT001','0211065'),

('TEL1414','Mon An ninh mang Vien thong',40,5,'N15DCVT025','0211079');

Kiểm tra

Trang 25

=>> Kết quả:

Nhập liệu cho BẢNG LỊCH THI

values ('N2010',1,'20/10/2018',60,1001,'INT1313'),

('N2110',2,'21/10/2018',45,1002,'INT1319'),

('N2210',2,'22/10/2018',60,1003,'INT1154'),('N2310',1,'23/10/2018',45,1004,'INT1330'),('N2410',1,'24/10/2018',45,1005,'BSA1349'),('N2510',2,'25/10/2018',60,1006,'BSA1412'),('N2610',1,'26/10/2018',45,1007,'TEL1414');

Kiểm tra

=>> Kết quả:

Nhập liệu cho BẢNG KẾT QUẢ

Trang 26

values ('BDT1112','Bo Co so du lieu',1,1001,'0211018'),

('BDT1113','Bo He dieu hanh',1,1002,'0244193'),

('BDT1114','Bo Tin hoc co so 2',1,1003,'0211012'),

('BDT1115','Bo Ky thuat vi xu li',1,1004,'0211044'),

('BDT1116','Bo Quan tri hoc',1,1005,'0211062'),

('BDT1117','Bo Tai chinh tien te',1,1006,'0211065'),

('BDT1118','Bo An ninh mang Vien thong',1,1007,'0211079');

Kiểm tra

=>> Kết quả:

Trang 27

Nhập liệu cho BẢNG CÂU HỎI

values ('CH1112',10,'Chuong I+II+V','BDT1112','0211018','INT1313','A1112'),

('CH1113',15,'Chuong II+IV+V','BDT1113','0244193','INT1319','A1113'),

('CH1114',10,'Chuong V+VI','BDT1114','0211012','INT1154','A1114'),

('CH1115',10,'Chuong II+III+V','BDT1115','0211044','INT1330','A1115'),

('CH1116',15,'Chuong I+V+VI','BDT1116','0211062','BSA1349','A1116'),

('CH1117',10,'Chuong I+III+VI','BDT1117','0211065','BSA1412','A1117'),

('CH1118',10,'Chuong I+IV+V','BDT1118','0211079','TEL1414','A1118');

Kiểm tra

=>> Kết quả:

Nhập liệu cho BẢNG ĐĂNG KÍ MÔN

Trang 28

Nhập liệu cho BẢNG ĐĂNG KÍ LỊCH THI

values ('INT1313','N2010'),

('INT1319','N2110'),

('INT1154','N2210'),('INT1330','N2310'),('BSA1349','N2410'),('BSA1412','N2510'),('TEL1414','N2610');

FROM KHOA => Kết quả:

πTenKhoaIDKhoa = ‘CNTT’ (KHOA))

2.Tìm mã của Khoa có tên khoa là Điện tử

FROM KHOA => Kết quả:

πIDKhoaTenKhoa = ‘Dien tu’ (KHOA))

3.Tìm những sinh viên có giới tính là Nam

Trang 29

SELECT IDSinhVien,HoTenSV,GioiTinh,DiaChi

FROM SINHVIEN => Kết quả:

πHoTenSVGioiTinh = ‘Nam’ (SINHVIEN))

4.Tìm sinh viên có địa chỉ ở Hà Nội và có giới tính là Nam

FROM SINHVIEN

=> Kết quả:

πHoTenSV DiaChi = ‘Ha Noi’ and GioiTinh = ‘Nam’ (SINHVIEN))

5.Tìm thông tin sinh viên học những môn học gì?

SELECT

HoTenSV,GioiTinh,DiaChi,IDMon,TenMonHoc,SoTietLyThuyet,SoTietThucHanh

FROM SINHVIEN,MON

=> Kết quả:

πHoTenSV,TenMonHocSINHVIEN,IDSV = MON,IDSV (SINHVIEN×MON))

6.Cho biết sinh viên Phạm Lý Quỳnh học lớp nào?

FROM SINHVIEN,LOP

=> Kết

quả:

π HoTenSV,TenLopSINHVIEN,IDLop = LOP,IDLop (SINHVIEN×LOP))

7.Tìm tên sinh viên học lớp Công nghệ thông tin 2 khóa 2016?

Trang 30

FROM SINHVIEN,LOP

Khoa 2016'

=> Kết

quả:

π HoTenSV,TenLop( σSINHVIEN,IDLop = LOP,IDLop and

TenLop = ‘Cong Nghe Thong Tin 2 Khoa 2016’ (SINHVIEN×LOP))

8.Cho biết những sinh viên có giới tính Nữ học lớp nào?

FROM SINHVIEN,LOP

=> Kết quả:

π HoTenSV,GioiTinh,TenLop(σSINHVIEN,IDLop = LOP,IDLop and GioiTinh = ‘Nu’

(SINHVIEN×LOP))

9.Cho biết tên sinh viên có mã lớp là D15CQDT01

FROM SINHVIEN => Kết

quả:

π HoTenSV IDLop = ‘D15CQDT01’ (SINHVIEN))

10.Cho biết phòng giáo vụ có mã phòng là gì?

FROM PHONG

π TenPhong,IDPhong TenPhong = ‘Phong giao vu’ (PHONG))

11.Cho biết tên phòng có mã phòng là PKT

Trang 31

12.Cho biết tên nhân viên có giới tính là Nữ

FROM NHANVIEN => Kết quả:

π HoTenNV,GioiTinh GioiTinh= ‘Nu’ (NHANVIEN))

13.Cho biết tên nhân viên thuộc phòng khảo thí

FROM NHANVIEN,PHONG

thi'

=> Kết quả:

π HoTenNV,TenPhong( σNHANVIEN,IDPhong = PHONG,IDPhong and TenPhong = ‘Phong khao thi’

(NHANVIEN×PHONG))

14.Cho biết thông tin nhân viên có mã nhân viên là 1006

FROM NHANVIEN,PHONG

Trang 32

16.Cho biết tên môn học có mã là INT1313.

FROM MON => Kết quả:

π IDMon,TenMonHoc IDMon = ‘INT1313’ (MON))

17.Tìm những môn học có số tiết lý thuyết lớn hơn 30 => Kết quả:

SELECT

IDMon,TenMonHoc,SoTietLyThuyet

π TenMonHoc,SoTietLyThuyet SoTietLyThuyet > 30 (MON))

18.Cho biết tên những môn học và giảng viên dạy môn đó

FROM MON,GIANGVIEN

π HoTenGV,TenMonHoc( σ MON,IDGiangVien = GIANGVIEN,IDGiangVien

(GIANGVIEN×MON))

19.Cho biết tên môn học có số tiết lý thuyết nhỏ hơn 40 và những sinh viên nào họcmôn đó

FROM MON,SINHVIEN

=> Kết quả:

Trang 33

π TenMonHoc,HoTenSV,SoTietLyThuyetMON,IDSinhVien = SINHVIEN,IDSinhVien and

SoTietLyThuyet <40

(SINHVIEN×MON))

20.Cho biết tên những môn học và sinh viên học môn đó

FROM MON,SINHVIEN

=> Kết quả:

π HoTenSV,TenMonHoc( σ MON,IDSinhVien = SINHVIEN,IDSinhVien

(SINHVIEN×MON))

21.Cho biết thông tin môn Tài chính tiền tệ

=> Kết quả:

π

IDMon,TenMonHoc,SoTietLyThuyet,SoTietThucHanh TenMonHoc = ‘Mon Tai

chinh tien te’ (MON))

22.Tìm tên các lớp có mã khoa là CNTT và năm nhập học là 2016

Ngày đăng: 12/12/2018, 10:08

TỪ KHÓA LIÊN QUAN

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

w