You are on page 1of 29

VIỆN ĐẠI HỌC MỞ HÀ NỘI

KHOA CÔNG NGHỆ THÔNG TIN

BÁO CÁO

Môn: Hệ quản trị CSDL phân tán – SQL Server

Đề tài: Quản lý điểm Sinh viên Trường Viện Đại học Mở Hà Nội

Giáo viên hướng dẫn: Phạm Công Hòa

Sinh Viên thực hiện: Nhóm 08 - Lớp 10B3

Nhóm trưởng Khúc Thị Hồng Anh


Nguyễn Đức Anh
Lê Văn Giang
Nguyễn Mạnh Thắng

Hà Nội - 5/2013

1
Phát biểu bài toán............................................................................................4

1. Thiết kế CSDL mức logic – Mô hình CSDL quan hệ.............................5

1.1 Xác định thực thể và các thuộc tính......................................................5

2.2. Xác định quan hệ.............................................................................6

2.3. Sơ đồ E - R........................................................................................7

2.4. Mô hình cơ sở dữ liệu quan hệ..........................................................8

2.5. Các ràng buộc...................................................................................8

2. Thiết kế vật lý.............................................................................................9

2.1. Tạo cơ sở dữ liệu QLSV (QL điểm SV).............................................9

2.2. Tạo các bảng.....................................................................................9

2.3. Sơ đồ liên kết giữa các bảng...........................................................14

3. Xây dựng các VIEW cho CSDL.............................................................15

3.1 Xem danh sách SINH VIÊN...................................................................15

3.2 Xem danh sách PHÂN CÔNG CÔNG TÁC...........................................15

3.3 Xem thông tin Sinh viên có điểm giữa kỳ bằng 6..................................15

3.4 Hiện sinh viên địa chỉ “Hà Nội”...........................................................16

3.5 Hiện danh sách sản phẩm và loại tương ứng........................................16

3.6 Hiện danh sách sinh viên có điểm chuyên cần......................................16

3.7 Tạo view hiện tên sinh viên và điểm chuyên cần, giữa kỳ.....................17

4. Xây dựng các Procedure cho CSDL......................................................18

4.1. Thủ tục tìm kiếm Sinh viên..............................................................18

4.2. Tạo thủ tục nhập sản phẩm cho bảng SANPHAM..........................18

4.3. Tính điểm trung bình của sinh viên.................................................18

5. Xây dựng các Trigger cho Bảng.............................................................20


2
5.1. Tạo trigger hiển thị dữ liệu mỗi khi có dữ liệu mới được thêm vào
tblPhancongcongtac...................................................................................20

5.2. Tạo trigger Đưa ra thông báo mỗi khi có dữ liệu được thêm vào
bang tblLop.................................................................................................20

5.3. Tạo trigger thông báo khi nhập vào của bảng Môn học.................20

5.4. Tạo trigger thông báo khi thêm Môn học có số trình lớn hơn 4.....21

6. Phân quyền và bảo mật CSDL...............................................................21

6.1. Đặt mật khẩu truy cập tới CSDL.....................................................21

6.2. Phân quyền......................................................................................23

7. Phân tán CSDL.......................................................................................25

7.1. Tạo Link Server...............................................................................25

7.2. Sử dụng phân mảnh dọc để phân chia CSDL của bài toán:...........26

7.3. Sử dụng phân mảnh ngang để phân chia CSDL của bài toán:.......27

8. Kết luận.....................................................................................................29

3
Phát biểu bài toán
Bài toán quản lý điểm của sinh viên Trường Viện Đại học Mở Hà
Nội,
Trường có rất nhiều KHOA (vd: Khoa CNTT, Khoa Du Lịch,…) khác
nhau. Trong một KHOA lại có các HỆ ĐÀO TẠO khác nhau (Đại học, Cao
đẳng, Từ xa, Liên thông). Mỗi KHOA gồm nhiều LỚP với các khóa học khác
nhau xác định dựa vào năm vào trường. Mỗi KHOA có các GIẢNG VIÊN
phụ trách dậy nhiều MÔN HỌC, Tuy nhiên một MÔN HỌC cũng có thể được
nhiều GIẢNG VIÊN khác nhau giảng dậy. Mỗi môn học có số trình khác
nhau (được tính từ 2-6). Khi một SINH VIÊN học một MÔN HỌC nào đó cần
quản lý các ĐIỂM: chuyên cần, giữ kỳ, điểm thi (nếu thi lần 1 ko đạt có thể
được thi lại lần 2, nếu thi lại lần 2 vẫn không đạt phải học lại. Số lần học lại
cũng được lưu trữ để đánh giá sinh viên sau này).

