You are on page 1of 42

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI

VIỆN TOÁN ỨNG DỤNG VÀ TIN HỌC


----------o0o----------

Báo cáo bài tập lớn


Môn Cơ sở dữ liệu
Nhóm 15: Financial Services

Giảng viên hướng dẫn: Nguyễn Danh Tú


Sinh viên thực hiện: Hoàng Khánh Nhàn 20195906
Nguyễn Ngọc Huyền 20195890
Nguyễn Xuân Yến 20195945
Vũ Thị Thùy Trang 20195933
Nguyễn Đức Mạnh 20195900

Hà Nội – 2021
Nhóm 15: Financial Services

Đánh giá nhóm

1. Đánh giá kết quả của nhóm trưởng:

2. Đánh giá của giảng viên:

BÁO CÁO GIỮA KÌ 2


Nhóm 15: Financial Services

MỤC LỤC
ĐÁNH GIÁ NHÓM ............................................................................................................. 2
PHẦN 1: ĐỀ TÀI NHÓM .................................................................................................... 5
1.1 TỔNG QUAN VỀ CƠ SỞ DỮ LIỆU .................................................................................... 5
1.2 THÔNG TIN CSDL ........................................................................................................ 6
1.2.1 Thông tin số lượng bản ghi của các bảng dữ liệu ................................................. 6
1.2.2 Lược đồ E-R diagram ........................................................................................... 7
1.2.3 Lược đồ R-E diagram ........................................................................................... 8
1.2.4 Đánh giá mức độ chuẩn hóa ................................................................................. 9
PHẦN 2: TRUY VẤN DỮ LIỆU ...................................................................................... 11
1. TRUY VẤN DỮ LIỆU ...................................................................................................... 11
1.1 Kiểm tra các tài khoản còn nợ cho đến hiện tại ..................................................... 11
1.2 Kiểm tra tổng tiền thu hộ hoặc các giao dịch chuyển đến của từng ngân hàng .... 11
1.3 Chương trình tặng quà ngày 08/03 ........................................................................ 12
1.4 Kiểm tra tình trạng các khoản vay trên 20 năm ..................................................... 13
1.5 Kiểm tra tình trạng hoàn thành các khoản vay ...................................................... 14
1.6 Kiểm tra số dư của tài khoản sau giao dịch cuối cùng .......................................... 15
1.7 Số lượng khách hàng nam/ nữ theo từng khu vực ................................................. 16
1.8 Tỉ lệ đánh giá kém theo khu vực............................................................................ 17
1.9 Đếm số lượng order của khách hàng ..................................................................... 18
1.10 Kiểm tra thông tin khách hàng có cuộc gọi bị treo .............................................. 19
2. TỐI ƯU TRUY VẤN ........................................................................................................ 21
2.1 Index: ..................................................................................................................... 21
2.2 Partition:................................................................................................................. 24
PHẦN 3: CẬP NHẬT DỮ LIỆU ....................................................................................... 28
1. THỦ TỤC CẬP NHẬT DỮ LIỆU(PROCEDURE): .............................................................. 28
1.1 Giới thiệu về thủ tục. ............................................................................................. 28
1.2 Các thủ tục trong bài tập lớn:................................................................................. 28
1.2.1 Procedure thêm account: ................................................................................. 29
1.2.2 Xóa account: .................................................................................................... 30
2. TRANSACTION. .......................................................................................................... 31
2.1 Giới thiệu về transaction. ....................................................................................... 32
2.1.1 Khái niệm: ...................................................................................................... 32
2.1.2 Thuộc tính của transaction: ............................................................................. 32
2.2 Transaction trong bài tập lớn. ................................................................................ 32
2.2.1 Transaction thêm khách hàng có mã district mới............................................ 32
2.2.2 Transaction đổi địa chỉ khách hàng. ................................................................ 33
BÁO CÁO GIỮA KÌ 3
Nhóm 15: Financial Services

2.2.3 Transaction xóa một account........................................................................... 34


