Tải bản đầy đủ (.doc) (20 trang)

Xây dựng cơ sở dữ liệu chạy trên máy chủ SQL Server 2000 cho thư viện sách, báo, tạp chí

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 (117.85 KB, 20 trang )

Tải xuống tệp đính kèm gốc
Tên đề tài: Xây dựng cơ sở dữ liệu chạy trên máy chủ SQL Sever 2000 cho
thư viện sách, báo, tạp chí.
Bài làm:
Cơ sở dữ liệu được ứng dụng trong rất nhiều hệ thống, từ các phần mềm quản
lý, phần mềm kế toán, các website,… Với nhiệm vụ lớn lao đó các nhà sản
xuất đã xây dựng ra rất nhiều các hệ quản trị cơ sở dữ liệu khác nhau, mỗi hệ
quản trị CSDL có một đặc điểm khác nhau (orale, Ms SQL Sever, My SQL,…),
tùi theo từng nhu cầu công việc mà các nhà sử dụng, sử dụng các cơ sở dữ liệu
khác nhau.
Thư viện sách là nơi quản lý đầu sách, quản lý độc giả, quản lý các thông tin về
mượn và trả sách. Để đáp ứng được nhu cầu của việc phát triển công nghệ
thông tin như hiện nay và để ứng dụng công nghệ thông tin vào cuộc sống, để
thay đổi việc quản lý củ như ngày xưa, quản lý bằng giấy tờ, việc quản lý bằng
máy vi tính tiết kiệm được rất nhiều tiền của của thư viện đó, bằng việc đi tìm
từng quyển sách trong list danh sách đầu sách, chúng ta chỉ việc ngồi trước máy
vi tính và gõ bất kỳ thông tin gì của đầu sách đó thì chúng ta sẽ tìm ra quyển
sách của mình cần. Với việc ứng dụng như thế nên chúng em chọn đề tài quản
lý thư viện để làm đề tài bài tập lớn môn hệ quản trị CSDL, vì kiến thức còn
kém cỏi, chưa đi sâu vào thực tế, nên chắc chắn bài tập lớn của bọn em còn
nhiều sai sót trong mọi mặt. Chân thành cám ơn thầy giáo Trịnh Viết Cường đã
là người chỉ dẫn cho chúng em trong môn học này, kính chúc thầy mạnh khỏe
và thành công trong cuộc sống.


I- Tạo các bảng (table)
Một CSDL có thể có một bảng hoặc nhiều bảng, nếu một CSDL có nhiều bảng
thì nó được liên kết với nhau thông qua các khóa, với việc liên kết đó thì sẽ rất
dễ tạo ra sự thừa hoặc thiếu dữ liệu, đi cụ thể với cơ sở dữ liệu của chúng em
như một nhà xuất bản thì có thể xuất bản ra nhiều quyển sách, và một quyển
sách chưa bao giờ được sản xuất bởi nhiều nhà xuất bản trong một lần “In”, (có


thể các lần tái bản khác thì sẽ do nhà xuất bản khác in), một quyển sách có thể
do nhiều tác giả viết, và một tác giả thì có thể viết ra nhiều quyên sách,… Quay
lại với việc đi xây dựng cơ sở dữ liệu của chúng em, chúng em đi xây dựng 8
bảng để chứa các trường thông tin khác nhau phục vụ cho việc quản lý thư
viện. Và tất nhiên khi đi xây dựng các bảng chúng ta phải đi xây dựng nơi chứa
các cơ sở dữ liệu đó, ta có thể gọi đó là Database, tạo database bằng câu lệnh:
Create database qltv
on primary(name=qltv_data, filename=’ --Đường dẫn cơ
sở dữ liệu\qltv_data.mdf’,
size=4mb,
maxsize=20mb,
filegrowth=2mb)
Log On
(name=qltv_log,filename=’--Đường dẫn cơ sở dữ liệu\qltv_log.ldf’
Size=2mb,
Maxsize=10mb,
Filegrouwth=1mb)
Go
Các bảng của cơ sở dữ liệu:
Qltv_sach:
Create table qltv_sach
(masach int primary key,
Tensach nchar(50) not null,
Matheloai tinyint not null,
Matacgia tinyint not null,
Manxb tinyint not null,
Namxuatban datetime ,
Sotrang int,
Giatien char(10),--Số tiền bằng không nếu sách đó là sách được tặng
Soquyentrongkho tinyint not null,

Ngonngu char,
Ngaynhap char)
Qltv_nhaxb:
Create table qltv_nhaxb
(manxb tinyint primarykey,
Tennxb nchar(50) not null,
Mota nvarchar(100));
Qltv_docgia:
Create table qltv_docgia
(Madocgia int primarykey,
Hovaten nchar(50) not null,
Maloaidocgia tinyint not null,
Diachi nvarchar(80),
Ngaysinh datetime not null,
Gioitinh nchar(5) not null,
Noicongtac nvarchar(80),
Hinhanh text)
Qltv_loaidocgia:
Create table qltv_loaidocgia
(Maloaidocgia tinyint primary key,
Tenloaidocgia nchar(50) not null,
Mota nvarchar(100))
Qltv_phieumuonsach:
Create table qltv_phieudangky
(maphieu int primary key,
Mathemuon int not null,
Ngaymuon datetime not null,
Ngaytra datetime not null,
Masach int not null)


