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 (3.25 MB, 27 trang )
<span class="text_page_counter">Trang 1</span><div class="page_container" data-page="1">
<b>I.Phát bi u bài toán </b>ể
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 thông tin của các Bác Sĩ làm việc trong bệnh, các Dịch Vụ khám được cung cấp, các loại Thuốc, thơng tin của các BệnhNhân, các Hóa Đơn đóng tiền khi sử dụng dịch vụ và để giúp việc quản lý khám bệnh dễ dàng hơn cũng như sau này:
<small> </small> Bác sĩ: mã bác sĩ , tên bác sĩ, chuyên ngành. Quy định mỗi bác sĩ chỉ có một mã bác sĩ
<small> </small> Bệnh nhân: là những người đến khám bệnh và sử dụng dịch vụ.
Mỗi bệnh nhân khi đến khám bênh cần khai báo các thông tin trên để dễ dàng hướng dẫn đến phòng khám phù hợp, lập đơn thuốc và hóa đơn Mỗi . bệnh
<i><b>nhân bao gồm các thông tin: mã bệnh nhân, tên bệnh nhân, giới tính, ngày </b></i>
<i>sinh, địa chỉ, số điện thoại,tình trạng sức khỏe. </i>
<small> </small> Các Dịch Vụ khám được xác định bởi: mã dịch vụ, tên dịch vụ, đơn giá.
<small> </small> Còn <i>Thuốc bao gồm thông tin: mã thuốc, tên thuốc đơn giá. </i>
<small> </small> Bệnh nhân cần có đơn thuốc phiếu này sẽ do bác sĩ lập gồm có: mã đơn
<i><b>thuốc,mã bác sĩ, mã bệnh nhân. Từ đơn thuốc yêu cầu có một đơn thuốc chi </b></i>
tiết có:mã đơn thuốc mã thuốc, số lượng <i>, </i> để quản lý được các loại thuốc đã được phát cho ai, khi nào.
<small> </small> <b>Bệnh nhân cần qua bộ phận thanh toán để nộp phí khám bênh Hố Đơn bảng </b>
có mẫu như sau: mã hóa đơn<i>, mã </i>đơn thuốc<i>, mã </i>bệnh nhân, ngày lập, tổng
<i>tiền. </i>Từ những hóa đơn đó chúng ta phải có một chi tiết Hóa Đơn Dịch Vụ <b>- </b>
<i>gồm: mã hóa đơn mã dịch vụ số lượng , , </i> để biết chi tiết về dịch vụ đã được sử
</div><span class="text_page_counter">Trang 2</span><div class="page_container" data-page="2"><small>2 </small>
<b>2. Các bảng được xác định cấu trúc như sau: </b>
1 sMaBN Varchar(10) PK Mã b nh nhân ệ 2 sGioiTinh Bit Chỉ nhận giá
<b>liệu </b>
1 sMaBS Varchar(10) PK Mã bác sĩ
3 sChuyenNganh nvarchar Chuyên ngành
1 sMaThuoc Varchar(10) PK Mã thu c ố 2 sTenThuoc Nvarchar(25) Tên thu c ố 3 fGiaThuoc float fGiaThuoc>0 Giá thu c ố
</div><span class="text_page_counter">Trang 3</span><div class="page_container" data-page="3"><b>TT Tên Thu c tính </b>ộ <b>Kiểu d u ữ liệRàng buộc Ghi chú </b>
1 sMaDT Varchar(10) PK Mã đơn thuốc
1 sMaDT Varchar(10) PK Mã đơn thuốc 2 sMaThuoc Varchar(10) Mã thu c ố 3 iSoLuong int iSoLuong>0 Số lượng
<b>*tblDICHVUKHAM( sMaDV, sTenDV, fDonGia) </b>
<b>liệu </b>
1 sMaDV Varchar(10) PK Mã d ch vị ụ 2 sTenDV Varchar(10) Tên d ch vị ụ
<b>liệu </b>
1 sMaHD Varchar(10) PK Mã hóa đơn 2 sMaDT Varchar(10) Mã đơn thuốc 3 sMaBN Varchar(10) Mã d ch vị ụ 4 dNgayLap Date Ngày l p ậ 5 fTongtien float Tổng tiền
</div><span class="text_page_counter">Trang 4</span><div class="page_container" data-page="4"><small>4 </small>
3 fSoLuong float fSoluong>0 Số lượng
III. Tạo cơ sở dữ liệu
sMaBN VARCHAR (10) primary keynot null,
sTenBN nvarchar (30)null , sGioiTinh bit null,
dNgaySinh date null , sDiaChi nvarchar (255),
iSodienthoai varchar (10)null,
sTinhtrangsuckhoe nvarchar(255 ) )
alter table tblBenhNhan
alter column sGioiTinh nvarchar( )5 -- T o bạ ảng bác sĩ
create table tblBacSi (
sMaBS varchar (10) primary keynot null,
sTenBS Nvarchar (30)null,
sChuyenNganh nvarchar (30)null );
-- T o b ng thu c ạ ả ố
create table tblDichVuKham (
sMaDV varchar (10 primary key) not null,
sTenDV nvarchar (30)null,
fDonGia float );
-- T o bạ ảng đơn thuốc và ràng bu c ộ create table tblDonThuoc (
sMaDT varchar (10 primary key) not null,
sMaBS varchar (10)references tblBacSi(sMaBS),
</div><span class="text_page_counter">Trang 5</span><div class="page_container" data-page="5">sMaBN varchar(10)references tblBenhNhan(sMaBN),
--Tạo b ng chi tiả ết đơn thuốc và ràng buộc create table tblCT_DonThuoc (
sMaDT varchar (10 )not null,
sMaThuoc varchar (10)not null , iSoLuong int check (iSoLuong>0),
constraint PK_Ma primary key (sMaDT sMaThuoc, ),
foreign key (sMaThuoc) references tblThuoc(sMaThuoc),
foreign key (sMaDT) references tblDonThuoc(sMaDT) );
--Tạo bảng d ch v khám ị ụ create table tblDichVuKham (
sMaDV varchar (10 primary key) not null,
sTenDV nvarchar (30)null,
fDonGia float );
--Tạo bảng hoá đơn
create table tblHoaDon (
sMaHD varchar (10 primary key) not null,
sMaDT varchar (10) not null references
--Tạo bảng hoá đơn_dịch vụ create table tblHoaDon_DV (
sMaHD varchar (10)notnull,
sMaDV varchar (10 )not null,
fSoLuong float check (fSoLuong>0),
PK_hoadon_DV
constraint primary key (sMaHD, sMaDV ),
foreign key (sMaHD )references tblHoaDon(sMaHD),
foreign key (sMaDV )references tblDichVuKham(sMaDV)
);
</div><span class="text_page_counter">Trang 6</span><div class="page_container" data-page="6">('BN08',N'Lê Hoàng',N'Nam' '06/03/2002',N'Nam Định , ','097452457' N'Ung thư phổi') ,
-- chèn d ữ liệu vào b ng tblBacSiả
INSERT INTO tblBacSi(sMaBS sTenBS sChuyenNganh, , )
VALUES ('BS01' N'Nguy, ễn Tuấn',N'Đa khoa'), ('BS02' N'Nguy, ễn Tuấn',N'Tai Mũi Họng'), ('BS03' N'Nguy, ễn Tuấn',N'Răng hàm mặt'), ('BS04' N'Nguy, ễn Tuấn',N'Nội xương cơ khớp'),
</div><span class="text_page_counter">Trang 7</span><div class="page_container" data-page="7">('BS05' N'Nguy, ễn Tuấn',N'Da liễu')
-- chèn d ữ liệu vào b ng tblThuocẳ
INSERT INTO tblThuoc(sMaThuoc sTenThuoc fGiaThuoc, , )
-- chèn d ữ liệu vào b ng tblDonThuocả
INSERT INTO tblDonThuoc(sMaDT,sMaBS sMaBN , )
</div><span class="text_page_counter">Trang 8</span><div class="page_container" data-page="8">-- chèn d ữ liệu vào b ng tblDichVuKhamả
INSERT INTO tblDichVuKham(sMaDV sTenDV fDonGia, , )
</div><span class="text_page_counter">Trang 9</span><div class="page_container" data-page="9">-- chèn d ữ liệu vào b ng tblHoaDonả
INSERT INTO tblHoaDon(sMaHD sMaBN sMaDT dNgayLap fTongTien, , , , )
</div><span class="text_page_counter">Trang 10</span><div class="page_container" data-page="10"><small>10 </small> Sơ đồ quan hệ giữa các bảng
IV. Xây dựn các view cho CSDL 1. Tạo view cho biết hoá đơn lập năm 2020 CREATE VIEW vvHoaDon2020
AS
SELECT *FROM dbo.tblHoaDon WHERE YEAR(dNgayLap)='2020'
SELECT *FROM vvHoaDon2020
</div><span class="text_page_counter">Trang 11</span><div class="page_container" data-page="11">2. Tạo view cho biết hoá đơn có tổng tiền trên 1000000 CREATE VIEW vvHoaDonTongTien1000000
AS
SELECT *FROM dbo.tblHoaDon WHERE fTongTien 1000000 >
SELECT *FROM vvHoaDonTongTien1000000
3. Tạo view cho bi t b nh là n và Hà N i ế ệ ữ ở ộ SELECT *FROM dbo tblBenhNhan .
CREATE VIEW vvKhachHangNuHaNoi AS
SELECT *FROM dbo tblBenhNhan .
WHERE sGioiTinh=N'N 'ữAND sDiaChi=N'Hà Nội'
SELECT *FROM vvKhachHangNuHaNoi
</div><span class="text_page_counter">Trang 12</span><div class="page_container" data-page="12"><small>12 </small>
4. Tạo view cho bi t tên thu c có s ế ố ố lượng bán Lớn hơn 6 CREATE VIEW vvTenthuoctren6
AS
SELECT sTenThuoc FROM dbo.tblCT_DonThuoc dbo, .tblThuoc
WHERE iSoLuong>6 AND tblCT_DonThuoc.sMaThuoc tblThuoc= .sMaThuoc SELECT *FROM vvTenthuoctren6
5. Tạo view cho bi t tên b nh nhân, s ế ệ ố điện tho i có t ng ti n l n nh t ạ ổ ề ớ ấ CREATE VIEW vvBenNhanTongTienMax
AS
SELECT sTenBN, iSodienthoai FROM dbo.tblBenhNhan,dbo.tblHoaDon WHERE fTongTien =(SELECTMAX(fTongTien)FROM dbo.tblHoaDon) AND tblHoaDon.sMaBN=tblBenhNhan.sMaBN
SELECT *FROM vvBenNhanTongTienMax
V. Xây d ng các Procedure cho CSDLự
1. Tạo Proc tính t ng tiổ ền đã mua hàng của một bệnh nào đó theo Mã bệnh nhân
</div><span class="text_page_counter">Trang 13</span><div class="page_container" data-page="13">CREATE PROC prsumTienBenhNhanTheoMa @maBN ( nchar(30))
AS BEGIN
DECLARE @fsum FLOAT
SELECT @fsum =SUM(iSoLuong fGiaThuoc* )
FROM dbo.tblThuoc dbo tblCT_DonThuoc, . ,dbo.tblDonThuoc WHERE tblCT_DonThuoc.sMaThuoc=tblThuoc.sMaThuoc
AND dbo.tblCT_DonThuoc sMaDT dbo tblDonThuoc. = . .sMaDT AND
@maBN=sMaBN
SELECT @fsum AS[Tổng Tiên] END
EXEC prsumTienBenhNhanTheoMa'BN01'
SELECT *FROM dbo.tblBenhNhan
2. Tạo Proc cho bi t tên thuế ốc đã được mua bởi một bệnh nhân nào đó (Theo số điện thoại)
CREATE PROC prTenThuoc @sdt ( int)
AS BEGIN
SELECT sTenThuoc
FROM dbo.tblBenhNhan, dbo.tblThuoc,
dbo.tblCT_DonThuoc dbo, .tblDonThuoc
WHERE dbo.tblBenhNhan sMaBN. =dbo.tblDonThuoc.sMaBN AND
dbo.tblDonThuoc sMaDT. = dbo.tblCT_DonThuoc.sMaDT
AND dbo.tblCT_DonThuoc sMaThuoc dbo tblThuoc. = . .sMaThuoc AND @sdt
</div><span class="text_page_counter">Trang 14</span><div class="page_container" data-page="14"><small>14 </small>
3. Tạo Pro cho bi t t ng s ế ổ ố tiền Thuốc đã bán của một tháng, một năm nào đó CREATE PROC prTienThuocTheoNam @nam ( int, @thang int )
AS BEGIN
DECLARE @fsumTien float SELECT @fsumTien fTongTien =
FROM dbo.tblHoaDon
WHERE @nam =YEAR(dNgayLap)AND @thang =MONTH(dNgayLap)
SELECT @fsumTien END
EXEC prTienThuocTheoNam 2020,6 SELECT *FROM dbo.tblHoaDon
VI. Xây dựng các Trigger cho CSDL
1. Trigger đảm b o ngày xuả ất hóa đơn phả ớn hơn hoặc bằng ngày hi n t i l ệ ại.
</div><span class="text_page_counter">Trang 15</span><div class="page_container" data-page="15">CREATE TRIGGER trg_ngaylap on tblHoaDon INSTEAD OF INSERT,
2. Trigger ki m tra tính chính xác khi nh p sể ậ ố điện tho i c a b nh nhân ạ ủ ệ CREATE TRIGGER trg_ktsdt on tblBenhNhan FOR INSERT,UPDATE
3. Trigger đảm bảo giá nhập hàng luôn lớn hơn 0.
CREATE TRIGGER trg_gianhaplonhon0 on tblThuoc FOR INSERT, UPDATE
AS
</div><span class="text_page_counter">Trang 16</span><div class="page_container" data-page="16"><small>16 </small> BEGIN
DECLARE @fGiaNhap float
SELECT @fGiaNhap =(SELECT fGiaThuoc FROM
4. Trigger đảm bảo giới tính c a b nh nhân ch là nam ho c n . ủ ệ ỉ ặ ữ
CREATE TRIGGER trg_gtbn ON tblBenhNhan INSTEAD OF INSERT
5. Trigger đảm bảo hóa đơn DV khơng q 3 dịch vụ
CREATE TRIGGER trg_hoadondv ON tblHoaDon_DV FOR INSERT AS
BEGIN
DECLARE @sldv int
DECLARE @hd varchar(10 )
SELECT @hd sMaHD = FROM inserted
SELECT @sldv =COUNT(sMaDV)FROM tblHoaDon_DV
</div><span class="text_page_counter">Trang 17</span><div class="page_container" data-page="17">select *from tblHoaDon_DV;
VII. Phân quyền và b o vệ ả cơ sở ữ liệu d 1. Tạo tài kho n ả
CREATE LOGIN NguyenTheAnh WITH PASSWORD='anh123'
CREATE LOGIN NguyenTienTruong WITH PASSWORD='truong234'
CREATE LOGIN DOLIEN WITH PASSWORD='lien345'
CREATE LOGIN PHUONGTHAO WITH PASSWORD='thao567'
2. Tạo user cho các thành viên CREATE USER user1
FOR LOGIN NguyenTheAnh GO
CREATE USER user2
FOR LOGIN NguyenTienTruong GO
CREATE USER user3 FOR LOGIN DOLIEN GO
CREATE USER user4 FOR LOGIN PHUONGTHAO GO
3. Cấp quyền cho các thành viên
</div><span class="text_page_counter">Trang 19</span><div class="page_container" data-page="19">Execute sp_addrolemember role_BenhNhan,user2
-- user1 thu h i quy n xoá b ng và c m s d ng quy n select bồ ề ả ấ ử ụ ề ảng REVOKE DELETE ON dbo.tblBacSi FROM user1
</div><span class="text_page_counter">Trang 20</span><div class="page_container" data-page="20"><small>20 </small> VIII. Phân tán CSDL
1. Phân mảnh bảng tblBenhNhan cơ sở ữ liệ d u với điều kiện gi i tính ớ - MAYTRAM1 : quản lý bệnh nhân có giới tính là nam - MAYTRAM2 : quản lý bệnh nhân có giới tính là nữ 2. Máy trạm 1 sau khi phân tán
</div><span class="text_page_counter">Trang 21</span><div class="page_container" data-page="21">3. Máy trạm 2:
<small>\</small>
</div><span class="text_page_counter">Trang 22</span><div class="page_container" data-page="22"><small>22 </small> 4. Tạo linkserver từ máy trạm 1 -> máy trạm 2
</div><span class="text_page_counter">Trang 23</span><div class="page_container" data-page="23">5. Khai thác Cơ sở dữ liệu --Tạo nhãn d u ( trong su t d <small>ữ liệố ữ li u)ệ--BẢNG bệnh nhân ở máy trạm2 </small>
<small>CREATE SYNONYM maytram2_benhnhan FOR LINK.qlyKhamBenh.dbo.tblBenhNhan SELECT FROM * maytram2_benhnhan </small>
<small>--BẢNG dơn thuốc ở máy trạm2 </small>
<small>CREATE SYNONYM maytram2_donthuoc FOR LINK.qlyKhamBenh.dbo.tblDonThuoc SELECT FROM * maytram2_donthuoc </small>
<small>--1 t o th t c thêm 1 b nh nhan mạủ ụệới</small>
<small>CREATE PROC pr_thembenhnhan_phantan @mabn (nvarchar(10),@tenbn nvarchar(30), @diachi </small>
<small>IFEXISTS(SELECT *FROM dbo tblBenhNhan .WHERE @mabn sMaBN =)</small>
<small>PRINT ('Ma benh nhan da ton tai')</small>
<small>ELSE </small>
<small>IFEXISTS(SELECT *FROM maytram2_benhnhan WHERE @mabn sMaBN =)</small>
<small>PRINT ('Ma benh nhan da ton tai')</small>
</div><span class="text_page_counter">Trang 25</span><div class="page_container" data-page="25"><small>-- Thêm 1 đơn thuốc mới</small>
<small>CREATE PROC sp_themdonthuoc_phantan @madt (nvarchar,@mabs nvarchar,@mabn nvarchar)</small>
<small>ASBEGIN</small>
<small>IFEXISTS(SELECT *FROM dbo tblDonThuoc .WHERE @madt sMaDT =)</small>
<small>PRINT ('Ma don thuoc da ton tai')</small>
<small>ELSE </small>
<small>IFEXISTS(SELECT *FROM maytram2_donthuoc WHERE @madt sMaDT =)</small>
<small>PRINT ('Ma don thuoc da ton tai')</small>
</div><span class="text_page_counter">Trang 26</span><div class="page_container" data-page="26"><small>2. Các bảng được xác định cấu trúc như sau: ... 2 </small>
<small>III.Tạo cơ sở dữ liệ ... 4 uIV. Xây d n các view cho CSDLự ... 10 </small>
<small>1. Tạo view cho biết hoá đơn lập năm 2020 ... 10 </small>
<small>2. Tạo view cho biết hố đơn có tổng tiền trên 1000000 ... 11 </small>
<small>3. Tạo view cho bi t b nh là n và Hà Nế ệữởội ... 11 </small>
<small>4. Tạo view cho bi t tên thu c có s ếốố lượng bán Lớn hơn 6 ... 12 </small>
<small>5. Tạo view cho bi t tên b nh nhân, s ếệố điện thoại có t ng ti n l n nhổề ớất ... 12 </small>
<small>V. Xây d ng các Procedure cho CSDLự ... 12 </small>
<small>1. Tạo Proc tính t ng tiổền đã mua hàng của một bệnh nào đó theo Mã bệnh nhân ... 12 </small>
<small>2. Tạo Proc cho bi t tên thuếốc đã được mua b i m t bởộ ệnh nhân nào đó (Theo số điện thoại) ... 13 </small>
<small>3. Tạo Pro cho bi t t ng s ế ổố tiền Thuốc đã bán của một tháng, một năm nào đó ... 14 </small>
<small>VI. Xây d ng các Trigger cho CSDLự... 14 </small>
<small>1. Trigger đảm b o ngày xuảất hóa đơn phải lớn hơn hoặc b ng ngày hi n tằệ ại. ... 14 </small>
<small>2. Trigger ki m tra tính chính xác khi nh p sểậố điện tho i c a b nh nhânạ ủệ ... 15 </small>
<small>3. Trigger đảm b o giá nh p hàng luôn lảậớn hơn 0. ... 15 </small>
<small>4. Trigger đảm b o gi i tính c a b nh nhân ch là nam ho c nảớủệỉặữ. ... 16 </small>
<small>5. Trigger đảm bảo hóa đơn DV khơng quá 3 dịch vụ ... 16 </small>
<small>VII. Phân quy n và b o vềảệ cơ sở dữ liệu ... 17 </small>
<small>1. Tạo tài khoản ... 17 </small>
<small>2. Tạo user cho các thành viên ... 17 </small>
<small>3.Cấp quy n cho các thành viênề... 17 </small>
<small>VIII. Phân tán CSDL ... 20 </small>
<small>1. Phân m nh bảảng tblBenhNhan cơ sở dữ liệu với điều kiện gi i tínhớ ... 20 </small>
<small>2. Máy trạm 1 sau khi phân tán ... 20 </small>
<small>3. Máy trạm 2: ... 21 </small>
<small>4. Tạo linkserver từ máy trạm 1 -> máy trạm 2 ... 22 </small>
<small>5. Khai thác Cơ sở dữ liệu ... 23 </small>
</div>