4
1. Thiết kế CSDL mức logic – Mô hình CSDL quan hệ
1.1Xác định thực thể và các thuộc tính
a) Thực thể: KHOA
 Thuộc tính: #Makhoa, TenKhoa, Dienthoai, Website.

b) Thực thể: HEDAOTAO


 Thuộc tính: #Hedaotao, Namdaotao.

c) Thực thể: LOP


 Thuộc tính: #Malop, TenLop, Namvaotruong.

d) Thực thể: GIANGVIEN


 Thuộc tính: #MaGV, TenGV, Diachi, Sdt.

e) Thực thể: MONHOC


 Thuộc tính: #Mamonhoc, Tenmonhoc, Sotrinh.

f) Thực thể: SINHVIEN


 Thuộc tính: #MaSV, HotenSV, Diachi, Gioitinh, Ngaysinh.

g) Thực thể: DIEM


 Thuộc tính: #MaSV, #Mamonhoc, #Solan, Diemchuyencan,
Diemgiuaky, Diemthilan1, Diemthilan2.

5
2.2. Xác định quan hệ

KHOA Có LOP
1 N

KHOA Có GIANGVIEN
1 N

HEDAOTAO Có LOP
1 N

LOP Có SINHVIEN
1 N

GIANGVIEN Dậy MONHOC


M N

SINHVIEN Có DIEM
1 N

Solan

MONHOC Có DIEM
1 N

Diemchuyenca Diemthi
n 2
Diemgiuak Diemthi
y 1

6
2.3. Sơ đồ E - R

7
2.4. Mô hình cơ sở dữ liệu quan hệ
KHOA( Makhoa, TenKhoa, Dienthoai, Website).
HEDAOTAO( Hedaotao, Namdaotao).
LOP(Malop, TenLop, Namvaotruong).
GIANGVIEN(MaGV, TenGV, Diachi, Sdt).
MONHOC(Mamonhoc, Tenmonhoc, Sotrinh).
PHANCONGCONGTAC(MaGV, Mamonhoc)
SINHVIEN(MaSV, HotenSV, Diachi, Gioitinh, Ngaysinh).
DIEM(MaSV, Mamonhoc, Solan, Diemchuyencan,Diemgiuaky,
Diemthilan1, Diemthilan2)

2.5. Các ràng buộc


 Tên khoa phải là duy nhất
 Hệ đào tạo chỉ có thể là: Đại học, Cao đẳng, Từ xa, Liên thông
 Năm đào tạo từ 2-4 năm.
 Năm vào trường 1990-2999
 Số trình từ 2-6
 Ngày sinh của sinh viên có tuổi >=17
 Giới tính chỉ có thể là Nam(TRUE) hoặc Nữ(FALSE)
 Số lần từ 1-3
 Điểm chuyên cần, giữa kỳ, điểm thi1, điểm thi2 trong khoảng 0-10

2. Thiết kế vật lý
2.1. Tạo cơ sở dữ liệu QLSV (QL điểm SV)
Create Database QLSV
On( Name = QLSV_Data,
FileName = 'D:\SQL Server\QLSV_Data.mdf',

8
Size = 10MB,
Maxsize=100MB,
FileGrowth = 10%)
Log On( Name = QLSV_Log,
FileName = 'D:\SQL Server\QLSV_Log.ldf',
Size = 2MB,
Maxsize=Unlimited,
FileGrowth = 10%)

2.2. Tạo các bảng

3.1.1. Tạo bảng KHOA


