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

HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG

KHOA CÔNG NGHỆ THÔNG TIN


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

BÁO CÁO BÀI TẬP LỚN


CƠ SỞ DỮ LIỆU

Đề tài:
QUẢN LÝ BỆNH NHÂN KHÁM BỆNH TẠI BỆNH VIỆN

Nhóm lớp: 10
Nhóm bài tập lớn: 4
Giảng viên hướng dẫn: Phan Thị Hà

Hà Nội - 2023
MỤC LỤC
Danh sách sinh viên ....................................................................................................... 1
PHẦN I: KỊCH BẢN THẾ GIỚI THỰC .................................................................... 2
I. Ứng dụng của hệ cơ sở dữ liệu ............................................................................... 2
II. Yêu cầu về dữ liệu cần được lưu trữ ....................................................................... 2
III. Các thao các trên cơ sở dữ liệu ............................................................................. 2
PHẦN II: THIẾT KẾ CƠ SỞ DỮ LIỆU .................................................................... 3
I. Lược đồ E-R............................................................................................................ 3
II. Phân tích lược đồ E -R ............................................................................................ 5
PHẦN III: ÁNH XẠ LƯỢC ĐỒ E-R SANG LƯỢC ĐỒ QUAN HỆ VÀ CHUẨN
HÓA ..................................................................................................................... 6
I. Lược đồ quan hệ trước khi chuẩn hóa ................................................................ 6
II. Các phụ thuộc hàm và khóa của từng lược đồ ................................................... 8
III. Chuẩn hóa 3NF ................................................................................................. 11
IV. Lược đồ quan hệ sau khi chuẩn hóa ............................................................... 15
PHẦN IV: CÀI ĐẶT HỆ THỐNG............................................................................. 16
I. Tạo database và các bảng, thêm dữ liệu vào từng bảng .................................. 17
II. Các câu truy vấn, ứng dụng của hệ thống ....................................................... 35

0
Danh sách sinh viên
STT Mã sinh viên Họ và tên
1 B21DCCN603 Trần Lệ Phương
2 B21DCCN335 Nguyễn Thị Thu Hiền
3 B21DCCN601 Nguyễn Mai Phương
4 B21DCCN157 Nông Triệu Lan Anh
5 B21DCCN639 Nguyễn Thị Quyên
6 B21DCCN507 Nguyễn Thị Mai Ly
7 B21DCCN579 Trần Thị Phương Nhung
8 B21DCAT045 Bùi Thị Quỳnh Chi
9 B21DCCN246 Nguyễn Minh Đức
10 B21DCCN055 Bùi Huy Hoàng

1
PHẦN I: KỊCH BẢN THẾ GIỚI THỰC
I. Ứng dụng của hệ cơ sở dữ liệu
Qua khảo sát hoạt động của bệnh viện ta thấy cần phải quản lý dữ liệu việc khám
bệnh của bệnh khân khi đến bệnh viện, thông tin của bác sĩ làm việc trong bệnh viện,
bệnh được chẩn đoán, loại xét nghiệm mà bệnh nhân phải làm, các loại thuốc, các
loại điều trị, hóa đơn đóng tiền khi sử dụng dịch vụ, …
II. Yêu cầu về dữ liệu cần được lưu trữ
- Dữ liệu về Khoa bao gồm: Mã khoa, Tên khoa, Số lượng người.
- Dữ liệu về Bác sĩ bao gồm: Mã bác sĩ, Họ tên, Ngày sinh, Giới tính, Địa chỉ, Học
hàm học vị, Số điện thoại.
- Dữ liệu về Bệnh nhân bao gồm: Mã bệnh nhân, Họ tên, Giới tính, Ngày sinh,
Nghề nghiệp, Địa chỉ, Số điện thoại.
- Dữ liệu về Khoản chi phí bao gồm: Mã khoản CP, Tên khoản CP, Đơn giá.
- Dữ liệu về Bệnh bao gồm: Mã bệnh, Tên bệnh, Triệu chứng.
- Dữ liệu về Thuốc bao gồm: Mã thuốc, Tên thuốc, Đơn vị, Cách dùng, Đơn giá.
- Dữ liệu về các xét nghiệm Cận lâm sàng bao gồm: Mã CLS, Tên, Đơn giá
- Dữ liệu về các xét nghiệm sinh hoá bao gồm: Kết quả bình thường
- Dữ liệu về các chẩn đoán hình ảnh bao gồm: Loại
- Dữ liệu về Dùng phòng bệnh gồm: Ngày bắt đầu, Ngày kết thúc, Mã dùng phòng
- Dữ liệu về các lần Điều trị gồm: Mã điều trị, Ngày bắt đầu, Ngày kết thúc, Kết
quả
- Dữ liệu về Kê đơn gồm: Mã kê đơn, Ngày kê đơn
- Dữ liệu về Làm xét nghiệm: Mã làm xét nghiệm, Ngày xét nghiệm, Kết quả xét
nghiệm
- Dữ liệu về Thanh toán dịch vụ gồm: Mã thanh toán, Ngày thanh toán, Số lượng
- Dữ liệu về Khám bệnh gồm: Mã khám, Ngày khám
- Dữ liệu về Phòng bệnh bao gồm: Tên phòng, Số lượng giường
- Dữ liệu về Y lệnh bao gồm: Nội dung, Ngày thực hiện
III. Các thao các trên cơ sở dữ liệu
- Cập nhật thông tin bệnh nhân, bác sĩ, bệnh…:
• Thêm mới bệnh nhân, bác sĩ, bệnh…
• Chỉnh sửa thông tin bệnh nhân, bác sĩ, bệnh…
• Xóa thông tin bệnh nhân, bác sĩ, bệnh…
- Tra cứu thông tin bác sĩ, bệnh nhân…
• Tìm kiếm theo tên
• Tìm kiếm theo khoa
• Tìm kiếm theo mã
2
- Chức năng xem dữ liệu
• Xem danh sách bệnh nhân
• Xem hồ sơ bệnh án của một bệnh nhân
• Xem giường bệnh còn trống
• Thống kê số lần khám, điều trị trong khoa
• Thống kê bệnh nhân được khám bởi một bác sĩ nào đó
• Thống kê viện phí của bệnh nhân

PHẦN II: THIẾT KẾ CƠ SỞ DỮ LIỆU


I. Lược đồ E-R

