Download as pdf or txt
Download as pdf or txt
You are on page 1of 29

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

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

Bộ môn Cơ sở dữ liệu

**********

TIỂU LUẬN GIỮA KỲ


ĐỀ TÀI: HEALTHCARE

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

Sinh viên thực hiện: Nguyễn Manh Thắng 20195915


Lê Khánh Thành 20195917
Hà Quang Hanh 20195870
Lê Văn Khiêm 20195892
Trần Thị Hồng Vân 20195941
1 Tiểu luận giữa kỳ môn cơ sở dữ liệu

Mục Lục
Phần I: Đề tài nhóm ............................................................................ 2
1.1 Tổng quan về cơ sở dữ liệu ............................................................. 2
1.2Thông tin cơ sở dữ liệu .................................................................... 2
1.2.1Mức độ chuẩn hóa: .................................................................... 4
PHẦN 2: Tuy vấn dữ liệu ................................................................... 4
2.1 CÁC CÂU TRUY VẤN.................................................................. 4
2.2 . TỐI ƯU TRUY VẤN .................................................................. 10
2.2.1 Tối ưu bằng cách đánh index ................................................. 10
2.2.2 Tối ưu truy vấn bằng cách sử dụng partition ......................... 11
Phần 3: Cập nhật dữ liệu ................................................................... 15
3.1 Procedure ....................................................................................... 15
3.1.1 Procedure insert ...................................................................... 15
3.1.2 Procedure delete ..................................................................... 16
3.1.3.Procedure update .................................................................... 17
3.1.4. Procedure tìm y tá .................................................................. 18
3.1.5 .Procedure tính tiền viện phí................................................... 18
Phần 4 : Sao chép dữ liệu ................................................................... 19
Phần 5 : Transaction .......................................................................... 20
5.1 Tổng quan về transaction................................................................ 20
5.2 Các thuộc tính của transaction ....................................................... 20
5.3 Rủi ro khi thực hiện transaction ..................................................... 21
5.4 Các transaction thực thi .................................................................. 21
Tổng kết ................................................................................................... 28

Nhóm 1: HEALTHCARE Giảng viên: Nguyễn Danh Tú


2 Tiểu luận giữa kỳ môn cơ sở dữ liệu

PHẦN I: ĐỀ TÀI NHÓM


1.1 Tổng quan về cơ sở dữ liệu
Chủ đề của nhóm là Health Care nói về lĩnh vực y tế, chăm sóc sức khỏe
cũng như điều trị, chuẩn đoán các căn bệnh ở người,... vì vậy lượng thông tin,
dữ liệu của bệnh nhân, của bác sĩ, của bệnh viện là rất lớn nên việc quản lý,
thao tác và lưu trữ là rất cần thiết.
Nhóm thiết kế một cơ sở dữ liệu mô phỏng cơ cấu hoạt động của một bệnh
viện.

1.2Thông tin cơ sở dữ liệu


Nguồn dữ liệu được tìm trên Kaggle, Github.com, Data.world,... và cũng như được
sinh ngẫu qua Microsoft Excel.
• Số lượng các bản ghi:

Gồm 15 bảng: affiliated_with, appointment, block, department, doctor,


medication, nurse, on_call, patient, prescribes, room, stay,trained_in, treatment,
undergoes.

Nhóm 1: HEALTHCARE Giảng viên: Nguyễn Danh Tú


3 Tiểu luận giữa kỳ môn cơ sở dữ liệu

Sơ đồ ER Diagram:

Sơ đồ RE Diagram:

Nhóm 1: HEALTHCARE Giảng viên: Nguyễn Danh Tú


4 Tiểu luận giữa kỳ môn cơ sở dữ liệu

1.2.1Mức độ chuẩn hóa:


- Tất cả các bảng đều thỏa mãn các điều kiện: các thuộc tính của bảng đều là
nguyên tố vì vậy cơ sở dữ liệu đạt chuẩn 1NF.
- Các bảng (trừ bảng trained_in, affiliated_with) đều chỉ có một thuộc tinhd duy
nhất là khóa chính. Các thuộc tính không khóa của mỗi bảng đều phụ thuộc hàm
đầy đủ vào khóa chính. Vì vậy các bảng này đạt chuẩn 2NF.
Cơ sỏ dữ liệu này đạt chuẩn 2NF.
- Mội thuộc tính không khóa phụ thuộc tất cả các bảng đều không phụ thuộc bắc cầu
vào khóa chính ( phụ thuộc trực tiếp vào khóa chính). Vậy cơ sở dữ liệu đạt chuẩn
3NF.
- Cơ sở dữ liệu không đạt chuẩn BCNF do có bảng có khóa phụ thuộc vào thuộc
tính không khóa.

