- Bài toán giúp các bác sĩ có thể quản lý được thông tin bệnh nhân đến khám bệnh, những dịch vụ, đơn thuốc và các khoản tài chính mà bệnh nhân cần thanh toán.. - Còn về phía bệnh nhân th
Trang 1KHOA CÔNG NGHỆ THÔNG TIN
ĐỀ CƯƠNG BÀI TẬP LỚN
MÔN :HỆ QUẢN TRỊ CƠ SƠ DƯ LIỆU
ĐỀ TÀI : QUẢN LÝ PHONGG KHÁM ĐA KHOA
Giáo viên hướng dẫn: Sinh viên thưc hiện:
Lê Hữu Dũng Đinh Trọng Tuyên
Bùi Văn Tuân Ngô Đăng Nam
Hà Nội Tháng năm 2014
Trang 2
1. Mô tả bài toán
- Bài toán “Quản lý khám bệnh tại phòng khám đa khoa”
- Phạm vi dành cho các bác sĩ và bệnh nhân trong quá trình khám bệnh tại phòng khám
- khi bệnh nhân tới phòng khám, bệnh nhân sẽ được khám bởi các bác sĩ theo yêu cầu khám
- Sau khi khám bệnh xong, bệnh nhân được yêu cầu dịch vụ, bệnh nhân sử dụng dịch vụ để chuẩn đoán bệnh
- Khi bác sĩ đã biết được bệnh của bệnh nhân, bác sĩ sẽ viết đơn thuốc cho bệnh nhân, bệnh nhân lấy thuốc
- Sau đó sẽ nhận được hóa đơn để bệnh nhân thanh toán các khoản tài chính với phòng khám
- Bài toán giúp các bác sĩ có thể quản lý được thông tin bệnh nhân đến khám bệnh, những dịch vụ, đơn thuốc và các khoản tài chính mà bệnh nhân cần thanh toán
- Còn về phía bệnh nhân thì qua các hóa đơn có thể biết ai là người điều trị, điều trị những gì, cần mua những loại thuốc nào và đặc biệt biết được số tiền mình phải trả là bao nhiêu
2. Thiết kế CSDL
2.1 Phân tích các thực thể dữ liệu & thuộc tính
• BENHNHAN ( MBN, TenBN, TuoiBN, GT, Diachi, Baohiem )
• BACSI ( MBS, TenBS, ChuyenNganh )
• THUOC ( MT, TenThuoc, HSD, GiaThuoc)
• DONTHUOC (MDT, TenBS, TenBN, MT, TienThuoc, LieuDung )
• DONDV (MDDV, MBS, MBN, MDV, TienDV)
• HOADON ( MHD, MDT, MDDV, MBN, Tongtien )
2.2 Vẽ sơ đồ thực thể-liên kết & giải thích các mối liên kết
Trang 31 N
Giải thích: Một bệnh nhân phải thanh toán 1 hoặc nhiều hóa đơn.
Giải thích: Một bệnh nhân nhận được nhiều đơn thuốc.
Giải thích:Một hóa đơn bao gồm nhiều đơn thuốc.
Giải thích: Một bác sĩ viết nhiều đơn thuốc.
Giải thích: Một bác sĩ viết nhiều đơn dịch vụ.
Giải thích: Một đơn thuốc bao gồm nhiều loại thuốc
Giải thích: Một đơn dịch vụ bao gồm nhiều dịch vụ
Thanh toán
HOADON BENHNHAN
BENHNHAN
Gồm
DONTHUOC HOADON
Viết
DONTHUOC BACSI
Viết
DONDV BACSI
Gồm
THUOC DONTHUOC
Gồm
DICHVU DONDV
Trang 43 Nêu các lược đồ quan hệ (LĐQH) & xác định các phụ thuộc hàm (PTH).
4. Xác định các ràng buộc:
• Giới tính chỉ nhận giá trị “nam”, “nữ”, “khác”
• Bảo hiểm nhận giá trị “có” hoặc “không”
• Chuyên ngành của bác sĩ chỉ gồm “khám răng hàm mặt”, “khám tai mũi họng”,
“khám mắt”
• Tiền thuốc = tổng giá thuốc của các mã thuốc có trong đơn thuốc
• Tiền dịch vụ = tổng giá dịch vụ của các mã dịch vụ có trong đơn dịch vụ
• Tổng tiền = tiền thuốc + tiền dịch vụ
• Nếu bệnh nhân có bảo hiểm thì sẽ được miễn 100% tiền dịch vụ, tiền thuốc
Mô tả chức năng
-Tao các bảng database
-Tạo các khóa chính,khóa phụ
-Viết các câu lệnh Index
-Tạo view,thu tục
-Tạo store procede
-Truy vấn các câu lệnh select,truy vấn,trigger
Trang 5Code chương trình
create database phongkhamdakhoa;
use phongkhamdakhoa;
Tạo các Database
-Tạo Các Bảng -Tạo Bảng Bệnh
Nhân -create table BENHNHAN(
MBN varchar(5) not null,
TenBN nvarchar(30) not null,
TuoiBN int,
GT bit,
DiaChi nvarchar(30),
BaoHiem bit,
);
-Tạo Bảng Bác
Sĩ -create table BACSI(
MBS varchar(5) not null,
TenBS nvarchar (30) not null,
ChuyenNganh nvarchar (30),
);
Tạo bảng Dịch vụ
-create table DICHVU(
MDV varchar(5) not null,
TenDV nvarchar(30),
GiaDV numeric(10),
);
-Tạo Bảng
Thuốc -create table THUOC(
MT varchar(5)not null,
TenThuoc nvarchar(30),
HSD datetime,
GiaThuoc numeric(10),
);
-Tạo Bảng Đơn
Thuốc -create table DONTHUOC(
MDT varchar(5) not null,
MBS varchar(5) not null,
MBN varchar(5) not null,
MT varchar(5) not null,
Tienthuoc numeric(10),
LieuDung Nvarchar(20),
Trang 6-Tạo Bảng Đơn Dịch
Vụ -create table DONDV(
MDDV varchar(5) not null,
MBS varchar(5) not null,
MBN varchar(5) not null,
MDV varchar(5) not null,
TienDV numeric(10),
);
-Tạo Bảng Hóa
Đơn -create table HOADON(
MHD varchar(5) not null,
MDT varchar(5)not null,
MDDV varchar (5) not null,
MBN varchar(5) not null,
TongTien numeric(10),
);
-Tạo các ràng buộc
-bảng bệnh nhân
ALTER TABLE BENHNHAN add constraint PK_benhnhan Primary
key(MBN);
-bảng bác sĩ
ALTER TABLE BACSI add constraint PK_bacsi Primary key(MBS); -bảng dịch vụ
ALTER TABLE DICHVU add constraint PK_dichvu Primary key(MDV); -thuốc
ALTER TABLE THUOC add constraint PK_thuoc Primary key (MT); -đơn thuốc
ALTER TABLE DONTHUOC add constraint PK_donthuoc Primary
Key(MDT); da chinh sua
-đơn dịch vụ
ALTER TABLE DONDV add constraint PK_dondv Primary Key(MDDV);
da chinh sua
-hóa đơn
ALTER TABLE HOADON add constraint PK_hoadon Primary Key(MHD);
da chinh sua -Tạo các ràng buộc
-bảng đơn thuốc
ALTER TABLE DONTHUOC add constraint KF_bacsithuoc Foreign Key(MBS) references BACSI(MBS);
ALTER TABLE DONTHUOC add constraint KF_thuocthuoc Foreign Key(MT) references THUOC(MT);
ALTER TABLE DONTHUOC add constraint KF_bnhanthuoc Foreign Key(MBN) references BENHNHAN(MBN);
-bảng đơn dịch vụ
ALTER TABLE DONDV add constraint KF_bacsidv Foreign Key(MBS) references BACSI(MBS);
Trang 7references DICHVU(MDV);
ALTER TABLE DONDV add constraint KF_bnhandv Foreign Key(MBN) references BENHNHAN(MBN);
-bảng hóa đơn
ALTER TABLE HOADON add constraint FK_bnhan Foreign Key(MBN) references BENHNHAN(MBN);
ALTER TABLE HOADON add constraint FK_dondv Foreign Key(MDDV) references DICHVU(MDDV);
ALTER TABLE HOADON add constraint FK_hdthuoc Foreign Key(MDT) references THUOC(MDT);
-Tạo các ràng buộc
-bảng bệnh nhân
ALTER TABLE BENHNHAN add constraint CK_GT CHECK (GT IN
(N'Nam',N'Nữ'));
ALTER TABLE BENHNHAN add constraint CK_baohiem CHECK (BaoHiem
IN (N'có',N'không'));
-bảng dịch vụ
ALTER TABLE DICHVU add constraint CK_GiaDV CHECK
(GiaDV>100000);
-bảng thuốc
ALTER TABLE THUOC add constraint CK_Giathuoc CHECK
(GiaThuoc>1000);
-bảng đơn thuốc
ALTER TABLE DONTHUOC ALTER COLUMN Tienthuoc NUMERIC(30) NULL; ALTER TABLE DONTHUOC add constraint CK_tienthuoc CHECK
(TienThuoc>10000);
-bảng đơn dịch vụ
ALTER TABLE DONDV ALTER COLUMN TienDV NUMERIC(30) NULL;
ALTER TABLE DONDV add constraint CK_tienDV CHECK
(TienDV>10000);
-bảng đơn Hóa đơn
ALTER TABLE HOADON ALTER COLUMN TongTien NUMERIC(30) NULL; ALTER TABLE HOADON add constraint CK_TongTien CHECK
(TongTien>100000);
- Tao ca INDEX
CREATE INDEX ID_Benhnhan ON BENHNHAN (MBN);
CREATE INDEX ID_Bacsi ON BACSI(MBS);
CREATE INDEX ID_Dichvu ON DICHVU(MDV);
CREATE INDEX ID_Thuoc ON THUOC(MT);
CREATE INDEX ID_Hoadon ON HOADON(MDV);
CREATE INDEX ID_Donthuoc ON DONTHUOC(MT);
Nhập dư liệu cho các bảng
Trang 8- TẠO DU LIEU CHO CAC BANG
- Tạo 5 ban ghi vao bang BENHNHAN
INSERT INTO Benhnhan
VALUES ( 'A01',N'Bùi Văn Hiệp',10,N'Nam',N'Hà Nội', N'có');
INSERT INTO Benhnhan
VALUES ( 'A02',N'Đinh Trọng Tuyên',12,N'Nữ',N'Hải Phòng',
N'không');
INSERT INTO Benhnhan
VALUES ( 'A03',N'Nguyễn Ngọc Sáng',14,N'Nam',N'Hà Nội',N'có'); INSERT INTO Benhnhan
VALUES ( 'A04',N'Lã Duy Tùng',15,N'Nữ',N'Hải Dương',N'không'); INSERT INTO Benhnhan
VALUES ( 'A05',N'Hoàng Văn Ngân',17,N'Nam',N'Quảng Ninh',N'có'); Tạo 5 bản ghi vao bảng BACSI
INSERT INTO Bacsi VALUES ('B01',N'Ngô Đăng Nam',N'Da liễu'); INSERT INTO Bacsi VALUES ('B02',N'Bùi Văn Tuân',N'Thần kinh'); INSERT INTO Bacsi VALUES ('B03',N'Phạm Quang Huy',N'Răng hàm mặt');
INSERT INTO Bacsi VALUES ('B04',N'Nguyễn Văn Quân',N'Bướu cổ');
INSERT INTO Bacsi VALUES ('B05',N'Bùi Chí Cường',N'Mắt');
- Tạo 5 bản ghi vào bảng DICHVU
INSERT INTO Dichvu VALUES ('DV01',N'Siêu âm dưới da',10000); INSERT INTO Dichvu VALUES ('DV02',N'Điện não đồ',20000);
INSERT INTO Dichvu VALUES ('DV03',N'Siêu âm vòm
miệng',30000);
INSERT INTO Dichvu VALUES ('DV04',N'Siêu âm tuyến
giáp',40000);
INSERT INTO Dichvu VALUES ('DV05',N'Đo mắt',50000);
- Tạo 5 bản ghi vào bảng THUOC
INSERT INTO Thuoc VALUES ('T01',N'Kem trị
rám','05/24/2014',11000);
INSERT INTO Thuoc VALUES ('T02',N'Thuốc đau
đầu','09/23/2015',12000);
INSERT INTO Thuoc VALUES ('T03',N'Thuốc sâu
răng','10/30/2015',13000);
INSERT INTO Thuoc VALUES ('T04',N'Thuốc viêm
họng','11/29/2014',14000);
Trang 9
- Tạo 5 bản ghi vào bảng DONTHUOC
INSERT INTO Donthuoc VALUES
('DT01','B01','A01','T01',100000,N'Một lần');
INSERT INTO Donthuoc VALUES
('DT02','B02','A02','T02',200000,N'Một lần');
INSERT INTO Donthuoc VALUES
('DT03','B03','A03','T03',300000,N'Một lần');
INSERT INTO Donthuoc VALUES
('DT04','B04','A04','T04',400000,N'Một lần');
INSERT INTO Donthuoc VALUES
('DT05','B05','A05','T05',500000,N'Một lần');
- Tạo 5 ban ghi vào bảng DONDV
INSERT INTO Dichvu VALUES
('DD01','B01','A01','DV01',110000);
INSERT INTO Dichvu VALUES ('DD02','B02','A02','DV02',120000); INSERT INTO Dichvu VALUES ('DD03','B03','A03','DV03',130000); INSERT INTO Dichvu VALUES ('DD04','B04','A04','DV04',140000); INSERT INTO Dichvu VALUES ('DD05','B05','A05','DV05',150000);
Tạo 5 bản ghi vào bảng HOADON
INSERT INTO Dichvu VALUES
('HD01','DT01','DD01','A01',null);
INSERT INTO Dichvu VALUES ('HD02','DT02',,'DD02','A02',null); INSERT INTO Dichvu VALUES ('HD03','DT03','DD03','A03',null); INSERT INTO Dichvu VALUES ('HD04','DT04','DD04','A04',null); INSERT INTO Dichvu VALUES ('HD05','DT05','DD05','A05',null);
Viết các câu lênh truy vấn
- VIET CAC STORE PROCEDURE LAY DU LIEU MOI BANG THEO PK VA PARAMETER TRUYEN
VAO -benh nhan
create procedure spBN_select_ck
@MBN nvarchar(10)
as
begin
select * from BENHNHAN where @MBN=MBN
end
-bac si
create procedure spBS_select_ck
@MBS nvarchar(10)
Trang 10as
begin
select * from BACSI where @MBS=MBS
end
thuoc
create procedure spT_select_ck
@MT nvarchar(10)
as
begin
select * from THUOC where @MT=MT
end
-VIET CAC CAU LENH
SELECT -Dua ra ds don thuoc co tien thuoc >200000
select DONTHUOC.MDT as [ma thuoc],
COUNT (MBN) as [so don thuoc]
From DONTHUOC INNER JOIN BENHNHAN
ON
DONTHUOC.MBN = BENHNHAN.MBN
GROUP BY DONTHUOC.MT, BENHNHAN.TenBN
HAVING COUNT (Tienthuoc) > 200000
lay ra thong tin benh nhan co ten dat dau = 'nguyen'
select distinct MBN, TenBN
from BENHNHAN where TenBN like N'Nguyễn%'
Đua ra DSBN va tong so hoa đơn ma ho co
SELECT BENHNHAN.TenBN as [Họ tên BN],
COUNT (MHD) AS [Số Hoá Đơn]
FROM BENHNHAN INNER JOIN HOADON
ON BENHNHAN.MBN =HOADON.MBN
GROUP BY BENHNHAN.MBN, HOADON.MHD
-TAO THU
TUC - benh nhan
Create Proc thembenhnhan
@MBN VARCHAR(5) ,@TenBN NVARCHAR(50),@TuoiBN INT,@GT
BIT,@diachi_BN NVARCHAR(50),@BaoHiem BIT
as
insert into BENHNHAN(MBN,TenBN ,TuoiBN ,GT ,DiaChi,BaoHiem )
Trang 11exec thembenhnhan @mMBN='BN06' ,@TenBN=N'Cong Ton
Son',@TuoiBN=20,@GT=N'Nam',@diachi_BN=N'Hà Nội',@BaoHiem='co' select *from BENHNHAN
- bác sĩ
Create Proc thembacsi @MBS NVARCHAR(5),@TenBS
NVARCHAR(10),@ChuyenNganh NVARCHAR(10)
as
insert into BACSI (MBS,TenBS,ChuyenNganh)
values ( @MBS,@TenBS,@ChuyenNganh)
-thucthi
exec thembacsi @MBS='BS06',@TenBS=N'Duong Tuan
Tu',@ChuyenNganh=N'Da Lieu'
select *from BACSI
-TAO
VIEW -dua ra bac si co chuyen nganh la da lieu
create view dsbs
as
select TenBS,ChuyenNganh
from BACSI,DONTHUOC
where BACSI.MBS=DONTHUOC.MBS and ChuyenNganh=N'Da Lieu'
SELECT* FROM BACSI
dua ra danh sach thuoc co gia tu cao den thap 10000 den 1000000
create view sapxep
as
select MT
from THUOC
where GiaThuoc BETWEEN 100000 and 10000000
SELECT* FROM THUOC
-TAO
Triggger - Ma benh nhan trong bang Don thuoc phai đưoc luu tru trong bang benh nhan
create trigger chitietBN
on BENHNHAN
for insert, update
as
begin
Trang 12declare @MBN nvarchar(10) select @MBN=MBN
from inserted
if not exists( select * from BENHNHAN Where (MBN=@MBN))
begin
RAISERROR( N'Ma BN khong ton tai',16,1) rollback tran
end end
Kiểm tra:
Insert Into BENHNHAN
VALUES ( 'A11',N'Le Duy Trung',10,N'Nam',N'Nam Dinh', N'có');
Insert Into BENHNHAN
VALUES ( 'A12',N'Nguyen Van Hieu',12,N'Nam',N'Hà Nội', N'khong'); Xoá
DROP trigger chitietBN
/*Tạo trigger hien thị du liệu moi khi có dữ lieu mới đưoc thêm vao bang don thuoc
create trigger dl_DT
on DONTHUOC
after insert
as
select *
from inserted
Kiểm tra
INSERT INTO Donthuoc (MDT,MBS,MBN,MT,Tienthuoc,LieuDung)
VALUES ('DT06','B06','A06','T06',200000,N'Một lần')
INSERT INTO Donthuoc (MDT,MBS,MBN,MT,Tienthuoc,LieuDung)
VALUES ('DT07','B07','A07','T07',300000,N'Một lần')
-PHAN
QUYEN -Tạo Login bằng T-SQL:
sp_addLogin @loginame='BacSi',@passwd = 'trongtuyen'
sp_addLogin @loginame='QuanLy',@passwd = 'trongtuyen'
Tạo các user để cấp quyền
create user NV from login BacSi
create user QL from login QuanLy
Cấp quyen thực thi tren cơ so du liệu
BẢng Bac Si
GRANT Select, Insert, Update, Delete
Trang 13TO QL
-GRANT Select
ON BACSI
TO NV
- BẢng Benh Nhan
GRANT Select, Insert, Update, Delete
ON BENHNHAN
TO QL
-GRANT Select
ON BENHNHAN
TO NV
Hủy quyền đã cấp :
REVOKE Select, Insert, Update, Delete
ON BACSI FROM QL
-REVOKE Select
ON BACSI FROM BS
-• Backup:
BACKUP DATABASE phongkhamdakhoa
TO DISK = 'C:\Program Files\Microsoft SQL
Server\MSSQL10_50.SQLEXPRESS\MSSQL\Backup\phongkhamdakhoa.bak'
• Restore:
RESTORE DATABASE phongkhamdakhoa
FROM DISK = 'C:\Program Files\Microsoft SQL
Server\MSSQL10_50.SQLEXPRESS\MSSQL\Backup\phongkhamdakhoa.bak'
- chưa đc
-Lien
ket -CREATE PROCEDURE sp_ThemBN
(
@MBN varchar(5),
@TenBN nvarchar(30)
@TuoiBN int,
@GT bit,
@DiaChi nvarchar(30),
@BaoHiem bit, )
Trang 14BEGIN declare @c bit
set @c =@bGT
begin
if @c=1
begin
insert into BENHNHAN(TenBN,MBN,TuoiBN,GT,Diachi,BaoHiem)
values (@TenBN,@MBN,@TuoiBN,@GT,@DiaChi,@BaoHiem)
print N'Server 1 cập nhật dữ liệu thành công'
end else
begin
if @c=0 begin insert LKHQTCSDL.phongkhamdakhoa.BENHNHAN(TenBN,MBN,TuoiBN,GT,Diachi,Bao Hiem)
values (@TenBN,@MBN,@TuoiBN,@GT,@DiaChi,@BaoHiem)
print N'Server 2 cập nhật dữ liệu thành công'
end end end
end