CREATE TABLE tblKhoa
( PK_sMaKhoa VARCHAR(25) PRIMARY KEY NOT NULL,
sTenKhoa NVARCHAR(25) UNIQUE NOT NULL,
sDienthoai VARCHAR(25) NOT NULL,
sWebsite VARCHAR(25) NOT NULL
)

3.1.2. Tạo bảng GIẢNG VIÊN


CREATE TABLE tblGiangvien
( PK_sMaGV VARCHAR(25) PRIMARY KEY NOT NULL,
sTenGV NVARCHAR(25)NOT NULL,
sDiachiGV NVARCHAR(255),
sSdt VARCHAR(25),
FK_sMaKhoa VARCHAR(25) NOT NULL
CONSTRAINT PK_sMaKhoa FOREIGN KEY (FK_sMaKhoa)
REFERENCES tblKhoa(PK_sMaKhoa)
ON DELETE CASCADE
ON UPDATE CASCADE
)
9
3.1.3. Tạo bảng MÔN HỌC
CREATE TABLE tblMonhoc
( PK_sMaMonhoc VARCHAR(25) PRIMARY KEY NOT NULL,
sTenMonhoc NVARCHAR(25) NOT NULL,
iSotrinh INTEGER NOT NULL
CONSTRAINT chk_Sotrinh CHECK (iSotrinh BETWEEN 2 and 6)
)

3.1.4. Tạo bảng PHÂN CÔNG CÔNG TÁC


CREATE TABLE tblPhancongcongtac
(FK_sMaGV VARCHAR (25) NOT NULL
CONSTRAINT PK_sMaGV FOREIGN KEY (FK_sMaGV)
REFERENCES tblGiangvien(PK_sMaGV)
ON DELETE CASCADE
ON UPDATE CASCADE,
FK_sMaMonhoc VARCHAR (25) NOT NULL
CONSTRAINT PK_sMaMonhoc FOREIGN KEY (FK_sMaMonhoc)
REFERENCES tblMonhoc(PK_sMaMonhoc)
ON DELETE CASCADE
ON UPDATE CASCADE,
PRIMARY KEY (FK_sMaGV,FK_sMaMonhoc)
)

3.1.5. Tạo bảng HỆ ĐÀO TẠO


CREATE TABLE tblHedaotao
( PK_sHedaotao NVARCHAR(25) PRIMARY KEY NOT NULL
CONSTRAINT chk_Hedaotao CHECK (PK_sHedaotao IN (N'Đại học',
N'Cao đẳng', N'Từ xa', N'Liên thông') ),
iNamdaotao INTEGER NOT NULL

10
CONSTRAINT chk_Namdaotao CHECK (iNamdaotao BETWEEN 2
and 4)
)

3.1.6. Tạo bảng LỚP


CREATE TABLE tblLop
( FK_sMaKhoa VARCHAR(25) NOT NULL
CONSTRAINT FK_sMaKhoa FOREIGN KEY (FK_sMaKhoa)
REFERENCES tblKhoa(PK_sMaKhoa)
ON DELETE CASCADE
ON UPDATE CASCADE,
FK_sHedaotao NVARCHAR(25) NOT NULL
CONSTRAINT PK_sHedaotao FOREIGN KEY (FK_sHedaotao)
REFERENCES tblHedaotao(PK_sHedaotao)
ON DELETE CASCADE
ON UPDATE CASCADE,
PK_sMalop VARCHAR(25) PRIMARY KEY NOT NULL,
sTenlop NVARCHAR(25) NOT NULL,
iNamvaotruong INTEGER NOT NULL
CONSTRAINT chk_Namvaotruong CHECK(iNamvaotruong
BETWEEN 1990 and 2999)
)

3.1.7. Tạo bảng SINH VIÊN


CREATE TABLE tblSinhvien
( FK_sMaLop VARCHAR(25) NOT NULL
CONSTRAINT FK_sMaLop FOREIGN KEY (FK_sMaLop)
REFERENCES tblLop(PK_sMaLop)
ON DELETE CASCADE

11
ON UPDATE CASCADE,
PK_sMaSV VARCHAR(25) PRIMARY KEY NOT NULL,
sHotenSV NVARCHAR (25) NOT NULL,
sDiachi NVARCHAR (255),
bGioitinh BIT,
tNgaysinh SMALLDATETIME CONSTRAINT chk_Ngaysinh
CHECK(DATEDIFF(YEAR, tNgaysinh,GETDATE())>=17))