PHẦN 2: TRUY VẤN DỮ LIỆU


2.1 CÁC CÂU TRUY VẤN
1 - Số lượng bác sỹ của từng khoa sắp xếp theo thứ tự giảm dần
2 - Chuyên ngành có số lượng nhiều hơn 100 bác sỹ
3 - Thứ tự các bác sỹ thuộc khoa Medical Department với ID tăng dần
4 - Danh sách đơn thuốc của các bệnh nhân có ID trong khoảng từ 100000000 đến
999999999
5 - Danh sách bệnh nhân không phải nằm viện
6 - Danh sách thông tin phòng bệnh của bệnh nhân
7 - Tên của bác sỹ và bệnh nhân trong mỗi cuộc hẹn
8 - Bác sỹ Fair kitney có cuộc hẹn với bệnh nhân nào? Khi nào?
9 - Danh sách bác sỹ chuyên ngành phẫu thuật đã chữa cho bệnh nhân nào và phác đồ
điều trị của bệnh nhân đó.
10 - Danh sách bác sỹ kê đơn thuốc giảm đau cho bệnh nhân vào ngày nào
KẾT QUẢ CÁC CÂU LỆNH TRUY VẤN
1 - Số lượng bác sỹ của từng khoa sắp xếp theo thứ tự giảm dần

Nhóm 1: HEALTHCARE Giảng viên: Nguyễn Danh Tú


5 Tiểu luận giữa kỳ môn cơ sở dữ liệu

2 - Chuyên ngành có số lượng nhiều hơn 100 bác sỹ

Nhóm 1: HEALTHCARE Giảng viên: Nguyễn Danh Tú


6 Tiểu luận giữa kỳ môn cơ sở dữ liệu

3 - Thứ tự các bác sỹ thuộc khoa Medical Department với ID tăng dần

4 - Danh sách đơn thuốc của các bệnh nhân có ID trong khoảng từ 100000000 đến
999999999

5 - Danh sách bệnh nhân không phải nằm viện

Nhóm 1: HEALTHCARE Giảng viên: Nguyễn Danh Tú


7 Tiểu luận giữa kỳ môn cơ sở dữ liệu

6 - Danh sách thông tin phòng bệnh của bệnh nhân

Nhóm 1: HEALTHCARE Giảng viên: Nguyễn Danh Tú


8 Tiểu luận giữa kỳ môn cơ sở dữ liệu

7 - Tên của bác sỹ và bệnh nhân trong mỗi cuộc hẹn

8 - Bác sỹ Fair kitney có cuộc hẹn với bệnh nhân nào? Khi nào?

Nhóm 1: HEALTHCARE Giảng viên: Nguyễn Danh Tú


9 Tiểu luận giữa kỳ môn cơ sở dữ liệu

9 - Danh sách bác sỹ chuyên ngành phẫu thuật đã chữa cho bệnh nhân nào và phác đồ
điều trị của bệnh nhân đó.

10 - Danh sách bác sỹ kê đơn thuốc giảm đau cho bệnh nhân vào ngày nào

Nhóm 1: HEALTHCARE Giảng viên: Nguyễn Danh Tú


10 Tiểu luận giữa kỳ môn cơ sở dữ liệu

2.2 . TỐI ƯU TRUY VẤN


2.2.1 Tối ưu bằng cách đánh index
Thực hiện tối ưu truy vấn: truy vấn tất cả các bệnh nhân có địa chỉ là Hollow Ridge
Trước khi Index:

Sau khi Index:

Đầu tiên thực hiện truy vấn khi chưa có index, thời gian truy vấn là 8.982ms để ra
kết quả đầu tiên và 91.852ms để truy vấn ra hết kết quả thì sau khi tạo index ở cột
Address, thời gian truy vấn giảm xuống còn 0,020ms để ra kết quả đầu tiên và 1.379ms
để truy vấn ra hết kết quả. Như vậy thời gian truy vấn đã nhanh gấp khoảng 70 lần. Trước

Nhóm 1: HEALTHCARE Giảng viên: Nguyễn Danh Tú


