PHẦN I: KỊCH BẢN THẾ GIỚI THỰCI.Ứng dụng của hệ cơ sở dữ liệuQua 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ámbệnh của bệnh khân khi đến bệnh viện, thông ti
KỊCH BẢN THẾ GIỚI THỰC
Ứ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ụ, …
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
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…
- 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
Thống kê theo nghề nghiệp của bệnh nhân
Thống kê các loại bệnh thường gặp
THIẾT KẾ CƠ SỞ DỮ LIỆU
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,
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. o 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
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
Bác sĩ, Bệnh nhân, Bệnh liên kết với nhau bằng liên kết Khám
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
ÁNH XẠ LƯỢC ĐỒ E-R SANG LƯỢC ĐỒ QUAN HỆ VÀ CHUẨN HÓA
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):
Xác định phụ thuộc hàm:
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
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,
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}
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ĩ
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 ngoại: Mã bệnh, Mã bác sĩ, Mã bệnh nhân
Xác định phụ thuộc hàm:
Mã khám → Mã bác sĩ;
Mã khám → Mã bệnh nhân;
Bệnh (Mã bệnh, Tên bệnh, Triệu chứng):
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
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á):
Xác định phụ thuộc hàm:
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,
Khóa chính: Mã xét nghiệm
Khóa ngoại: Mã bệnh nhân, Mã CLS
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á):
Xác định phụ thuộc hàm:
F16 = {Mã CLS → Tên dịch vụ
Xét nghiệm (X-mã CLS, Kết quả bình thường):
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):
Xác định phụ thuộc hàm:
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
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à
Đạ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.
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à
Đạ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à
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à
Đạ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”
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”
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”
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ệ:
CÀI ĐẶT HỆ THỐNG
Tạo database và các bảng, thêm dữ liệu vào từng bảng
CREATE DATABASE QLBV COLLATE Latin1_General_100_CI_AS_SC_UTF8; GO
Thêm dữ liệu vào các ba ,ng đã tạo:
SET @SqlCmd = 'BULK INSERT ' + QUOTENAME(@TableName) + ' ' +'FROM ''' + @FilePath +''' ' +'WITH (FORMAT = ''CSV'', FIELDTERMINATOR = '', '', ROWTERMINATOR = ''\n'', FIRSTROW = 2, CODEPAGE = ''65001'')';
EXEC ImportDataFromCSV 'D:\DATA\KHOA.csv', 'KHOA';
MaKhoa varchar(255) FOREIGN KEY REFERENCES KHOA(MaKhoa), SoLuongGiuong smallint NOT NULL,
GO EXEC ImportDataFromCSV 'D:\DATA\PHONGBENH.csv','PHONGBENH';
MaKhoa varchar(255) FOREIGN KEY REFERENCES KHOA(MaKhoa) )
EXEC ImportDataFromCSV 'D:\DATA\BACSI.csv', 'BACSI';
MaBacSi varchar(255) FOREIGN KEY REFERENCES BACSI(MaBacSi),
EXEC ImportDataFromCSV 'D:\DATA\BACSI_SODT.csv','BACSI_SODT';
EXEC ImportDataFromCSV 'D:\DATA\BENH.csv', 'BENH';
EXEC ImportDataFromCSV 'D:\DATA\BENHNHAN.csv', 'BENHNHAN';
FOREIGN KEY REFERENCES BENHNHAN(MaBenhNhan), SoDT varchar(255),
'D:\DATA\BENHNHAN_SODT.csv', 'BENHNHAN_SODT';
FOREIGN KEY REFERENCES BENHNHAN(MaBenhNhan), TenPhong nvarchar(255),
EXEC ImportDataFromCSV 'D:\DATA\DUNG.csv', 'DUNG';
FOREIGN KEY REFERENCES BACSI(MaBacSi),
FOREIGN KEY REFERENCES BENHNHAN(MaBenhNhan),
EXEC ImportDataFromCSV 'D:\DATA\DIEUTRI.csv', 'DIEUTRI'
FOREIGN KEY REFERENCES DIEUTRI(MaDieuTri), NgayThucHien date NOT NULL,
EXEC ImportDataFromCSV 'D:\DATA\YLENH.csv', 'YLENH'
FOREIGN KEY REFERENCES BENH(MaBenh),
FOREIGN KEY REFERENCES BACSI(MaBacSi),
FOREIGN KEY REFERENCES BENHNHAN(MaBenhNhan), NgayKham date NOT NULL,
EXEC ImportDataFromCSV 'D:\DATA\KHAM.csv', 'KHAM'
FOREIGN KEY REFERENCES BACSI(MaBacSi),
FOREIGN KEY REFERENCES BENHNHAN(MaBenhNhan), NgayKeDon date NOT NULL,
EXEC ImportDataFromCSV 'D:\DATA\KEDON.csv', 'KEDON'
EXEC ImportDataFromCSV 'D:\DATA\THUOC.csv', 'THUOC'
FOREIGN KEY REFERENCES KEDON(MaKeDon), MaThuoc varchar(255)
FOREIGN KEY REFERENCES THUOC(MaThuoc), SoLuong tinyint NOT NULL,
EXEC ImportDataFromCSV 'D:\DATA\GOM.csv', 'GOM'
EXEC ImportDataFromCSV 'D:\DATA\KHOANCHIPHI.csv','KHOANCHIPHI'
FOREIGN KEY REFERENCES BENHNHAN(MaBenhNhan),
FOREIGN KEY REFERENCES KHOANCHIPHI(MaKhoanCP),
EXEC ImportDataFromCSV 'D:\DATA\THANHTOAN.csv', 'THANHTOAN'
EXEC ImportDataFromCSV 'D:\DATA\CANLAMSANG.csv','CANLAMSANG'
FOREIGN KEY REFERENCES CANLAMSANG(MaCLS),
EXEC ImportDataFromCSV 'D:\DATA\XETNGHIEM.csv', 'XETNGHIEM'
19 Tạo bảng CHAN_DOAN_HINH_ANH
CREATE TABLE CHAN_DOAN_HINH_ANH
FOREIGN KEY REFERENCES CANLAMSANG(MaCLS),
'D:\DATA\CHAN_DOAN_HINH_ANH.csv','CHAN_DOAN_HINH_ANH'
FOREIGN KEY REFERENCES BENHNHAN(MaBenhNhan),
FOREIGN KEY REFERENCES CANLAMSANG(MaCLS),
EXEC ImportDataFromCSV 'D:\DATA\LAMXETNGHIEM.csv','LAMXETNGHIEM'
Các câu truy vấn, ứng dụng của hệ thống
1 Trả cứu các bệnh nhân giới tính nữ
2 Thêm mới bệnh nhân vào cơ sơ dữ liệu
SET @CurrIdBN = (SELECT MAX(MaBenhNhan) FROM BENHNHAN);
SET @NumId = CAST(SUBSTRING(@CurrIdBN, 3, LEN(@CurrIdBN) - 2) AS INT) + 1
SET @NewIdBN = 'BN' + RIGHT('00' + CAST(@NumId AS VARCHAR), 2);
INSERT INTO BENHNHAN(MaBenhNhan, HoTen, NgaySinh, GioiTinh,
VALUES (@NewIdBN, 'NguyêV n Thanh Xuân', '1978-05-06', 'Nữ', 'Hoàng
INSERT INTO BENHNHAN_SODT(MaBenhNhan, SoDT)
3 Sửả ngày sinh cuả bệnh nhân
4 Trả cứu thông tin các lâA n khám bệnh cuả các bệnh nhân là sinh viên
BN.HoTen AS [Họ Tên],
BN.NgaySinh AS [Ngày Sinh],
BN.GioiTinh AS [Giới Tính],
BN.DiaChi AS [Địa Chỉ ,],
BS.HocVi AS [Trình Độ],
BS.HoTen AS [Bác Sĩ],
INNER JOIN KHAM ON BN.MaBenhNhan = KHAM.MaBenhNhan
INNER JOIN BENH ON BENH.MaBenh = KHAM.MaBenh
INNER JOIN BACSI AS BS ON BS.MaBacSi = KHAM.MaBacSi
INNER JOIN KHOA ON KHOA.MaKhoa = BS.MaKhoa
5 ThôC ng kê những bệnh nhân bị viêm họng
BN.HoTen AS [Bệnh nhân],
KHAM.NgayKham AS [Ngày Khám],
BACSI.HocVi AS [Trình Độ],
BACSI.HoTen AS [Bác Sĩ],
INNER JOIN KHAM ON KHAM.MaBenhNhan = BN.MaBenhNhan INNER JOIN BENH ON BENH.MaBenh = KHAM.MaBenh
INNER JOIN BACSI ON BACSI.MaBacSi = KHAM.MaBacSi INNER JOIN KHOA ON KHOA.MaKhoa = BACSI.MaKhoa WHERE
6 Liệt kê rả thông tin các bác sĩ, tính tuôi, nêC u có nhiêA u sôC điện thoại thì chi lâC y một, sắC p xêC p theo tuôi
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ỉ ,],
(SELECT TOP 1 BACSI_SODT.SoDT FROM BACSI_SODT
WHERE BACSI.MaBacSi = BACSI_SODT.MaBacSi) AS [Sổ` Điện Thoại]
INNER JOIN KHOA ON BACSI.MaKhoa = KHOA.MaKhoa
7 Liệt kê rả sôC lửợng sôC điện thoại cuả từng bác sĩ, sắC p xêC p theo sôC lửợng sôC điện thoại
BACSI.MaBacSi AS [Mã Bác Sĩ],
BACSI.HocVi AS [Học Vị],
BACSI.HoTen AS [Họ Tên],
SoLuongSDT.cnt AS [Sổ` Lượng Sổ` ĐT]
INNER JOIN KHOA ON BACSI.MaKhoa = KHOA.MaKhoa
BACSI_SODT.MaBacSi, COUNT(*) AS cnt FROM BACSI_SODT
GROUP BY BACSI_SODT.MaBacSi ) AS SoLuongSDT ON SoLuongSDT.MaBacSi = BACSI.MaBacSi
[Sổ` Lượng Sổ` ĐT] DESC
8 ThôC ng kê sôC lâA n khám và sôC lâA n điêA u trị cuả môR i bác sĩ từ ngày 01-01-2022 đêC n ngày hôm quả, sắC p xêC p theo giảm dâA n sôC lâA n khám, sôC lâA n điêA u trị
BACSI.MaBacSi AS [Mã Bác Sĩ],
BACSI.HocVi AS [Trình Độ],
BACSI.HoTen AS [Họ Tên],
(SELECT COUNT(*) FROM KHAM WHERE KHAM.MaBacSi = BACSI.MaBacSi
AND KHAM.NgayKham BETWEEN '2022-01-01' AND DATEADD(DAY, -1, GETDATE())) AS [Sổ` lâS n khám], (SELECT COUNT(*) FROM DIEUTRI WHERE DIEUTRI.MaBacSi =
AND DIEUTRI.NgayBatDau BETWEEN '2022-01-01' AND DATEADD(DAY, -1, GETDATE())) AS [Sổ` lâS n điêS u trị] FROM BACSI
INNER JOIN KHOA ON BACSI.MaKhoa = KHOA.MaKhoa
[Sổ` lâS n điêS u trị] DESC
9 ThôC ng kê sôC lửợng ngửời, sôC lửợng phòng, sôC lâA n khám, sôC lâA n điêA u trị cuả môR i khoả
KHoa.SoLuongNguoi AS [Sổ` lượng người],
WHERE PHONGBENH.MaKhoa = KHOA.MaKhoa) AS [Sổ` lượng phòng], ISNULL(K.cnt,0) AS [Sổ` lâS n khám],
ISNULL(DT.cnt,0) AS [Sổ` lâS n điêS u trị]
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
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
10 LâC y tình trạng hiện tại cuả các phòng bệnh
DUNG.MaKhoa AS [Mã Khoa], DUNG.TenPhong AS [Phòng], COUNT(*) AS [Đang Dùng]
WHERE DUNG.NgayKetThuc IS NULL
GROUP BY DUNG.MaKhoa, DUNG.TenPhong
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]
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
11 Liệt kê lịch sử khám cuả bênh nhân, sắC p xêC p theo ngày khám
KHAM.NgayKham AS [Ngày Khám],
BACSI.HocVi AS [Học Vị],
BACSI.HoTen AS [Bác Sĩ],
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
12 Liệt kê các khám bệnh trong một khoảng thời giản, sắC p xêC p theo ngày khám
BENHNHAN.HoTen AS [Bệnh Nhân],
KHAM.NgayKham AS [Ngày khám],
BACSI.HocVi AS [Học Vị],
BACSI.HoTen AS [Bác Sĩ],
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
13 Liệt kê các lâA n nằm điêA u trị cuả một bệnh nhân, sắC p xêC p theo ngày bắC t đâA u điêA u trị
DIEUTRI.MaDieuTri AS [Mã ĐiêS u Trị],
DIEUTRI.NgayBatDau AS [Ngày Bắ` t ĐâS u],
DIEUTRI.Ngayketthuc AS [Ngày Kê` t Thúc],
DIEUTRI.KetQua AS [Kê` t Qua ,],
BACSI.HocVi AS [Học Vị],
BACSI.HoTen AS [Bác Sĩ],
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
OR(KHAM.NgayKham>=DIEUTRI.NgayBatDau AND DIEUTRI.NgayKetThuc IS NULL))
14 Liệt kê các y lệnh trong một lâA n điêA u trị
YLENH.NoiDung AS [Nội Dung],
YLENH.NgayThucHien AS [Ngày Thực Hiện]
INNER JOIN YLENH ON YLENH.MaDieuTri = DIEUTRI.MaDieuTri WHERE
15 LâC y đơn thuôC c cuả bệnh nhân trong một lâA n điêA u trị, sắC p xêC p theo ngày kê đơn
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ĩ],
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
OR (KEDON.NgayKeDon >= DIEUTRI.NgayBatDau AND
16 LâC y các lâA n thảnh toán dịch vụ cuả bệnh nhân trong một lâA n điêA u trị
KHOANCHIPHI.DonGia AS [Đơn Giá],
THANHTOAN.SoLuong AS [Sổ` Lượng],
THANHTOAN.NgayThanhToan AS [Ngày Thanh Toán]
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.NgayBatDau)
AND (KEDON.NgayKeDon = DIEUTRI.NgayBatDau)
AND (LAMXETNGHIEM.NgayXetNghiem = DIEUTRI.NgayBatDau)
AND (THANHTOAN.NgayThanhToan = DIEUTRI.NgayBatDau AND DIEUTRI.NgayKetThuc IS NULL ))
INNER JOIN BENH ON KHAM.MaBenh = BENH.MaBenh
18 ThôC ng kê viện phí cuả các bệnh nhân, giảm dâA n theo tông tiêA n
BENHNHAN.HoTen AS [Họ Tên],
ISNULL(CP.[Các chi phí], 0) AS [Chi Phí],
ISNULL(TT.[TiêS n Thuổ` c], 0) AS [TiêS n Thuổ` c],
ISNULL(XN.[TiêS n Xét Nghiệm], 0) AS [TiêS n Xét Nghiệm],
(ISNULL(CP.[Các chi phí], 0) + ISNULL(TT.[TiêS n Thuổ` c], 0) + ISNULL(XN. [TiêS n Xét Nghiệm], 0)) AS [Tổ, ng TiêS n]
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
KEDON.MaBenhNhan, SUM (THUOC.DonGia * GOM.SoLuong) AS [TiêS 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
LAMXETNGHIEM.MaBenhNhan, SUM (CANLAMSANG.DonGia) AS [TiêS 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êS n] DESC