3.1.8. Tạo bảng ĐIỂM


CREATE TABLE tblDiem
( FK_sMaSV VARCHAR(25) NOT NULL
CONSTRAINT PK_sMaSV FOREIGN KEY (FK_sMaSV)
REFERENCES tblSinhvien(PK_sMaSV)
ON DELETE CASCADE
ON UPDATE CASCADE,
FK_sMaMonhoc VARCHAR(25) NOT NULL
CONSTRAINT FK_sMaMonhoc FOREIGN KEY (FK_sMaMonhoc)
REFERENCES tblMonhoc(PK_sMaMonhoc)
ON DELETE CASCADE
ON UPDATE CASCADE,
PK_iSolan INTEGER NOT NULL
CONSTRAINT chk_Solan CHECK (PK_iSolan BETWEEN 1 AND 3),
iDiemchuyencan INTEGER
CONSTRAINT chk_Diemchuyencan CHECK (iDiemchuyencan
BETWEEN 0 AND 10),
iDiemgiuaky INTEGER
CONSTRAINT chk_Diengiuaky CHECK (iDiemgiuaky BETWEEN 0
AND 10),
iDiemthilan1 INTEGER

12
CONSTRAINT chk_Diemthilan1 CHECK (iDiemthilan1 BETWEEN 0
AND 10),
iDiemthilan2 INTEGER
CONSTRAINT chk_Diemthilan2 CHECK (iDiemthilan2 BETWEEN 0
AND 10),
PRIMARY KEY (FK_sMaSV,FK_sMaMonhoc, PK_iSolan )
)

13
2.3. Sơ đồ liên kết giữa các bảng

14
3. Xây dựng các VIEW cho CSDL
3.1Xem danh sách SINH VIÊN
--------------- Xóa view 1 -----------------
DROP VIEW view1
--------------- Tạo view1 ------------------
Create View view1
AS
Select sTenlop as [Tên lớp], PK_sMaSV as [Mã thẻ SV],
sHotenSV as [Tên SV], sDiachi as [Địa chỉ],
Case when bGioitinh=0 then N'Nam'
else N'Nữ' end as [Giới tính], tNgaysinh as [Ngày sinh]
From tblSinhvien a
Inner Join tblLop b On (a.FK_sMaLop=b.PK_sMaLop)
-------------- Xem view 1 ------------------
select *
from view1

3.2Xem danh sách PHÂN CÔNG CÔNG TÁC


--------------- Xóa view 2 -----------------
DROP VIEW PCCT
--------------- Tạo view1 ------------------
CREATE VIEW PCCT
AS
SELECT * FROM tblPhancongcongtac
-------------- Xem view 1 ------------------
select *
from PCCT

3.3Xem thông tin Sinh viên có điểm giữa kỳ bằng 6


--------------- Xóa view 2 -----------------
DROP VIEW view2
--------------- Tạo view2 ------------------
Create View view2
AS
Select FK_sMaLop as [Tên lớp], PK_sMaSV as [Mã thẻ SV],
sHotenSV as [Tên SV], sDiachi as [Địa chỉ],
Case when bGioitinh=0 then N'Nam'
else N'Nữ' end as [Giới tính], tNgaysinh as [Ngày sinh],fDiemgiuaky
FROM tblSinhvien a
INNER JOIN tblDiem b ON (a.PK_sMaSV = b.FK_sMaSV)

15
WHERE (fDiemgiuaky)=6
-------------- Xem view 2 ------------------
select *
from view2

3.4Hiện sinh viên địa chỉ “Hà Nội”


--------------- Xóa view 3 -----------------
DROP VIEW view3
--------------- Tạo view3 ------------------
Create View view3
AS
Select FK_sMaLop as [Tên lớp], PK_sMaSV as [Mã thẻ SV],
sHotenSV as [Tên SV], sDiachi as [Địa chỉ],
Case when bGioitinh=0 then N'Nam'
else N'Nữ' end as [Giới tính], tNgaysinh as [Ngày sinh]
FROM tblSinhvien
WHERE sDiachi = 'Ha Noi'
-------------- Xem view 3 ------------------
select *
from view3