Qltv_theloaisach:
Create table qltv_theloaisach
(Matheloai tinyint primarykey,
Tentheloai nchar(50) not null,
Mota nchar(50))
Qltv_thethuvien:
Create table qltv_thethuvien
(Mathemuon int primary key,
Madocgia int not null,
Ngaylapthe datetime not null,
Ngayhethan datetime not null)
Qltv_tacgia:
Create table qltv_tacgia
(matacgia tinyint primary key,
Tentacgia nchar(50) not null,
Mota nvarchar(80))
II- Phân người, nhóm người tác động lên cơ sở dữ liệu.
Một cơ sở dữ liệu muốn được an toàn, đảm bảo tính toàn vẹn của CSDL,
thì phải phân ra các người, nhóm các người dùng, người nào được làm gì trong
CSDL, không phải tất cả mọi người đều được ghi, xóa, sửa chữa trong CSDL
đó, nên chúng ta đi phân ra người dùng và nhóm người dùng trong CSDL đó:
1. Qltv_root: có mọi quyền trên csdl đó và ta đặt bằng thuộc tính role db_owner
bây giờ tài khoản này sẽ có mọi quyền trên csdl này, bao gồm quyền phát biểu:
create table, create view, create SP, create default , create rule,… Và các quyền
về đối tượng.
Exec sp_addrolemember ‘db_owner’,’qltv_root’
Ta có thể tạo quyền bằng chế độ 1 người dùng, ta có thể dùng quyền
Administrator đăng nhập vào windows để đăng nhập vào CSDL, vì người này
là người cài ra hệ quản trị CSDL thì người đó sẽ có mọi quyền trong CSDL đó.
2. Qltv_admin: tài khoản này ta tạo ra nhằm làm tài khoản của người quản lý