11 Tiểu luận giữa kỳ môn cơ sở dữ liệu

khi đánh index, số bản ghi cần duyệt qua là 109938 dòng. Sau khi đánh index, CSDL chỉ
cần duyệt qua 265 dòng.
Vì vậy thời gian truy vấn giảm đáng kể.
2.2.2 Tối ưu truy vấn bằng cách sử dụng partition
RANGE PARTITION
Trước khi dùng Partition:

Sau khi dùng partition:

Nhóm 1: HEALTHCARE Giảng viên: Nguyễn Danh Tú


12 Tiểu luận giữa kỳ môn cơ sở dữ liệu

Thực hiên câu lệnh truy vấn tất cả các bệnh nhân ở lại bệnh viện tại phòng 123 và bắt đầu
ở từ ngày 31-01-2020.
Trước khi Partition, thời gian truy vấn là 0,047s (dòng output 1). Sau khi sử dụng Range
Partition, chia cột StayStart thành 4 khoảng, câu lệnh truy vấn chỉ tốn 0.015s, giảm
khoảng 3 lần so với trước.
Bảng Explain:
Trước khi dùng Partition:

Sau khi dùng partition:

Nhóm 1: HEALTHCARE Giảng viên: Nguyễn Danh Tú


13 Tiểu luận giữa kỳ môn cơ sở dữ liệu

Trước khi Partition, số bản ghi phải duyệt qua là 54095 bản ghi. Sau khi sử dụng
Partition, số bản ghi phải duyệt là 13610 bản ghi. Số lượng bản ghi cần duyệt đã giảm, số
bản ghi cần truy vấn chỉ nằm trong partitions ‘time0’.
LIST PARTITION
Trước khi dùng Partition:

Sau khi dùng partition:

Nhóm 1: HEALTHCARE Giảng viên: Nguyễn Danh Tú


14 Tiểu luận giữa kỳ môn cơ sở dữ liệu

Thực hiên câu lệnh truy vấn tất cả các bệnh nhân ở lại bệnh viện tại phòng 105 và phòng
126.
Trước khi Partition, thời gian truy vấn là 0,016s (dòng output 1). Sau khi sử dụng List
Partition, chia cột RoomID thành 4 danh sách, câu lệnh truy vấn chỉ tốn xấp xỉ 0.000s,
giảm so với trước khi partition.
Bảng Explain:
Trước khi dùng Partition:

Sau khi dùng partition:

Nhóm 1: HEALTHCARE Giảng viên: Nguyễn Danh Tú


15 Tiểu luận giữa kỳ môn cơ sở dữ liệu

Trước khi Partition, số bản ghi phải duyệt qua là 54095 bản ghi. Sau khi sử dụng
Partition, số bản ghi phải duyệt là 526 bản ghi. Số lượng bản ghi cần duyệt đã giảm, số
bản ghi cần truy vấn chỉ nằm trong partitions ‘R1’ và ‘R2’.

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


3.1 Procedure
Procedure (Thủ tục) là một chương trình trong cơ sở dữ liệu gồm nhiều câu lệnh
mà bạn lưu lại cho những lần sử dụng sau. Trong MySQl , bạn có thể truyền các tham
số vào procedure, tuy nó không trả về một giá trị cụ thể như function (hàm) nhưng
cho biết việc thực thi thành công hay thất bại
Ưu điểm Nhược điểm
✓ Hiệu suất tốt ✓ Tốn bộ nhớ
✓ Năng suất cao hơn ✓ Khả năng gỡ lỗi
✓ Linh động ✓ Khó thay đổi
✓ Bảo mật tốt ✓ Cần kỹ năng tốt
✓ Giảm băng thông

Sau đây là 1 số procedure mà nhóm em đã làm được:


• Procedure insert
• Procedure delete
• Procedure update
• Procedure tính toán
• Procedure tìm kiếm
3.1.1 Procedure insert

Trường hợp khi bệnh viện có thêm bác sỹ

Nhóm 1: HEALTHCARE Giảng viên: Nguyễn Danh Tú


16 Tiểu luận giữa kỳ môn cơ sở dữ liệu

*Với các table khác em vào tương tự với các câu lệnh trên vì nhóm em chưa tìm hiểu
kỹ các công cụ tự sinh procudure
3.1.2 Procedure delete
Trường hợp khi bác sỹ chuyển công tác