3.5Hiện danh sách sản phẩm và loại tương ứng


--------------- Xóa view 4 -----------------
DROP VIEW view4
--------------- Tạo view4 ------------------
Create View view4
AS
SELECT sTenMonhoc as [Tên môn học],iSotrinh as [Số trình]
FROM tblMonhoc
WHERE (tblMonhoc.iSotrinh)=4
-------------- Xem view4 ------------------
select *
from view4

3.6Hiện danh sách sinh viên có điểm chuyên cần


--------------- Xóa view 5 -----------------
DROP VIEW view5

--------------- Tạo view5 ------------------


Create View view5
AS
Select FK_sMaLop as [Tên lớp], PK_sMaSV as [Mã thẻ SV],
sHotenSV as [Tên SV], sDiachi as [Địa chỉ],
16
Case when bGioitinh=0 then N'Nam'
else N'Nữ' end as [Giới tính], tNgaysinh as [Ngày sinh],iDiemchuyencan
FROM tblSinhvien a
INNER JOIN tblDiem b ON (a.PK_sMaSV = b.FK_sMaSV)
-------------- Xem view 5 ------------------
select *
from view5

3.7Tạo view hiện tên sinh viên và điểm chuyên cần, giữa kỳ
--------------- Xóa view 6 -----------------
DROP VIEW view6
--------------- Tạo view6 ------------------
Create View view6
AS
SELECT dbo.tblSinhvien.sHotenSV, dbo.tblDiem.iDiemchuyencan,
dbo.tblMonhoc.sTenMonhoc, dbo.tblDiem.iDiemgiuaky
FROM dbo.tblDiem INNER JOIN
dbo.tblSinhvien ON dbo.tblDiem.FK_sMaSV =
dbo.tblSinhvien.PK_sMaSV INNER JOIN
dbo.tblMonhoc ON dbo.tblDiem.FK_sMaMonhoc =
dbo.tblMonhoc.PK_sMaMonhoc
WHERE (dbo.tblDiem.iDiemchuyencan > 7) AND
(dbo.tblDiem.iDiemgiuaky > 3)
-------------- Xem view 6 ------------------
select *
from view6

17
4. Xây dựng các Procedure cho CSDL
4.1. Thủ tục tìm kiếm Sinh viên
-- Xoa proc -----
drop proc SearchtblSinhvien
----- Tao -----
CREATE PROC SearchtblSinhvien
@FK_sMaLop varchar(25), @PK_sMaSV varchar(25), @sHotenSV
varchar(25), @sDiachi varchar(25), @bGioitinh bit, @tNgaysinh datetime
AS
SELECT FK_sMaLop,PK_sMaSV,sHotenSV,sDiachi,bGioitinh,tNgaysinh
FROM tblSinhvien
WHERE FK_sMaLop=@FK_sMaLop or PK_sMaSV=@PK_sMaSV or
sHotenSV=@sHotenSV or bGioitinh=@bGioitinh or tNgaysinh=@tNgaysinh
-----Kiem tra -------------
exec SearchtblSinhvien 'CNCQ010B3','','','','',''

4.2. Tạo thủ tục nhập sản phẩm cho bảng SANPHAM
--Hien thi danh sach thong tin sinh vien o cung 1 lop 'CNCQ010B3'
Create Proc DanhsachSV(@FK_sMaLop varchar(25), @PK_sMaSV
varchar(25), @sHotenSV varchar(25), @sDiachi varchar(25), @bGioitinh bit,
@tNgaysinh datetime)
with Recompile, Encryption
AS
SELECT FK_sMaLop,PK_sMaSV,sHotenSV,sDiachi,bGioitinh,tNgaysinh
FROM tblSinhvien
Where FK_sMaLop=@FK_sMaLop
--Kiem tra--
exec DanhsachSV 'CNCQ010B3' ,'','','','',''
-- Xoa proc -----
drop proc DanhsachSV