3
4
II. Phân tích lược đồ E -R
Lược đồ ER của mô hình quản lý bệnh viện gồm:
• Có 9 tập thực thể mạnh: Khoa, Bác sĩ, Bệnh nhân, Khoản chi phí, Bệnh, Thuốc,
Cận lâm sàng, Xét nghiệm, Chẩn đoán hình ảnh.
Chi tiết các thực thể:
• Thực thể Khoa bao gồm 3 thuộc tính: Mã khoa (khóa), Tên khoa, Số
lượng người.
• Thực thể Bác sĩ bao gồm 7 thuộc tính: Mã bác sĩ (khóa), Họ tên, Ngày
sinh, Giới tính, Địa chỉ, Học hàm học vị, Số điện thoại (đa trị).
• Thực thể Bệnh nhân bao gồm 7 thuộc tính: Mã bệnh nhân (khóa), Họ
tên, Giới tính, Ngày sinh, Nghề nghiệp, Địa chỉ, Số điện thoại (đa trị).
• Thực thể Khoản chi phí bao gồm: Mã khoản CP (khóa), Tên khoản CP,
Đơn giá
• Thực thể Bệnh bao gồm: Mã bệnh (khóa), Tên bệnh, Triệu chứng
• Thực thể Thuốc bao gồm: Mã thuốc (khóa), Tên thuốc, Đơn vị, Cách
dùng, Đơn giá
• Thực thể Cận lâm sàng bao gồm: Mã CLS (khóa), Tên, Đơn giá
• Thực thể Xét nghiệm bao gồm: Kết quả bình thường
• Thực thể Chẩn đoán hình ảnh bao gồm: Loại
• Có 6 thực thể liên kết:
• Thực thể liên kết Dùng gồm thuộc tính: Ngày bắt đầu, Ngày kết thúc,
Mã dùng phòng (khóa)
• Thực thể liên kết Điều trị gồm thuộc tính: Mã điều trị (khóa), Ngày bắt
đầu, Ngày kết thúc, Kết quả
• Thực thể liên kết Kê đơn gồm thuộc tính: Mã kê đơn (khóa), Ngày kê
đơn
• Thực thể liên kết Làm xét nghiệm gồm thuộc tính: Mã làm xét nghiệm
(khóa), Ngày xét nghiệm, Kết quả xét nghiệm
• Thực thể liên kết Thanh toán gồm thuộc tính: Mã thanh toán (khóa),
Ngày thanh toán, Số lượng
• Thực thể liên kết Khám gồm thuộc tính: Mã khám (khóa), Ngày khám
• Có 2 tập thực thể yếu: Phòng bệnh, Y lệnh
Chi tiết các thực thể yếu:
• Thực thể Phòng bệnh bao gồm: Tên phòng (phân biệt), Số lượng giường.
Thực thể Phòng bệnh cần phụ thuộc vào thực thể Khoa để xác định
chính xác một Phòng bệnh cụ thể => khóa bao gồm thuộc tính Tên
phòng và thuộc tính Mã khoa.
• Thực thể Y lệnh bao gồm: Nội dung (phân biệt), Ngày thực hiện. Thực
thể Y lệnh cần phụ thuộc vào Thực thể liên kết Điều trị để xác định
chính xác và có ý nghĩa => Khóa của thực thể Y lệnh bao gồm thuộc tính
Nội dung và thuộc tính Mã điều trị
• Có 10 liên kết trong đó có 9 liên kết hai ngôi và 1 liên kết từ ba ngôi trở lên, 6
liên kết trở thành thực thể liên kết.
• Liên kết 2 ngôi:
• Khoa và Phòng bệnh liên kết với nhau bằng liên kết Có
• Khoa và Bác sĩ liên kết với nhau bằng liên kết Làm việc
• Bệnh nhân và Phòng bệnh liên kết với nhau bằng liên kết Dùng

5
• Bệnh nhân và Khoản chi phí liên kết với nhau bằng liên kết
Thanh toán
• Bệnh nhân và Cận lâm sàng liên kết với nhau bằng liên kết Làm
xét nghiệm
• Bệnh nhân và Bác sĩ liên kết với nhau bằng liên kết Kê đơn
• Bác sĩ và Bệnh nhân liên kết với nhau bằng liên kết Điều trị
• Điều trị và Y lệnh liên kết với nhau bằng liên kết Gồm
• Kê đơn và Thuốc liên kết với nhau bằng liên kết Gồm
• Liên kết ba ngôi:
• Bác sĩ, Bệnh nhân, Bệnh liên kết với nhau bằng liên kết Khám
• Trong đó
• Liên kết Có không có thuộc tính
• Liên kết Làm việc không có thuộc tính
• Liên kết Gồm (Điều trị và Y lệnh) không có thuộc tính
• Liên kết Gồm (Kê đơn và Thuốc) gồm thuộc tính: Số lượng
• Có 1 tập quan hệ cha con đó là Cận lâm sàng là thực thể cha và Xét nghiệm và
Chẩn đoán hình ảnh là hai thực thể con

PHẦN III: ÁNH XẠ LƯỢC ĐỒ E-R SANG LƯỢC ĐỒ


QUAN HỆ VÀ CHUẨN HÓA
I. Lược đồ quan hệ trước khi chuẩn hóa

6
7
II. Các phụ thuộc hàm và khóa của từng lược đồ

Khoa (Mã khoa, Tên khoa, Số lượng người):

• Khóa chính: Mã khoa


• Xác định phụ thuộc hàm:
F1 = {Mã khoa → Tên khoa;
Mã khoa → Số lượng người}

Phòng bệnh (Tên phòng, Mã khoa, Số lượng giường):

• Khóa chính: Tên phòng + Mã khoa


Khóa ngoại: Mã khoa
• Xác định phụ thuộc hàm:
F2 = {Tên phòng, Mã khoa → Số lượng giường}

Dùng (Mã dùng phòng, Mã bệnh nhân, Tên phòng, Mã khoa, Ngày bắt đầu,
Ngày kết thúc):

• Khóa chính: Mã dùng phòng


Khóa ngoại: Mã bệnh nhân, Tên phòng + Mã khoa
• Xác định phụ thuộc hàm:
F3 = {Mã dùng phòng → Mã bệnh nhân;
Mã dùng phòng → Tên phòng;
Mã dùng phòng → Mã khoa;
Mã dùng phòng → Ngày bắt đầu;
Mã dùng phòng → Ngày kết thúc}

Điều trị (Mã điều trị, Mã bác sĩ, Mã bệnh nhân, Kết quả, Ngày bắt đầu, Ngày
kết thúc):

• Khóa chính: Mã điều trị


Khóa ngoại: Mã bác sĩ, Mã bệnh nhân
• Xác định phụ thuộc hàm
F4 = {Mã điều trị → Mã bác sĩ;
Mã điều trị → Mã bệnh nhân;
Mã điều trị → Kết quả;
Mã điều trị → Ngày bắt đầu;
Mã điều trị → Ngày kết thúc}

Y lệnh (Nội dung, Mã điều trị, Ngày thực hiện):

• Khóa chính: Nội dung + Mã điều trị


Khóa ngoại: Mã điều trị
• Xác định phụ thuộc hàm:
F5 = {Nội dung, Mã điều trị → Ngày thực hiện}

8
Bác sĩ (Mã bác sĩ, Họ tên, Ngày sinh, Giới tính, Địa chỉ, Học hàm học vị, Mã
khoa):

• Khóa chính: Mã bác sĩ


Khóa ngoại: Mã khoa
• Xác định phụ thuộc hàm:
F6 = {Mã bác sĩ → Họ tên;
Mã bác sĩ → Ngày sinh;
Mã bác sĩ → Giới tính;
Mã bác sĩ → Địa chỉ;
Mã bác sĩ → Học hàm học vị;
Mã bác sĩ → Mã khoa}

Bác sĩ – số ĐT (Số điện thoại, Mã bác sĩ):

• Khóa chính: Mã bác sĩ + Số điện thoại


Khóa ngoại: Mã bác sĩ

Khám (Mã khám, Mã bệnh, Mã bác sĩ, Mã bệnh nhân, Ngày khám):

• Khóa chính: Mã khám


Khóa ngoại: Mã bệnh, Mã bác sĩ, Mã bệnh nhân
• Xác định phụ thuộc hàm:
F7 = {Mã khám → Mã bệnh;
Mã khám → Mã bác sĩ;
Mã khám → Mã bệnh nhân;
Mã khám → Ngày khám}

Bệnh (Mã bệnh, Tên bệnh, Triệu chứng):

• Khóa chính: Mã bệnh


• Xác định phụ thuộc hàm:
F8 = {Mã bệnh → Tên bệnh, Triệu chứng}

Bệnh nhân (Mã bệnh nhân, Họ tên, Ngày sinh, Giới tính, Địa chỉ, Nghề
nghiệp):