3. TẠO VÀ CHÉP DỮ LIỆU SANG CSDL MỚI CÙNG CẤU TRÚC........................................... 36
3.1 Tạo mới cơ sở dữ liệu ............................................................................................ 36
3.2 Sinh câu lệnh tạo procedure:.................................................................................. 37
3.3 Thực hành với procedure ....................................................................................... 39
PHẦN 4: KẾT LUẬN ........................................................................................................ 41
Tài liệu tham khảo .............................................................................................................. 42

BÁO CÁO GIỮA KÌ 4


Nhóm 15: Financial Services

Phần 1: Đề tài nhóm


1.1 Tổng quan về cơ sở dữ liệu
Financial Services hay dịch vụ tài chính là những dịch vụ có liên quan chặt chẽ
đến quá trình lưu chuyển và sử dụng vốn, tiền tệ trong nền kinh tế.
Ngành dịch vụ tài chính gồm nhiều loại hình kinh doanh, bao gồm các công ty
thẻ tín dụng, công ty môi giới và nhà cung cấp dịch vụ thế chấp.
Financial Services được chia thành 2 nhóm chính:
 Dịch vụ bảo hiểm và những dịch vụ liên quan tới bảo hiểm:
o Bảo hiểm trực tiếp (bao gồm cả đồng bảo hiểm);
o Tái bảo hiểm và nhượng tái bảo hiểm;
o Trung gian bảo hiểm như môi giới, đại lí;
o Các dịch bổ trợ bảo hiểm như tư vấn thống kê bảo hiểm.
 Dịch vụ ngân hàng và những dịch vụ tài chính khác:

o Những dịch vụ ngân hàng thông thường:


 Dịch vụ nhận tiền gửi và các nguồn tài chính phải hoàn
trả khác từ nhân dân;

 Dịch vụ cho vay dưới các hình thức, bao gồm tín dụng
tiêu dùng, tín dụng thế chấp, mua nợ và tài trợ các dịch
vụ cho hoạt động giao dịch thương mại;

 Dịch vụ bảo lãnh và thế chấp;

 Dịch vụ cho thuê tài chính.

o Những dịch vụ tài chính khác:


 Dịch vụ kinh doanh chứng khoán và các sản phẩm phái
sinh như hợp đồng tương lai, hợp đồng quyền chọn,...

 Dịch vụ ngoại hối;

 Dịch vụ thanh toán và thanh toán bù trừ cho các tài sản
tài chính, bao gồm chứng khoán, các công cụ phái sinh và
các công cụ tài chính được thỏa thuận khác

BÁO CÁO GIỮA KÌ 5


Nhóm 15: Financial Services

 Dịch vụ quản lí tài sản như quản lí tiền mặt hoặc đầu tư
gián tiếp, tất cả các hình thức đầu tư tập thể, quản lí quĩ
hưu trí, các dịch vụ tín thác, gửi tiền và lưu kho tiền tệ;

 Dịch vụ cung cấp và chuyển giao thông tin tài chính và


xử lí dữ liệu tài chính và các phần mềm có liên quan do
nhà cung cấp dịch vụ tài chính khác cung cấp.
1.2 Thông tin CSDL
Cơ sở dữ liệu được download từ trang Kaggle.com thống kê dữ liệu của ngân hàng
quốc gia Eagle năm 1999 với kích thước khoảng 163MB.
1.2.1 Thông tin số lượng bản ghi của các bảng dữ liệu
Tên bảng Số lượng bản ghi Mô tả
Account 4526 Tài khoản của khách hàng
Client 5388 Thông tin của khách hàng
Card 892 Thông tin về thẻ cứng của
khách hàng
Luxury_loan_portfolio 1266 Thông tin chi tiết các
khoản vay lớn
CRM_Reviews 500 Những đánh giá của khách
hàng theo từng khu vực
Crm events 21076 Thông tin các khiếu nại,
vấn đề khi giao dịch
Crm call center logs 2993 Quản lí nhật kí cuộc gọi
khách hàng
Orders 6456 Mô tả các đơn đặt hàng
Trans 748287 Mô tả các giao dịch
Loan 682 Thông tin các khoản vay
District 77 Mô tả chi tiết địa chỉ của
khách hàng
Disposition 5538 Bảng phân loại tài khoản

