Phân tích hệ thống 1.Yêu cầu về dữ liệu cần được lưu trữ: Dữ liệu về bảng Người: Căn cước công dân, Họ và tên, Ngày sinh, Giới tính Nam/Nữ, Số điện thoại, Địa chỉ, Email CCCD VARCHAR
Mô tả “kịch bản thế giới thực”
Hệ cơ sở dữ liệu này được áp dụng để quản lý hồ sơ bệnh án tại bệnh viện, giúp lưu trữ và tổ chức thông tin bệnh nhân cùng lịch sử khám chữa bệnh Nó tạo điều kiện thuận lợi cho việc theo dõi và chăm sóc sức khỏe, đồng thời cho phép bác sĩ và nhân viên y tế truy cập nhanh chóng vào thông tin cần thiết Nhờ đó, hệ thống cải thiện chất lượng dịch vụ y tế, giảm thời gian chờ đợi và nâng cao mức độ hài lòng của bệnh nhân.
Các thông tin cần được lưu trữ trong cơ sở dữ liệu bao gồm:
1 Bệnh nhân: Mã bệnh nhân (ID), Căn cước công dân, Họ và tên, Ngày sinh, Giới tính (Nam/Nữ), Địa chỉ, Số điện thoại, Email
2 Người giám hộ: Căn cước công dân, Họ và tên, Ngày sinh,
Giới tính (Nam/Nữ), Địa chỉ, Số điện thoại, Email
3 Bác sĩ: Mã bác sĩ (ID), Căn cước công dân, Họ và tên, Ngày sinh, Giới tính (Nam/Nữ), Địa chỉ, Số điện thoại, Email, Chuyên khoa
4 Hồ sơ bệnh án: Mã hồ sơ bệnh án, Ngày nhập viện, Ngày xuất viện, Chẩn đoán, Phương án điều trị, Kết quả
5 Lịch sử khám bệnh: Ngày giờ khám
6 Dịch vụ y tế: Mã dịch vụ, Tên dịch vụ, Chi phí
7 Loại thuốc: Mã thuốc, Tên loại, Nhà sản xuất
8 Đơn thuốc: Mã đơn, Ngày kê đơn, Liều lượng chỉ định
Phân tích hệ thống
Yêu cầu về dữ liệu cần được lưu trữ
Dữ liệu về bảng Người: Căn cước công dân, Họ và tên, Ngày sinh, Giới tính (Nam/Nữ), Số điện thoại, Địa chỉ, Email
SDT CHAR(10) UNIQUE NOT NULL,
Email VARCHAR(100) UNIQUE NOT NULL
Dữ liệu về bảng Người giám hộ: Căn cước công dân
FOREIGN KEY (CCCD) REFERENCES Nguoi(CCCD)
Dữ liệu về bảng Bệnh nhân: Mã bệnh nhân, Căn cước công dân, Căn cước công dân của người giám hộ, Tiền sử bệnh án
FOREIGN KEY (CCCD) REFERENCES Nguoi(CCCD),
FOREIGN KEY (NGH_CCCD) REFERENCES
Dữ liệu về bảng Bác sĩ: Mã bác sĩ, Căn cước công dân, Chuyên khoa
FOREIGN KEY (CCCD) REFERENCES Nguoi(CCCD)
Dữ liệu về bảng Khám: Mã bệnh nhân, Mã bác sĩ
FOREIGN KEY (MaBacSi) REFERENCES BacSi(MaBacSi)
Dữ liệu về bảng Hồ sơ bệnh án
Dữ liệu về bảng Dịch vụ y tế:
Dữ liệu về bảng Theo dõi
FOREIGN KEY (MaBacSi) REFERENCES BacSi(MaBacSi),
Dữ liệu về bảng Đơn thuốc
FOREIGN KEY (MaBacSi) REFERENCES BacSi(MaBacSi)
Dữ liệu về bảng Loại thuốc
FOREIGN KEY (MaDon) REFERENCES DonThuoc(MaDon)
Dữ liệu về bảng Lịch sử khám:
FOREIGN KEY (MaBacSi) REFERENCES BacSi(MaBacSi),
FOREIGN KEY (MaDon) REFERENCES DonThuoc(MaDon)
Các thao tác trên cơ sở dữ liệu
Hệ thống cơ sở dữ liệu sẽ hỗ trợ các thao tác như sau:
Thêm mới hồ sơ bệnh nhân và hồ sơ bệnh án.
Cập nhật thông tin bệnh nhân (như địa chỉ, số điện thoại).
Cập nhật thông tin khám bệnh, chẩn đoán mới và điều trị tiếp theo.
Tìm kiếm thông tin bệnh nhân theo tên, mã bệnh nhân hoặc số điện thoại.
Tra cứu lịch sử khám chữa bệnh của bệnh nhân cụ thể.
Tìm kiếm thông tin bác sĩ theo chuyên khoa hoặc tên.
Xem danh sách bệnh nhân đang nhập viện và các thông tin liên quan.
Xem danh sách các bệnh nhân đã được điều trị, thống kê theo tháng/quý/năm.
Xem thông tin và lịch sử bệnh án của bệnh nhân.
Tạo các báo cáo thống kê số lượng bệnh nhân theo từng chuyên khoa.
Báo cáo về tình trạng sức khỏe của bệnh nhân (như số lượng bệnh nhân xuất viện thành công, tỷ lệ bệnh nhân tái khám, v.v.)
Xuất báo cáo tài chính liên quan đến dịch vụ y tế đã cung cấp.
Lược đồ E-R
Các ràng buộc và yêu cầu dữ liệu
Các ràng buộc dữ liệu:
Mã bệnh nhân duy nhất:
Ghi chú: Mỗi bệnh nhân trong hệ thống cần có một mã bệnh nhân duy nhất để đảm bảo không có sự nhầm lẫn trong hồ sơ
Ràng buộc này đảm bảo rằng mỗi bệnh nhân có một mã duy nhất, ngăn chặn việc trùng lặp mã giữa các bệnh nhân Điều này có thể được thực hiện thông qua việc sử dụng một chỉ mục duy nhất trong cơ sở dữ liệu.
Ngày nhập viện không được sau ngày xuất viện:
Ghi chú: Ngày nhập viện của bệnh nhân phải luôn nhỏ hơn hoặc bằng ngày xuất viện
Ràng buộc này đảm bảo tính hợp lệ của thông tin lịch sử điều trị của bệnh nhân Việc sử dụng trigger trong cơ sở dữ liệu có thể giúp kiểm tra và ngăn chặn việc nhập liệu không hợp lệ, từ đó nâng cao chất lượng dữ liệu y tế.
Ràng buộc về độ tuổi:
Ghi chú: Độ tuổi của bệnh nhân phải là một giá trị không âm và hợp lý (ví dụ: từ 0 đến 120).
Ràng buộc này đảm bảo tính hợp lệ của thông tin cá nhân bệnh nhân và cho phép kiểm soát thông tin thông qua các ràng buộc dữ liệu trong cơ sở dữ liệu.
Tình trạng sức khỏe không thể rỗng:
Ghi chú: Trường mô tả tình trạng sức khỏe của bệnh nhân không được để trống.
Diễn giải: Ràng buộc này đảm bảo rằng mọi hồ sơ bệnh án đều có thông tin đầy đủ về tình trạng sức khỏe của bệnh nhân.
Yêu cầu về bảo mật và toàn vẹn dữ liệu:
Chỉ những nhân viên y tế có thẩm quyền mới được phép truy cập và chỉnh sửa hồ sơ bệnh án, do đó cần thiết lập phân quyền rõ ràng cho các vai trò như bác sĩ, y tá và nhân viên hành chính.
Mã hóa dữ liệu nhạy cảm:
Để bảo vệ thông tin nhạy cảm như thông tin cá nhân và lịch sử bệnh án khỏi các truy cập trái phép, việc mã hóa dữ liệu trong cơ sở dữ liệu là rất cần thiết.
Ghi lại nhật ký truy cập:
Hệ thống phải ghi lại tất cả các hành động truy cập và thay đổi dữ liệu để phát hiện các hoạt động đáng ngờ, từ đó bảo vệ tính toàn vẹn của dữ liệu.
Để bảo vệ dữ liệu khỏi mất mát, việc sao lưu định kỳ là rất quan trọng Hãy thường xuyên thực hiện sao lưu và kiểm tra khả năng phục hồi dữ liệu để đảm bảo thông tin luôn được an toàn.
Kiểm tra tính hợp lệ của dữ liệu:
Cần kiểm tra tính hợp lệ của dữ liệu nhập vào để đảm bảo rằng thông tin được đưa vào hệ thống luôn chính xác và nhất quán.
Mô tả lược đồ E-R
Lược đồ E-R bao gồm 8 tập thực thể, trong đó có 5 tập thực thể mạnh như bệnh nhân, bác sĩ, dịch vụ y tế, loại thuốc và đơn thuốc Ngoài ra, còn có 3 tập thực thể yếu là hồ sơ bệnh án, người giám hộ và lịch sử khám Đặc biệt, lược đồ này cũng bao gồm 1 liên kết ba ngôi.
Bệnh viện có nhiều bệnh nhân, bác sĩ và hồ sơ bệnh án.
Mỗi bệnh nhân chỉ có 1 hồ sơ bệnh án Một hồ sơ bệnh án chỉ có 1 bệnh nhân.
Mối liên kết 1:1 từ bệnh nhân đến hồ sơ bệnh án
Một hồ sơ bệnh án có thể được phụ trách bởi 1 hoặc nhiều bác sĩ Mỗi bác sĩ cũng có thể phụ trách 1 hoặc nhiều hồ sơ bệnh án.
Mối liên kết M:N từ bác sĩ đến hồ sơ bệnh án
Hồ sơ bệnh án có thể chứa một hoặc nhiều dịch vụ y tế, chẳng hạn như xét nghiệm hoặc siêu âm Mỗi dịch vụ y tế có thể xuất hiện trong một hoặc nhiều hồ sơ bệnh án khác nhau.
Một bệnh nhân có thể có sử dụng 1 hoặc nhiều dịch vụ và được lưu trong 1 hồ sơ bệnh án.
Mối liên kết 1:N từ bệnh nhân đến dịch vụ y tế và hồ sơ bệnh án
Mỗi bệnh nhân có thể có 1 hoặc nhiều lịch sử khám Một bác sĩ có thể có 1 hoặc nhiều lịch sử khám.
Mối liên kết 1:N từ bệnh nhân đến lịch sử khám
Mối liên kết 1:N từ bác sĩ đến lịch sử khám
Mỗi bệnh nhân có thể trải qua nhiều lần khám với các bác sĩ khác nhau, trong đó mỗi lần khám được thực hiện bởi một bác sĩ và ghi lại thông tin chi tiết về tình trạng sức khỏe vào hồ sơ bệnh án Lịch sử khám bệnh chỉ bao gồm một bệnh nhân, một bác sĩ và được lưu giữ trong một hồ sơ bệnh án duy nhất.
Mối liên kết 1:1:N từ 1 bệnh nhân và 1 bác sĩ đến lịch sử khám
Một hồ sơ bệnh án chứa 1 hoặc nhiều lịch sử khám
Mối liên kết 1:N từ hồ sơ bệnh án đến lịch sử khám
Người giám hộ có thể chịu trách nhiệm cho 1 hoặc nhiều bệnh nhân Nhưng 1 bệnh nhân chỉ có 1 người giám hộ.
Liên kết 1:N từ người giám hộ đến bệnh nhân
Mỗi lần khám sẽ cấp 1 đơn thuốc.
Liên kết 1:1 từ lịch sử khám bệnh đến đơn thuốc
Một bệnh nhân sử dụng 1 hoặc nhiều đơn thuốc, mỗi đơn thuốc cũng được cấp cho nhiều bệnh nhân
Liên kết N:M từ bệnh nhân đến đơn thuốc
Một đơn thuốc chứa nhiều loại thuốc, mỗi loại thuốc được sử dụng cho nhiều đơn thuốc khác nhau.
Liên kết 1:M từ đơn thuốc đến loại thuốc
Lược đồ E-R
Lược đồ E-R là một loại biểu đồ cấu trúc được sử dụng trong thiết kế cơ sở dữ liệu Các thành phần cơ bản của lược đồ E-R:
Thực thể là một đối tượng cụ thể trong thế giới thực, trong khi một tập thực thể là tập hợp các thực thể tương đồng.
Thuộc tính: Mỗi tập thực thể có một tập các tính chất đặc trưng, mỗi tính chất đặc trưng này gọi là thuộc tính của tập thực thể.
Mối quan hệ giữa các tập thực thể: các đường liên kết giữa hai hay nhiều tập thực thể
Mỗi tập thực thể cần có ít nhất một thuộc tính khóa, và một khóa có thể bao gồm một hoặc nhiều thuộc tính Trong một tập thực thể, có thể tồn tại nhiều khóa, nhưng chúng ta sẽ lựa chọn một khóa chính để đại diện cho tập thực thể đó.
Hình 3.1: Lược đồ E-R mô tả hệ thống quản lý hồ sơ bệnh án điện tử
Thiết kế logic và chuẩn hóa
Ánh xạ từ lược đồ E-R sang tập các lược đồ quan hệ
1.1 Lược đồ quan hệ Quản lý hồ sơ bệnh án điện tử a Lược đồ quan hệ:
Lược đồ quan hệ là một mô hình toán học dùng để mô tả cấu trúc của một cơ sở dữ liệu quan hệ Nó bao gồm:
Tên quan hệ: Tên của bảng dữ liệu.
Các thuộc tính: Các trường thông tin trong bảng.
Khóa chính: Một hoặc nhiều thuộc tính xác định duy nhất một hàng trong bảng.
Khóa ngoại: Một hoặc nhiều thuộc tính trong bảng này liên kết với khóa chính của bảng khác, thể hiện mối quan hệ giữa các bảng.
Mối quan hệ giữa các bảng trong cơ sở dữ liệu được xác định thông qua khóa chính và khóa ngoại, cho phép các bảng liên kết với nhau một cách hiệu quả Các mối liên kết này đóng vai trò quan trọng trong việc tổ chức và quản lý dữ liệu, đảm bảo tính toàn vẹn và khả năng truy xuất thông tin nhanh chóng.
Hình 4.1: Lược đồ quan hệ mô tả hệ thống quản lý hồ sơ bệnh án điện tử b Các thực thể chính được thể hiện trong lược đồ:
Người: Đại diện cho thông tin cơ bản của một người, bao gồm cả bệnh nhân, người giám hộ và bác sĩ.
Bệnh nhân: Thể hiện thông tin chi tiết của bệnh nhân, bao gồm tiền sử bệnh án.
Khám: Ghi lại thông tin về mỗi lần khám bệnh của bệnh nhân.
Bác sĩ: Lưu trữ thông tin về các bác sĩ trong cơ sở y tế.
Dịch vụ y tế: Liệt kê các dịch vụ mà cơ sở y tế cung cấp.
Đơn thuốc: Ghi lại thông tin về các đơn thuốc được kê cho bệnh nhân.
Loại thuốc: Lưu trữ thông tin về các loại thuốc.
Hồ sơ bệnh án: Tổng hợp toàn bộ thông tin về quá trình điều trị của một bệnh nhân.
Lịch sử khám: Ghi lại lịch sử khám bệnh của bệnh nhân.
Theo dõi: Ghi lại quá trình theo dõi bệnh nhân sau khi điều trị. c Các mối quan hệ giữa các thực thể:
Một người có thể là một bệnh nhân và cũng có thể là người giám hộ cho một bệnh nhân khác.
Một bệnh nhân có thể thực hiện nhiều lần khám.
Mỗi lần khám được thực hiện bởi một bác sĩ và liên quan đến một hoặc nhiều dịch vụ y tế.
Một bác sĩ có thể khám cho nhiều bệnh nhân và kê nhiều đơn thuốc.
Một đơn thuốc có thể bao gồm nhiều loại thuốc.
Mỗi lần khám sẽ được ghi lại vào lịch sử khám của bệnh nhân và được lưu trữ trong hồ sơ bệnh án.
Quá trình theo dõi bệnh nhân được liên kết với bác sĩ và hồ sơ bệnh án. d Các thuộc tính của các thực thể:
Người: CCCD, họ tên, ngày sinh, giới tính, số điện thoại, địa chỉ, email.
Người giám hộ: NGH-CCCD
Bệnh nhân: BN-CCCD, Mã bệnh nhân, NGH-CCCD, tiền sử bệnh án.
Khám: Mã bệnh nhân, mã bác sĩ
Bác sĩ: BS-CCCD, mã bác sĩ , chuyên khoa
Dịch vụ y tế: Mã dịch vụ, mã bệnh nhân, chi phí, tên dịch vụ
Đơn thuốc: Mã đơn, mã bác sĩ,liều dùng, ngày kê đơn.
Loại thuốc: Mã thuốc, mã đơn, tên loại, nhà sản xuất
Hồ sơ bệnh án: Mã hồ sơ, mã bệnh nhân, ngày nhập viện , ngày xuất viện , chuẩn đoán , phương án điều trị , kết quả
Lịch sử khám: Mã hồ sơ, mã bệnh nhân, mã bác sĩ, mã đơn, ngày giờ khám
Theo dõi: mã bác sĩ, mã hồ sơ
1.2 Mục đích của lược đồ
Lược đồ này cung cấp cái nhìn rõ ràng về cấu trúc của cơ sở dữ liệu quản lý hồ sơ bệnh án điện tử, từ đó giúp chúng ta thiết kế các bảng và viết các câu lệnh SQL để truy xuất, cập nhật và quản lý dữ liệu một cách hiệu quả.
Xác định phụ thuộc hàm
Phụ thuộc hàm là mối quan hệ giữa các thuộc tính trong một quan hệ, mô tả cách mà giá trị của một tập hợp thuộc tính xác định duy nhất giá trị của một tập hợp thuộc tính khác.
1.3 Phân tích từng lược đồ quan hệ và các phụ thuộc hàm a Người
CCCD(Khoá chính) → Họ tên, Ngày sinh, Giới tính, SDT, Địa chỉ, Email
SDT→ Họ tên, Ngày sinh, Giới tính, CCCD, Địa chỉ, Email
Email → Họ tên, Ngày sinh, Giới tính, SDT, Địa chỉ, CCCD b Bệnh nhân
BN-CCCD → Mã bệnh nhân, Tiền sử bệnh án, NGH-CCCD
Mã bệnh nhân(Khóa chính) → BN-CCCD, Tiền sử bệnh án, NGH-CCCD c Người giám hộ
Người giám hộ chỉ có thông tin là CCCD và cũng đóng vai trò là Người Nên phụ thuộc hàm cũng tương tự như Người d Bác sĩ
Mã bác sĩ (Khoá chính)→ BS-CCCD, Chuyên khoa
BS-CCCD → Mã bác sĩ, Chuyên khoa e Hồ sơ bệnh án
Mã hồ sơ (Khóa chính) → Mã bệnh nhân, Ngày nhập viện, Ngày xuất hiện, Chẩn đoán, Phương án điều trị, Kết quả
Mã bệnh nhân → Mã hồ sơ, Ngày nhập viện, Ngày xuất viện, Chẩn đoán, Phương án điều trị, Kết quả f Lịch sử khám bệnh
Mã hồ sơ → Mã bệnh nhân, Mã bác sĩ, Ngày giờ khám, Mã đơn
Mã bệnh nhân → Mã hồ sơ, Ngày giờ khám, Mã đơn, Mã bác sĩ
Mã đơn → Mã hồ sơ, Ngày giờ khám, Mã bác sĩ, Mã bệnh nhân
Mã bác sĩ, ngày giờ khám → Mã hồ sơ, Mã đơn, Mã bệnh nhân g Dịch vụ y tế
Mã dịch vụ (Khóa chính) → Tên dịch vụ, chi phí h Loại thuốc
Mã thuốc(Khóa chính) → Tên, Nhà sản xuất, Hạn sử dụng
Tên, nhà sản xuất → Mã thuốc, Hạn sử dụng i Đơn thuốc
Mã đơn(Mã đơn) → Mã bác sĩ, Ngày kê đơn, Liều dùng
Ngày kê đơn, Mã bác sĩ → Mã đơn, Liều dùng
1.4 Ghi chú về cách các thuộc tính phụ thuộc vào khóa chính
Trong lược đồ quan hệ, khóa chính (như CCCD, Mã bệnh nhân,
Mã bác sĩ, Mã dịch vụ, Mã hồ sơ, Mã đơn, Mã thuốc) đều xác định duy nhất các thuộc tính còn lại.
Xác định khóa và chuẩn hóa lược đồ
Khóa: Khóa là một tập hợp các thuộc tính xác định duy nhất một hàng trong một quan hệ.
Khóa chính: Khóa được chọn để xác định duy nhất một hàng.
Khóa ngoại: Khóa tham chiếu đến khóa chính của một quan hệ khác, dùng để tạo mối liên kết giữa các bảng.
Siêu khóa: Siêu khóa là một tập hợp của một hoặc nhiều khóa là duy nhất nhằm xác định các hàng trong bảng
Chuẩn hóa là quá trình phân tách một quan hệ lớn thành các quan hệ nhỏ hơn dựa vào các phụ thuộc hàm Các dạng chuẩn hóa phổ biến bao gồm 1NF, 2NF, 3NF và BCNF, giúp tối ưu hóa cấu trúc dữ liệu và giảm thiểu sự trùng lặp thông tin.
Dạng chuẩn 1NF (First Normal Form) yêu cầu rằng một bảng (quan hệ) chỉ được coi là đạt chuẩn khi tất cả các miền giá trị của các cột trong bảng chỉ chứa các giá trị nguyên tử Điều này có nghĩa là không được phép có các giá trị phức tạp hay tập hợp trong bất kỳ cột nào của bảng.
Dạng chuẩn 2NF: Một quan hệ ở dạng chuẩn 2NF nếu quan hệ đó:
Các thuộc tính không khoá phải phụ thuộc hàm đầy đủ vào khoá chính
Dạng chuẩn 3NF: Một quan hệ ở dạng chuẩn 3NF nếu quan hệ đó:
Các thuộc tính không khoá phải phụ thuộc trực tiếp vào khoá chính
Dạng chuẩn BCNF: Một quan hệ ở dạng chuẩn BCNF nếu quan hệ đó:
Không có thuộc tính khoá mà phụ thuộc hàm vào thuộc tính không khoá.
1.5 Xác định khóa chính và khóa ngoại cho từng lược đồ quan hệ a Người
Khóa chính: CCCD b Bệnh nhân
Khóa chính: Mã bệnh nhân
Khóa ngoại: BN-CCCD, NGH-CCCD c Người giám hộ
Khoá chính: NGH-CCCD d Bác sĩ
Khóa chính: Mã bác sĩ
Khóa ngoại: BS-CCCD e Hồ sơ bệnh án
Khóa chính: Mã hồ sơ
Khóa ngoại: Mã bệnh nhân f Lịch sử khám bệnh
Khóa ngoại: Mã hồ sơ, Mã bác sĩ, Mã bệnh nhân, Mã đơn g Dịch vụ y tế
Khóa chính: Mã dịch vụ
Khóa ngoại: Mã bệnh nhân h Đơn thuốc
Khóa ngoại: Mã bác sĩ i Loại thuốc
1.6 Thực hiện chuẩn hóa từng lược đồ về dạng chuẩn 3NF a Người
R1 = (CCCD, Họ tên, Ngày sinh, Giới tính, SDT, Địa chỉ, Email)
F1 = {CCCD → Họ tên, Ngày sinh, Giới tính, SDT, Địa chỉ, Email}
Vì CCCD là 1 siêu khóa
=> Đã ở dạng chuẩn 3NF b Bệnh nhân
R2 = (BN-CCCD, Mã bệnh nhân, Tiền sử bệnh án, NGH- CCCD)
F2 = {Mã bệnh nhân → BN-CCCD, Tiền sử bệnh án, NGH- CCCD;
BN-CCCD → Mã bệnh nhân, Tiền sử bệnh án, NGH-CCCD}
Khóa K2 = {Mã bệnh nhân, BN-CCCD}
Vì Mã bệnh nhân và BN-CCCD đều là siêu khóa
=> Đã ở dạng chuẩn 3NF c Người giám hộ
Người giám hộ cũng đóng vai trò là Người Nên phụ thuộc hàm cũng tương tự như Người d Bác sĩ
R3 = (Mã bác sĩ, BS-CCCD, Chuyên khoa)
F3 = { Mã bác sĩ → BS-CCCD, Chuyên khoa;
BS-CCCD → Mã bác sĩ, Chuyên khoa}
Khóa K3 = {Mã bác sĩ, BS-CCCD}
Vì Mã bác sĩ và BS-CCCD là siêu khóa
=> Đã ở dạng chuẩn 3NF e Hồ sơ bệnh án
R4 = (Mã hồ sơ, Mã bệnh nhân, Mã bác sĩ, Ngày nhập viện, Ngày xuất viện, Chẩn đoán, Phương án điều trị, Kết quả)
F4 = {Mã hồ sơ → Mã bệnh nhân, Ngày nhập viện, Ngày xuất viện,
Chẩn đoán, Phương án điều trị, Kết quả;
Mã bệnh nhân → Mã Hồ sơ, Ngày nhập viện, Ngày xuất viện, Chẩn đoán, Phương án điều trị, Kết quả}
Khóa K4 = {Mã hồ sơ, Mã bệnh nhân}
Vì Mã hồ sơ và Mã bệnh nhân là siêu khóa
=> Đã ở dạng chuẩn 3NF f Lịch sử khám bệnh
R5 = (Mã hồ sơ, Mã bệnh nhân, Mã bác sĩ, Ngày giờ khám,
F5 = {Mã đơn → Mã hồ sơ, Ngày giờ khám, Mã bác sĩ, Mã bệnh nhân}
Vì Mã đơn là siêu khóa
=> R5 ở dạng chuẩn 3NF g Dịch vụ y tế
R6 = (Mã dịch vụ, Tên dịch vụ, Chi phí)
F6 = {Mã dịch vụ → Tên dịch vụ, Chi phí}
Mã dịch vụ là siêu khóa
=> Đã ở dạng chuẩn 3NF h Đơn thuốc
R7 = (Mã đơn, Mã bác sĩ, Ngày kê đơn, Liều dùng)
F7 = {Mã đơn → Mã bác sĩ, Ngày kê đơn, Liều dùng}
Ta thấy Mã đơn là siêu khóa
=> Đã ở dạng chuẩn 3NF i Loại thuốc
R8 = (Mã thuốc, Tên, Nhà sản xuất, Hạn sử dụng)
F8 = {Mã thuốc → Tên, Nhà sản xuất, Hạn sử dụng}
Ta thấy Mã thuốc là siêu khóa
Kết Luận
Hiểu biết về lược đồ quan hệ, phụ thuộc hàm, khóa và kết quả chuẩn hóa là rất quan trọng trong thiết kế cơ sở dữ liệu quan hệ Quá trình chuẩn hóa không chỉ giúp đảm bảo tính nhất quán mà còn giảm thiểu trùng lặp dữ liệu và nâng cao hiệu suất truy vấn.
Cài đặt hệ thống
Tạo bảng trên SQL Server
SDT CHAR(10) UNIQUE NOT NULL,
Email VARCHAR(100) UNIQUE NOT NULL
FOREIGN KEY (CCCD) REFERENCES Nguoi(CCCD) );
FOREIGN KEY (CCCD) REFERENCES Nguoi(CCCD),
FOREIGN KEY (NGH_CCCD) REFERENCES
FOREIGN KEY (CCCD) REFERENCES Nguoi(CCCD) );
FOREIGN KEY (MaBacSi) REFERENCES BacSi(MaBacSi) );
FOREIGN KEY (MaBacSi) REFERENCES BacSi(MaBacSi),
FOREIGN KEY (MaBacSi) REFERENCES BacSi(MaBacSi) );
FOREIGN KEY (MaDon) REFERENCES DonThuoc(MaDon) );
FOREIGN KEY (MaBacSi) REFERENCES BacSi(MaBacSi), FOREIGN KEY (MaDon) REFERENCES DonThuoc(MaDon));
Dữ liệu cho từng bảng
Trong hệ thống quản lý y tế, các bảng dữ liệu quan trọng bao gồm: Bảng Người, Bảng Người giám hộ, Bảng Bệnh nhân, Bảng Bác sĩ, Bảng Khám, Bảng Hồ sơ bệnh án, Bảng Dịch vụ y tế, Bảng Theo dõi, Bảng Đơn thuốc, Bảng Loại thuốc và Bảng Lịch sử khám Những bảng này giúp tổ chức và quản lý thông tin y tế một cách hiệu quả, đảm bảo sự liên kết giữa các bên liên quan trong quá trình chăm sóc sức khỏe.
Các câu truy vấn
Truy vấn 1 Tìm kiếm tất cả các đơn thuốc được kê trong tháng
SELECT * FROM DonThuoc WHERE MONTH(NgayKeDon) = 10;
Truy vấn 2 Đếm số lượng đơn thuốc trong tháng 10
Truy vấn 3 Tìm kiếm đơn thuốc từ ngày 01/10/2023 đến
Truy vấn 4 Đếm tổng số bệnh nhân
SELECT COUNT(*) AS TongSoBenhNhan FROM BenhNhan;
Truy vấn 5 Tìm top 5 bệnh nhân khám nhiều nhất trong năm
SELECT TOP 5 bn.MaBenhNhan, COUNT(*) AS SoLanKham FROM LichSuKham lk
INNER JOIN BenhNhan bn ON lk.MaBenhNhan bn.MaBenhNhan
Truy vấn 6 Tìm 5 bệnh nhân nhập viện trong khoảng thời gian từ tháng 10/2024 đến tháng 12 có tiền viện phí trung bình cao nhất
SELECT TOP 5 bn.MaBenhNhan, AVG(dv.ChiPhi) as chiphitb
FROM DichVuYTe dv, BenhNhan bn, LichSuKham ls, DonThuoc dt
WHERE YEAR(dt.NgayKeDon) = 2024 and
MONTH(dt.NgayKeDon) between 10 and 12
Truy vấn 7 Tìm 3 bệnh nhân trả tiền nhiều nhất
Truy vấn 8 Sửa lại nhà sản xuất của 1 mã thuốc
Truy vấn 9 Liệt kê các dịch vụ xét nghiệm
WHERE TenDichVu LIKE '%Xet nghiem%';
Truy vấn 10 Thêm cột cách dùng vào bảng loại thuốc
Truy vấn 11 Xóa cột cách dùng
Truy vấn 12 Hiển thị loại thuốc được kê nhiều nhất
SELECT TOP 1 lt.MaThuoc, lt.TenLoai,
COUNT(DISTINCT lt.MaDon) AS 'Số đơn đã kê'
FROM LoaiThuoc lt JOIN DonThuoc dt ON lt.MaDon = dt.MaDon GROUP BY lt.MaThuoc, lt.TenLoai
ORDER BY COUNT (DISTINCT lt.MaDon) DESC
Truy vấn 13 Tính tổng chi phí của các dịch vụ xét nghiệm
SELECT SUM(ChiPhi) AS tongchiphi
WHERE TenDichVu LIKE '%Xet nghiem%';
Truy vấn 14 Liệt kê các bệnh nhân đã nhập viện trong tháng 7 năm 2024
SELECT bn.MaBenhNhan, n.HoTen AS TenBenhNhan, hs.NgayNhapVien AS NgayNhapVien
JOIN BenhNhan AS bn ON hs.MaBenhNhan = bn.MaBenhNhan JOIN Nguoi AS n ON bn.CCCD = n.CCCD
Truy vấn 15 Lấy thông tin tất cả bệnh nhân cùng với thông tin người giám hộ
SELECT bn.MaBenhNhan, bn.CCCD, n.HoTen AS TenBenhNhan, ngh.HoTen AS TenNguoiGiamHo
JOIN Nguoi n ON bn.CCCD = n.CCCD
LEFT JOIN Nguoi ngh ON bn.NGH_CCCD = ngh.CCCD;
Truy vấn 16 Liệt kê tất cả các bệnh nhân đã được bác sĩ thăm khám, bao gồm tên bác sĩ và chuyên khoa của họ
SELECT bn.MaBenhNhan, bn.CCCD, n.HoTen AS TenBenhNhan, k.MaBacSi, nbs.HoTen AS TenBacSi, bs.ChuyenKhoa
JOIN BenhNhan bn ON k.MaBenhNhan = bn.MaBenhNhan
JOIN Nguoi n ON bn.CCCD = n.CCCD
JOIN BacSi bs ON k.MaBacSi = bs.MaBacSi
JOIN Nguoi nbs ON bs.CCCD = nbs.CCCD
Truy vấn 17 Liệt kê các bệnh nhân chưa có người giám hộ
SELECT bn.MaBenhNhan, bn.CCCD, n.HoTen AS TenBenhNhan FROM BenhNhan bn
JOIN Nguoi n ON bn.CCCD = n.CCCD
WHERE bn.NGH_CCCD IS NULL
Truy vấn 18 Liệt kê bênh nhân có tiền sử bệnh án là tiểu đường
WHERE CONVERT(VARCHAR, TienSuBenhAn) = 'Tieu duong'
Truy vấn 19 Liệt kê bệnh nhân chưa có ngày xuất viện
SELECT bn.MaBenhNhan, bn.CCCD, n.HoTen AS TenBenhNhan, hs.NgayNhapVien
JOIN Nguoi n ON bn.CCCD = n.CCCD
JOIN HoSoBenhAn hs ON bn.MaBenhNhan = hs.MaBenhNhan WHERE hs.NgayXuatVien IS NULL
Truy vấn 20 Liệt kê số lần khám của các bác sĩ
SELECT bs.MaBacSi, bs.CCCD, n.HoTen, bs.ChuyenKhoa,
COALESCE(COUNT(lsk.MaBacSi), 0) AS SoLanKham
JOIN Nguoi n ON bs.CCCD = n.CCCD
LEFT JOIN LichSuKham lsk ON bs.MaBacSi = lsk.MaBacSi
GROUP BY bs.MaBacSi, bs.CCCD, n.HoTen, bs.ChuyenKhoa;
Truy vấn 21 Tìm bệnh nhân có chi phí dịch vụ y tế cao nhất
SELECT TOP 1 MaBenhNhan, SUM(ChiPhi) AS TongChiPhi FROM DichVuYTe
Truy vấn 22 Liệt kể bệnh nhân có kết quả khỏi hoàn toàn
SELECT bn.MaBenhNhan, bn.CCCD, n.HoTen, hs.KetQuaFrom BenhNhan bn
JOIN Nguoi n ON bn.CCCD = n.CCCD
JOIN HoSoBenhAn hs ON hs.MaBenhNhan = bn.MaBenhNhan WHERE CONVERT(VARCHAR, hs.KetQua) = 'Khoi hoan toan'
Truy vấn 23 Liệt kê các bệnh nhân đang xuất viện trong tháng
6 sắp xếp theo ngày nhập viện
SELECT hs.MaHoSo, hs.MaBenhNhan, ng.HoTen, ng.NgaySinh, hs.NgayNhapVien, hs.NgayXuatVien, hs.ChanDoan, hs.PhuongAnDieuTri, hs.KetQua
FROM dbo.HoSoBenhAn AS hs
JOIN dbo.BenhNhan AS bn ON hs.MaBenhNhan bn.MaBenhNhan
JOIN Nguoi AS ng ON ng.CCCD = bn.CCCD
ORDER BY hs.NgayNhapVien ASC;
Truy vấn 24 In ra bệnh nhân đã khỏi chuẩn bị xuất viện và cập nhật ngày xuất viện cho những bệnh nhân đó
MaHoSo,MaBenhNhan,NgayNhapVien,ChanDoan,KetQua
WHERE KetQua LIKE 'Khoi%' AND NgayXuatVien IS NULL
WHERE KetQua LIKE 'Khoi%' AND NgayXuatVien IS NULL
MaHoSo,MaBenhNhan,NgayNhapVien,NgayXuatVien,ChanDoan, KetQua
Truy vấn 25 Truy vấn tất cả lịch khám diễn ra từ tháng 5 đến hết tháng 7 trong năm 2024 và in ra thông tin của buổi khám
FORMAT(ls.NgayGioKham, 'yyyy-MM-dd hh:mm') AS
NgayGioKham, bs.MaBacSi, ng1.HoTen AS HoTenBacSi, bn.MaBenhNhan, ng2.HoTen AS HoTenBenhNhan
JOIN BacSi bs ON ls.MaBacSi=bs.MaBacSi
JOIN BenhNhan bn ON ls.MaBenhNhan = bn.MaBenhNhan
LEFT JOIN Nguoi ng2 ON ng2.CCCD = bn.CCCD
LEFT JOIN Nguoi ng1 ON ng1.CCCD = bs.CCCD
WHERE ls.NgayGioKham BETWEEN '2024-05-01' AND '2024-07-31'
Truy vấn 26 Truy vấn thông tin từng đơn thuốc
SELECT dt.MaDon, dt.MaBacSi, dt.LieuDung,
STRING_AGG(lt.TenLoai,', ') AS DanhSachThuoc FROM DonThuoc dt
JOIN LoaiThuoc lt ON dt.MaDon = lt.MaDon
GROUP BY dt.MaDon, dt.MaBacSi, dt.LieuDung
Truy vấn 27 Truy vấn thông tin và số bệnh nhân trong khoa tiêu hóa
SELECT ls.MaHoSo, ls.MaBenhNhan, ng.HoTen, ng.NgaySinh, ng.SDT, bn.TienSuBenhAn, hs.NgayNhapVien, hs.NgayXuatVien, hs.ChanDoan, hs.PhuongAnDieuTri, hs.KetQua
LEFT JOIN BenhNhan bn ON ls.MaBenhNhan=bn.MaBenhNhan LEFT JOIN Nguoi ng ON bn.CCCD=ng.CCCD
LEFT JOIN BacSi bs ON bs.MaBacSi = ls.MaBacSi
LEFT JOIN HoSoBenhAn hs ON ls.MaHoSo = hs.MaHoSo
WHERE bs.ChuyenKhoa LIKE 'Tieu Hoa';
Truy vấn 28 Tra cứu các bệnh nhân có địa chỉ ở hà nội
SELECT bn.MaBenhNhan, ng.HoTen AS HoTenBenhNhan, ng.GioiTinh, ng.NgaySinh, ng.SDT, ng.DiaChi, ng.Email
LEFT JOIN Nguoi ng ON bn.CCCD=ng.CCCD
WHERE ng.DiaChi LIKE '%Ha Noi%';
Truy vấn 29 Hiển thị thông tin bác sĩ theo chuyên khoa hô hấp
SELECT bs.MaBacSi, ng.HoTen,