Tải bản đầy đủ (.docx) (14 trang)

Hệ quản trị cơ sở dữ liệu Quản lý phòng khám đa khoa

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (156.48 KB, 14 trang )

1
VIỆN ĐẠI HỌC MỞ HÀ NỘI
KHOA 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
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.
3
1 N
Giải thích: Một bệnh nhân phải thanh toán 1 hoặc nhiều hóa đơn.

1 N
Giải thích: Một bệnh nhân nhận được nhiều đơn thuốc.
1 N
Giải thích:Một hóa đơn bao gồm nhiều đơn thuốc.
1 N
Giải thích: Một bác sĩ viết nhiều đơn thuốc.
1 N
Giải thích: Một bác sĩ viết nhiều đơn dịch vụ.
1 N
Giải thích: Một đơn thuốc bao gồm nhiều loại thuốc.
1 N
Giải thích: Một đơn dịch vụ bao gồm nhiều dịch vụ.
Thanh toán
HOADON
BENHNHAN
Nhận

DONTHUOC
BENHNHAN
Gồm
DONTHUOC
HOADON
Viết
DONTHUOC
BACSI
Viết
DONDV
BACSI
Gồm
THUOC
DONTHUOC
Gồm
DICHVU
DONDV
4
3. 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
5
Code 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),
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 PK
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 FK
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);
7
ALTER TABLE DONDV add constraint KF_dichvudv Foreign Key(MDV)
references 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 CK
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
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);
9
INSERT INTO Thuoc VALUES ('T05',N'Thuốc nhỏ
mắt','04/25/2013',15000);

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)
10
as
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 )
11
values (@MBN ,@TenBN ,@TuoiBN,@GT,@diachi_BN,@BaoHiem)
thucthi
exec 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
12
declare @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
13
ON BACSI
TO 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,

)
14
AS
BEGIN
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

×