BÁO CÁO GIỮA KÌ 6


Nhóm 15: Financial Services

1.2.2 Lược đồ E-R diagram

BÁO CÁO GIỮA KÌ 7


Nhóm 15: Financial Services

1.2.3 Lược đồ R-E diagram

BÁO CÁO GIỮA KÌ 8


Nhóm 15: Financial Services

1.2.4 Đánh giá mức độ chuẩn hóa


 Chuẩn 1
Vì các trường thuộc tính đều là nguyên tố và không chứa giá trị phức, giá trị
tính toán nên hầu hết các bảng trong cơ dữ liệu đều đạt chuẩn 1 trừ bảng
crm_call_center, chứa trường thuộc tính được tính toán từ trường thuộc tính khác.

Hình ảnh bảng crm_call_center.


 Chuẩn 2
Để đạt chuẩn 2 thì quan hệ đó:
 Là 1NF
 Các thuộc tính không khóa phải phụ thuộc hàm đầy đủ vào khóa
chính.
Ta nhận thấy các bảng đã đạt chuẩn 1 đều đã đạt chuẩn 2 và trừ bảng
crm_call_center vì chưa đạt chuẩn 1.

Bảng client đạt chuẩn 2

BÁO CÁO GIỮA KÌ 9


Nhóm 15: Financial Services

 Chuẩn 3
Một quan hệ đạt chuẩn 3NF nếu quan hệ đó:
 Là 2NF
 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.
Các bảng đạt chuẩn 3 gồm có: orders, trans, crm_events, disposition
Các bảng còn lại không đạt chuẩn 3 ví dụ bảng account không đạt chuẩn vì các
cột year, month, day không phụ thuộc trực tiếp vào khóa chính.

Bảng account
 Chuẩn BCNF
Một quan hệ ở dạng chuẩn BCNF nếu quan hệ đó:
 Là 3NF
 Không có thuộc tính khóa mà phụ thuộc hàm vào thuộc tính không
khóa
Các bảng đạt chuẩn BCNF là: crm_events, disposition, orders.
 Để tiếp tục chuẩn hóa các bảng ta sẽ phải tách bảng tuy nhiên trong thực tế sẽ khiến
bảng ER bị dư thừa; quá trình truy vấn hay cập nhật dữ liệu không bị ảnh hưởng vì
thế ta sẽ không chuẩn hóa tiếp.

BÁO CÁO GIỮA KÌ 10


Nhóm 15: Financial Services

Phần 2: Truy vấn dữ liệu


1. Truy vấn dữ liệu
1.1 Kiểm tra các tài khoản còn nợ cho đến hiện tại
 Output: Thông tin các tài khoản còn nợ cho đến thời điểm hiện tại
 Mã nguồn chính:
SELECT loan_id, account_id, amount, duration,
timestampdiff(month, fulldate, curdate()) AS 'Total past payments',
amount- payments*timestampdiff(month, fulldate, curdate())
AS 'Loan balance', status, fulldate, location
FROM financial_services.loan
WHERE timestampdiff(month, fulldate, curdate())<duration
ORDER BY loan_id ASC;
 Giao diện kết quả:

1.2 Kiểm tra tổng tiền thu hộ hoặc các giao dịch chuyển đến của từng ngân hàng
 Output: Tổng tiền thu hộ hoặc các giao dịch chuyển đến của từng ngân hàng
 Mã nguồn chính:
SELECT bank,
SUM(IF(operation='Collection from Another Bank', amount, 0))
AS 'Collection from Another Bank' ,
SUM(IF(operation='Remittance to Another Bank', amount, 0))

BÁO CÁO GIỮA KÌ 11


Nhóm 15: Financial Services

AS 'Remittance to Another Bank'


FROM financial_services.trans
GROUP BY bank
ORDER BY bank ASC;
 Giao diện kết quả:

1.3 Chương trình tặng quà ngày 08/03


 Output: Thông tin các khách hàng sinh vào tháng 3 hoặc có số tuổi chia hết cho 10
 Mã nguồn chính:
SELECT client_id, sex, fulldate,
concat(first,' ', middle,' ', last) AS fullname,
age, phone, email, address_1, address_2
FROM financial_services.client
WHERE sex='Female'
AND (fulldate LIKE ('%-03-%') OR (age mod 10)=0);
 Giao diện kết quả:

BÁO CÁO GIỮA KÌ 12


Nhóm 15: Financial Services

1.4 Kiểm tra tình trạng các khoản vay trên 20 năm
 Output: Thông tin các khoản vay trên 20 năm tính đến năm 2017
 Mã nguồn chính:
SELECT loan_id, funded_amount, funded_date, `duration years`,
`duration months`, `10 yr treasury index date funded`,
`interest rate percent`,payments,`loan balance`,
`total past payments`
FROM luxury_loan_portfolio
WHERE
(funded_date>='2017-01-01')
AND (funded_date<='2017-12-31')
AND (`duration years`>=20);
 Giao diện kết quả:

BÁO CÁO GIỮA KÌ 13


Nhóm 15: Financial Services

1.5 Kiểm tra tình trạng hoàn thành các khoản vay
 Output: Tình trạng hoàn thành của các khoản vay của các khách hàng có thời gian
làm việc từ 5 năm trở lên
 Mã nguồn chính:
SELECT loan_id, funded_amount, `duration months`, payments,
CONCAT(firstname,' ',middlename,' ',lastname) AS fullname,
phone, title, `employment length`,
ROUND((1- (`loan balance`/funded_amount))*100,2)
as 'Tinh trang hoan thanh khoan vay (%)'
FROM financial_services.luxury_loan_portfolio
WHERE `employment length`>=5;
 Giao diện kết quả:

BÁO CÁO GIỮA KÌ 14


Nhóm 15: Financial Services

1.6 Kiểm tra số dư của tài khoản sau giao dịch cuối cùng
 Output: Số dư của các tài khoản sau giao dịch cuối cùng
 Mã nguồn chính:
SELECT account_id, balance
FROM (
SELECT max(trans_id) as 'final_trans_id'
FROM trans
GROUP BY account_id
ORDER BY account_id)
AS newtable
INNER JOIN trans
ON newtable.final_trans_id= trans.trans_id;
 Giao diện kết quả:

BÁO CÁO GIỮA KÌ 15


Nhóm 15: Financial Services

1.7 Số lượng khách hàng nam/ nữ theo từng khu vực


 Output: Số lượng các khách hàng nam và nữ theo từng khu vực
 Mã nguồn chính:
SELECT district_id, district.city, district.state_name,
district.division,
SUM(IF(sex='Female',1,0)) AS Female,
SUM(IF(sex='Male',1,0)) AS Male
FROM client
INNER JOIN district
USING(district_id)
GROUP BY district_id
ORDER BY district_id ASC;
 Giao diện kết quả:

BÁO CÁO GIỮA KÌ 16


Nhóm 15: Financial Services

1.8 Tỉ lệ đánh giá kém theo khu vực


 Output: Tỉ lệ (%) đánh giá kém của các khu vực
 Mã nguồn chính:
SELECT district_id, city, state_name, region, division, bad, good,
round(100*bad/(bad+good),2) AS 'Ti le danh gia kem (%)'
FROM(
SELECT district_id,
SUM(IF (stars>3, 1, 0 )) AS good,
SUM(IF (stars<=3, 1, 0 )) AS bad
FROM crm_reviews
GROUP BY district_id )
AS newtable
INNER JOIN district
USING (district_id);
 Giao diện kết quả:

BÁO CÁO GIỮA KÌ 17


Nhóm 15: Financial Services

1.9 Đếm số lượng order của khách hàng


 Output: Truy vấn số lượng order của từng khách hàng.
 Mã nguồn chính:
SELECT account_id , client_id ,
CONCAT(first, ' ', middle, ' ', last) AS 'fullname' ,
COUNT(order_id) AS 'count'
FROM orders
INNER JOIN disposition
USING (account_id)
INNER JOIN client
USING (client_id)
GROUP BY client_id
ORDER BY account_id ASC;
 Giao diện kết quả:

BÁO CÁO GIỮA KÌ 18


Nhóm 15: Financial Services

1.10 Kiểm tra thông tin khách hàng có cuộc gọi bị treo
 Output: Thông tin các khách hàng bị treo cuộc gọi
 Mã nguồn chính:
SELECT crm_call_center_logs.Date_received, client.client_id,
crm_call_center_logs.call_id,
CONCAT(first, ' ', middle, ' ', last) AS 'fullname' ,
client.sex, priority,phone_final,
crm_call_center_logs.outcome
FROM crm_call_center_logs
INNER JOIN client
ON crm_call_center_logs.phone_final=client.phone
WHERE outcome='HANG'
ORDER BY date_received asc, priority desc ;
 Giao diện kết quả:

BÁO CÁO GIỮA KÌ 19


Nhóm 15: Financial Services

BÁO CÁO GIỮA KÌ 20


Nhóm 15: Financial Services

2. Tối ưu truy vấn


2.1 Index:
2.1.1 Index:
Index trong SQL là bảng tra cứu đặc biệt mà công cụ tìm kiếm cơ sở dữ liệu có thể sử dụn
g để tăng nhanh thời gian và hiệu suất truy xuất dữ liệu.
• Giúp cải thiện tốc độ cho các câu lệnh SELECT hay JOIN có các mệnh đề WHERE.
• Làm cho các câu lệnh thay đổi dữ liệu: INSERT, UPDATE và DELETE
chậm hơn.
2.1.2 Các ví dụ câu lệnh Index:
VD1:
 Trước khi dùng Index:

 Sử dụng Index:

BÁO CÁO GIỮA KÌ 21


Nhóm 15: Financial Services

Để nhìn thấy rõ hiệu quả của index, ta nhìn vào bảng đánh giá hiệu năng:
Trước Sau Hiệu năng
- Thời gian đọc kết quả dòng đầu: - Thời gian đọc kết quả dòng đầu: Giảm : 10 lần
25.151 (ms) 2.531 (ms)

- Thời gian đọc tất cả - Thời gian đọc tất cả Giảm: 31 lần
kết quả: 2545.973 (ms) kết quả: 81.523 (ms)

- Số hàng phải duyệt - Số hàng phải duyệt Giảm: 685 lần


762510 (rows) 1113 (rows)

BÁO CÁO GIỮA KÌ 22


Nhóm 15: Financial Services

VD2: Truy vấn câu lệnh: Kiểm tra thông tin khách hàng bị treo cuộc gọi:

 Trước khi dùng Index:

 Sử dụng Index:

BÁO CÁO GIỮA KÌ 23


Nhóm 15: Financial Services

So sánh hiệu năng:


Trước Sau Hiệu năng
Loại truy vấn All Ref Loại truy vấn tối ưu hơn

Số hàng phải duyệt Crm_call_ 3006 rows 416 rows Giảm: 7.2 lần
center_logs

client 5257 rows 1 rows Giảm: 5257 lần

2.2 Partition:
2.2.1 Partition:
 Partition là quá trình phân chia
table thành các phân vùng nhỏ theo một quy tắc nào đó được gọi là partition
function.
 Những điều cần lưu ý khi sử dụng partition
 Partition sẽ được bắt đầu từ index bằng 0,
 Số Partition có thể chia tối đa là 8192 partition.
 Với dữ liệu là datetime thì những function TO_DAYS(), YEAR(),
TO_SECONDS()... là cực kì hữu ích khi sử dụng trong partition, những hà
m này sẽ trả về giá trị INT or NULL.
 Tuy nhiên, nếu table quá ít dữ liệu, hoặc dữ liệu chưa đủ lớn - cỡ kho