Nhóm 1: HEALTHCARE Giảng viên: Nguyễn Danh Tú


17 Tiểu luận giữa kỳ môn cơ sở dữ liệu

3.1.3.Procedure update
Trường hợp khi bệnh nhân cần chữa trị thêm và pháp sinh thêm viện phí

*Ta có thể thấy là đây hiển thị Treatment ID , tên phương pháp điều trị, giá của
phương pháp điều trị đó. Và sau đó em thêm 1 bệnh tên là Ung Thu và
Cost = 3000

*Sau khi được thêm Ung thu vào TreatmentID 1211 thì Cost = 6000

Nhóm 1: HEALTHCARE Giảng viên: Nguyễn Danh Tú


18 Tiểu luận giữa kỳ môn cơ sở dữ liệu

3.1.4. Procedure tìm y tá


Với procedure này ta có thể thấy được y tá nào , tên gì và làm việc ở tòa nhà nào
và tầng số mấy .

3.1.5 .Procedure tính tiền viện phí


Ta có thể tính được số tiền viện phí của bệnh nhân, tên bệnh nhân, tên bệnh và
giá tiền viện phí

Nhóm 1: HEALTHCARE Giảng viên: Nguyễn Danh Tú


19 Tiểu luận giữa kỳ môn cơ sở dữ liệu

Phần 4 : Sao chép dữ liệu


Đầu tiên ta sử dụng công cụ Reveser/ Forward Engineer để tạo ra 1 schemal và các
bảng y hệt như table của schemal cũ

Schemal cũ là healthcare với 13 tables

Schemal healthcare1 mới đã được tạo từ các table của schemal cũ bằng các copy/paste

Sử dụng câu lệnh insert into để copy data từ database cũ sang database mới
(Phần này nhóm em có sử dụng câu lệnh để tự sinh procedure)

Nhóm 1: HEALTHCARE Giảng viên: Nguyễn Danh Tú


20 Tiểu luận giữa kỳ môn cơ sở dữ liệu

Đây là kết quả của việc gọi các procedure . Data của mỗi bảng đã được update
sang schemal mới .

Phần 5 : Transaction
5.1 Tổng quan về transaction
Transaction trong SQL là một đơn vị công việc được thực hiện bởi một Database. Một
transaction là một sự lan truyền của một hoặc nhiều thay đổi tới Database. Nói cách khác,
một Transaction sẽ không bao giờ hoàn thành trừ khi mỗi hoạt động riêng bên trong
nhóm được thực hiện thành công. Nếu bất kỳ hoạt động nào bên trong Transaction thất
bại, thì toàn bộ Transaction đó sẽ thất bại.

5.2 Các thuộc tính của transaction.


Transaction có 4 property chuẩn và thường được biết đến với tên lược danh là ACID:

• Atomicity: bảo đảm rằng tất cả hoạt động bên trong đơn vị công việc được hoàn
thành một cách thành công; nếu không, transaction bị ngừng ở điểm thất bại, và
các hoạt động trước được trao trả về trạng thái trước đó.
• Consistency: bảo đảm rằng Database thay đổi một cách chính xác trạng thái theo
một transaction đã được ký thác thành công.
• . Isolation: cho các transaction khả năng hoạt động một cách độc lập và không
liên quan đến nhau

Nhóm 1: HEALTHCARE Giảng viên: Nguyễn Danh Tú


21 Tiểu luận giữa kỳ môn cơ sở dữ liệu

• Durability: bảo đảm rằng kết quả hoặc tác động của một transaction, mà đã được
ký thác, vẫn còn tồn tại trong trường hợp hệ thống thất bại.

Trong MySQL, các Transaction bắt đầu với lệnh BEGIN WORK và kết thúc với hoặc
một lệnh COMMIT hoặc lệnh ROLLBACK. Các lệnh SQL giữa các lệnh bắt đầu và kết
thúc cấu tạo nên Transaction.

5.3 Rủi ro khi thực hiện transaction


-Việc thực thi operation bị hỏng.
-Vấn đề về phần cứng và mạng.
-Các vấn đề với dữ liệu dùng chung.

5.4 Các transaction thực thi