• Khóa chính: Mã bệnh nhân


• Xác định phụ thuộc hàm:
F9 = {Mã bệnh nhân → Họ tên;
Mã bệnh nhân → Ngày sinh;
Mã bệnh nhân → Giới tính;
Mã bệnh nhân → Địa chỉ;
Mã bệnh nhân → Nghề nghiệp}

Bệnh nhân – số ĐT (Số điện thoại, Mã bệnh nhân):

• Khóa chính: Mã bệnh nhân + Số điện thoại


Khóa ngoại: Mã bệnh nhân

9
Kê đơn (Mã kê đơn, Mã bác sĩ, Mã bệnh nhân, Ngày kê đơn):

• Khóa chính: Mã kê đơn


Khóa ngoại: Mã bác sĩ, Mã bệnh nhân
• Xác định phụ thuộc hàm:
F10 = {Mã kê đơn → Mã bác sĩ,
Mã kê đơn → Mã bệnh nhân,
Mã kê đơn → Ngày kê đơn}

Gồm (Mã kê đơn, Mã thuốc, Số lượng):

• Khóa chính: Mã kê đơn + Mã thuốc


Khóa ngoại: Mã kê đơn, Mã thuốc
• Xác định phụ thuộc hàm:
F11 = {Mã kê đơn, Mã thuốc → Số lượng}

Thuốc (Mã thuốc, Tên thuốc, Đơn vị, Cách dùng, Đơn giá):

• Khóa chính: Mã thuốc

• Xác định phụ thuộc hàm:


F12 = {Mã thuốc → Tên thuốc;
Mã thuốc → Đơn vị;
Mã thuốc → Đơn giá;
Mã thuốc → Cách dùng}

Thanh toán (Mã thanh toán, Mã bệnh nhân, Mã khoản CP, Số lượng, Ngày
thanh toán):

• Khóa chính: Mã thanh toán


Khóa ngoại: Mã bệnh nhân, Mã khoản CP
• Xác định phụ thuộc hàm:
F13 = {Mã thanh toán → Mã bệnh nhân;
Mã thanh toán → Mã khoản CP;
Mã thanh toán → Số lượng;
Mã thanh toán → Ngày thanh toán}

Khoản chi phí (Mã khoản CP, Tên khoản CP, Đơn giá):

• Khóa chính: Mã khoản CP


• Xác định phụ thuộc hàm:
F14 = {Mã khoản CP → Tên khoản CP;
Mã khoản CP → Đơn giá}

Làm xét nghiệm (Mã xét nghiệm, Mã bệnh nhân, Mã CLS, Ngày xét nghiệm,
Kết quả xét nghiệm):

• Khóa chính: Mã xét nghiệm


Khóa ngoại: Mã bệnh nhân, Mã CLS

10
• Xác định phụ thuộc hàm:
F15 = {Mã xét nghiệm → Mã bệnh nhân;
Mã xét nghiệm → Mã CLS;
Mã xét nghiệm → Ngày xét nghiệm
Mã xét nghiệm → Kết quả xét nghiệm}

Cận lâm sàng (Mã CLS, Tên dịch vụ,đơn giá):

• Khóa chính: Mã CLS


• Xác định phụ thuộc hàm:
F16 = {Mã CLS → Tên dịch vụ

Mã CLS → Đơn giá}

Xét nghiệm (X-mã CLS, Kết quả bình thường):

• Khóa chính: X-mã CLS


• Xác định phụ thuộc hàm:
F17 = {X-mã CLS → Kết quả bình thường}

Chuẩn đoán hình ảnh (C-mã CLS, Loại):

• Khóa chính: C-mã CLS

• Xác định phụ thuộc hàm:


F18 = {C-mã CLS → Loại}

III. Chuẩn hóa 3NF

Khoa (Mã khoa, Tên khoa, Số lượng người):

• Đạt chuẩn 1NF: Có khóa chính, các thuộc tính đều là nguyên tố, không có
thuộc tính dẫn xuất, đa trị
• Đạt chuẩn 2NF: Các thuộc tính không khóa là “Tên khoa”, “Số lượng
người” đều phụ thuộc đầy đủ vào khóa chính là “Mã khoa”
• Đạt chuẩn 3NF: Các thuộc tính không khóa là “Tên khoa”, “Số lượng
người” chỉ phụ thuộc trực tiếp vào khóa chính là “Mã khoa”

Phòng bệnh (Tên phòng, Mã khoa, Số lượng giường):

• Đạt chuẩn 1NF: Có khóa chính, các thuộc tính đều là nguyên tố, không có
thuộc tính dẫn xuất, đa trị
• Đạt chuẩn 2NF: Thuộc tính không khóa là “Số lượng giường” phụ thuộc đầy
đủ vào khóa chính
• Đạt chuẩn 3NF: Chỉ có duy nhất 1 thuộc tính không khóa và thuộc tính này
phụ thuộc trực tiếp vào khóa chính

11
Dùng (Mã dùng phòng, Mã bệnh nhân, Tên phòng, Mã khoa, Ngày bắt đầu, Ngày
kết thúc):

• Đạt chuẩn 1NF: Có khóa chính, các thuộc tính đều là nguyên tố, không có
thuộc tính dẫn xuất, đa trị
• Đạt chuẩn 2NF: Các thuộc tính không khóa là “Ngày bắt đầu”, “Ngày kết
thúc” đều phụ thuộc đầy đủ vào khóa chính là “Mã dùng phòng”
• Đạt chuẩn 3NF: Các thuộc tính không khóa là “Ngày bắt đầu”, “Ngày kết
thúc” đều phụ thuộc trực tiếp vào khóa chính là “Mã dùng phòng”

Điều trị (Mã điều trị, Mã bác sĩ, Mã bệnh nhân, Kết quả, Ngày bắt đầu, Ngày kết
thúc):

• Đạt chuẩn 1NF: Có khóa chính, các thuộc tính đều là nguyên tố, không có
thuộc tính dẫn xuất, đa trị
• Đạt chuẩn 2NF: Các thuộc tính không khóa là “Kết quả”, “Ngày bắt đầu”,
“Ngày kết thúc” đều phụ thuộc đầy đủ vào khóa chính là “Mã điều trị”
• Đạt chuẩn 3NF: Các thuộc tính không khóa là “Kết quả”, “Ngày bắt đầu”,
“Ngày kết thúc” đều phụ thuộc trực tiếp vào khóa chính là “Mã điều trị”

Y lệnh (Nội dung, Mã điều trị, Ngày thực hiện):

• Đạt chuẩn 1NF: Có khóa chính, các thuộc tính đều là nguyên tố, không có
thuộc tính dẫn xuất, đa trị
• Đạt chuẩn 2NF: Thuộc tính không khóa là “Ngày thực hiện” phụ thuộc đầy
đủ vào khóa chính
• Đạt chuẩn 3NF: Chỉ có duy nhất 1 thuộc tính không khóa và thuộc tính này
phụ thuộc trực tiếp vào khóa chính

Bác sĩ (Mã bác sĩ, Họ tên, Ngày sinh, Giới tính, Địa chỉ, Học hàm học vị, Mã
khoa):

• Đạt chuẩn 1NF: Có khóa chính, các thuộc tính đều là nguyên tố, không có
thuộc tính dẫn xuất, đa trị. Thuộc tính đa trị như “Số điện thoại” đã được
tách ra thành 1 lược đồ riêng (gồm các thuộc tính đơn trị) từ đầu
• Đạt chuẩn 2NF: Các thuộc tính không khóa là “Họ tên”, “Ngày sinh”, “Giới
tính”, “Địa chỉ”, “Học hàm học vị” đều phụ thuộc đầy đủ vào khóa chính là
“Mã bác sĩ”
• Đạt chuẩn 3NF: Các thuộc tính không khóa là “Họ tên”, “Ngày sinh”, “Giới
tính”, “Địa chỉ”, “Học hàm học vị” đều phụ thuộc trực tiếp vào khóa chính
là “Mã bác sĩ”