ảng 1 triệu records thì việc partition
table cũng không có quá nhiều sự khác biệt.
2.2.2 Các loại Partition:
 Partition Range
 Trước khi tối ưu:

BÁO CÁO GIỮA KÌ 24


Nhóm 15: Financial Services

 Sử dụng Partition Range:

Kết quả:

BÁO CÁO GIỮA KÌ 25


Nhóm 15: Financial Services

Hiệu năng tối ưu:


Trước Sau Hiệu năng

Số hàng phải duyệt Số hàng phải duyệt Giảm: 788979 lần


788979 (rows) 1 (rows)

 Partition List
 Trước khi tối ưu:

 Sử dụng Partition List:

BÁO CÁO GIỮA KÌ 26


Nhóm 15: Financial Services

Kết quả:

Hiệu năng tối ưu:


Trước Sau Hiệu năng

Số hàng phải duyệt Số hàng phải duyệt 268(rows) Giảm: 20.2 lần
5412 (rows)

BÁO CÁO GIỮA KÌ 27


Nhóm 15: Financial Services

Phần 3: Cập nhật dữ liệu


1. Thủ tục cập nhật dữ liệu(procedure):
1.1 Giới thiệu về thủ tục.
1.1.1 Định nghĩa: Một thủ tục được lưu trữ(a stored procedure)là một phân khúc
các câu lệnh SQL khai báo được lưu trữ bên trong máy chủ MySQL.
1.1.2 Lợi ích:
 Giảm lưu lượng mạng: Các thủ tục được lưu trữ giúp giảm lưu lượng
mạng giữa các ứng dụng và MySQL Server. Bởi thay vì gửi nhiều câu
lệnh SQL dài dòng, các ứng dụng chỉ phải gửi tên và tham số của các thủ
tục được lưu trữ.
 Tập trung logic nghiệp vụ: Bạn có thể sử dụng các thủ tục được lưu trữ
để triển khai logic nghiệp vụ có thể được sử dụng lại bởi nhiều ứng dụng.
Các thủ tục được lưu trữ giúp giảm thiểu nỗ lực sao chép cùng một logic
trong nhiều ứng dụng và làm cho cơ sở dữ liệu của bạn nhất quán hơn
 Tăng tính bảo mật.
1.1.3 Bất lơi:
 Sử dụng nhiều tài nguyên.
 Khó sửa lỗi: khó để gỡ lỗi các thủ tục được lưu trữ bởi MySQL không
cung cấp bất kỳ cơ sở nào để gỡ lỗi các thủ tục được lưu trữ giống như
các sản phẩm cơ sở dữ liệu doanh nghiệp khác như Oracle và SQL
Server.
 Bảo trì: Việc phát triển và duy trì các thủ tục được lưu trữ thường đòi hỏi
một bộ kỹ năng chuyên biệt mà không phải nhà phát triển ứng dụng nào
cũng có. Điều này có thể dẫn đến các vấn đề trong cả phát triển và bảo trì
ứng dụng.
1.2 Các thủ tục trong bài tập lớn:
Trong bài tập lớn, nhóm chúng em đã tạo ra tất cả 36 procedure.

BÁO CÁO GIỮA KÌ 28


Nhóm 15: Financial Services

(các procedure nhóm đã viết)


Chúng em sẽ trình bày cụ thể hai procedure là thêm account và xóa account:
1.2.1 Procedure thêm account:
Mã nguồn:

BÁO CÁO GIỮA KÌ 29


Nhóm 15: Financial Services

Kết quả sau khi gọi procedure thêm account: account có account_id là A00011383 đã xuất
hiện ngay dòng đầu tiên.

1.2.2 Xóa account:


Mã nguồn:

BÁO CÁO GIỮA KÌ 30


Nhóm 15: Financial Services

Kết quả sau khi gọi procedure xóa account: account A00011383 đã được xóa khỏi bảng.

2. Transaction.

BÁO CÁO GIỮA KÌ 31


Nhóm 15: Financial Services

2.1 Giới thiệu về transaction.


