Kiểm tra và Tối ưu:Kiểm tra lược đồ chuẩn hóa và tối ưu hóa nếu cần thiết để đảm bảo hiệu suất tốt nhất.Chuẩn hóa lược đồ sử dụng thuật toán 7.10 trang 150 - Phân rã đến 3NFDữ liệu vào:
Trang 1TRƯỜNG ĐẠI HỌC TÀI NGUYÊN VÀ MÔI TRƯỜNG
TPHCMKHOA HỆ THỐNG THÔNG TIN VÀ VIỄN THÁM
BÁO CÁO ĐỒ ÁN MÔN HỌC
CƠ SỞ DỮ LIỆU NÂNG CAO
Lớp: 10_ĐH_CNTT6Giảng viên: ThS HÀ THANH VÂN
Sinh viên thực hiện: HOÀNG VƯƠNG QUỐC ANH
MSSV: 1050080212
Trang 2TP Hồ Chí Minh, tháng 12 năm 2023
Trang 3TRƯỜNG ĐẠI HỌC TÀI NGUYÊN VÀ MÔI TRƯỜNG
TPHCMKHOA HỆ THỐNG THÔNG TIN VÀ VIỄN THÁM
BÁO CÁO ĐỒ ÁN MÔN HỌC
CƠ SỞ DỮ LIỆU NÂNG CAO
Lớp: 10_ĐH_CNTT6Giảng viên: ThS HÀ THANH VÂN
Sinh viên thực hiện: HOÀNG VƯƠNG QUỐC ANH
MSSV: 1050080212
Trang 4TP Hồ Chí Minh, tháng 12 năm 2023
NHẬN XÉT, ĐÁNH GIÁ CỦA GIẢNG VIÊN
Trang 5PHẦN 1: CƠ SỞ DỮ LIỆU TẬP TRUNG.
-Tìm phủ tối thiểu:
Thuật toán của tìm phủ tối thiểu:Thuật toán:
Bước 1 Chuyển các phụ thuộc hàm trong F thành các phụ thuộc hàm vế
phải
có 1 thuộc tính
Bước 2 Loại bỏ các thuộc tính dư thừa bên vế trái bằng cách: với mỗi phụ
thuộc hàm f: X Y F, duyệt lần lượt các thuộc tính A bên vế trái của
f, nếu f (F - {f} {X-A Y})+ thì loại A ra khỏi f.
Bước 3 Loại bỏ các phụ thuộc hàm dư thừa bằng cách duyệt lần lượt phụ
Trang 6-> Một lược đồ quan hệ có thể có nhiều khóa.
Ví dụ:
Tìm 1 khóa của lược đồ Q(ABCDEH) với tập phụ thuộc hàm F:
F = { BC→E; D→A; C→A; AE→D; BE→CH }
-Nhận diện các dạng chuẩn:1,2,3,BCNF và chuẩn hóa lược đồ CSDL:
1 1NF (First Normal Form):
-Mỗi ô của bảng chứa một giá trị duy nhất, không có giá trị lặp lại
-Các giá trị trong mỗi cột phải là nguyên tử (atomic)
-Ví dụ: Cho lược đồ quan hệ Q(ABCD) và tập phụ thuộc hàm:
F={ AB → CD; B → D; C→ A}
Q có 2 khoá là {AB} và {BC} Do D là thuộc tính không khoá, AB → D không
là phụ thuộc hàm đầy đủ vì có B → D nên Q không đạt 2NF Vậy lược đồ đã cho đạt 1NF
2 2NF (Second Normal Form):
-Bảng đã ở dạng 1NF
-Các cột không phải là khóa chính phụ thuộc vào toàn bộ khóa chính
-Ví dụ: Cho lược đồ quan hệ Q(GMVNHP) và tập phụ thuộc hàm:
F={G→N; G→H; G→P; M→V; NHP→M}
Dễ thấy Q có 1 khóa là {G} Thuộc tính không khoá là M,V,N,H,P
Do các phụ thuộc hàm G → M; G → V; G → N; G → H; G → P là các phụ thuộc hàm đầy đủ, nên lược đồ quan hệ Q đạt 2NF
3 3NF (Third Normal Form):
Trang 7-Bảng đã ở dạng 2NF.
-Không có sự phụ thuộc chức năng giữa các cột (non-prime attributes).-Ví dụ: Cho lược đồ quan hệ Q(ABCD), với
F={ AB → C ; D → B; C → ABD }
Q có 3 khóa là {AB}, {AD} và {C}
Tất cả các thuộc tính trong Q đều là thuộc tính khóa nên theo định nghĩa 1, Q đạt 3NF Theo định nghĩa 2, tất cả các phụ thuộc hàm được cho trong F đều thỏa
1 trong 2 điều kiện Vậy Q đạt 3NF
4 BCNF (Boyce-Codd Normal Form):
Xác định các thực thể chính và mối quan hệ giữa chúng
b Chuyển đổi sang Bảng:
Chuyển đổi các thực thể và mối quan hệ thành bảng
c Xác định Khóa Chính:
Xác định khóa chính cho mỗi bảng
d Giải quyết Mối quan hệ Nhiều-nhiều:
Sử dụng bảng liên kết để giải quyết mối quan hệ nhiều-nhiều
e Áp dụng Quy tắc Chuẩn hóa:
Áp dụng các quy tắc chuẩn hóa (1NF, 2NF, 3NF, BCNF, 4NF) để đảm bảo tính nhất quán và giảm thiểu dữ liệu trùng lặp
f Kiểm tra và Tối ưu:
Kiểm tra lược đồ chuẩn hóa và tối ưu hóa nếu cần thiết để đảm bảo hiệu suất tốt nhất
Chuẩn hóa lược đồ sử dụng thuật toán 7.10 trang 150 - Phân rã đến 3NF
Dữ liệu vào: Lược đồ quan hệ Q(U) và tập phụ thuộc hàm F
Trang 8Dữ liệu ra: Phân rã p={Q1,Q2,…Qk} đạt 3NF bảo toàn phụ thuộc hàm và bảo toàn thông tin.
Thuật toán:
Bước 1 Tìm phủ tối thiểu của F
Bước 2 Nếu có một phụ thuộc hàm nào của F mà liên quan đến tất cả các thuộc tính của Q thì kết quả ra chính là Q (Q không thể phân rã)
Bước 3 Cứ mỗi phụ thuộc hàm X → A F thì XA là một lược đồ cần tìm∈Bước 4 Nếu không có lược đồ quan hệ nào trong p chứa một khóa của Q thì hãy tạo ra thêm một lược đồ quan hệ trong p chứa các thuộc tính tạo
nên một khóa của R
PHẦN 2: CƠ SỞ DỮ LIỆU PHÂN TÁN
Sau đây mình sẽ hướng dẫn các bạn cách để phân tán CSDL ở các server con
- Bước 1: Tạo database rồi thêm dữ liệu, dưới đây là database QL_VATTU
mà mình đã chuẩn bị
Trang 9- Bước 2: Tạo các server con, trước khi tạo thì hãy chạy SQL Server Agent
Sau đó bấm Connect -> Database Engine và kết nối với các server khác
Trang 10Sau khi đã kết nối xong thì mình tiến hành phân tán, dưới đây là yêu cầu của đề bài
Ở server gốc, tìm thư mục Replication và bấm dấu +, Click chuột phải vào Local Publications -> New Publication…
Trang 11Sau đó xuất hiện hộp thoại New Publication Wizard
- Bấm Next thì chọn Database mà mình muốn phân tán -> Next
- Ở mục Publication type ta chọn Merge publication -> Next
Trang 12- Dựa vào yêu cầu thì ta có thể chọn hết hoặc chọn 1 số bảng để tiến hành phân tán rồi bấm Next
- Ở mục Filtered Tables thì các bạn chọn Add -> Add Filter…
- Thêm điều kiện, theo yêu cầu thì mình sẽ lấy điều kiện của Mã Chi Nhánh
là “CN1”
Trang 13Sau đó bấm OK và ta sẽ quay lại mục Filtered Tables, tiếp tục chọn Add
-> Add Join to Extend the Selected Filter… để thêm liên kết giữa các bảng
- Thêm liên kết giữa các bảng sau đó nhấn OK
Trang 14- Sau khi xong thì bấm Next, ở mục dưới đây thì các bạn bỏ chọn Schedule the Snapshot Agent to run at the following times -> Next
- Ở phần Agent Security thì các bạn chọn Security Settings sau đó hộp thoại Snapshot Agent Security xuất hiện
- Phần này các bạn lựa chọn đăng nhập
+ Có thể chọn Run under the following Windows hoặc Run under the SQL Server Agent
Trang 15+ Ở phần Connect to the Publisher thì có thể chọn By impersonating the process account hoặc Using the following SQL Server login rồi đăng nhập ở phần Login, Password -> OK
- Sau khi xong thì ta nhấn Next
- Bước cuối cùng là đặt tên cho Publication mà mình mới tạo -> Finish
Trang 16- Như thế này là đã thành công -> Close
- Lặp lại các bước trên với những yêu cầu còn lại và đây là kết quả
Trang 17- Sau khi đã phân tán xong thì ta tiến hành các bước đưa dữ liệu đã phân tán vào các server con
- Click chuột phải vào dữ liệu -> New Subscriptions…- > Chọn publications vừa tạo -> Next
- Hộp thoại New Subscription Wizard sẽ xuất hiện -> tiếp tục nhấn Next
Trang 18- Đến mục Subscribers thì ta chọn Add SQL Server Subscriber -> Chọn server con -> Connect
- Sau khi Connect xong, ở phần Subscription Database ta bấm vào dấu mũi tên hướng xuống, chọn New database…, đặt tên cho database rồi bấm OK
và tiếp tục
Trang 19- Phần này các bạn chọn … ở Connection to Subscriber và tiến hành đăng nhập
- Đăng nhập xong thì ta bấm Next để tiếp tục
Trang 20- Ở phần tiếp theo thì chọn Run continuously ở phần Agent Schdule và bấmFinish
PHẦN 3: CẤU TRÚC DỮ LIỆU noSQL-MongoDB (Cơ bản)
Dữ liệu:
Trang 211, Chỉ xuất các document học sinh trong khối B
>db.BT3.aggregate({$match:{"Khoi":"B"}})
2, Xoá các học sinh có điểm Anh dưới 5
db.BT3.deleteMany({"Diem thi.Anh": {$lt: 5}})
Trang 223, Xoá thông tin học sinh có số id là 1
db.BT3.deleteOne({"_id": "1"})
4, Chỉ hiển thị 7 tài liệu trong database
db.BT3.aggregate({$limit:})
5, Sửa khối của id "10" thành "C"
db.BT3.updateOne({"_id": "10"}, {$set: {"Khoi": "C"}})
6, Cho biết các nhóm khối và tính tổng học sinh trong khối đó
Trang 278, Cho biết thông tin và tính tổng điểm các học sinh, chỉ xuất các học sinh thi tổng điểm dưới 20 điểm
db.BT3.aggregate([{$addFields:{"Tong Diem":{$sum:["$Diem
thi.Toan","$Diem thi.Ly","$Diem thi.Hoa","$Diem thi.Van","$Diem thi.Anh","$Diem thi.Sinh","$Diem thi.Su","$Diem thi Dia"]}}},{$match: {"Tong Diem":{$lt:20}}},])
Trang 309, Tìm các học sinh có tổng điểm trung bình các môn trên 6 điểm
db.BT3.aggregate([{$addFields:{"Tong Diem":{$avg:["$Diem
thi.Toan","$Diem thi.Ly","$Diem thi.Hoa","$Diem thi.Van","$Diem thi.Anh","$Diem thi.Sinh","$Diem thi.Su","$Diem thi Dia"]}}},{$match: {"Tong Diem":{$gt:6}}},])
Trang 3510, Hiển thị tất cả các học sinh có điểm Toán dưới 8 sắp xếp theo thứ tự điểm tăng dần
db.BT3.aggregate({$match:{"Diem thi.Toan":{$lt:8 }}},{$sort:{"Diem thi.Toan":1}})