Bài tập thực hành môn Hệ quản trị cơ sở dữ liệu – Tài liệu, Luận văn

Tài liệu Bài tập thực hành thực tế môn Hệ quản trị cơ sở dữ liệu : Bài tập thực hành thực tế môn Hệ quản trị cơ sở dữ liệu Trường CĐ Công Nghệ Thông Tin – ĐH ĐN Trang 1 Trường CĐ Công nghệ Thông tin – Đại học Đà Nẵng Khoa Công nghệ tin tức — oo0oo — BÀI TẬP THỰC HÀNH HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU Môi trường thực hành thực tế : Microsoft SQL Server 2005 ( hoặc phiên bản mới hơn ) Số tiết thực hành : 30 tiết PHÂN BỔ THỜI GIAN THỰC HÀNH TẠI LỚP Stt Nội dung thực hành thực tế Số tiết 1 Database 4 2 Query 4 3 View + Cursor 4 4 Procedure 4 5 Function 4 6 Trigger 4 7 Xử lý truy xuất đồng thời 4 8 Kiểm tra thực hành thực tế 2 Tổng Cộng 30  Lưu ý : Giáo viên hướng dẫn sẽ chấm bài 5 sinh viên bất kể vào cuối mỗi buổi thực hành thực tế Bài tập thực hành thực tế môn Hệ quản trị cơ sở dữ liệu Trường CĐ Công Nghệ Thông Tin – ĐH ĐN Trang 2 Cho cơ sở dữ liệu Quản lý đơn đặt hàng sau : Các lao lý hoạt động giải trí của mạng lưới hệ thống : QĐ1. Khi thêm mới một đơn đặt hàng thì thực trạng của đơn đặt hàng mặc định là chưa giao ( TinhTrang = 0 ), khi đơn đặt hàng được giao thì thực trạng …

pdf

13 trang

| Chia sẻ : Khủng Long

| Lượt xem: 6768

| Lượt tải: 2

download

Bạn đang xem nội dung tài liệu Bài tập thực hành môn Hệ quản trị cơ sở dữ liệu, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên

Bài tập thực hành thực tế môn Hệ quản trị cơ sở dữ liệu Trường CĐ Công Nghệ Thông Tin – ĐH ĐN Trang 1 Trường CĐ Công nghệ Thông tin – Đại học Đà Nẵng Khoa Công nghệ tin tức — oo0oo — BÀI TẬP THỰC HÀNH HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU Môi trường thực hành thực tế : Microsoft SQL Server 2005 ( hoặc phiên bản mới hơn ) Số tiết thực hành : 30 tiết PHÂN BỔ THỜI GIAN THỰC HÀNH TẠI LỚP Stt Nội dung thực hành thực tế Số tiết 1 Database 4 2 Query 4 3 View + Cursor 4 4 Procedure 4 5 Function 4 6 Trigger 4 7 Xử lý truy xuất đồng thời 4 8 Kiểm tra thực hành thực tế 2 Tổng Cộng 30  Lưu ý : Giáo viên hướng dẫn sẽ chấm bài 5 sinh viên bất kể vào cuối mỗi buổi thực hành thực tế Bài tập thực hành thực tế môn Hệ quản trị cơ sở dữ liệu Trường CĐ Công Nghệ Thông Tin – ĐH ĐN Trang 2 Cho cơ sở dữ liệu Quản lý đơn đặt hàng sau : Các lao lý hoạt động giải trí của mạng lưới hệ thống : QĐ1. Khi thêm mới một đơn đặt hàng thì thực trạng của đơn đặt hàng mặc định là chưa giao ( TinhTrang = 0 ), khi đơn đặt hàng được giao thì thực trạng đơn đặt hàng được update lại là đã giao ( TinhTrang = 1 ) QĐ2. Mỗi đơn đặt hàng chỉ có tối đa 1 phiếu giao hàng ( cũng có những đơn đặt không được giao ), ngày giao hàng phải bằng hoặc sau ngày đặt hàng nhưng không được quá 30 ngày. QĐ3. Số lượng giao của một sản phẩm & hàng hóa trong chi tiết cụ thể phiếu giao hàng phải nhỏ hơn hoặc bằng số lượng đặt của cụ thể đặt hàng ứng với phiếu giao hàng đó. Khi update ( thêm, xóa, sửa ) một cụ thể phiếu giao hàng phải update lại số lượng còn ( SLCon ) của sản phẩm & hàng hóa được giao. QĐ4. DonGiaHH trong bảng HangHoa là đơn giá hiện hành, đơn giá này dùng để tìm hiểu thêm khi giao hàng và được update theo lịch sử vẻ vang giá của sản phẩm & hàng hóa đó. Chỉ được phép thêm ( hay sửa ) lịch sử dân tộc giá của sản phẩm & hàng hóa mà ngày hiệu lực hiện hành của dòng dữ liệu được thêm ( hay sửa ) phải là lớn hơn so với toàn bộ những ngày hiệu lực thực thi hiện hành còn lại của lịch sử dân tộc giá ứng với sản phẩm & hàng hóa đó. Bài tập thực hành thực tế môn Hệ quản trị cơ sở dữ liệu Trường CĐ Công Nghệ Thông Tin – ĐH ĐN Trang 3 1. DATABASE ( CƠ SỞ DỮ LIỆU ) a. Cài đặt CSDL Quản lý đơn đặt hàng với tên CSDL là QLDDH_TenSinhVien, tác dụng sau cuối là có được diagram như hình trên. Lưu ý, trước khi tạo CSDL nên kiểm tra CSDL đã sống sót chưa, nếu đã sống sót rồi thì xóa CSDL đó đi rồi mới tạo. b. Thêm ràng buộc duy nhất ( UNIQUE ) cho trường TenHH trong bảng HangHoa, thử nhập dữ liệu để kiểm tra ràng buộc. c. Thêm ràng buộc kiểm tra ( CHECK ) cho trường SLCon, nhu yếu là trường này chỉ nhận giá trị > = 0, thử nhập dữ liệu để kiểm tra ràng buộc. d. Thêm ràng buộc mặc định ( DEFAULT ) cho cột NgayDat trong DonDatHang với giá trị mặc định là ngày hiện tại, thử nhập dữ liệu để kiểm tra ràng buộc. e. Xóa bảng KHACHHANG ? Nếu không xóa được thì nêu nguyên do ? Muốn xóa được thì phải làm thế nào ? f. Xóa cột DiaChi trong bảng KhachHang, sau đó tạo lại cột này với ràng buộc mặc định là „ TP. Đà Nẵng ‟ g. Xóa khóa ngoại MaDat trong PHIEUGIAHANG tham chiếu tới MaDat trong DonDatHang, sau đó tạo lại khóa ngoại này. h. Nhập dữ liệu cho những bảng như sau : HangHoa KhachHang DonDatHang ChiTietDatHang PhieuGiaoHang ChiTietGiaoHang LichSuGia Bài tập thực hành thực tế môn Hệ quản trị cơ sở dữ liệu Trường CĐ Công Nghệ Thông Tin – ĐH ĐN Trang 4 Hướng dẫn : Câu 1 a. Tạo CSDL trước, tạo bảng sau : — Tạo CSDL CREATE DATABASE QLDDH GO — Hết một lô — sử dụng CSDL đã tạo USE QLDDH GO — Tạo bảng HangHoa CREATE TABLE HangHoa ( MaHH char ( 5 ), TenHH nvarchar ( 50 ), DVT nvarchar ( 20 ), SLCon smallint, DonGiaHH int, Constraint pk_HH Primary Key ( MaHH ) ) GO — Tạo bảng DonDatHang CREATE TABLE DonDatHang ( MaDat char ( 10 ), NgayDat smalldatetime, MaKH char ( 5 ), TinhTrang bit, Constraint pk_DDH Primary Key ( MaDat ) ) GO — Tạo bảng ChiTietDatHang CREATE TABLE ChiTietDatHang ( MaDat char ( 10 ), MaHH char ( 5 ), SLDat smallint, Constraint pk_CTDH Primary Key ( MaDat, MaHH ) ) GO — Tạo khóa ngoại giữa những bảng ChiTietDatHang với DonDatHang và HangHoa ALTER TABLE ChiTietDatHang ADD Constraint fk_CTDH_MaDat Foreign Key ( MaDat ) references DonDatHang ( MaDat ) on update cascade on delete cascade, Constraint fk_CTDH_MaHH Foreign Key ( MaHH ) references HangHoa ( MaHH ) on update cascade on delete cascade — Các bảng còn lại tạo tựa như Câu 1 b, c, d. Dùng lệnh ALTER TABLE để thêm những ràng buộc, đặt tên đơn cử cho những ràng buộc này. Câu 1 e. Dùng lệnh DROP TABLE để xóa bảng Câu 1 f, g. Dùng lệnh ALTER TABLE để xóa cột và xóa khóa ngoại. Câu 1 h. Dùng câu lệnh INSERT INTO để nhập dữ liệu / * Lưu ý : dữ liệu kiểu chuỗi và ngày tháng phải đặt trong cặp dấu nháy đơn, chuỗi có dấu phải có ký tự N đứng trước chuỗi, dữ liệu kiểu số thì không có dấu cần dấu nháy đơn * / INSERT INTO HangHoa VALUES ( ‘ BU ‘, N’Bàn ủi PhiLip ‘, N’Cái ‘, 60, 350000 ) / * Trong SQL Server, ngày được định dạng khi nhập liệu là tháng / ngày / năm, nếu muốn ngày định dạng là ngày / tháng / năm thì phải thực thi lệnh sau trước khi triển khai lệnh INSERT INTO * / SET DATEFORMAT dmy Bài tập thực hành thực tế môn Hệ quản trị cơ sở dữ liệu Trường CĐ Công Nghệ Thông Tin – ĐH ĐN Trang 5 2. QUERY ( TRUY VẤN ) a. Cho biết cụ thể giao hàng của đơn đặt hàng DH01, hiển thị : tên sản phẩm & hàng hóa, số lượng giao và đơn giá giao. b. Cho biết thông tin những đơn đặt hàng không được giao, hiển thị : mã đặt, ngày đặt, tên người mua. c. Cho biết sản phẩm & hàng hóa nào có đơn giá hiện hành cao nhất, hiển thị : tên sản phẩm & hàng hóa, đơn giá hiện hành. d. Cho biết số lần đặt hàng của từng người mua, những người mua không đặt hàng thì phải hiển thị số lần đặt hàng bằng 0. Hiển thị : Mã người mua, tên người mua, số lần đặt e. Cho biết tổng tiền của từng phiếu giao hàng trong năm 2012, hiển thị : mã giao, ngày giao, tổng tiền, với tổng tiền = SUM ( SLGiao * DonGiaGiao ) f. Cho biết người mua nào có 2 lần đặt hàng trở lên, hiển thị : mã người mua, tên người mua, số lần đặt. g. Cho biết loại sản phẩm nào đã được giao với tổng số lượng giao nhiều nhất, hiển thị : mã hàng, tên sản phẩm & hàng hóa, tổng số lượng đã giao. h. Tăng số lượng còn của loại sản phẩm có mã khởi đầu bằng ký tự „ M ‟ lên 10. i. Copy dữ liệu bảng HangHoa sang một bảng HangHoa_copy, sau đó xóa những loại sản phẩm chưa được đặt trong bảng HangHoa. Chèn lại vào bảng HangHoa những dòng bị xóa từ bảng HangHoa_copy. j. Cập nhật số điện thoại cảm ứng cho người mua có mã KH006. k. Sửa giá trị TinhTrang = NULL cho toàn bộ những đơn đặt hàng l. Thêm cột ThanhTien cho bảng ChiTietGiaoHang, sau đó update giá trị cho cột này với ThanhTien = SLGiao * DonGiaGiao Hướng dẫn : / * Câu 2 a : dùng câu lệnh select gồm những mệnh đề SELECT, FROM, WHERE, trong đó mệnh đề FROM gồm 3 bảng : PhieuGiaoHang, ChiTietGiaoHang, HangHoa * / SELECT TenHH, SLGiao, DonGiaGiao FROM ( PhieuGiaoHang pg inner join ChiTietGiaoHang ctg on pg. MaGiao = ctg. MaGiao ) inner join HangHoa hh on ctg. MaHH = hh. MaHH WHERE MaDat = ‘ DH01 ‘ / * Câu 2 b, 2 c : dùng câu SELECT lồng trong mệnh đề WHERE Câu 2 d, e : dùng câu SELECT có thêm mệnh đề GROUP BY Câu 2 f : dùng câu SELECT có thêm mệnh đề GROUP BY và HAVING Câu 2 g : dùng câu SELECT lồng với toán tử > = All trong mệnh đề HAVING Câu 2 h, j, k : dùng câu lệnh UPDATE Câu 2 i : dùng câu lệnh INSERT INTO + DELETE tích hợp với câu SELECT lồng trong mệnh đề WHERE Câu 2 k : dùng câu lệnh UPDATE Câu 2 l : dùng câu lệnh ALTER TABLE để thêm cột, sau đó dùng câu lệnh UPDATE để update giá trị. * / Bài tập thực hành thực tế môn Hệ quản trị cơ sở dữ liệu Trường CĐ Công Nghệ Thông Tin – ĐH ĐN Trang 6 3. VIEW ( KHUNG NHÌN ) a. Tạo view thống kê doanh thu giao hàng của từng loại sản phẩm trong 6 tháng đầu năm 2012 b. Tạo view cho biết thêm mẫu sản phẩm nào có tổng số lượng được đặt lớn nhất trong năm 2012 c. Tạo view cho biết list người mua ở Thành Phố Đà Nẵng có sử dụng WITH CHECK OPTION, sau đó chèn 2 người mua vào view này, một người mua có địa chỉ Thành Phố Đà Nẵng và một người mua có địa chỉ ở Quảng Nam, có nhận xét gì trong 2 trường hợp này ? Hướng dẫn : / / Câu 3 a : Tạo view CREATE VIEW vw_DoanhSoGiaoHang_6thang as SELECT hh. MaHH, TenHH, SUM ( SLGiao * DonGiaGiao ) as TongTien FROM ( PhieuGiaoHang pg inner join ChiTietGiaoHang ctg on pg. MaGiao = ctg. MaGiao ) inner join HangHoa hh on ctg. MaHH = hh. MaHH WHERE Month ( NgayGiao ) between 1 and 6 and YEAR ( NgayGiao ) = 2012 GROUP BY hh. MaHH, TenHH — Xem view vừa tạo SELECT * FROM vw_DoanhSoBanHang_6thang 4. CURSOR ( CON TRỎ ) a. Thêm cột TongTien vào phiếu giao hàng, sau đó dùng con trỏ cập nhập giá trị cho cột TongTien, với TongTien = SUM ( SLGiao * DonGiaGiao ) hay nói cách khác TongTien = SUM ( ThanhTien ) b. Thêm mới cột THUONG_2012 vào bảng NHANVIEN để lưu giữ số tiền người mua được thưởng trong năm 2012. Dùng con trỏ để update giá trị cho cột này như sau : – Thưởng 3 triệu so với khách mua hàng trên 50 triệu trong năm 2012 – Thưởng 2 triệu so với người mua mua hàng trên 35 triệu trong năm 2012 và có mua mẫu sản phẩm Máy giặt – Thưởng 1 triệu so với những người mua có mua hàng trong cả 2 năm 2012 và 2011. – Tiền thưởng = 0 cho những trường hợp còn lại. Lưu ý là mỗi người mua chỉ nhận một mức tiền thưởng cao nhất. c. Vào ngày 1/1/2013, cần tăng giá của toàn bộ những mẫu sản phẩm lên 10 % so với đơn giá hiện hành. Song song với việc tăng giá toàn bộ những mẫu sản phẩm là việc chèn 1 dòng dữ liệu vào LichSuGia ứng với mỗi sản phẩm & hàng hóa, có nghĩa là có bao nhiêu sản phẩm & hàng hóa sẽ có bấy nhiêu dòng dữ liệu được chèn vào bảng LichSuGia với những giá trị tương ứng. Dùng con trỏ để thực thi việc làm này. Hướng dẫn : Câu 4 a. Thêm cột TongTien vào phiếu giao hàng, sau đó dùng con trỏ cập nhập giá trị cho cột TongTien này. — Thêm cột tổng tiền ALTER TABLE PhieuGiaoHang ADD TongTien money GO — Khai báo biến cursor, những biến cục bộ DECLARE @ magiao char ( 4 ), @ tongtien int DECLARE cur_PG CURSOR FORWARD_ONLY FOR SELECT MaGiao FROM PhieuGiaoHang Bài tập thực hành thực tế môn Hệ quản trị cơ sở dữ liệu Trường CĐ Công Nghệ Thông Tin – ĐH ĐN Trang 7 — Mở cursor OPEN cur_PG — Đọc dữ liệu và update giá trị FETCH NEXT FROM cur_PG INTO @ magiao WHILE @ @ FETCH_STATUS = 0 BEGIN SELECT @ tongtien = SUM ( SLGiao * DonGiaGiao ) FROM ChiTietGiaoHang WHERE MaGiao = @ magiao PRINT ‘ Đang cap nhat phieu giao : ‘ + @ magiao UPDATE PhieuGiaoHang SET TongTien = @ tongtien WHERE MaGiao = @ magiao — Hoặc là : Where Current OF cur_PG FETCH NEXT FROM cur_PG INTO @ magiao END — Đóng và hủy cursor CLOSE cur_PG DEALLOCATE cur_PG 5. STORE PROCEDURE + TRANSACTION ( Thủ tục nội tại + thanh toán giao dịch ) a. Tạo thủ tục truyền vào mã đơn đặt hàng ( @ maddh ) và mã sản phẩm & hàng hóa ( @ mahh ), xuất ra số lượng hàng hóa @ mahh được đặt trong đơn đặt hàng @ maddh. b. Tạo thủ tục truyền vào mã phiếu giao hàng, xuất ra tổng tiền của phiếu giao hàng đó. c. Tạo thủ tục truyền vào mã người mua, hiển thị những đơn đặt hàng của người mua đó, gồm những thông tin : Mã đặt, ngày đặt, mã giao, ngày giao. d. Tạo thủ tục truyền vào ngày1 và ngày2, đếm xem có bao nhiêu phiếu giao hàng được giao trong khoảng chừng thời hạn từ ngày1 đến ngày2 e. Viết lại câu 4 a, 4 b, 4 c bằng cách dùng thủ tục. f. Tạo thủ tục thêm mới một sản phẩm & hàng hóa với tham số nguồn vào là : mã hàng, tên hàng, đơn vị chức năng tính, số lượng, đơn giá. Yêu cầu : – Kiểm tra khóa chính, nếu vi phạm thì báo lỗi và chấm hết thủ tục. – Kiểm tra tên hàng phải là duy nhất ( có nghĩa tên hàng nếu khác null phải khác với toàn bộ những tên hàng đã sống sót trong bảng HangHoa ), nếu không duy nhất thì báo lỗi và chấm hết thủ tục. – Kiểm tra số lượng nếu khác null thì phải > = 0, ngược lại thì báo lỗi và chấm hết thủ tục. – Kiểm tra đơn giá nếu khác null thì phải > = 0, ngược lại thì báo lỗi và chấm hết thủ tục. – Nếu những điều kiện kèm theo trên thỏa thì cho thêm mới sản phẩm & hàng hóa. g. Tạo thủ tục thêm mới một ChiTietGiaoHang với những tham số nguồn vào là : mã giao, mã sản phẩm & hàng hóa, số lượng giao. Yêu cầu : – Kiểm tra sản phẩm & hàng hóa này có được đặt không, có nghĩa mã sản phẩm & hàng hóa truyền vào có sống sót trong ChiTietDatHang của đơn đặt hàng tương ứng với phiếu giao hàng này không ? Nếu không thì báo lỗi và chấm hết procedure. – Kiểm tra số lượng giao có nhỏ hơn số lượng đặt ứng với sản phẩm & hàng hóa này không ? Nếu không thì báo lỗi và chấm hết procedure. – Kiểm tra số lượng giao có nhỏ hơn số lượng còn của sản phẩm & hàng hóa này không ? Nếu không thì báo lỗi và chấm hết procedure. – Nếu thỏa 3 điều kiện kèm theo trên thì cho thêm mới vào cụ thể giao hàng, với đơn giá giao được lấy từ đơn giá hiện hành của sản phẩm & hàng hóa này. Sau khi thêm mới phải cập nhập lại cột số lượng còn của HangHoa : SLCon = SLCon-SLGiao. Cần phải chú ý quan tâm với 2 hành vi thêm Bài tập thực hành thực tế môn Hệ quản trị cơ sở dữ liệu Trường CĐ Công Nghệ Thông Tin – ĐH ĐN Trang 8 mới cụ thể giao hàng và update lại số lượng còn, nếu một trong hai hành vi thất bại thì cả hai cùng thất bại. Cần phải sử dụng thanh toán giao dịch ( transaction ) để xử lý yếu tố này. Hướng dẫn : 5 b. Tạo thủ tục truyền vào mã phiếu giao hàng, xuất ra tổng tiền của phiếu giao hàng đó => Đầu vào : mã phiếu giao, đầu ra : tổng tiền — Tạo thủ tục cho câu 4 b CREATE PROC sp_TongTien_PhieuGiao @ mapg char ( 10 ), @ tongtien money OUTPUT AS BEGIN — Kiểm tra @ mapg sống sót chưa, nếu chưa sống sót return 0 IF NOT EXISTS ( SELECT * FROM ChiTietGiaoHang WHERE MaGiao = @ mapg ) RETURN 0 — Nếu @ mapg truyền vào sống sót thì return 1 SELECT @ tongtien = SUM ( SLGiao * DonGiaGiao ) FROM dbo. ChiTietGiaoHang WHERE MaGiao = @ mapg RETURN 1 END — Gọi thủ tục vừa tạo DECLARE @ tt money DECLARE @ kq tinyint EXEC @ kq = sp_TongTien_PhieuGiao ‘ GH0001 ‘, @ tt OUTPUT IF @ kq = 0 PRINT N’Mã giao hàng không sống sót ‘ ELSE PRINT N’Tổng tiền là : ‘ + cast ( @ tt as nvarchar ( 20 ) ) 6. FUNCTION ( HÀM DO NGƯỜI DÙNG ĐỊNH NGHĨA ) a. Viết lại câu 5 a bằng cách dùng Function b. Viết lại câu 5 b bằng cách dùng Function c. Viết lại câu 5 c bằng 2 hàm : hàm trả về Inline Table và hàm trả về Multi-statement Table d. Viết lại câu 5 d bằng cách dùng Function Hướng dẫn : 6 b. Tạo thủ tục truyền vào mã phiếu giao hàng, xuất ra tổng tiền của phiếu giao hàng đó => Đầu vào : mã phiếu giao, đầu ra : tổng tiền — Tạo hàm cho câu 5 b CREATE FUNCTION udf_TongTien_PhieuGiao ( @ mapg char ( 10 ) ) RETURNS money AS BEGIN DECLARE @ tongtien money — Kiểm tra @ mapg sống sót chưa, nếu chưa sống sót return – 1 IF NOT EXISTS ( SELECT * FROM ChiTietGiaoHang WHERE MaGiao = @ mapg ) RETURN – 1 — Nếu @ mapg truyền vào sống sót thì return tổng tiền SELECT @ tongtien = SUM ( SLGiao * DonGiaGiao ) FROM dbo. ChiTietGiaoHang WHERE MaGiao = @ mapg RETURN @ tongtien END Bài tập thực hành thực tế môn Hệ quản trị cơ sở dữ liệu Trường CĐ Công Nghệ Thông Tin – ĐH ĐN Trang 9 — Gọi hàm vừa tạo DECLARE @ tt money SET @ tt = dbo. udf_TongTien_PhieuGiao ( ‘ GH01 ‘ ) IF @ tt = – 1 PRINT N’Mã giao hàng không sống sót ‘ ELSE PRINT N’Tổng tiền là : ‘ + cast ( @ tt as nvarchar ( 20 ) ) 7. TRIGGER ( RÀNG BUỘC TOÀN VẸN ) a. Cài đặt ràng buộc sau bằng 2 cách : constraint và trigger “ Số lượng còn của sản phẩm & hàng hóa phải > 0 ” b. Cài đặt ràng buộc sau bằng 2 cách : constraint và trigger “ Đơn vị tính của sản phẩm & hàng hóa chỉ nhận một trong những giá trị : Cái, Thùng, Chiếc, Chai, Lon ” c. Cài đặt ràng buộc : “ Mỗi đơn đặt hàng chỉ có tối đa 1 phiếu giao hàng ” d. Cài đặt ràng buộc : “ Ngày giao hàng phải bằng hoặc sau ngày đặt hàng nhưng không được quá 30 ngày ” e. Tạo trigger sau khi chèn 1 dòng mới vào bảng LichSuGia ( gồm : mã hàng háo, ngày hiệu lực hiện hành mới, đơn giá mới ), nếu ngày có hiệu lực thực thi hiện hành mới lớn hơn tổng thể những ngày hiệu lực thực thi hiện hành trong lịch sử vẻ vang giá của sản phẩm & hàng hóa tương ứng thì update lại DonGiaHH bằng đơn giá mới cho sản phẩm & hàng hóa này, ngược lại thì rollback. f. Cài đặt ràng buộc : “ Số lượng sản phẩm & hàng hóa được giao không được lớn hơn số lượng sản phẩm & hàng hóa được đặt tương ứng ” Hướng dẫn : Câu 7 d. CREATE TRIGGER trg_NgayGiao_NgayDat ON PhieuGiaoHang AFTER INSERT, UPDATE AS DECLARE @ madat char ( 10 ), @ ngaygiao datetime, @ ngaydat datetime — Trường hợp thêm mới IF NOT EXISTS ( SELECT * FROM deleted ) BEGIN SELECT @ madat = MaDat, @ ngaygiao = NgayGiao FROM inserted SELECT @ ngaydat = NgayDat FROM DonDatHang WHERE MaDat = @ madat IF @ ngaygiao < @ ngaydat BEGIN RAISERROR ( N'Ngày giao phải sau ngày đặt ', 16,1 ) ROLLBACK RETURN END IF DATEDIFF ( DD, @ ngaydat, @ ngaygiao ) > 30 BEGIN RAISERROR ( N’Ngày giao – ngày đặt < = 30 ngày ', 16,1 ) ROLLBACK RETURN END END ELSE -- Trường hợp sửa BEGIN IF UPDATE ( NgayGiao ) Bài tập thực hành thực tế môn Hệ quản trị cơ sở dữ liệu Trường CĐ Công Nghệ Thông Tin – ĐH ĐN Trang 10 BEGIN SELECT @ madat = MaDat, @ ngaygiao = NgayGiao FROM inserted SELECT @ ngaydat = NgayDat FROM DonDatHang WHERE MaDat = @ madat IF @ ngaygiao < @ ngaydat BEGIN RAISERROR ( N'Ngày giao phải sau ngày đặt ', 16,1 ) ROLLBACK RETURN END IF DATEDIFF ( DD, @ ngaydat, @ ngaygiao ) > 30 BEGIN RAISERROR ( N’Ngày giao – ngày đặt < = 30 ngày ', 16,1 ) ROLLBACK RETURN END END END 8. AN TOÀN + BẢO MẬT DỮ LIỆU a. Hãy Export bảng KhachHang ra file có tên là tblKhachHang. txt b. Xóa hết dữ liệu trong bảng KhachHang, sau đó Import lại dữ liệu từ file tblKhachHang. txt c. Thực hiện Export hàng loạt những bảng của CSDL sang Access d. Sao lưu ( Backup ) hàng loạt CSDL thành file QLDDH.bak, sau đó xóa và sửa một vài dòng bất kể trong CSDL rồi triển khai hồi sinh ( restore ) lại CSDL từ file QLDDH.bak, có nhận xét gì ? e. Giả sử cơ sở dữ liệu về Quản lý nhập xuất tồn có những nhóm, người sử dụng như sau : - Các account : Admin, Director có quyền quản trị. - Các user : user1, user2, user3 có quyền xem tổng thể những bảng nhưng không có quyền thêm, xóa sửa bất kể bảng nào. - Các user : user4, user5, user6 có quyền xem toàn bộ những bảng và quyền thêm, xóa, sửa bảng DonDatHang + ChiTietDatHang và PhieuGiaoHang + ChiTietGiaoHang. Hãy tạo những nhóm, role, user để bảo vệ quyền trên. Bài tập thực hành thực tế môn Hệ quản trị cơ sở dữ liệu Trường CĐ Công Nghệ Thông Tin – ĐH ĐN Trang 11 9. TRUY XUẤT DỮ LIỆU ĐỒNG THỜI a. Cho ví dụ về một trường hợp deadlock, kiểm tra xem deadlock này có xảy ra trong SQL Server không ? b. So sách mức cô lập Read Uncommitted và Read Committed  Trường hợp 1 : T1 T2 BEGIN TRAN SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED UPDATE KhachHang SET TenKH = ' ABC ' WHERE MaKH = ' KH001 ' WAITFOR DELAY ' 00:00:05 ' ROLLBACK TRAN BEGIN TRAN SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED SELECT * FROM KhachHang WHERE TenKH = ' ABC ' COMMIT TRAN Nhận xét hiệu quả đọc dữ liệu của T2 ?  Trường hợp 2 : T1 T2 BEGIN TRAN SET TRANSACTION ISOLATION LEVEL READ COMMITTED UPDATE KhachHang SET TenKH = ' ABC ' WHERE MaKH = ' KH001 ' WAITFOR DELAY ' 00:00:05 ' ROLLBACK TRAN BEGIN TRAN SET TRANSACTION ISOLATION LEVEL READ COMMITTED SELECT * FROM KhachHang WHERE TenKH = ' ABC ' COMMIT TRAN Nhận xét tác dụng đọc dữ liệu của T2 ? Bài tập thực hành thực tế môn Hệ quản trị cơ sở dữ liệu Trường CĐ Công Nghệ Thông Tin – ĐH ĐN Trang 12 c. So sách mức cô lập Read Committed và Repeatable Read  Trường hợp 1 : T1 T2 BEGIN TRAN SET TRANSACTION ISOLATION LEVEL READ COMMITTED SELECT TenKH FROM KhachHang WHERE MaKH = ' KH001 ' WAITFOR DELAY ' 00:00:05 ' SELECT TenKH FROM KhachHang WHERE MaKH = ' KH001 ' COMMIT TRAN BEGIN TRAN SET TRANSACTION ISOLATION LEVEL READ COMMITTED UPDATE KhachHang SET TenKH = ' ABC ' WHERE MaKH = ' KH001 ' COMMIT TRAN Nhận xét hiệu quả 2 lần đọc dữ liệu của T1 ?  Trường hợp 2 : T1 T2 BEGIN TRAN SET TRANSACTION ISOLATION LEVEL REPEATABLE READ SELECT TenKH FROM KhachHang WHERE MaKH = ' KH001 ' WAITFOR DELAY ' 00:00:05 ' SELECT TenKH FROM KhachHang WHERE MaKH = ' KH001 ' COMMIT TRAN BEGIN TRAN SET TRANSACTION ISOLATION LEVEL REPEATABLE READ UPDATE KhachHang SET TenKH = ' ABC ' WHERE MaKH = ' KH001 ' COMMIT TRAN Nhận xét hiệu quả 2 lần đọc dữ liệu của T1 ? Bài tập thực hành thực tế môn Hệ quản trị cơ sở dữ liệu Trường CĐ Công Nghệ Thông Tin – ĐH ĐN Trang 13 d. So sách mức cô lập Repeatable Read và Serializable  Trường hợp 1 : T1 T2 BEGIN TRAN SET TRANSACTION ISOLATION LEVEL REPEATABLE READ SELECT * FROM HangHoa WHERE SLCon = 100 WAITFOR DELAY ' 00:00:05 ' SELECT * FROM HangHoa WHERE SLCon = 100 COMMIT TRAN BEGIN TRAN SET TRANSACTION ISOLATION LEVEL REPEATABLE READ INSERT INTO HangHoa VALUES ( ' IP ', ' Ipad ', ' Cái ', 100,10000000 ) COMMIT TRAN Nhận xét hiệu quả 2 lần đọc dữ liệu của T1 ?  Trường hợp 2 T1 T2 BEGIN TRAN SET TRANSACTION ISOLATION LEVEL SERIALIZABLE SELECT * FROM HangHoa WHERE SLCon = 100 WAITFOR DELAY ' 00:00:05 ' SELECT * FROM HangHoa WHERE SLCon = 100 COMMIT TRAN BEGIN TRAN SET TRANSACTION ISOLATION LEVEL SERIALIZABLE INSERT INTO HangHoa VALUES ( ' IP ', ' Ipad ', ' Cái ', 100,10000000 ) COMMIT TRAN Nhận xét hiệu quả 2 lần đọc dữ liệu của T1 ? ( * ) Bài tập về giải quyết và xử lý truy xuất đồng thời : Viết một thủ tục ( store procedure ) thêm một phiếu giao hàng có chèn lệnh waitfor delay „ 00:00:10 ‟ vào trước lệnh insert. Sau đó giả lập 2 thanh toán giao dịch cùng thực thi stored procedure này, lần lượt với những mức cô lập : read uncommitted, read committed, repeatable read, serializable. Nhận xét về những yếu tố xảy ra ? Trở lại mức cô lập mặc định, hãy đặt lock trực tiếp vào những lệnh sao cho hoàn toàn có thể xử lý những yếu tố trên một cách hiệu suất cao nhất .

Các file đính kèm theo tài liệu này :

  • pdftailieu.pdf
Bài tập thực hành môn Hệ quản trị cơ sở dữ liệu – Tài liệu, Luận văn

Bài viết liên quan
Hotline 24/7: O984.666.352
Alternate Text Gọi ngay