4.3. Tính điểm trung bình của sinh viên


CREATE PROCEDURE TB (@PK_sMaSV varchar (25), @t float out)
AS
Begin
Set @t= (Select(a.iDiemchuyencan*0.1 + a.iDiemgiuaky*0.2 +
a.iDiemthilan1*0.7)
FROM tblDiem a INNER JOIN tblSinhvien b ON (a.FK_sMaSV =
b.PK_sMaSV)
where PK_sMaSV = @PK_sMaSV)

18
End
--xoa
drop proc TB
-- Test
declare @t float
exec TB'SVCN00001',@t out
print @t

19
5. Xây dựng các Trigger cho Bảng
5.1. Tạo trigger hiển thị dữ liệu mỗi khi có dữ liệu mới được thêm vào
tblPhancongcongtac.
Create trigger trgInsertFK_sMaGV
On tblPhancongcongtac
After insert
AS
Select * from Inserted
--Kiem tra---
Insert Into tblPhancongcongtac
Values ('GV00003','MH00001')

5.2. Tạo trigger Đưa ra thông báo mỗi khi có dữ liệu được thêm vào
bang tblLop
CREATE TRIGGER trgThongbaoThem
ON tblLop
FOR INSERT
AS
RAISERROR (N'Bạn đang thêm dữ liệu', 16, 1)
-- Test
INSERT Into tblLop
Values ('QTKD',N'Đại học','QTCQ011G2','11G2','2011')

5.3. Tạo trigger thông báo khi nhập vào của bảng Môn học
Create Trigger trg11
On tblMonhoc
For Insert
AS
Begin
Declare @ma varchar(25)
Declare @kt varchar(25)
select @ma = PK_sMaMonhoc From INSERTED
select @kt=count(PK_sMaMonhoc) from DELETED Where
PK_sMaMonhoc=@ma
print @kt
if @kt=1
Begin
Raiserror(N'Có lỗi khi cập nhật môn học',16,1)
End
else

20
Print N'Cập nhật thành công'
End
-- Xoa trigger
drop trigger trg11
-- Test trigger
Insert into tblMonhoc
values ('MH000021','Tieng anh1','3')

5.4. Tạo trigger thông báo khi thêm Môn học có số trình lớn hơn 4
--tao
Create Trigger trgmonhoc
On tblMonhoc
For Insert
AS
Begin
Declare @trinh int, @tenmon nvarchar(30),@mon nvarchar(30)
select @trinh=iSotrinh From INSERTED
if @trinh>4
Begin
print N'So trinh sai hoac trung ten mon'
rollback tran
return
end
else
Print N'Cập nhật thành công'
End
--xoa
drop trigger trgmonhoc
--kiem tra
Insert into tblMonhoc
values ('MH0041','tin','6')

6. Phân quyền và bảo mật CSDL


6.1. Đặt mật khẩu truy cập tới CSDL

6.1.1. Tạo tài khoản đăng nhập “admin” với mật khẩu “12345abcd”
CREATE LOGIN admin

WITH PASSWORD = '12345abcd'

GO
21
6.1.2. Tạo tài khoản đăng nhập “honganh” với mật khẩu “123456”
CREATE LOGIN honganh

WITH PASSWORD = '123456'

GO

6.1.3. Tạo tài khoản đăng nhập “thang” với mật khẩu “123456”
CREATE LOGIN thang

WITH PASSWORD = '123456'

GO

6.1.4. Tạo tài khoản đăng nhập “ducanh” với mật khẩu “123456”
CREATE LOGIN ducanh

WITH PASSWORD = '123456'

GO

6.1.5. Tạo tài khoản đăng nhập “giang” với mật khẩu “123456”
CREATE LOGIN giang

WITH PASSWORD = '123456'

GO

6.1.6. Sửa tài khoản “admin” với mật khẩu mới là “54321”
ALTER LOGIN admin

WITH PASSWORD = '54321'

6.1.7. Sửa tài khoản “admin” với tên đăng nhập mới là “nhom08”
ALTER LOGIN admin

WITH NAME = nhom08;

22
6.1.8. Xóa tài khoản “honganh”
DROP LOGIN honganh

