Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (4.72 MB, 48 trang )
<span class="text_page_counter">Trang 1</span><div class="page_container" data-page="1">
<b>Giảng viên hướng dẫn : </b>
<b>Sinh viên thực hiện : NHAN VĂN ÁNH</b>
MSSV: <b>1050080169</b>
<b>TP. Hồ Chí Minh, tháng 12 năm 2023</b>
</div><span class="text_page_counter">Trang 2</span><div class="page_container" data-page="2"><b>Giảng viên hướng dẫn : </b>
<b>Sinh viên thực hiện : NHAN VĂN ÁNH</b>
MSSV: <b>1050080169</b>
<b>TP. Hồ Chí Minh, tháng 12 năm 2023</b>
</div><span class="text_page_counter">Trang 3</span><div class="page_container" data-page="3"><small>1.3.5 Chuẩn Hóa Lược Đồ CSDL...5</small>
<small>1.4 Chuẩn Hóa lược Đồ Sử Dụng Thuật Toán 7.10 Trang 150 - Phân Rã Đến 3NF...6</small>
<small>Phần 2: Cơ Sở Dữ Liệu Phân Tán (Cơ Bản)...7</small>
<small>Phần 2: Cơ sở dữ liệu phân tán (Cơ bản)...7</small>
<small>Cho CSDL quản lý vật tư như sau:...7</small>
<small>Các bước thực hiện:...15</small>
<small>Phần 3: Cấu Trúc Dữ Liệu NoSQL-MongoDB(Cơ Bản)...24</small>
<small>1. Truy vấn dữ liệu với phương thức find():...25</small>
<small>2. Truy vấn tất cả dữ liệu trong collection:...32</small>
<small>3. Truy vấn dữ liệu với điều kiện:...32</small>
<small>4. Truy vấn với điều kiện phức tạp:...33</small>
</div><span class="text_page_counter">Trang 4</span><div class="page_container" data-page="4"><small>9. Chỉ mục rời rạc (Sparse Indexes)...45</small>
<small>10. Time-to-Live Indexes (TTL Indexes)...45</small>
</div><span class="text_page_counter">Trang 5</span><div class="page_container" data-page="5"><b>Phần 1: Cơ Sở Dữ Liệu Tập Trung 1.1 Phủ Tối thiểu</b>
"Tập phụ thuộc hàm tối thiểu là tập mà thỏa mãn các điều kiện sau:
Mỗi phụ thuộc hàm trong tập chỉ có một thuộc tính ở vế phải, khơng có thuộc tính dư thừa. Không thể thay thế bất kỳ phụ thuộc hàm X → A nào trong tập bằng phụ thuộc hàm Y → A, với Y là tập con của X và vẫn giữ nguyên tính đúng của các phụ thuộc hàm.
Không thể loại bỏ bất kỳ phụ thuộc hàm nào ra khỏi tập mà vẫn giữ nguyên tính đúng của tập phụ thuộc hàm.
Tập tối thiểu các phụ thuộc hàm có thể được hiểu như tập khơng chứa thơng tin dư thừa. Điều kiện 1 đảm bảo rằng mỗi phụ thuộc hàm đều đúng theo cấu trúc cơ bản chỉ với một thuộc tính ở vế phải, điều kiện 2 đảm bảo khơng có thuộc tính nào khơng cần thiết ở vế trái và điều kiện 3 đảm bảo khơng có phụ thuộc hàm nào thừa thãi. Tập phụ thuộc hàm tối thiểu cũng được gọi là phủ tối thiểu."
<b>1.2 Tìm Tất Cả Các Khóa </b>
Dữ liệu vào: Q(U), tập phụ thuộc hàm F Dữ liệu ra: tất cả các khóa của Q Thuật tốn:
Bước 1: Xác định tất cả các tập con của Q. Để xác định tất cả các tập con của một lược đồ quan hệ Q(U) với U={A1, A2, ..., An} ta lần lượt duyệt tất cả 2n-1 tập hợp con khác rỗng của U (n là số thuộc tính của Q). Kết quả tìm được giả sử là các tập thuộc tính:
S={X1, X2, …,X2n-1}
Bước 2: Tính Xi + . Nếu Xi + = U thì Xi là siêu khố. Giả sử sau bước này có m siêu khố: S = {S1,S2,…,Sm}
Bước 3. Tìm các khóa từ tập siêu khóa S. Xét mọi Si và Sj con của S (i ≠ j), nếu Si Sj thì ta loại Sj ra khỏi S. Kết quả S cịn lại chính là tập tất cả các khố cần tìm.
Ví dụ :
</div><span class="text_page_counter">Trang 6</span><div class="page_container" data-page="6">Giả sử có một lược đồ quan hệ với tập thuộc tính :U={A,B,C} và tập phụ thuộc
Ở đây, {A,B,C} là siêu khố vì nó chứa tất cả các thuộc tính trong U.
Bước 3: Tìm các khóa từ tập siêu khố S. Trong trường hợp này, vì đã tìm thấy siêu khố {A,B,C}, nó chứa tất cả các thuộc tính, nên nó là khóa của lược đồ quan hệ này.
Vậy, trong ví dụ này, khóa của lược đồ quan hệ được xác định là{A,B,C} dựa trên thuật tốn đã mơ tả.
<b>1.3 </b>
Một lược đồ quan hệ Q được gọi là ở dạng chuẩn 1 nếu mọi thuộc tính trong Q đều là các thuộc tính đơn. Tức là những giá trị trong các thuộc tính đều khơng thể phân chia được nữa. Ví Dụ :Giả sử có lược đồ quan hệ:
</div><span class="text_page_counter">Trang 7</span><div class="page_container" data-page="7">Trong đó thuộc tính MonHoc là thuộc tính kép. Để có được dạng chuẩn 1 cho quan hệ trên, ta có thể tách thuộc tính kép thành thuộc tính đơn như sau:
CHUYENMON (MAGV, MONHOC)
Một lược đồ quan hệ Q đạt dạng chuẩn 2 nếu Q đạt dạng chuẩn 1 và tất cả các thuộc tính khơng khố của Q đều phụ thuộc đầy đủ vào khố.
Ví Dụ :iả sử chúng ta có một lược đồ quan hệ cho các đơn hàng trong một cửa hàng online: Lược đồ quan hệ: DON_HANG(SODH, NGAYDH, KHACHHANG, MAHH, SOLUONG)
SOLUONG là số lượng hàng hóa trong đơn hàng Và chúng ta có các phụ thuộc hàm như sau:
F = {SODH → NGAYDH, KHACHHANG; SODH, MAHH → SOLUONG} Kiểm tra 2NF:
Lược đồ này đã đạt dạng chuẩn 1 (1NF) vì khơng có các thuộc tính có giá trị lặp lại trong bất kỳ bộ nào.
Để kiểm tra dạng chuẩn 2, chúng ta xem xét các phụ thuộc hàm và xác định xem các thuộc tính khơng phải là khóa chính có phụ thuộc đầy đủ vào khóa hay khơng.
</div><span class="text_page_counter">Trang 8</span><div class="page_container" data-page="8">Trong F, ta có phụ thuộc hàm SODH → NGAYDH, KHACHHANG, nghĩa là NGAYDH và KHACHHANG phụ thuộc vào SODH. Tuy nhiên, cả hai thuộc tính này khơng phụ thuộc đầy đủ vào khóa chính {SODH, MAHH}.
Vì vậy, lược đồ quan hệ DON_HANG khơng đạt dạng chuẩn 2 (2NF) do có phụ thuộc hàm bộ phận. Để đạt 2NF, chúng ta cần cắt phụ thuộc hàm này ra khỏi khóa chính.
Định nghĩa 1. Một lược đồ quan hệ Q được gọi là ở dạng chuẩn 3 nếu Q ở dạng chuẩn 2 và mọi thuộc tính khơng khóa của Q đều khơng phụ thuộc bắc cầu vào bất kỳ khóa nào.
Định nghĩa 2. Một lược đồ quan hệ Q đạt 3NF nếu mọi phụ thuộc hàm không hiển nhiên X→A (A là 1 thuộc tính) thỏa:
Hoặc X là một siêu khoá của Q Hoặc A là một thuộc tính khố
Ví Dụ :Giả sử chúng ta có một lược đồ quan hệ cho việc lưu trữ thông tin về đơn hàng và sản TENHH là tên hàng hóa
SOLUONG là số lượng hàng hóa trong đơn hàng Và chúng ta có các phụ thuộc hàm như sau:
F = {SODH → NGAYDH, KHACHHANG; MAHH → TENHH} Kiểm tra 3NF:
Để kiểm tra xem lược đồ quan hệ này có đạt 3NF hay không, chúng ta cần kiểm tra xem các thuộc tính khơng phải là khóa có phụ thuộc bắc cầu vào khóa khơng.
</div><span class="text_page_counter">Trang 9</span><div class="page_container" data-page="9">Trong F, ta có phụ thuộc hàm SODH → NGAYDH, KHACHHANG, nghĩa là NGAYDH và KHACHHANG phụ thuộc vào SODH. Đây không phải là phụ thuộc bắc cầu vào khóa, vì SODH khơng phải là khóa chính của lược đồ.
Ngồi ra, ta có phụ thuộc hàm MAHH → TENHH, trong đó TENHH là một thuộc tính khơng phải là khóa và phụ thuộc vào MAHH, nhưng MAHH cũng khơng phải là khóa chính.
Như vậy, lược đồ quan hệ DON_HANG khơng đạt 3NF vì có phụ thuộc bắc cầu vào các khóa khơng phải là khóa chính. Để đạt 3NF, chúng ta cần cắt phụ thuộc hàm này ra khỏi các thuộc tính khơng phải là khóa.
Một lược đồ quan hệ Q được gọi là ở dạng chuẩn BC nếu mọi phụ thuộc hàm khơng hiển nhiên của F đều có vế trái chứa khóa.
<small>Ví Dụ :</small> Cho quan hệ R = (ABCDGH), khóa là AB và tập phụ thuộc hàm F = {AB → C, AB → D, AB → GH} là quan hệ đạt chuẩn BCNF.
<b>1.3.5 Chuẩn Hóa Lược Đồ CSDL</b>
- Chuẩn hóa cơ sở dữ liệu là một quá trình thiết kế bảng trong cơ sở dữ liệu, chia các bảng lớn thành các bảng nhỏ hơn và liên kết chúng bằng các mối quan hệ. Chuẩn hóa giúp giảm thiểu dư thừa dữ liệu và loại bỏ các bất thường khi cập nhật cơ sở dữ liệu.
- Có một số dạng chuẩn hóa cơ bản:
+ Dạng chuẩn 1 (1NF): Một bảng được gọi là ở dạng chuẩn 1NF nếu các giá trị của tất cả các thuộc tính đều phải là ngun tử (đơn, khơng phân chia được). Nó khơng chứa các thuộc tính có giá trị lặp hoặc đa trị.
+ Dạng chuẩn 2 (2NF): Một quan hệ ở dạng chuẩn 2NF nếu quan hệ đó là 1NF và các thuộc tính khơng khóa phải phụ thuộc hàm đầy đủ vào khóá chính.
+ Dạng chuẩn 3 (3NF): Một quan hệ ở dạng chuẩn 3NF nếu quan hệ đó là 2NF và các thuộc tính khơng khóá phải phụ thuộc trực tiếp vào khóá chính.
+ Dạng chuẩn Boye Code (BCNF): Một quan hệ ở dạng chuẩn BCNF nếu quan hệ đó là 3NF và khơng có thuộc tính khóa mà phụ thuộc hàm vào thuộc tính khơng khóá.
</div><span class="text_page_counter">Trang 10</span><div class="page_container" data-page="10">Một ví dụ về chuẩn hóa cơ sở dữ liệu từ INF đến 3NF:
INF (First Normal Form): Giả sử chúng ta có một bảng chưa ở 1NF như sau:
Để chuyển bảng này về INF, chúng ta cần phải đảm bảo rằng mỗi ô trong bảng chỉ chứa một giá trị đơn và mỗi dòng (bản ghi) cần phải là duy nhất.
2NF (Second Normal Form):
Một quan hệ ở dạng chuẩn 2NF nếu quan hệ đó là 1NF và các thuộc tính khơng khóa phải phụ thuộc hàm đầy đủ vào khóa chính. Ví dụ, cho quan hệ R =
(ABCD), khóá chính là AB và tập phụ thuộc hàm là F = {AB -> C, AB -> D) là quan hệ đạt chuẩn 2NF.1
3NF (Third Normal Form):
Một quan hệ ở dạng chuẩn 3NF nếu quan hệ đó là 2NF và các thuộc tính khơng khóa phải phụ thuộc trực tiếp vào khóa chính. Ví dụ, cho quan hệ R =
(ABCDGH), khóá là AB và tập phụ thuộc hàm là F = {AB> C, AB -> D, AB -> GH} là quan hệ đạt chuẩn 3NF
<b>1.4 Chuẩn Hóa lược Đồ Sử Dụng Thuật Tốn 7.10 Trang 150 - Phân Rã Đến 3NF </b>
- Chuẩn hóa lược đồ CSDL sử dụng thuật toán 7.10 trang 150 - Phân rã đến 3NF là một quy trình chuẩn hóa cơ sở dữ liệu để đảm bảo rằng dữ liệu được tổ chức một cách hiệu quả. Các bước cơ bản trong quá trình này :
Bước 1: Xác định tất cả các phụ thuộc hàm trong lược đồ quan hệ
</div><span class="text_page_counter">Trang 11</span><div class="page_container" data-page="11">Bước 2: Xác định tất cả các khóa chính và khóa phụ. T Bước 3: Xác định tất cả các thuộc tính khơng phụ thuộc vào khóa chính
Bước 4: Xác định tất cả các thuộc tính phụ thuộc vào khóa chính
Bước 5: Tạo các bảng mới dựa trên các thuộc tính phụ thuộc vào khóa chính
Ví Dụ :Giả sử chúng ta có một quan hệ R = (ABCD) với tập phụ thuộc hàm F = {AB -> C,
Bước 3: Xác định tất cả các thuộc tính khơng phụ thuộc vào khóa chính. Trong trường hợp: này, chúng ta khơng có thuộc tính nào khơng phụ thuộc vào khóá chính. T Bước 4: Xác định tất cả các thuộc tính phụ thuộc vào khóa chính. Trong trường hợp này, chúng ta có C và D phụ thuộc vào khoa chính AB.
Bước 5: Tạo các bảng mới dựa trên các thuộc tính phụ thuộc vào khóa chính. Trong trường hợp này, chúng ta tạo ra hai bảng mới: R1 = (ABC) và R2 = (ABD) với tập phụ thuộc
hàm F1 = {AB -> C} và F2 = {AB -> D}.
Bước 6: Xác định các thuộc tính khơng phụ thuộc vào khóa chính và tạo các bảng mới dựa trên chúng. Trong trường hợp này, chúng ta khơng có thuộc tính nào khơng phụ thuộc vào khố chính.
Bước 7: Xác định các thuộc tính cịn lại và tạo các bảng mới dựa trên chúng. Trong trường hợp này, chúng ta khơng có thuộc tính nào cịn lại.
Vậy, sau q trình chuẩn hóa, chúng ta có hai bảng mới R1 = (ABC) và R2 = (ABD) thay cho bảng ban đầu R = (ABCD).
</div><span class="text_page_counter">Trang 12</span><div class="page_container" data-page="12"><b>Phần 2: Cơ Sở Dữ Liệu Phân Tán (Cơ Bản)</b>
Phần 2: Cơ sở dữ liệu phân tán (Cơ bản)
(13) [Cơ sở dữ liệu phân tán] Phân tán cơ sở dữ liệu trong Microsoft SQL Server 2012 - Lược đồ phân mảnh - YouTube
<b>Cho CSDL quản lý vật tư như sau:</b>
1. ChiNhanh(MaCN, ChiNhanh, Diachi, SoDT)
2. Nhanvien(MaNV,Ho,Ten,Diachi, Ngaysinh, Luong, MaCN) 3. Kho(Makho, Tenkho, Diachi, MaCN)
Yêu cầu : Giả sử công ty có 2 chi nhánh: Chi nhánh 1 (CN1), chi nhánh 2 (CN2). Phân tán CSDL QLVT ra làm 3 mảnh với điều kiện :
-QLVT được đặt trên server 1: Chứa thông tin của các phiếu phát sinh thuộc CN1 -QLVT được đặt trên server 2 : Chứa thông tin của các phiếu phát sinh thuộc CN2 -QLVT được đặt trên server 3 : Chứa thông tin các nhân viên, kho của cả 2 chi nhánh
<b>Bảng 1: ChiNhanh</b>
CREATE TABLE ChiNhanh ( MaCN INT PRIMARY KEY, ChiNhanh VARCHAR(255), Diachi VARCHAR(255), SoDT VARCHAR(20) );
</div><span class="text_page_counter">Trang 13</span><div class="page_container" data-page="13"><b>Bảng 2: Nhanvien</b>
CREATE TABLE Nhanvien ( MaNV INT PRIMARY KEY,
CREATE TABLE Kho ( Makho INT PRIMARY KEY,
CREATE TABLE Vattu ( MaVT INT PRIMARY KEY, TenVT VARCHAR(255),
</div><span class="text_page_counter">Trang 14</span><div class="page_container" data-page="14">DVT VARCHAR(50) );
<b>Bảng 5: Dathang</b>
CREATE TABLE Dathang ( MasoDDH INT PRIMARY KEY,
PRIMARY KEY (MasoDDH, MaVT), FOREIGN KEY (MasoDDH) REFERENCES Dathang(MasoDDH), FOREIGN KEY (MaVT) REFERENCES Vattu(MaVT)
</div><span class="text_page_counter">Trang 15</span><div class="page_container" data-page="15"><b> Bảng 7: PhieuNhap</b>
CREATE TABLE PhieuNhap ( MaPN INT PRIMARY KEY, Ngay DATE,
MasoDDH INT, MaNV INT, Makho INT,
FOREIGN KEY (MasoDDH) REFERENCES Dathang(MasoDDH), FOREIGN KEY (MaNV) REFERENCES Nhanvien(MaNV), FOREIGN KEY (Makho) REFERENCES Kho(Makho) PRIMARY KEY (MaPN, MaVT),
FOREIGN KEY (MaPN) REFERENCES PhieuNhap(MaPN), FOREIGN KEY (MaVT) REFERENCES Vattu(MaVT) );
<b>Bảng 9: PhieuXuat</b>
</div><span class="text_page_counter">Trang 16</span><div class="page_container" data-page="16">CREATE TABLE PhieuXuat ( MaPX INT PRIMARY KEY, Ngay DATE,
HotenKH VARCHAR(255), MaNV INT,
Makho INT,
FOREIGN KEY (MaNV) REFERENCES Nhanvien(MaNV), FOREIGN KEY (Makho) REFERENCES Kho(Makho) PRIMARY KEY (MaPX, MaVT),
FOREIGN KEY (MaPX) REFERENCES PhieuXuat(MaPX), FOREIGN KEY (MaVT) REFERENCES Vattu(MaVT) );
</div><span class="text_page_counter">Trang 17</span><div class="page_container" data-page="17"><b>Dữ liệu Thêm Vào để giải quyết bài toán: </b>
INSERT INTO ChiNhanh (MaCN, ChiNhanh, Diachi, SoDT) VALUES
(1, 'CN1', 'DiaChi1', '123456789'), (2, 'CN2', 'DiaChi2', '987654321'), (3, 'CN3', 'DiaChi3', '555555555');
INSERT INTO Nhanvien (MaNV, Ho, Ten, Diachi, Ngaysinh, Luong, MaCN) VALUES
(1, 'Ho1', 'Ten1', 'DiaChiNV1', '1990-01-01', 5000.00, 1), (2, 'Ho2', 'Ten2', 'DiaChiNV2', '1995-05-05', 6000.00, 2), (3, 'Ho3', 'Ten3', 'DiaChiNV3', '2000-10-10', 7000.00, 3);
INSERT INTO Kho (Makho, Tenkho, Diachi, MaCN) VALUES
(1, 'Kho1', 'DiaChiKho1', 1), (2, 'Kho2', 'DiaChiKho2', 2),
</div><span class="text_page_counter">Trang 18</span><div class="page_container" data-page="18">(3, 'Kho3', 'DiaChiKho3', 3);
INSERT INTO Vattu (MaVT, TenVT, DVT) VALUES
(1, 'VT1', 'DVT1'), (2, 'VT2', 'DVT2'), (3, 'VT3', 'DVT3');
INSERT INTO Dathang (MasoDDH, Ngay, NhaCC, MaNV, Makho)
INSERT INTO PhieuNhap (MaPN, Ngay, MasoDDH, MaNV, Makho) VALUES
(1, '2023-04-04', 1, 1, 1), (2, '2023-05-05', 2, 2, 2),
</div><span class="text_page_counter">Trang 19</span><div class="page_container" data-page="19">INSERT INTO PhieuXuat (MaPX, Ngay, HotenKH, MaNV, Makho)
</div><span class="text_page_counter">Trang 20</span><div class="page_container" data-page="20">1. <b>Truy vấn dữ liệu với phương thức find():</b>
a. <b>db.collection.find(query, projection)</b>
Tìm tất cả học sinh khối “A”:
</div><span class="text_page_counter">Trang 30</span><div class="page_container" data-page="30">Hiển thị tên và điểm toán của tất cả học sinh:
</div><span class="text_page_counter">Trang 31</span><div class="page_container" data-page="31">Tìm tên “ Trần Thị Chi “ và hiện tất cả thông tin về học sinh này :
</div><span class="text_page_counter">Trang 32</span><div class="page_container" data-page="32"><b>b. Phân trang với phương thức limit() và skip()</b>
Nếu muốn lấy 3 học sinh đầu tiên trong collection thì ta dùng limit(3):
</div><span class="text_page_counter">Trang 33</span><div class="page_container" data-page="33">Nếu ta muốn lấy 2 học sinh sau 5 học sinh đầu tiên thì vừa dùng skip(5) và limit (2):
</div><span class="text_page_counter">Trang 34</span><div class="page_container" data-page="34"><b>c. Sắp xếp dữ liệu với sort()</b>
<b>Sắp xếp điểm khối từ cao xuống thấp theo bảng chữ cái và sắp xếp tăng dần theo số của điểm toán :</b>
</div><span class="text_page_counter">Trang 36</span><div class="page_container" data-page="36"><b>2. Truy vấn tất cả dữ liệu trong collection:</b>
<b>3. Truy vấn dữ liệu với điều kiện:</b>
Câu lệnh truy vấn học sinh có điểm sinh 10 và hóa 10 dùng câu lệnh này có thể phục vụ cho việc trao giấy khen lọc ra học sinh đi thi học sinh giỏi.
</div><span class="text_page_counter">Trang 37</span><div class="page_container" data-page="37"><b>4. Truy vấn với điều kiện phức tạp:</b>
Tìm tất cả học sinh thuộc khối "A" hoặc có điểm Tốn lớn hơn 7, nhưng khơng thuộc khối "A1" và có điểm Anh lớn hơn hoặc bằng 8:
</div><span class="text_page_counter">Trang 38</span><div class="page_container" data-page="38">Trong truy vấn trên:
$or được sử dụng để kết hợp điều kiện học sinh thuộc khối "A" hoặc có điểm Tốn lớn hơn7. $and được sử dụng để kết hợp điều kiện không thuộc khối "A1" và có điểm Anh lớn hơn hoặc bằng 8.
<b>- Tìm tất cả học sinh thuộc khối "A" hoặc "A1" có điểm Tốn lớn hơn 7 và điểm Anh lớnhơn hoặc bằng 8, nhưng khơng có điểm Hóa nhỏ hơn 8:</b>
</div><span class="text_page_counter">Trang 39</span><div class="page_container" data-page="39">Trong truy vấn này, chúng ta sử dụng: $or để chọn học sinh thuộc khối "A" hoặc "A1". Các điều kiện về điểm số Toán và Anh.
$not kết hợp với $lt (nhỏ hơn) để loại bỏ các học sinh có điểm Hóa nhỏ hơn 8.
<b>5. Truy vấn chỉ trả về một số trường cụ thể:</b>
<small>Trả về tên và khối học của học sinh tiện cho việc thống kê số lượng học sinh của từng khối:</small>
</div><span class="text_page_counter">Trang 40</span><div class="page_container" data-page="40"><b>2. Truy vấn dữ liệu: Các toán tử truy vấn (Query and projection operators)</b>
Các toán tử truy vấn (Query operators) trong MongoDB là các toán tử dùng để xác định các điều kiện trong câu truy vấn. Dưới đây là một số toán tử thường được sử dụng:
<b>Toán tử so sánh:</b>
$eq: So sánh bằng $ne: So sánh khác $gt: Lớn hơn
</div>