Professional Documents
Culture Documents
Slide Chính
Slide Chính
Education
Nhóm 4
Thông tin về cơ
sở dữ liệu 1 Thông tin về cơ sở dữ liệu
Truy vấn dữ liệu Diagram
Cập nhật dữ liệu
Thông tin và số lượng các bảng dữ liệu
Đánh giá mức độ chuẩn hóa
Thông tin về cơ
sở dữ liệu
Diagram
Thông tin và số lượng
các bảng dữ liệu
Đánh giá mức độ
chuẩn hóa
Thông tin về cơ
sở dữ liệu
Diagram
Thông tin và số lượng
các bảng dữ liệu
Đánh giá mức độ
chuẩn hóa
Table Count: 11
Database Size: 354.9 MiB
Thông tin về cơ
sở dữ liệu
Diagram
• Tất cả các bảng đều đạt chuẩn BCNF (Boyce–Codd normal form).
Thông tin và số lượng
các bảng dữ liệu
Đánh giá mức độ
chuẩn hóa Chứng minh
Truy vấn dữ liệu Xét quan hệ (bảng) section có:
Cập nhật dữ liệu • Phụ thuộc hàm (course_id, sec_id, semester, year) → (building, room_number,
time_slot_id).
• Các thuộc tính khóa: course_id, sec_id, semester, year.
• Các thuộc tính không khóa: building, room_number, time_slot_id.
• Dễ dàng thấy quan hệ section đạt chuẩn BCNF.
Thông tin về cơ 1. Sắp xếp danh sách người hướng dẫn có lương từ 80000 đến 120000 theo thứ tự
sở dữ liệu lương tăng dần.
Truy vấn dữ liệu
Các câu lệnh truy vấn
Tối ưu thời gian truy
vấn
Đánh giá hiệu năng
Thông tin về cơ 2. Lấy ra thông tin những phòng ban có số tiêu đề ≥ 10 sắp xếp theo thứ tự tăng dần
sở dữ liệu của tiêu đề.
Truy vấn dữ liệu
Các câu lệnh truy vấn
Tối ưu thời gian truy
vấn
Đánh giá hiệu năng
Thông tin về cơ 3. Thống kê ngân sách các tòa nhà của phòng ban.
sở dữ liệu
Truy vấn dữ liệu
Các câu lệnh truy vấn
Tối ưu thời gian truy
vấn
Đánh giá hiệu năng
Thông tin về cơ 6. Tìm phòng ban có mức lương trung bình cao nhất.
sở dữ liệu
Truy vấn dữ liệu
Các câu lệnh truy vấn
Tối ưu thời gian truy
vấn
Đánh giá hiệu năng
Thông tin về cơ
sở dữ liệu
Truy vấn dữ liệu
Các câu lệnh truy vấn
Tối ưu thời gian truy
vấn
Đánh giá hiệu năng
1. Index
Cập nhật dữ liệu
2. Partition
• Các kiểu dữ liệu khác như: Hash, R-Tree, Log - Structure Merge, (full-text, spatial,
skiplist)
Thông tin về cơ
sở dữ liệu
Truy vấn dữ liệu Trước khi thêm Index Sau khi thêm Index Hiệu năng
Các câu lệnh truy vấn
Tối ưu thời gian truy • Thời gian đọc kết quả • Thời gian đọc kết quả • 1337 lần
vấn
Đánh giá hiệu năng
đầu tiên: 69,524 (ms) đầu tiên: 0,052 (ms)
Cập nhật dữ liệu
• Thời gian đọc tất cả các • Thời gian đọc tất cả • 5557 lần
kết quả: 3690,022 (ms) các kết quả: 0,664 (ms)
Thông tin về cơ
sở dữ liệu
Truy vấn dữ liệu
Cập nhật dữ liệu
Transaction • Thêm một sinh viên mới.
Tạo một CSDL y hệt
cấu trúc • Thêm một học phần vào chương trình đào tạo.
• Xóa một sinh viên ra khỏi CSDL.
• Cập nhập điểm học phần chi tiết cho một sinh viên.
• Đăng ký học phần chi tiết cho một sinh viên.
Thông tin về cơ
sở dữ liệu
Truy vấn dữ liệu
• Thêm sinh viên A thuộc viện B.
Cập nhật dữ liệu
Transaction
Mã sinh viên ID_new _student = MAX (ID) trong bảng student.
Tạo một CSDL y hệt
cấu trúc
• Cài đặt:
1 START TRANSACTION ;
2
3 SELECT ID_new_student = MAX( ID ) + 1 FROM s t u d e n t ;
4
5 INSERT INTO s t u d e n t ( ID , name , dept_name , t o t _ c r e d )
6 VALUES( ID_new_student , "A" , "B" , 0 ) ;
7
8 COMMIT;
Thông tin về cơ
sở dữ liệu
Truy vấn dữ liệu
Cập nhật dữ liệu
Transaction Các bước thực hiện
Tạo một CSDL y hệt
cấu trúc • Bắt đầu transaction.
• Lấy mã học phần @course_id = MAX (course_id) + 1 từ bảng course.
• Thêm học phần với mã họp phần @course_id vào bảng course.
• Cập nhật bảng prereq với @course_d.
• Thực hiện Commit.
Thông tin về cơ
sở dữ liệu • Thêm học phần (p_title, p_dept_name, p_credits).
Truy vấn dữ liệu
• Cài đặt:
Cập nhật dữ liệu
Transaction 1 START TRANSACTION ;
Tạo một CSDL y hệt 2
cấu trúc 3 SELECT @ c o u r s e _ i d :=MAX( c o u r s e _ i d ) + 1 FROM c o u r s e ;
4
5 INSERT INTO c o u r s e ( c o u r s e _ i d , t i t l e , dept_name , c r e d i t s )
6 VALUES( @ c o u r s e _ i d , p _ t i t l e , p_dept_name , p _ c r e d i t s ) ;
7
8 INSERT INTO p r e r e q ( c o u r s e _ i d , p r e r e q _ i d )
9 VALUES ( @ c o u r s e _ i d , p _ c o u r s e _ i d 1 ) ;
10
11 INSERT INTO p r e r e q ( c o u r s e _ i d , p r e r e q _ i d )
12 VALUES ( p_course_id2 , @ c o u r s e _ i d ) ;
13
14 COMMIT;
Thông tin về cơ
sở dữ liệu
Truy vấn dữ liệu
Cập nhật dữ liệu
Transaction
Tạo một CSDL y hệt
Các bước thực hiện
cấu trúc
• Bắt đầu transaction.
• Kiểm tra có tồn tại sinh viên này không. Nếu không tồn tại. → Rollback.
• Xóa dữ liệu với ID sinh viên cần xóa trong các bảng student, takes và advisor.
• Thực hiện Commit.
Thông tin về cơ
sở dữ liệu • Xóa sinh viên có mã số p_ID.
Truy vấn dữ liệu
Cập nhật dữ liệu
• Cài đặt:
Transaction
1 START TRANSACTION ;
Tạo một CSDL y hệt 2
cấu trúc 3 SELECT @ f l a g :=COUNT( ID ) FROM s t u d e n t WHERE ID = p_ID ;
4
5 IF ( @ f l a g = 0)
6 THEN ROLLBACK ;
7 END I F ;
8
9 DELETE FROM t a k e s WHERE ID = p_ID ;
10 DELETE FROM adv i s o r WHERE s _ i d = p_ID ;
11 DELETE FROM s t u d e n t WHERE ID = p_ID ;
12
13 COMMIT;
Thông tin về cơ
sở dữ liệu
Truy vấn dữ liệu
Cập nhật dữ liệu
Transaction Các bước thực hiện
Tạo một CSDL y hệt
cấu trúc • Bắt đầu transaction.
• Kiểm tra có tồn tại học phần cụ thể như vậy không. Nếu không tồn tại. → Rollback.
• Cập nhật điểm vào bảng takes.
• Điểm học phần lớn hơn F . → Cập nhật tot_cred trong bảng student. → Commit.
• Điểm học phần bằng F → Commit.
Thông tin về cơ
sở dữ liệu
Truy vấn dữ liệu
Các bước thực hiện
Cập nhật dữ liệu • Input danh sánh các học phần sinh viên đăng ký.
Transaction
• Mỗi học phần:
Tạo một CSDL y hệt
cấu trúc
• Bắt đầu transaction.
• Kiểm tra:
1. Học phần này có tồn tại hay không?
2. Sinh viên đã đăng ký học phần này chưa?
3. Sinh viên có vượt quá số tín chỉ cho phép trong một kỳ.
• Nếu:
▶ Đủ cả 3 điều kiện → Thực hiện yêu cầu → Commit.
▶ Vi phạm 1 trong 3 điều kiện → Rollback.
Thông tin về cơ
• Đăng ký học phần chi tiết:
sở dữ liệu (p_ID, p_course_id, p_sec_id, p_semester , p_year , p_grade).
Truy vấn dữ liệu
• Cài đặt:
Cập nhật dữ liệu
Transaction
1 START TRANSACTION ;
Tạo một CSDL y hệt 2
cấu trúc 3 SELECT @ f l a g _ f i := COUNT( c o u r s e _ i d ) FROM c o u r s e WHERE c o u r s e _ i d = p _ c o u r s e _ i d ;
4
5 SELECT @ f l a g _ s e := COUNT( c o u r s e _ i d ) FROM t a k e s
6 WHERE c o u r s e _ i d = p _ c o u r s e _ i d AND ID = p_ID AND s e m e s t e r = p _ s e m e s t e r AND y e a r = p_year ;
7
8 INSERT INTO t a k e s ( ID , c o u r s e _ i d , s e c _ i d , s e m e s t e r , y e a r , g r a d e )
9 VALUES ( p_ID , p_course_id , p_sec_id , p_semester , p_year , 0 ) ;
10
11 SELECT @ f l a g _ t h := SUM( c r e d i t s ) FROM t a k e s AS a LEFT JOIN c o u r s e AS b
12 ON a . c o u r s e _ i d = b . c o u r s e _ i d WHERE ID = p_ID AND s e m e s t e r = p _ s e m e s t e r AND y e a r = p_year ;
13
14 I F ( @ f l a g _ s e != 0 OR @ f l a g _ f i = 0 OR @ f l a g _ t h > 2 4 ) THEN
15 ROLLBACK ;
16 ELSE COMMIT;
17 END I F ;
Thông tin về cơ
sở dữ liệu
Truy vấn dữ liệu
Cập nhật dữ liệu
Transaction
Tạo một CSDL y hệt
cấu trúc
Ý tưởng
• Tạo một stored procedure để copy từ data sourse sang target với cấu trúc:
▶ Tạo các bảng có cấu trúc như data source.
▶ Insert dữ liệu từ các bảng tương ứng trong data sourse.
Thông tin về cơ
sở dữ liệu • Tạo stored procedure "copyDB" với hai tham số đầu vào là "DBsourse" và
Truy vấn dữ liệu "DBtarget.
Cập nhật dữ liệu • Tạo bảng "Table_list" với các cột (id, tbl) chứa các bảng của "DBsourse".
Transaction
Tạo một CSDL y hệt • Tạo bảng "SQLscript" với các cột (id, SQLtext) chứa các câu lệnh cần thực hiện.
cấu trúc
• Duyệt bảng "Table_list" và thực hiện:
1 INSERT INTO S Q L s c r i p t ( SQLtext )
2 "CREATE TABLE D B t a r g e t . t b l LIKE DBsourse . t b l " ;
• Duyệt bảng "Table_list" và thực hiện:
1 INSERT INTO S Q L s c r i p t ( SQLtext )
2 "INSERT D B t a r g e t . t b l SELECT ∗ FROM DBsource . t b l "
• Thực hiện các câu lệnh trong bảng "SQLscript".
Thông tin về cơ
sở dữ liệu
Truy vấn dữ liệu
• Ưu điểm:
Cập nhật dữ liệu
Transaction ▶ Tính tái sử dụng cao.
Tạo một CSDL y hệt ▶ Dễ thực hiện.
cấu trúc
• Nhược điểm:
▶ Thời gian thực hiện procedure chậm đối với database kích cỡ lớn.
▶ Khó kiểm soát dữ liệu copy.
• Cách cải tiến:
▶ Thêm cột Index được sắp xếp là khóa chính để tăng tốc độ Insert.
▶ Cài đặt thêm transaction để kiểm soát dữ liệu.
Thông tin về cơ
sở dữ liệu
Truy vấn dữ liệu
Sau khi hoàn thành bài tập lớn chúng em đã có thể làm được:
Cập nhật dữ liệu
Transaction
• Biết cách xây dựng một cơ sở dữ liệu
Tạo một CSDL y hệt • Thực hiện truy vấn dữ liệu và tối ưu các truy vấn sử dụng index và partition
cấu trúc
• Tạo các transaction để thực hiện các nghiệp vụ thực tế
• Sao chép một Database này sang một Database khác
Một số hạn chế
• Chưa tối ưu đc thời gian chạy với CSDL lớn
• Chưa nêu đủ partition
Phần 3 - Cập
nhật dữ liệu • 30 procedure • 5 Transactions
• Sinh tự động • Copy database
procedure bằng
• Thuyết trình procedure.
• Thuyết trình
Slide
• Làm slide • Làm slide
Nhóm 4