6.2. Phân quyền

6.2.1. Cấp phát quyền thực hiện CREATE TABLE, CREATE VIEW
cho tài khoản "thang":
GRANT CREATE TABLE, CREATE VIEW

TO thang

6.2.2. Trao quyền INSERT, SELECT, UPDATE bảng NCC cho


"thang", "ducanh", "giang":
GRANT SELECT,UPDATE,INSERT

ON NCC

TO thang, ducanh, giang

6.2.3. Cấp phát quyền được xem và cập nhật dữ liệu trên bảng
NHANVIEN trên các cột Diachi, SDTNV đối với tài khoản
"ducanh"
GRANT SELECT,UPDATE

ON NHANVIEN(Diachi, SDTNV)

TO ducanh

6.2.4. Huỷ bỏ quyền cập nhật trên bảng LOAI của tài khoản "giang"
REVOKE UPDATE

ON LOAI

TO giang

6.2.5. Huỷ bỏ tất cả các quyền đã cấp phát cho tài khoản "giang"
REVOKE ALL

FROM giang

23
6.2.6. Từ chối quyền thực hiện lệnh đối với tài khoản "ducanh"
DENY CREATE DATABASE,CREATE TABLE

TO ducanh

24
7. Phân tán CSDL
--Tạo CSDL QLSinhvien (thiết lập COLLATE cùng giá trị cho cả 2 server):
CREATE Database BTL COLLATE Vietnamese_CI_AS
GO
USE BTL
GO

7.1. Tạo Link Server


8.1.1. Tạo Link Server 1

-- Tạo linked server:


EXEC master.dbo.sp_addlinkedserver
@server = N'Server1',
@provider = N'SQLOLEDB',
@datasrc = N'XP_1',
@srvproduct = ''
GO
EXEC sp_linkedservers
-- Đăng nhập linked server:
EXEC master.dbo.sp_addlinkedsrvlogin
@rmtsrvname = N'Server1',
@useself = N'False',
@locallogin = NULL,
@rmtuser = N'sa',
@rmtpassword = '123'
8.1.2. Tạo Link Server 2

-- Tạo linked server:


EXEC master.dbo.sp_addlinkedserver
@server = N'Server2',
@provider = N'SQLOLEDB',
@datasrc = N'THANGNM\SQLEXPRESS',
@srvproduct = ''
GO
EXEC sp_linkedservers

-- Đăng nhập linked server:


EXEC master.dbo.sp_addlinkedsrvlogin
25
@rmtsrvname = N' Server2',
@useself = N'False',
@locallogin = NULL,
@rmtuser = N'sa',
@rmtpassword = '123'

7.2. Sử dụng phân mảnh dọc để phân chia CSDL của bài
toán:
Bảng tblKhoa chia làm 2 bảng: 1 bảng chứa thông tin cơ bản về KHOA(tên
KHOA), 1 bảng chứa thông tin liên lạc với KHOA(số điện thoại, website)

- TTKHOA: PK_sMaKhoa, sTenKhoa

CREATE TABLE tblKhoa


( PK_sMaKhoa VARCHAR(25) PRIMARY KEY NOT NULL,
sTenkhoa NVARCHAR (25) UNIQUE NOT NULL
)

- LLKHOA: PK_sMaKhoa, sDienthoai, sWebsite

CREATE TABLE tblKhoa


( PK_sMaKhoa VARCHAR(25) PRIMARY KEY NOT NULL,
sDienthoai VARCHAR (25) UNIQUE NOT NULL,
sWebsite VARCHAR(25) UNIQUE NOT NULL
)

- Tạo 1 thủ tục để thêm 1 bản gi mới vào bảng tblKhoa


CREATE Proc spInsertKhoa(@ma VARCHAR(25), @ten NVARCHAR(25),
@dt NVARCHAR(25),@website NVARCHAR(25))
AS
BEGIN
-- Kiểm tra tính hợp lệ của dữ liệu nhập
IF EXISTS (SELECT * FROM tblKhoa WHERE PK_sMaKhoa=@ma)