Bác sĩ – số ĐT (Số điện thoại, Mã bác sĩ):

• Đạt chuẩn 1NF: Có khóa chính, các thuộc tính đều là nguyên tố, không có
thuộc tính dẫn xuất, đa trị
• Đạt chuẩn 2NF, 3NF: Vì cả hai thuộc tính hợp thành một khóa chính nên
không có thuộc tính không khóa nào, do đó thỏa mãn các thuộc tính không
khóa phụ thuộc đầy đủ (2NF) và trực tiếp (3NF) vào khóa chính

12
Khám (Mã khám, Mã bệnh, Mã bác sĩ, Mã bệnh nhân, Ngày khám):

• Đạt chuẩn 1NF: Có khóa chính, các thuộc tính đều là nguyên tố, không có
thuộc tính dẫn xuất, đa trị
• Đạt chuẩn 2NF: Thuộc tính không khóa là “Ngày khám” phụ thuộc đầy đủ
vào khóa chính là “Mã khám”
• Đạt chuẩn 3NF: Chỉ có duy nhất 1 thuộc tính không khóa và thuộc tính này
phụ thuộc trực tiếp vào khóa chính là “Mã khám”

Bệnh (Mã bệnh, Tên bệnh, Triệu chứng):

• Đạt chuẩn 1NF: Có khóa chính, các thuộc tính đều là nguyên tố, không có
thuộc tính dẫn xuất, đa trị
• Đạt chuẩn 2NF: Các thuộc tính không khóa là “Tên bệnh”, “Triệu chứng”
đều phụ thuộc đầy đủ vào khóa chính là “Mã bệnh”
• Đạt chuẩn 3NF: Các thuộc tính không khóa là “Tên bệnh”, “Triệu chứng”
đều phụ thuộc trực tiếp vào khóa chính là “Mã bệnh”

Bệnh nhân (Mã bệnh nhân, Họ tên, Ngày sinh, Giới tính, Địa chỉ, Nghề nghiệp):

• Đạt chuẩn 1NF: Có khóa chính, các thuộc tính đều là nguyên tố, không có
thuộc tính dẫn xuất, đa trị. Thuộc tính đa trị như “Số điện thoại” đã được
tách ra thành 1 lược đồ riêng (gồm các thuộc tính đơn trị) từ đầu
• Đạt chuẩn 2NF: Các thuộc tính không khóa là “Họ tên”, “Ngày sinh”, “Giới
tính”, “Địa chỉ”, “Nghề nghiệp” đều phụ thuộc đầy đủ vào khóa chính là
“Mã bệnh nhân”
• Đạt chuẩn 3NF: Các thuộc tính không khóa là “Họ tên”, “Ngày sinh”, “Giới
tính”, “Địa chỉ”, “Nghề nghiệp” đều phụ thuộc trực tiếp vào khóa chính là
“Mã bệnh nhân”

Bệnh nhân – số ĐT (Số điện thoại, Mã bệnh nhân):

• Đạt chuẩn 1NF: Có khóa chính, các thuộc tính đều là nguyên tố, không có
thuộc tính dẫn xuất, đa trị
• Đạt chuẩn 2NF, 3NF: Vì cả hai thuộc tính hợp thành một khóa chính nên
không có thuộc tính không khóa nào, do đó thỏa mãn các thuộc tính không
khóa phụ thuộc đầy đủ (2NF) và trực tiếp (3NF) vào khóa chính

Kê đơn (Mã kê đơn, Mã bác sĩ, Mã bệnh nhân, Ngày kê đơn):

• Đạt chuẩn 1NF: Có khóa chính, các thuộc tính đều là nguyên tố, không có
thuộc tính dẫn xuất, đa trị
• Đạt chuẩn 2NF: Thuộc tính không khóa là “Ngày kê đơn” vào khóa chính là
“Mã kê đơn”
• Đạt chuẩn 3NF: Chỉ có duy nhất 1 thuộc tính không khóa và thuộc tính này
phụ thuộc trực tiếp vào khóa chính là “Mã kê đơn”

13
Gồm (Mã kê đơn, Mã thuốc, Số lượng):

• Đạt chuẩn 1NF: Có khóa chính, các thuộc tính đều là nguyên tố, không có
thuộc tính dẫn xuất, đa trị
• Đạt chuẩn 2NF: Thuộc tính không khóa là “Số lượng” phụ thuộc đầy đủ vào
khóa chính
• Đạt chuẩn 3NF: Chỉ có duy nhất 1 thuộc tính không khóa và thuộc tính này
phụ thuộc trực tiếp vào khóa chính

Thuốc (Mã thuốc, Tên thuốc, Đơn vị, Cách dùng, Đơn giá):

• Đạt chuẩn 1NF: Có khóa chính, các thuộc tính đều là nguyên tố, không có
thuộc tính dẫn xuất, đa trị
• Đạt chuẩn 2NF: Các thuộc tính không khóa là “Tên thuốc”, “Đơn vị”, “Cách
dùng” , ”Đơn giá”đều phụ thuộc đầy đủ vào khóa chính là “Mã thuốc”
• Đạt chuẩn 3NF: Các thuộc tính không khóa là “Tên thuốc”, “Đơn vị”, “Cách
dùng”, “Đơn giá” đều phụ thuộc trực tiếp vào khóa chính là “Mã thuốc”

Thanh toán (Mã thanh toán, Mã bệnh nhân, Mã khoản CP, Số lượng, Ngày thanh
toán):

• Đạt chuẩn 1NF: Có khóa chính, các thuộc tính đều là nguyên tố, không có
thuộc tính dẫn xuất, đa trị
• Đạt chuẩn 2NF: Các thuộc tính không khóa là “Số lượng”, “Ngày thanh
toán” đều phụ thuộc đầy đủ vào khóa chính là “Mã thanh toán”
• Đạt chuẩn 3NF: Các thuộc tính không khóa là “Số lượng”, “Ngày thanh
toán” đều phụ thuộc trực tiếp vào khóa chính là “Mã thanh toán”

Khoản chi phí (Mã khoản CP, Tên khoản CP, Đơn giá):

• Đạt chuẩn 1NF: Có khóa chính, các thuộc tính đều là nguyên tố, không có
thuộc tính dẫn xuất, đa trị
• Đạt chuẩn 2NF: Các thuộc tính không khóa là “Tên khoản CP”, “Đơn giá”
đều phụ thuộc đầy đủ vào khóa chính là “Mã khoản CP”
• Đạt chuẩn 3NF: Các thuộc tính không khóa là “Tên khoản CP”, “Đơn giá”
đều phụ thuộc trực tiếp vào khóa chính là “Mã khoản CP”

Làm xét nghiệm (Mã xét nghiệm, Mã bệnh nhân, Mã CLS, Ngày xét nghiệm, Kết
quả xét nghiệm):

• Đạt chuẩn 1NF: Có khóa chính, các thuộc tính đều là nguyên tố, không có
thuộc tính dẫn xuất, đa trị
• Đạt chuẩn 2NF: Các thuộc tính không khóa là “Ngày xét nghiệm”, “Kết quả
xét nghiệm” đều phụ thuộc đầy đủ vào khóa chính là “Mã xét nghiệm”
• Đạt chuẩn 3NF: Các thuộc tính không khóa là “Ngày xét nghiệm”, “Kết quả
xét nghiệm” đều phụ thuộc trực tiếp vào khóa chính là “Mã xét nghiệm”

