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

báo cáo bài tập lớn môn cơ sở dữ liệu nhóm 15 financial services

42 1 0
Tài liệu đã được kiểm tra trùng lặp

Đ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

Nội dung

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

Trang 1

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

Trang 2

Đá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:

Trang 3

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.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

Trang 4

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

Trang 5

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

Trang 6

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

khách hàng

Trang 7

1.2.2 Lược đồ E-R diagram

Trang 8

1.2.3 Lược đồ R-E diagram

Trang 9

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

Trang 10

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

Trang 11

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:

Trang 12

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ả:

Trang 13

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ả:

Trang 14

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ả:

Trang 15

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ả:

Trang 16

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ả:

Trang 17

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ả:

Trang 18

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ả:

Trang 19

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ả:

Trang 21

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ụng để 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:

Trang 22

Để nhìn thấy rõ hiệu quả của index, ta nhìn vào bảng đánh giá hiệu năng:

- Thời gian đọc kết quả dòng đầu: 25.151 (ms)

- Thời gian đọc kết quả dòng đầu: 2.531 (ms)

- Số hàng phải duyệt 762510 (rows)

- Số hàng phải duyệt 1113 (rows)

Giảm: 685 lần

Trang 23

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:

Trang 24

So sánh hiệu năng:

Số hàng phải duyệt Crm_call_

center_logs 3006 rows 416 rows Giảm: 7.2 lần 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:

Trang 25

Sử dụng Partition Range:

Kết quả:

Trang 26

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

Số hàng phải duyệt 788979 (rows)

Số hàng phải duyệt 1 (rows)

Giảm: 788979 lần

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

Sử dụng Partition List:

Trang 27

Kết quả:

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

Số hàng phải duyệt 5412 (rows)

Số hàng phải duyệt 268(rows)

Giảm: 20.2 lần

Trang 28

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

Trang 30

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:

Trang 31

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

2 Transaction

Trang 32

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:

Trang 33

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 đó

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

Trang 34

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:

Trang 35

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

Trang 36

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

Ngày đăng: 29/05/2024, 18:11

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w