26
BEGIN
print N'Mã khoa đã có'
RETURN
END
INSERT INTO tblKhoa VALUES(@ma,@ten)
INSERT INTO Server1.BTL.dbo.tblKhoa VALUES(@ma,@dt,@website)
print N'Thêm thành công'
END
EXEC spInsertKhoa 'CNTT', N'Công nghệ thông tin', '043111222',
'fithou.edu.vn'
EXEC spInsertKhoa 'DL',N'Du lịch','043645987','dulich.edu.vn'

-- Lấy dữ liệu từ các bảng của 2 server:


SELECT * FROM tblKhoa
SELECT * FROM Server1.BTL.dbo.tblKhoa
-- Lấy dữ liệu tổng hợp từ 2 bảng trên 2 server SQL:
SELECT a.PK_sMaKhoa,sTenKhoa,sDienthoai, sWebsite FROM
Server1.BTL.dbo.tblKhoa a
INNER JOIN tblKhoa b ON (a.PK_sMaKhoa =b.PK_sMaKhoa)

7.3.Sử dụng phân mảnh ngang để phân chia CSDL của bài toán:
Bảng tblHedaotao chia làm 2 mảnh: 1 mảnh chứa các thông tin HỆ ĐÀO
TẠO 4 năm, 1 mảnh chứa thông tin HỆ ĐÀO TẠO còn lại

- Tạo mỗi Server một bảng tblHedaotao.


CREATE TABLE tblHedaotao
( PK_sHedaotao NVARCHAR(25) PRIMARY KEY NOT NULL
CONSTRAINT chk_Hedaotao CHECK (PK_sHedaotao IN (N'Đại
học', N'Cao đẳng', N'Từ xa', N'Liên thông') ),
iNamdaotao INTEGER NOT NULL

27
CONSTRAINT chk_Namdaotao CHECK (iNamdaotao BETWEEN 2
and 4)
)
- Thủ tục thêm dữ liệu bảng tblHedaotao
-- Tạo 1 thủ tục để thêm 1 bản gi mới vào bảng tblHedaotao
CREATE Proc spInsertHedaotao(@hedaotao NVARCHAR(25),
@namdaotao INTEGER)
AS
BEGIN
-- Kiểm tra tính hợp lệ của dữ liệu nhập
IF EXISTS (SELECT * FROM tblHedaotao WHERE
PK_sHedaotao=@hedaotao)
BEGIN
print N'hedaotao đã có'
RETURN
END
-- Kiểm tra tính hợp lệ của dữ liệu nhập (trùng mã> lương>0?)
IF @namdaotao='4'
INSERT INTO tblHedaotao
Values(@hedaotao,@namdaotao)
ELSE
INSERT INTO Server1.BTL.dbo.tblHedaotao
Values(@hedaotao,@namdaotao)
print N'Thêm thành công'
END
-- Thêm hệ đào tạo mới
Exec spInsertHedaotao N'Đại học','4'
EXEC spInsertHedaotao N'Cao đẳng','3'
EXEC spInsertHedaotao N'Từ xa','2'
EXEC spInsertHedaotao N'Liên thông','2'
-- Sử dụng Union để lấy dữ liệu từ 2 bảng:
SELECT PK_sHedaotao, iNamdaotao
FROM Server1.BTL.dbo.tblHedaotao
UNION
SELECT PK_sHedaotao, iNamdaotao
FROM tblHedaotao

28
8. Kết luận
Lời cảm ơn đầu tiên và quan trọng nhất chúng em xin gửi tới thầy Phạm Công
Hòa, giáo viên giảng dạy của Viện đại học Mở Hà Nội đã tận tình chỉ bảo,
hướng dẫn chúng em trong quá trình học tập bộ môn và quá trình hoàn thành
bài tập lớn. Nếu không có thầy, không có sự tận tâm chỉ bảo của thầy thì
chúng em sẽ không bao giờ hoàn thành được bài tập này.

Cám ơn những người bạn tốt của chúng tôi, tập thể lớp 10B3, những người
bạn đã không ngần ngại chia sẻ cho chúng tôi kiến thức, góp ý kiến giúp
chúng tôi hoàn thiện hơn trong quá trình hoàn thành bài tập.

29

You might also like