14
Cận lâm sàng (Mã CLS, Tên dịch vụ, Đơn giá):

• Đạt chuẩn 1NF: Có khóa chính, các thuộc tính đều là nguyên tố, không có
thuộc tính dẫn xuất, đa trị
• Đạt chuẩn 2NF: Thuộc tính không khóa là “Tên dịch vụ”, “Đơn giá” phụ
thuộc đầy đủ vào khóa chính là “Mã CLS”
• Đạt chuẩn 3NF: Chỉ có duy nhất 1 thuộc tính không khóa và thuộc tính này
phụ thuộc trực tiếp vào khóa chính là “Mã CLS”

Xét nghiệm (X-mã CLS, Kết quả bình thường):

• Đạt chuẩn 1NF: Có khóa chính, các thuộc tính đều là nguyên tố, không có
thuộc tính dẫn xuất, đa trị
• Đạt chuẩn 2NF: Thuộc tính không khóa là “Kết quả bình thường” phụ thuộc
đầy đủ vào khóa chính là “X-mã CLS”
• Đạt chuẩn 3NF: Chỉ có duy nhất 1 thuộc tính không khóa và thuộc tính này
phụ thuộc trực tiếp vào khóa chính là “X-mã CLS”

Chuẩn đoán hình ảnh (C-mã CLS, Loại):

• Đạt chuẩn 1NF: Có khóa chính, các thuộc tính đều là nguyên tố, không có
thuộc tính dẫn xuất, đa trị
• Đạt chuẩn 2NF: Thuộc tính không khóa là “Loại” phụ thuộc đầy đủ vào
khóa chính là “C-mã CLS”
• Đạt chuẩn 3NF: Chỉ có duy nhất 1 thuộc tính không khóa và thuộc tính này
phụ thuộc trực tiếp vào khóa chính là “C-mã CLS”

IV. Lược đồ quan hệ sau khi chuẩn hóa


Do các lược đồ đã được chuẩn hóa 3NF, vì vậy ta không có thay đổi gì đối với
lược đồ quan hệ:

15
PHẦN IV: CÀI ĐẶT HỆ THỐNG
Từ 20 lược đồ ở dạng chuẩn 3NF, ta xây dựng 20 bảng dữ liệu

16
I. Tạo database và các bảng, thêm dữ liệu vào từng bảng
----Tao DATABASE-------

CREATE DATABASE QLBV COLLATE Latin1_General_100_CI_AS_SC_UTF8;

GO

USE QLBV

-- Thêm dữ liệu vào các bảng đã tạo:

CREATE PROCEDURE ImportDataFromCSV

@FilePath nvarchar(255),

@TableName nvarchar(255)

AS

BEGIN

DECLARE @SqlCmd nvarchar(MAX);

