Hệ quản trị cơ sở dữ liệu quản lý hồ sơ bệnh án tại Bệnh viện Thống Nhất

MỤC LỤC

CƠ SỞ LÝ THUYẾT

    Mô hình quan hệ cũng cung cấp một loạt các ràng buộc về tính toàn vẹn nhằm duy trì độ chính xác của dữ liệu; các thủ tục kiểm tra này là một phần trong việc tuân thủ đầy đủ các nguyên tắc về nguyên tử, tính thống nhất, độc lập và độ bền dữ liệu - viết ngắn gọn là ACID - được thiết kế để đảm bảo rằng độ tin cậy trong xử lý các giao dịch cơ sở dữ liệu. Công cụ PowerDesigner này có chức năng: trình bày các mô hình bằng các ký hiệu đồ họa phù hợp với các phương pháp mô hình hóa trong thực tế như mô hình thực thể và mối kết hợp, mô hình quan hệ,…tự động tạo hồ sơ mô tả các đối tượng trên mô hình và tự động tạo mã phát sinh cơ sở dữ liệu và các chức năng xử lý từ mô hình đã xây dựng.

    Hình 2.2. Oracel Database được xây dựng dựa trên SQL
    Hình 2.2. Oracel Database được xây dựng dựa trên SQL

    ỨNG DỤNG

    Index (Chỉ mục)

      CREATE INDEX Index_chucvu_nv on NHANVIEN (MaChucVu) - Kiểm thử: Tìm kiếm tất cả các nhân viên có mã chức vụ là ‘CV002’.

      Update (Cập nhật)

        Câu 1: Cập nhật ghi chú dịch vụ 'Chưa bao gồm thuốc' của bảng giá dịch vụ với mã dịch vụ là tham số đầu vào. Câu 2: Cập nhật lại thuộc tính cách dùng là ngày uống 1 lần và ghi chú là uống sáng tại bảng chi tiết toa thuốc, số đơn thuôc là người dùng nhập vào. Câu 4: Cập nhật lại đơn giá thuốc của bảng thuốc do người dùng nhập bằng giá thuốc của thuốc có mã là 'T002'.

        Câu 5: Cập nhật lại số tiền phải trả sẽ giảm 5% cho các bệnh nhân có sổ hộ nghèo, với mã phiếu thanh toán do người dùng nhập vào. Câu 6: Cập nhật nhật lại ngày trả giường của mã giường do người dùng nhập thành ngày hiện hành của hệ thống. Câu 7: Cập nhật lại mã chức vụ và ghi chú của nhân viên có mã do người dùng nhập.

        Câu 8: Cập nhật lại tổng tiền của 1 phiếu thanh toán bất kì do người dùng nhập vào bằng tổng tiền của mã phiếu đăng kí khám DK003. Câu 10: Cập nhật Phiếu báo báo có ngày báo cáo là ngày của hệ thống và nội dung báo cáo là tháng lập phiếu báo cáo.

        Hình 4.62. Update kiểm thử câu 3
        Hình 4.62. Update kiểm thử câu 3

        Delete (Xóa)

          Câu 3: Xóa phiếu khám định kỳ không có tiền sử bệnh và kỳ khám hơn 1 lần. Câu 4: Xóa bảo hiểm y tế đã hết hạn sử dụng, ngày hết hạn sẽ nhỏ hơn ngày hiện hành. Câu 5: Xóa phiếu kết quả khám có ghi chú là xét nghiệm lại và có mã phiếu PKQ021, nhằm làm lại phiếu kết quả khám sau khi khám lại.

          Câu 6: Xóa chi tiết phiếu khám có mã bệnh án là BA002 mà kết quả khám tai mũi họng mắt là bình thường. Câu 8: Xóa bảng giá dịch vụ có tên dịch vụ là xét nghiệm với ghi chú chưa bao gồm thuốc. Câu 10: Xóa thông tin phiếu khám định kỳ được lưu trữ có ngày khám cách đây 15 năm.

          Hình 4.71. Delete kiểm thử câu 2
          Hình 4.71. Delete kiểm thử câu 2

          Truy vấn dữ liệu

            SELECT PHONGKHAM.MaPhongKham, KHOA.MaKhoa, COUNT (*) SoBenhNhanKham. FROM PHIEUKETQUAKHAM INNER JOIN BENHNHAN. ON BENHNHAN.MaBenhNhan = PHIEUKETQUAKHAM.MaBenhNhan INNER JOIN PHONGKHAM. ON PHIEUKETQUAKHAM.MaPhongKham = PHONGKHAM.MaPhongKham INNER JOIN KHOA. GROUP BY MaPhongKham) OR COUNT (*) <= ALL (SELECT COUNT (*) FROM PHONGKHAM GROUP BY MaPhongKham);. Câu 2: Cho biết tên bệnh nhân, mã phiếu thanh toán viện phí, số tiền phải trả và tên người đóng tiền của những bệnh nhân có kết quả khám là “Bình thường” nhưng lại có số tiền phải trả hơn 1 triệu đồng. Câu 9: Liệt kê khoảng thời gian điều trị nhập viện của tất cả các bệnh nhân, thông tin hiển thị gồm: họ tên bênh nhân,mã giường điều trị, ngày nhập viên, ngày xuất viện và khoảng thời gian nhập viện.

            Câu 20: Cho biết thông tin gồm: mã phiếu thanh toán, ngày lập phiếu, mã phiếu đăng kí khám, mã nhân viên, họ tên nhân viên, mã phiếu xuất viện, mã dịch vụ, số tiền phải trả sau khi tăng 15% so với số tiền phải trả ban đầu được làm tròn đến hàng đơn vị. Câu 23: Viết chương trình in ra thông tin toa thuốc cho bệnh nhân gồm các thông tin: Mã toa thuốc, ngày kê đơn, mã bác sĩ, tên bác sĩ, mã kết quả khám với mã toa thuốc được người dùng nhập vào. Câu 24: Xem thông tin phiếu xuất gồm mã phiếu xuất viện, ngày xuất viện, chuẩn đoán, phương pháp điều trị, mã phiếu nhập viện mã nhân viên và tên nhân viên lập phiếu xuất viện của những bệnh nhân xuất viện vào ngày 03-12-2022.

            Câu 27: Thống kê số ngày nhập viện của tất cả bệnh nhân gồm các thông tin: mã phiếu nhập viện, mã phiếu xuất viện, ngày nhập viện, ngày xuất viện, mã nhân viên, tên nhân viên, mã khoa, tên khoa. Câu 30: Thống kê danh sách phiếu thanh toán gồm các thông tin: mã phiếu thanh toán, ngày lập phiếu, mã dịch vụ, tên dịch vụ, mã nhân viên, tên nhân viên, khoảng thời gian lập phiếu thanh toán đó cho đến nay.

            Hình 4.80. Truy vấn dữ liệu kiểm thử câu 1
            Hình 4.80. Truy vấn dữ liệu kiểm thử câu 1

            Views

              Câu 1: Tạo view chứa thông tin phiếu thanh toán viện phí, số tiền phải trả của bệnh nhân lớn hơn mức tiền phải trả trung bình của bệnh viện. Câu 3: Tạo hoặc thay thế view có tên là thongtin_ketquakham cho biết mã phiếu kết quả khám, phần kết quả xét nghiệm "Bình thường" mà bác sĩ không ghi chú gì thêm. Câu 4: Tạo view thống kê các bệnh nhân nhập viện trong 6 tháng đầu năm 2022, và cho biết bệnh nhân nằm giường điều trị nào.

              Câu 5: Tạo view liệt kê tất cả các hồ sơ bệnh án chưa được giải quyết xong, cho biết các hồ sơ đó có kết quả khám như thế nào và thông tin bệnh nhân là ai. Câu 6: Tạo view liệt kê các bệnh nhân đã làm thủ tục nhập viện, cho biết kết quả khám của bệnh nhân là gì mà phải nhập viện và thông tin giường, phòng điều trị của bệnh nhân chọn có phải là thượng hạng hay không.

              Hình 4.111. View kiểm thử câu 2
              Hình 4.111. View kiểm thử câu 2

              Functions

                Câu 2: Tạo funcitons thống kê tổng tiền trung bình theo nội dung thu của phiếu thanh toán viện phí, với tham số truyền vào là nội dung thu. EXECUTE DBMS_OUTPUT.PUT_LINE ('Tổng tiền trung bình theo cùng nội dung thu là: '||avg_tien('&ndthu'));. Câu 3: Tạo funcitons tính số ngày nhập viện của các bệnh nhân đã nhập viện, với tham số truyền vào là mã giường điều trị.

                Câu 4: Tạo function tính tổng các bệnh nhân khám và điều trị trong bệnh viện. Câu 5: Tạo funcitons cho biết hồ sơ bệnh án đang trong tình trạng như thế nào, với mã hồ sơ là tham số truyền vào. Câu 6: Tạo funcitons cho biết tổng số phiếu báo cáo được lập bởi nhân viên, với tham số truyền vào là mã nhân viên.

                EXECUTE DBMS_OUTPUT.PUT_LINE ('Tổng số phiếu báo cáo nhân viên này đã lập là: '||func_Sophieubaocao('&NhapVaoMaNhanVien'));.

                Store Procedures

                  Câu 2: Tạo thủ tục lập thêm phiếu đăng ký khám mới khi bệnh nhân có yêu cầu khám bệnh, với tất cả các giá trị là tham số truyền vào. CREATE OR REPLACE PROCEDURE proc_insertphieudk (v_Maphieudk PHIEUDANGKIKHAM.MaPhieuDKKham%type,. v_ngaydk PHIEUDANGKIKHAM.NgayDangKy%type, v_trieuchung PHIEUDANGKIKHAM.TrieuChung%type, v_denghi PHIEUDANGKIKHAM.DeNghiKham%type, v_ghichu PHIEUDANGKIKHAM.GhiChu%type, v_mabn PHIEUDANGKIKHAM.MaBenhNhan%type, v_manv PHIEUDANGKIKHAM.MaNhanVien%type, v_mahs PHIEUDANGKIKHAM.MaHoSoBenhAn%type, v_mabhyt PHIEUDANGKIKHAM.MaBaoHiemYTe%type) AS. DBMS_OUTPUT.PUT_LINE ('Mã phiếu đăng ký khám này đã tồn tại, vui lòng kiểm tra lại!!!');.

                  Câu 3: Tạo thủ tục tìm kiếm phiếu thanh toán viện phí mà bệnh nhân không nộp tiền tạm ứng trước đó, thông tin hiển thị là mã phiếu thanh toán và tổng tiền đóng. Câu 4: Tạo thủ tục xóa phiếu đăng khám không hợp lệ khi bệnh nhân điền phiếu không đúng quy định, mã phiếu đó sẽ được nhân viên y tế ghi chú trên phiếu là. Câu 6: Tạo thủ tục cập nhật giảm tiền viện phí cho bệnh nhân có tiền viện phí cao với điều kiện tiền viện phí bệnh nhân phải từ 5 triệu trở lên thì giảm 10%, còn lại thì không giảm.

                  Triggers

                    Câu 1: Cài đặt ràng buộc toàn vẹn ngày đăng ký khám phải nhỏ hơn hoặc bằng ngày hiện hành khi thêm mới hoặc cập nhật thông tin về phiếu đăng ký khám. Câu 2: Tạo ràng buộc toàn vẹn ngày sinh của bệnh nhân phải nhỏ hơn hoặc bằng ngày hiện hành. Câu 3: Cài đặt ràng buộc toàn vẹn ngày cấp bảo hiểm y tế phải nhỏ hơn ngày hết hạn khi thêm mới hoặc cập nhật thông tin về bảo hiểm y tế.

                    CREATE OR REPLACE TRIGGER trigg_ngbaohiemyte BEFORE INSERT OR UPDATE ON BAOHIEMYTE FOR EACH ROW. Câu 4: Cài đặt ràng buộc toàn vẹn số lượng thuốc kê trên toa thuốc phải luôn lớn hơn 2 khi thêm mới hoặc cập nhật thông tin về chi tiết toa thuốc. CREATE OR REPLACE TRIGGER trigg_soluongthuoc before insert or update ON CHITIETTOATHUOC FOR EACH ROW.

                    Câu 5: Cài đặt ràng buộc toàn vẹn cho ghi chú của hồ sơ bệnh án có giá trị là 'Chưa giải quyết' hoặc 'Hoàn thành'. DBMS_OUTPUT.PUT_LINE ('Ghi chú của hồ sơ bệnh án phải ghi là Chưa giải quyết hoặc Hoàn thành!');.