*Khi bệnh viện tuyển thêm bác sĩ mới
- Thao tác cần thực thi:
+Thêm dữ liệu cá nhân bác sĩ vào hồ sơ lưu trữ
+Thêm dữ liệu bác sĩ vào bộ phận mới.
+Thêm dữ liệu thời gian thực tập công việc mới.
-Các bước thực hiện:
+ Dùng lệnh insert into đổ dữ liệu vào bảng doctor trước vì bảng có dữ liệu không
liên qua đến khóa ngoại của bảng aflilliated_with và trained_in
+ Tiếp tục đổ dữ liệu vào các bảng còn lại.
+ Ở đầu transaction có lệnh setautocomit = 0 thì một tập, có thứ tự, của các câu
lệnh sẽ đóng vai trò như là một transaction và không có một hoạt động nào là được
xuất phát cho đến có một lệnh Commit khác được đưa ra.
+ Nếu một lệnh không thực hiện đc sẽ trả về dữ liệu ban đầu.

Nhóm 1: HEALTHCARE Giảng viên: Nguyễn Danh Tú


22 Tiểu luận giữa kỳ môn cơ sở dữ liệu

Kết quả:

Nhóm 1: HEALTHCARE Giảng viên: Nguyễn Danh Tú


23 Tiểu luận giữa kỳ môn cơ sở dữ liệu

Nhóm 1: HEALTHCARE Giảng viên: Nguyễn Danh Tú


24 Tiểu luận giữa kỳ môn cơ sở dữ liệu

*Bệnh nhân yêu cầu đổi thuốc điều trị:


-thao tác cần thực thi:
+xóa bác sĩ kê đơn
+xóa thời gian điều trị với loại thuốc cũ
+xóa đi thời gian dự tính khám
+thêm dữ liệu mới của thuốc và thời gian điều trị
Các bướu thực hiện: xóa lần lượt bác sĩ có id theo yêu cầu ở các bảng presscible,
undergoes, xóa thông tin bệnh nhân ở bảng appointment.
+đổ dữ liệu lần lượt vào các bảng appointment, prescible, undergoes.
+thiết lập điểm SP1 để khi đổ dữ liệu lỗi sẽ quay trở lại bước SP1.

Nhóm 1: HEALTHCARE Giảng viên: Nguyễn Danh Tú


25 Tiểu luận giữa kỳ môn cơ sở dữ liệu

Kết quả:

Nhóm 1: HEALTHCARE Giảng viên: Nguyễn Danh Tú


26 Tiểu luận giữa kỳ môn cơ sở dữ liệu

*khi bác sĩ được bổ nhiệm vào chức vụ mới và làm việc ở hai bộ phận:
Các thao tác yêu cầu:
+thêm thông tin bác sĩ vào bộ phận mới.
+cập nhật chức vụ cho bác sĩ.
Các bước thực hiện:
+dung hàm update để cập nhật chức vụ cho bác sĩ.
+dung hàm insert into để đưa dữ liệu bác sĩ vào bộ phận chuyển đến.

Nhóm 1: HEALTHCARE Giảng viên: Nguyễn Danh Tú


27 Tiểu luận giữa kỳ môn cơ sở dữ liệu

Kết quả:

Nhóm 1: HEALTHCARE Giảng viên: Nguyễn Danh Tú


28 Tiểu luận giữa kỳ môn cơ sở dữ liệu

Tổng kết

Những điều mà nhóm đã làm được là:


● Xây dựng được lược đồ quan hệ
● Đánh giá các chuẩn
● Sử dụng index và partition để tối ưu truy vấn
● Tạo được procedure
● Sao chép dữ liệu
● Đã thao tác được transaction Nhóm cũng học thêm cách sinh dữ liệu ngẫu nhiên
bằng Excel; kết nối Database với các ngôn ngữ lập trình như Python để xử lý dữ
liệu; viết các Procedure sinh ra câu Query tự động
● Nhóm cũng đã được trải nghiệm và nâng cao kỹ năng làm việc nhóm online trong
thời gian dịch bệnh.
Những điều mà nhóm em chưa làm được là:
● Sơ đồ R-E diagram còn khó hiểu
● Transaction còn đơn giản
● Chưa tương tác nhiều với lớp
Nhóm em xin cảm ơn những kiến thức bổ ích mà thầy Nguyễn Danh Tú đã giảng
dạy cho lớp em trong học phần này. Bài làm của nhóm không tránh khỏi thiếu sót,
rất mong được sự góp ý của thầy và các bạn!
Dưới đây là bảng đánh giá nhóm:

Nhóm 1: HEALTHCARE Giảng viên: Nguyễn Danh Tú

You might also like