thư viện sách, nó có tất cả các quyền về đối tượng như xem, xóa, sửa trên tất cả
các bảng của CSDL qltv, nhưng nó không có một số quyền như backup,
restore,… CSDL đó.
Grant all on qltv_loaidocgia to qltv_admin
Grant all on qltv_nhaxb to qltv_admin
Grant all on qltv_phieumuonsach to qltv_admin
Grant all on qltv_sach to qltv_admin
Grant all on qltv_sachmuon to qltv_admin
Grant all on qltv_tacgia to qltv_admin
Grant all on qltv_theloaisach to qltv_admin
Grant all on qltv_thethuvien to qltv_admin
Tất nhiên ta cũng có thể cấp các quyền này bằng cách dung giao diện đồ họa
bằng cách bấm chuột phải vào bảng cần cấp quyền rồi chọn properties >
permissions rồi cấp quyền các đối tượng tưng ứng.
Tùi theo nhu cầu công việc ta có thể tạo một nhóm người dùng chứ không phải
duy nhất một người dùng có các quyền qltv_admin, và gán cho những người
quản lý thư viện đó là thành viên của nhóm đó.
3. Qltv_mem : Những người dùng trong nhóm người dùng này có các quyền
xem một số column ở một số bảng, nhóm người dùng này như một độc giả bình
thường lên để tra xem có quyển sách này hay không, nên nhóm độc giả này chỉ
có quyền xem một số bảng như bảng sách, tác giả, nhà xuất bản, và ở bảng sách
thì không được phép xem giá tiền của bảng đó.
Ta có thể cấp quyền cho người dùng qltv_mem này dễ dàng bằng giao diện đồ
họa hoặc bằng câu lệnh.
Grant select(masach ,tensach, matheloai, matacgia, manxb, namxuatban,
sotrang, tinhtrang, ngonngu) on qltv_sach to qltv_mem
Grant select on qltv_nhaxb to qltv_mem
Grant select on qltv_tacgia to qltv_mem
Grant select on qltv_theloaisach to qltv_mem
Tất nhiên sẽ có nhiều cách để đến kết quả này ví dụ như cấp qua role, cấp qua

views,…
III- TRIGGER
Để đảm bảo toàn vẹn cơ sở dữ liệu này, ví dụ như ta không thể nhập một quyển
sách nếu mã tác giả của quyển sách đó không tồn tại trong bảng mã tác giả,…
Ta không thể cho mượn một quyển sách mà quyển sách đó không tồn tại trong
bảng sách,… Bây giờ ta đi cụ thể đến từng trigger.
1. Bảng qltv_sach
Ta tạo 1 trigger có nhiệm vụ kiểm soát việc nhập sách vào kho, nếu nhập sách
vào kho mà chưa tồn tại nhà xuất bản, tác giả, thể loại sách trong các bảng
qltv_nhaxb, qltv_tacgia, qltv_theloaisach thì trigger sẽ làm nhiệm vụ xóa cái
dòng vừa nhập đi bằng câu lệnh Rollback transaction, và in ra dòng chử tương
ứng ở câu lệnh print.
Câu lệnh tổng quát.
Qltv_sach VS qltv_nhaxb
create trigger insert_sach_nhaxb -- Tên của trigger
on qltv_sach-- tác động lên bản qltv_sach
for insert-- Với thuộc tính insert
as
if(select count(*) from inserted,qltv_nhaxb where
inserted.manxb=qltv_nhaxb.manxb)=0-- Nếu manxb ở bảng inserted( bảng
inserted là bảng mà khi ta chèn thuộc tính ở bảng qltv_sach tạo ra) mà không
bằng manxb ở bảng qltv_nhaxb thì sẽ làm câu lệnh bên dưới.
begin
print 'Khong ton tai nha xuat ban nay' -- In ra dòng thong báo
rollback transaction -- Xóa những dòng vừa insert vào.
End
Qltv_sach VS qltv_tacgia
create trigger insert_sach_tacgia
on qltv_sach
for insert

as
if(select count(*) from inserted,qltv_tacgia where
inserted.matacgia=qltv_qltv_tacgia.matacgia)=0
begin
print 'Khong ton tai tac gia nay'
rollback transaction .
End
Qltv_sach VS qltv_theloaisach
create trigger insert_sach_theloaisach
on dbo.qltv_sach
for insert
as
if(select count(*) from inserted,qltv_theloaisach where
inserted.matheloai=qltv_theloaisach.matheloai)=0
begin
print 'Khong ton tai the loai sach nay'
rollback transaction
end
Tạo trigger có nhiệm vụ không thể nhập được năm xuất bản của quyển sách lớn
hơn năm hiện tại. Nếu nhập năm xuất bản lớn hơn năm hiện tại thì sẽ xóa cái
dòng vừa nhập vào.
Câu lệnh như sau:
create trigger insert_sach_namxuatban
on qltv_sach
for insert
as

×