2.1.1 Khái niệm: là tiến trình thực hiện một nhóm các câu lệnh SQL. Các câu lệnh
này được thực thi một cách tuần tự và độc lập. Một Transaction được thực hiện
thành công khi tất cả câu lệnh đều thành công, khi đó tất cả các thay đổi dữ liệu
được thực hiện trong Transaction được lưu vào cơ sở dữ liệu. Tuy nhiên, nếu chỉ
một trong số đó thất bại thì toàn bộ tiến trình sẽ thất bại, đồng nghĩa với việc dữ
liệu phải rollback về trạng thái ban đầu (dữ liệu được khôi phục về trạng thái trước
khi thực hiện Transaction).
2.1.2 Thuộc tính của transaction:
 Tính bảo toàn: khi một bước trong tiến trình thất bại, dữ liệu được khôi
phục về trạng thái ban đầu, tránh tình trạng sai lệch dữ liệu.
 Tính nhất quán: đảm bảo rằng cơ sở dữ liệu thay đổi chính xác các trạng
thái khi một transaction được thực thi thành công.
 Tính độc lập: đảm bảo các transaction hoạt động và thực thi độc lập với
nhau.
 Tính bền vững: đảm bảo rằng kết quả của một transaction được xác
định, không có chuyện dữ liệu của Transaction sau khi thực thi có thể
chuyển lại trạng thái dữ liệu lúc trước khi thực hiện.
2.2 Transaction trong bài tập lớn.
Trong bài tập lớn, chúng em đã tạo ra ba transaction là tạo một district mới,
thay đổi địa chỉ của một khách hàng và xóa một account.
2.2.1 Transaction thêm khách hàng có mã district mới.
 Mô tả tình huống: Khi thêm một khách hàng mới mà địa chỉ là một thành
phố chưa có mã district, cần tiến hành
thêm mã district mới, sau đó thêm khách hàng đó vào bảng client.
 Mã nguồn:

 Kết quả sau khi chạy transaction


Sau khi chạy transaction, thì khách hàng có địa chỉ mà mã district mới
đã được thêm vào.

BÁO CÁO GIỮA KÌ 32


Nhóm 15: Financial Services

2.2.2 Transaction đổi địa chỉ khách hàng.


 Mô tả tình huống: Khi một khách hàng chuyển nơi ở, khi đó cần cập nhật
lại địa chỉ của khách hàng đó.
 Mã nguồn:
Đầu tiên phải xác định được mã district khớp với địa chỉ mới mà khách
hàng ở.
Sau đó mới cập nhật lại các thông tin liên quan đến địa chỉ mới của
khách hàng như: address_1, district_id, state.

 Kết quả sau khi chạy transaction:


Trước khi chạy thì khách hàng C0000001 có địa chỉ là 387 Wellington
Ave, Albuquerque, NM, district_id là 18.

BÁO CÁO GIỮA KÌ 33


Nhóm 15: Financial Services

Sau khi thực hiện khách hàng C00000001 đã được đổi địa chỉ thành 80
Second St, New York City, NY, district_id là 1:

2.2.3 Transaction xóa một account.


 Mô tả tình huống: khi một khách hàng không sử dụng dịch vụ, yêu cầu
hủy tài khoản của ngân hàng, thì cần xóa tài khoản và các thông tin phụ
thuộc vào tài khoản.
 Mã nguồn:

BÁO CÁO GIỮA KÌ 34


Nhóm 15: Financial Services

 Kết quả sau khi thực hiện transaction:tài khoản có mã id là A00000001


đã được xóa:

BÁO CÁO GIỮA KÌ 35


Nhóm 15: Financial Services

3. Tạo và chép dữ liệu sang CSDL mới cùng cấu trúc


3.1 Tạo mới cơ sở dữ liệu

Có nhiều cách để tạo được một cơ sở dữ liệu mới có cấu trúc giống cơ sở dữ liệu cũ
nhưng do chưa hiểu rõ nên chúng em dùng cách đơn giản hơn là sử dụng công cụ
Reverse \ Forward Engineer