SET @SqlCmd = 'BULK INSERT ' + QUOTENAME(@TableName) + ' ' +'FROM ''' + @FilePath
+''' ' +'WITH (FORMAT = ''CSV'', FIELDTERMINATOR = '', '', ROWTERMINATOR = ''\n'', FIRSTROW
= 2, CODEPAGE = ''65001'')';

EXEC sp_executesql @SqlCmd;

END ;

17
1. Tạo bảng KHOA

CREATE TABLE KHOA

MaKhoa varchar(255) PRIMARY KEY,

TenKhoa nvarchar(255) NOT NULL,

SoLuongNguoi int NOT NULL,

GO

EXEC ImportDataFromCSV 'D:\DATA\KHOA.csv', 'KHOA';

2. Tạo bảng PHONGBENH

CREATE TABLE PHONGBENH

TenPhong nvarchar(255),

MaKhoa varchar(255) FOREIGN KEY REFERENCES KHOA(MaKhoa),

SoLuongGiuong smallint NOT NULL,

PRIMARY KEY(TenPhong, MaKhoa)

GO EXEC ImportDataFromCSV 'D:\DATA\PHONGBENH.csv', 'PHONGBENH';

18
3. Tạo bảng BACSI

CREATE TABLE BACSI

MaBacSi varchar(255) PRIMARY KEY,

HoTen nvarchar(255) NOT NULL,

NgaySinh date NOT NULL,

GioiTinh nvarchar(255) NOT NULL,

DiaChi nvarchar(255) NOT NULL,

HocVi varchar(255) NOT NULL,

MaKhoa varchar(255) FOREIGN KEY REFERENCES KHOA(MaKhoa)

GO

EXEC ImportDataFromCSV 'D:\DATA\BACSI.csv', 'BACSI';

19
4. Tạo bảng BACSI_SODT

CREATE TABLE BACSI_SODT

MaBacSi varchar(255) FOREIGN KEY REFERENCES BACSI(MaBacSi),

SoDT varchar(255),

PRIMARY KEY (MaBacSi, SoDT)

GO

EXEC ImportDataFromCSV 'D:\DATA\BACSI_SODT.csv', 'BACSI_SODT';

20
5. Tạo bảng BENH

CREATE TABLE BENH

MaBenh varchar(255) PRIMARY KEY,

TenBenh nvarchar(255) NOT NULL,

TrieuChung nvarchar(255) NOT NULL,

GO

EXEC ImportDataFromCSV 'D:\DATA\BENH.csv', 'BENH';

21
6. Tạo bảng BENHNHAN

CREATE TABLE BENHNHAN

MaBenhNhan varchar(255) PRIMARY KEY,

HoTen nvarchar(255) NOT NULL,

NgaySinh date NOT NULL,

GioiTinh nvarchar(255) NOT NULL,

DiaChi nvarchar(255) NOT NULL,

NgheNghiep nvarchar(255) NOT NULL,

EXEC ImportDataFromCSV 'D:\DATA\BENHNHAN.csv', 'BENHNHAN';

22
7. Tạo bảng BENHNHAN_SDT

CREATE TABLE BENHNHAN_SODT

MaBenhNhan varchar(255) FOREIGN KEY REFERENCES BENHNHAN(MaBenhNhan),

SoDT varchar(255),

PRIMARY KEY (MaBenhNhan, SoDT)

GO

EXEC ImportDataFromCSV 'D:\DATA\BENHNHAN_SODT.csv', 'BENHNHAN_SODT';

23
8. Tạo bảng DUNG

CREATE TABLE DUNG

MaDungPhong varchar(255) PRIMARY KEY,

MaBenhNhan varchar(255) FOREIGN KEY REFERENCES BENHNHAN(MaBenhNhan),

TenPhong nvarchar(255),

MaKhoa varchar(255),

NgayBatDau date NOT NULL,

NgayKetThuc date NULL,

FOREIGN KEY(TenPhong, MaKhoa) REFERENCES PHONGBENH(TenPhong, MaKhoa)

GO

EXEC ImportDataFromCSV 'D:\DATA\DUNG.csv', 'DUNG';

24
9. Tạo bảng DIEUTRI

CREATE TABLE DIEUTRI

MaDieuTri varchar(255) PRIMARY KEY,

MaBacSi varchar(255) FOREIGN KEY REFERENCES BACSI(MaBacSi),

MaBenhNhan varchar(255) FOREIGN KEY REFERENCES BENHNHAN(MaBenhNhan),

KetQua nvarchar(255) NOT NULL,

NgayBatDau date NOT NULL,

NgayKetThuc date NULL,

GO

EXEC ImportDataFromCSV 'D:\DATA\DIEUTRI.csv', 'DIEUTRI'

25
10. Tạo bảng YLENH

CREATE TABLE YLENH

NoiDung nvarchar(255),

MaDieuTri varchar(255) FOREIGN KEY REFERENCES DIEUTRI(MaDieuTri),

NgayThucHien date NOT NULL,

PRIMARY KEY (NoiDung, MaDieuTri),

GO

EXEC ImportDataFromCSV 'D:\DATA\YLENH.csv', 'YLENH'

26
11. Tạo bảng KHAM

CREATE TABLE KHAM

MaKham varchar(255) PRIMARY KEY,

MaBenh varchar(255) FOREIGN KEY REFERENCES BENH(MaBenh),

MaBacSi varchar(255) FOREIGN KEY REFERENCES BACSI(MaBacSi),

MaBenhNhan varchar(255) FOREIGN KEY REFERENCES BENHNHAN(MaBenhNhan),

NgayKham date NOT NULL,

GO

EXEC ImportDataFromCSV 'D:\DATA\KHAM.csv', 'KHAM'

27
12. Tạo bảng KEDON

CREATE TABLE KEDON

MaKeDon varchar(255) PRIMARY KEY,

MaBacSi varchar(255) FOREIGN KEY REFERENCES BACSI(MaBacSi),

MaBenhNhan varchar(255) FOREIGN KEY REFERENCES BENHNHAN(MaBenhNhan),

NgayKeDon date NOT NULL,

GO

EXEC ImportDataFromCSV 'D:\DATA\KEDON.csv', 'KEDON'

28
13. Tạo bảng THUOC

CREATE TABLE THUOC

MaThuoc varchar(255) PRIMARY KEY,

TenThuoc nvarchar(255) NOT NULL,

DonVi nvarchar(255) NOT NULL,

CachDung nvarchar(255) NOT NULL,

DonGia int NOT NULL,

GO

EXEC ImportDataFromCSV 'D:\DATA\THUOC.csv', 'THUOC'

29
14. Tạo bảng GOM

CREATE TABLE GOM

MaKeDon varchar(255) FOREIGN KEY REFERENCES KEDON(MaKeDon),

MaThuoc varchar(255) FOREIGN KEY REFERENCES THUOC(MaThuoc),

SoLuong tinyint NOT NULL,

PRIMARY KEY(MaKeDon, MaThuoc),

GO

EXEC ImportDataFromCSV 'D:\DATA\GOM.csv', 'GOM'

15. Tạo bảng KHOANCHIPHI

CREATE TABLE KHOANCHIPHI

MaKhoanCP varchar(255) PRIMARY KEY,

TenKhoanCP nvarchar(255) NOT NULL,

DonGia int NOT NULL,

GO

EXEC ImportDataFromCSV 'D:\DATA\KHOANCHIPHI.csv', 'KHOANCHIPHI'

30
16. Tạo bảng THANHTOAN

CREATE TABLE THANHTOAN

MaThanhToan varchar(255) PRIMARY KEY,

MaBenhNhan varchar(255) FOREIGN KEY REFERENCES BENHNHAN(MaBenhNhan),

MaKhoanCP varchar(255) FOREIGN KEY REFERENCES KHOANCHIPHI(MaKhoanCP),

SoLuong int NOT NULL,

NgayThanhToan date NOT NULL,

GO

EXEC ImportDataFromCSV 'D:\DATA\THANHTOAN.csv', 'THANHTOAN'

31
17. Tạo bảng CANLAMSANG

CREATE TABLE CANLAMSANG

MaCLS varchar(255) PRIMARY KEY,

Ten nvarchar(255) NOT NULL,

DonGia int NOT NULL

GO

EXEC ImportDataFromCSV 'D:\DATA\CANLAMSANG.csv', 'CANLAMSANG'

32
18. Tạo bảng XETNGHIEM

CREATE TABLE XETNGHIEM

XMaCLS varchar(255) FOREIGN KEY REFERENCES CANLAMSANG(MaCLS),

KQBinhThuong nvarchar(255) NOT NULL,

GO

EXEC ImportDataFromCSV 'D:\DATA\XETNGHIEM.csv', 'XETNGHIEM'

33
19. Tạo bảng CHAN_DOAN_HINH_ANH

CREATE TABLE CHAN_DOAN_HINH_ANH

CMaCLS varchar(255) FOREIGN KEY REFERENCES CANLAMSANG(MaCLS),

Loai nvarchar(255) NOT NULL,

GO

EXEC ImportDataFromCSV 'D:\DATA\CHAN_DOAN_HINH_ANH.csv','CHAN_DOAN_HINH_ANH'

20. Tạo bảng LAMXETNGHIEM

CREATE TABLE LAMXETNGHIEM

MaXetNghiem varchar(255) PRIMARY KEY,

MaBenhNhan varchar(255) FOREIGN KEY REFERENCES BENHNHAN(MaBenhNhan),

MaCLS varchar(255) FOREIGN KEY REFERENCES CANLAMSANG(MaCLS),

NgayXetNghiem date NOT NULL,

KQXetnghiem nvarchar(255) NOT NULL,

GO
EXEC ImportDataFromCSV 'D:\DATA\LAMXETNGHIEM.csv', 'LAMXETNGHIEM'

34
II. Các câu truy vấn, ứng dụng của hệ thống
1. Liệt kê ra thông tin các bác sĩ, tính tuổi, nếu có nhiều số điện thoại thì
chỉ lấy một, sắp xếp theo tuổi

SELECT
BACSI.MaBacSi AS [Mã Bác Sĩ],
BACSI.HocVi AS [Học Vị],
BACSI.HoTen AS [Họ Tên],
FORMAT(BACSI.NgaySinh, 'dd-MM-yyyy') AS [Ngày Sinh],
DATEDIFF(YEAR, BACSI.NgaySinh, GETDATE()) AS [Tuổi],
BACSI.GioiTinh AS [Giới Tính],
BACSI.DiaChi AS [Địa Chỉ],
KHOA.TenKhoa AS [Khoa],
(SELECT TOP 1 BACSI_SODT.SoDT FROM BACSI_SODT
WHERE BACSI.MaBacSi = BACSI_SODT.MaBacSi) AS [Số Điện Thoại]
FROM BACSI
INNER JOIN KHOA ON BACSI.MaKhoa = KHOA.MaKhoa
ORDER BY Tuổi

35
2. Liệt kê ra số lượng số điện thoại của từng bác sĩ, sắp xếp theo số lượng
số điện thoại

SELECT
BACSI.MaBacSi AS [Mã Bác Sĩ],
BACSI.HocVi AS [Học Vị],
BACSI.HoTen AS [Họ Tên],
KHOA.TenKhoa AS [Khoa],
SoLuongSDT.cnt AS [Số Lượng Số ĐT]
FROM BACSI
INNER JOIN KHOA ON BACSI.MaKhoa = KHOA.MaKhoa
INNER JOIN (
SELECT
BACSI_SODT.MaBacSi,
COUNT(*) AS cnt
FROM BACSI_SODT
GROUP BY BACSI_SODT.MaBacSi
) AS SoLuongSDT ON SoLuongSDT.MaBacSi = BACSI.MaBacSi
ORDER BY
[Số Lượng Số ĐT] DESC

36
3. Thống kê số lần khám và số lần điều trị của mỗi bác sĩ từ ngày 01-01-2022
đến ngày hôm qua, sắp xếp theo giảm dần số lần khám, số lần điều trị

SELECT
BACSI.MaBacSi AS [Mã Bác Sĩ],
BACSI.HocVi AS [Trình Độ],
BACSI.HoTen AS [Họ Tên],
KHOA.TenKhoa AS [Khoa],
(SELECT COUNT(*) FROM KHAM WHERE KHAM.MaBacSi = BACSI.MaBacSi
AND KHAM.NgayKham BETWEEN '2022-01-01'
AND DATEADD(DAY, -1, GETDATE())) AS [Số lần khám],
(SELECT COUNT(*) FROM DIEUTRI WHERE DIEUTRI.MaBacSi = BACSI.MaBacSi
AND DIEUTRI.NgayBatDau BETWEEN '2022-01-01'
AND DATEADD(DAY, -1, GETDATE())) AS [Số lần điều trị]
FROM BACSI
INNER JOIN KHOA ON BACSI.MaKhoa = KHOA.MaKhoa
ORDER BY
[Số lần khám] DESC,
[Số lần điều trị] DESC

37
4. Thống kê số lượng người, số lượng phòng, số lần khám, số lần điều trị của
mỗi khoa

SELECT
KHOA.TenKhoa AS [Tên],
KHoa.SoLuongNguoi AS [Số lượng người],
(SELECT COUNT(*) FROM PHONGBENH
WHERE PHONGBENH.MaKhoa = KHOA.MaKhoa) AS [Số lượng phòng],
ISNULL(K.cnt,0) AS [Số lần khám],
ISNULL(DT.cnt,0) AS [Số lần điều trị]
FROM KHOA
LEFT JOIN (
SELECT
BACSI.MaKhoa AS MaKhoa,
COUNT(*) AS cnt
FROM KHAM INNER JOIN BACSI ON BACSI.MaBacSi = KHAM.MaBacSi
GROUP BY BACSI.MaKhoa
) AS K ON K.MaKhoa = KHOA.MaKhoa
LEFT JOIN (
SELECT
BACSI.MaKhoa AS MaKhoa,
COUNT(*) AS cnt
FROM DIEUTRI INNER JOIN BACSI ON BACSI.MaBacSi = DIEUTRI.MaBacSi
GROUP BY BACSI.MaKhoa
) AS DT ON DT.MaKhoa = KHOA.MaKhoa

38
5. Lấy tình trạng hiện tại của các phòng bệnh

WITH DangDung AS (
SELECT
DUNG.MaKhoa AS [Mã Khoa],
DUNG.TenPhong AS [Phòng],
COUNT(*) AS [Đang Dùng]
FROM DUNG
WHERE DUNG.NgayKetThuc IS NULL
GROUP BY DUNG.MaKhoa, DUNG.TenPhong
)
SELECT
KHOA.TenKhoa AS [KHOA],
PHONGBENH.TenPhong AS [Phòng],
PHONGBENH.SoLuongGiuong AS [Số Giường],
ISNULL(DangDung.[Đang Dùng], 0) AS [Đang Dùng],
ISNULL(PHONGBENH.SoLuongGiuong - DangDung.[Đang Dùng],
PHONGBENH.SoLuongGiuong) AS [Còn Lại]
FROM KHOA
INNER JOIN PHONGBENH ON KHOA.MaKhoa = PHONGBENH.MaKhoa
LEFT JOIN DangDung ON (DangDung.[Mã Khoa] = PHONGBENH.MaKhoa
AND DangDung.[Phòng] = PHONGBENH.TenPhong)
ORDER BY KHOA.TenKhoa

39
6. Liệt kê lịch sử khám của bênh nhân, sắp xếp theo ngày khám

SELECT
BENH.TenBenh AS [Bệnh],
KHAM.NgayKham AS [Ngày Khám],
BACSI.HocVi AS [Học Vị],
BACSI.HoTen AS [Bác Sĩ],
KHOA.TenKhoa AS [Khoa]
FROM BACSI
INNER JOIN KHAM ON BACSI.MaBacSi = KHAM.MaBacSi
INNER JOIN BENH ON KHAM.MaBenh = BENH.MaBenh
INNER JOIN BENHNHAN ON KHAM.MaBenhNhan = BENHNHAN.MaBenhNhan
INNER JOIN KHOA ON KHOA.MaKhoa = BACSI.MaKhoa
WHERE BENHNHAN.MaBenhNhan = 'BN01'
ORDER BY KHAM.NgayKham

7. Liệt kê các khám bệnh trong một khoảng thời gian, sắp xếp theo ngày khám

SELECT
BENHNHAN.HoTen AS [Bệnh Nhân],
BENH.TenBenh AS [Bệnh],
KHAM.NgayKham AS [Ngày khám],
BACSI.HocVi AS [Học Vị],
BACSI.HoTen AS [Bác Sĩ],
KHOA.TenKhoa AS [Khoa]
FROM BACSI
INNER JOIN KHAM ON BACSI.MaBacSi = KHAM.MaBacSi
INNER JOIN BENH ON KHAM.MaBenh = BENH.MaBenh
INNER JOIN BENHNHAN ON KHAM.MaBenhNhan = BENHNHAN.MaBenhNhan
INNER JOIN KHOA ON KHOA.MaKhoa = BACSI.MaKhoa
WHERE
KHAM.NgayKham BETWEEN '2023-07-01' AND '2023-12-31'
ORDER BY
KHAM.NgayKham

40
8. Liệt kê các lần nằm điều trị của một bệnh nhân, sắp xếp theo ngày bắt đầu
điều trị

SELECT
DIEUTRI.MaDieuTri AS [Mã Điều Trị],
BENH.TenBenh AS [Bệnh],
DIEUTRI.NgayBatDau AS [Ngày Bắt Đầu],
DIEUTRI.Ngayketthuc AS [Ngày Kết Thúc],
DIEUTRI.KetQua AS [Kết Quả],
BACSI.HocVi AS [Học Vị],
BACSI.HoTen AS [Bác Sĩ],
KHOA.TenKhoa AS [Khoa]
FROM BENHNHAN
INNER JOIN DIEUTRI ON BENHNHAN.MaBenhNhan = DIEUTRI.MaBenhNhan
INNER JOIN BACSI ON DIEUTRI.MaBacSi = BACSI.MaBacSi
INNER JOIN KHAM ON BENHNHAN.MaBenhNhan = KHAM.MaBenhNhan
INNER JOIN BENH ON KHAM.MaBenh = BENH.MaBenh
INNER JOIN KHOA ON KHOA.MaKhoa = BACSI.MaKhoa
WHERE ((KHAM.NgayKham BETWEEN DIEUTRI.NgayBatDau AND DIEUTRI.NgayKetThuc)
OR (KHAM.NgayKham >= DIEUTRI.NgayBatDau AND DIEUTRI.NgayKetThuc IS NULL ))
AND BENHNHAN.MaBenhNhan = 'BN12'
ORDER BY DIEUTRI.NgayBatDau

9. Liệt kê các y lệnh trong một lần điều trị

SELECT
YLENH.NoiDung AS [Nội Dung],
YLENH.NgayThucHien AS [Ngày Thực Hiện]
FROM DIEUTRI
INNER JOIN YLENH ON YLENH.MaDieuTri = DIEUTRI.MaDieuTri
WHERE
DIEUTRI.MaDieuTri = 'DT15'
ORDER BY
YLENH.NgayThucHien

41
10. Lấy đơn thuốc của bệnh nhân trong một lần điều trị, sắp xếp theo ngày kê
đơn

SELECT
THUOC.TenThuoc AS [Thuốc],
THUOC.DonVi AS [Đơn Vị],
THUOC.DonGia AS [Đơn Giá],
GOM.SoLuong AS [Số Lượng],
THUOC.CachDung AS [Cách dùng],
KEDON.NgayKeDon AS [Ngày kê đơn],
BACSI.HocVi AS [Học Vị],
BACSI.HoTen AS [Bác Sĩ],
KHoa.TenKhoa AS [Khoa]
FROM DIEUTRI
INNER JOIN KEDON ON (DIEUTRI.MaBenhNhan = KEDON.MaBenhNhan AND
DIEUTRI.MaBacSi = KEDON.MaBacSi)
INNER JOIN GOM ON GOM.MaKeDon = KEDON.MaKeDon
INNER JOIN THUOC ON THUOC.MaThuoc = GOM.MaThuoc
INNER JOIN BACSI ON KEDON.MaBacSi = BACSI.MaBacSi
INNER JOIN KHOA ON KHOA.MaKhoa = BACSI.MaKhoa
WHERE ((KEDON.NgayKeDon BETWEEN DIEUTRI.NgayBatDau AND DIEUTRI.NgayKetThuc)
OR (KEDON.NgayKeDon >= DIEUTRI.NgayBatDau AND DIEUTRI.NgayKetThuc IS NULL ))
AND DIEUTRI.MaDieuTri = 'DT15'
ORDER BY KEDON.NgayKeDon

11. Lấy các lần thanh toán dịch vụ của bệnh nhân trong một lần điều trị

SELECT
KHOANCHIPHI.TenKhoanCP AS [Tên],
KHOANCHIPHI.DonGia AS [Đơn Giá],
THANHTOAN.SoLuong AS [Số Lượng],
THANHTOAN.NgayThanhToan AS [Ngày Thanh Toán]
FROM KHOANCHIPHI
INNER JOIN THANHTOAN ON KHOANCHIPHI.MaKhoanCP = THANHTOAN.MaKhoanCP
INNER JOIN BENHNHAN ON BENHNHAN.MaBenhNhan = THANHTOAN.MaBenhNhan
INNER JOIN DIEUTRI ON DIEUTRI.MaBenhNhan = BENHNHAN.MaBenhNhan
WHERE ((THANHTOAN.NgayThanhToan >= DIEUTRI.NgayBatDau)
AND (THANHTOAN.NgayThanhToan <= DIEUTRI.NgayKetThuc OR DIEUTRI.NgayKetThuc IS NULL))
AND DIEUTRI.MaDieuTri = 'DT15'
ORDER BY THANHTOAN.NgayThanhToan

42
12. Thống kê lịch sử điều trị và viện phí của một bệnh nhân

SELECT
DIEUTRI.MaDieuTri AS [Mã Điều Trị],
BENH.TenBenh AS [Bệnh],
DIEUTRI.NgayBatDau AS [Ngày Bắt Đầu],
DIEUTRI.Ngayketthuc AS [Ngày Kết Thúc],
DIEUTRI.KetQua AS [Kết Quả],
(SELECT
SUM(THUOC.DonGia*GOM.SoLuong)
FROM KEDON
INNER JOIN GOM
ON GOM.MaKeDon = KEDON.MaKeDon
INNER JOIN THUOC
ON THUOC.MaThuoc = GOM.MaThuoc
WHERE ((KEDON.NgayKeDon >= DIEUTRI.NgayBatDau)
AND (KEDON.NgayKeDon <= DIEUTRI.NgayKetThuc
OR DIEUTRI.NgayKetThuc IS NULL ))
AND DIEUTRI.MaBenhNhan = KEDON.MaBenhNhan ) AS [Tiền Thuốc],
(SELECT
SUM(CANLAMSANG.DonGia)
FROM
LAMXETNGHIEM
INNER JOIN CANLAMSANG
ON CANLAMSANG.MaCLS = LAMXETNGHIEM.MaCLS
WHERE ((LAMXETNGHIEM.NgayXetNghiem >= DIEUTRI.NgayBatDau)
AND (LAMXETNGHIEM.NgayXetNghiem <= DIEUTRI.NgayKetThuc
OR DIEUTRI.NgayKetThuc IS NULL ))
AND DIEUTRI.MaBenhNhan = LAMXETNGHIEM.MaBenhNhan) AS [Tiền Xét Nghiệm],
(SELECT
SUM(KHOANCHIPHI.DonGia*THANHTOAN.SoLuong)
FROM
THANHTOAN
INNER JOIN KHOANCHIPHI
ON KHOANCHIPHI.MaKhoanCP = THANHTOAN.MaKhoanCP
WHERE ((THANHTOAN.NgayThanhToan >= DIEUTRI.NgayBatDau)
AND (THANHTOAN.NgayThanhToan <= DIEUTRI.NgayKetThuc
OR DIEUTRI.NgayKetThuc IS NULL ))
AND DIEUTRI.MaBenhNhan = THANHTOAN.MaBenhNhan) AS [Các Chi Phí]
FROM BENHNHAN
INNER JOIN DIEUTRI ON BENHNHAN.MaBenhNhan = DIEUTRI.MaBenhNhan
INNER JOIN KHAM ON BENHNHAN.MaBenhNhan = KHAM.MaBenhNhan
AND ((KHAM.NgayKham BETWEEN DIEUTRI.NgayBatDau AND DIEUTRI.NgayKetThuc)
OR (KHAM.NgayKham >= DIEUTRI.NgayBatDau AND DIEUTRI.NgayKetThuc IS NULL ))
INNER JOIN BENH ON KHAM.MaBenh = BENH.MaBenh
WHERE BENHNHAN.MaBenhNhan = 'BN12'

43
13. Thống kê viện phí của các bệnh nhân, giảm dần theo tổng tiền

SELECT
BENHNHAN.HoTen AS [Họ Tên],
ISNULL(CP.[Các chi phí], 0) AS [Chi Phí],
ISNULL(TT.[Tiền Thuốc], 0) AS [Tiền Thuốc],
ISNULL(XN.[Tiền Xét Nghiệm], 0) AS [Tiền Xét Nghiệm],
(ISNULL(CP.[Các chi phí], 0) + ISNULL(TT.[Tiền Thuốc], 0) + ISNULL(XN.[Tiền
Xét Nghiệm], 0)) AS [Tổng Tiền]
FROM
BENHNHAN
LEFT JOIN(
SELECT
THANHTOAN.MaBenhNhan,
SUM (THANHTOAN.SoLuong * KHOANCHIPHI.DonGia) AS [Các chi phí]
FROM
THANHTOAN
INNER JOIN KHOANCHIPHI ON THANHTOAN.MaKhoanCP =
KHOANCHIPHI.MaKhoanCP
GROUP BY THANHTOAN.MaBenhNhan
) AS CP ON CP.MaBenhNhan = BENHNHAN.MaBenhNhan
LEFT JOIN(
SELECT
KEDON.MaBenhNhan,
SUM (THUOC.DonGia * GOM.SoLuong) AS [Tiền Thuốc]
FROM
KEDON
INNER JOIN GOM ON GOM.MaKeDon = KEDON.MaKeDon
INNER JOIN THUOC ON THUOC.MaThuoc = GOM.MaThuoc
GROUP BY KEDON.MaBenhNhan
) AS TT ON TT.MaBenhNhan = BENHNHAN.MaBenhNhan
LEFT JOIN(
SELECT
LAMXETNGHIEM.MaBenhNhan,
SUM (CANLAMSANG.DonGia) AS [Tiền Xét Nghiệm]
FROM
LAMXETNGHIEM
INNER JOIN CANLAMSANG ON CANLAMSANG.MaCLS = LAMXETNGHIEM.MaCLS
GROUP BY LAMXETNGHIEM.MaBenhNhan
) AS XN ON XN.MaBenhNhan = BENHNHAN.MaBenhNhan
ORDER BY [Tổng Tiền] DESC

44

You might also like