Reverse Engineer giúp chúng ta tạo ra 1 diagram từ cơ sở dữ liệu cũ, và từ diagram


đó, tiếp tục sử dụng công cụ Forward Engineer ta sẽ được các câu lệnh dùng để
sinh ra một cơ sở dữ liệu có cùng cấu trúc với cơ sở dữ liệu ban đầu.

Sau khi chạy các câu lệnh này, chúng ta có được một cơ sở dữ liệu mới với cấu trúc
giống cơ sở dữ liệu ban đầu

BÁO CÁO GIỮA KÌ 36


Nhóm 15: Financial Services

3.2 Sinh câu lệnh tạo procedure:

Do những hạn chế về mặt kiến thức nên chúng em xin phép dùng cách tạo các
procedure bằng hàm CONCAT như hình dưới:

 Giải thích: chèn vào database mới lần lượt các bảng với các thuộc tính giống
với các bảng ở database cũ thông qua câu lệnh INSERT INTO.

Sau khi chạy, chúng ta được các câu lệnh tạo procedure, tương ứng với 12 bảng ở
database cũ là 12 câu lệnh sinh procedure:

BÁO CÁO GIỮA KÌ 37


Nhóm 15: Financial Services

BÁO CÁO GIỮA KÌ 38


Nhóm 15: Financial Services

3.3 Thực hành với procedure


Sau khi tạo được các procedure, chúng ta tiến hành gọi các procedure này để sao chép dữ
liệu từ database cũ sang database mới thông qua câu lệnh CALL :

Các câu lệnh này phải được sắp xếp theo thứ tự nhất định, những bảng nào chứ khóa ngoại
của bảng khác thì phải gọi sau.

Ví dụ bảng District có khóa ngoại là district_id và bảng Account lại chứa khóa ngoại này
thì phải gọi procedure tạo bảng District trước rồi mới gọi đến bảng Account. (Việc này để
tránh lỗi Foreign Key Constraint)

Dưới đây là 1 số response của chương trình trong quá trình chạy:
Sau khi tạo được 1 database mới:

BÁO CÁO GIỮA KÌ 39


Nhóm 15: Financial Services

Sinh ra các procedure để copy dữ liệu:

Sau khi chạy các procedure copy dữ liệu:

BÁO CÁO GIỮA KÌ 40


Nhóm 15: Financial Services

Phần 4: Kết luận


1. Tổng kết những điều đã làm được:
 Tìm hiểu và phân tích về cơ sở dữ liệu mẫu (mô tả và đánh giá chuẩn hóa dữ liệu)
 Vận dụng kiến thức đã học, tìm hiểu và sử dụng MySQL để làm việc với dữ liệu
 Thực hiện truy vấn dữ liệu cơ bản theo nghiệp vụ thực tế
 Tối ưu hóa truy vấn bằng cách sử dụng Index và Partition có hiệu quả
 Quản lý data: Viết các procedure để cập nhập dữ liệu
2. Hạn chế:
 Chưa tạo được các bảng giống database cũ mà phải dùng forward engineer
 Chưa làm được phần cập nhập tự động
3. Tổng kết những điều đã học được
 Có thêm kiến thức về chủ đề financial services (cụ thể là retail banking)
 Đánh index và partition, cách đánh giá hiệu năng tối ưu truy vấn
 Biết cách tìm hiểu và sửa lỗi khi gặp (như lỗi timeout, lỗi khi sử dụng câu lệnh, lỗi
liên quan đến khóa ngoại,…)
 Tăng kỹ năng làm việc nhóm

BÁO CÁO GIỮA KÌ 41


Nhóm 15: Financial Services

Tài liệu tham khảo


[1] Nguyễn Kim Anh, Nguyên lý của các hệ cơ sở dữ liệu, NXB ĐH quốc gia Hà Nội, 2004
[2] Trần Nguyên Phong, Giáo trình thực hành SQL
[3] Elmasri Navathe, Fundamentals of Database Systems 7th edition

BÁO CÁO GIỮA KÌ 42

You might also like