ĐỀ THI HẾT MÔN HỌC CÁC HỆ CƠ SỞ DỮ LIỆU
1) Transaction là gì, mục đích và cơ chế triển khai của nó trong SQL Server. Cho 1 ví
dụ về 1 transaction và viết Script SQL thực thi transaction đó.
• Transaction (giao tác) là một dãy các thao tác cần thực hiện trên cơ sở dữ liệu
dưới một đơn vị duy nhất, nghĩa là hoặc thực hiện tất cả các thao tác hoặc
không thực hiện thao tác nào cả.
• Transaction (Giao dịch) trong SQL Server là một tập hợp tuần tự của các câu
lệnh SQL đơn để tạo thành một đơn vị luận lý duy nhất. Đơn vị luận lý này làm
việc phải đảm bảo 4 tính chất: tính nguyên tử (atomicity), tính nhất quán
(consistency), tính cô lập (isolation) và tính bền vững (durability) - (ACID).
• Ví dụ: giao tác chuyển khoản A sang B gồm 2 thao tác sau:
– Trừ tiền A.
– Cộng tiền B.
Chuyển khoản được thực hiện dưới dạng giao tác (transaction) nghĩa là hoặc thực
hiện cả 2 việc trừ tiền A và cộng tiền B hoặc nếu có sự cố thì không làm gì cả và
thông báo giao tác thất bại.
• Mục đích: Giải quyết các vấn đề:
o Vấn đề mất dữ liệu đã cập nhật.
o Vấn đề không thể đọc lại.
o Vấn đề dữ liệu không nhất quán.
• Cài transaction trên SQL Server: begin transaction, commit, rollback, save
transaction …
• Ví dụ về mất dữ liệu đã cập nhật:
o Ví dụ 1: Nhà sách còn 500 quyển sách.
– Vào lúc T1 nhân viên A nhận yêu cầu mua 400 quyển từ khách hàng X.
– Cũng vào lúc T1 nhân viên B nhận yêu cầu mua 300 quyển từ khách hàng Y.
– A và B đọc dữ liệu thấy còn 500 quyển nên đều đồng ý bán.
o Ví dụ 2: Nhà sách còn 500 quyển sách.
– Vào lúc T2 nhân viên A sẽ thực hiện cập nhật số sách từ 500 thành 100.
– Vào lúc T3 nhân viên B sẽ thực hiện cập nhật số sách từ 500 thành 200.
− Như vậy thao tác cập nhật của A không có tác dụng hay dữ liệu mà A cập
transaction log.
− Nếu user thực hiện câu lenh Rollback thì hệ thống sẽ tìm phiên bản trước khi
chỉnh sửa và cập nhật lại vào CSDL.
• Ví dụ về đảm bảo tính nhất quán của dữ liệu:
Một nhân viên có mã ‘000002’ được chọn làm ‘Sales Manager’ (position code
= ‘0001’). Ta sẽ cần cập nhật trong bảng Employee và cả trong bảng Position
số lượng người hiện tại nắm giữ vị trí có Position Code = ‘0001’.
UPDATE Employee
SET cCurrentPosition = '0001'
WHERE cEmployeeCode = '000002‘
UPDATE Position
SET iCurrentStrength = iCurrentStrength + 1
WHERE cPositionCode = '0001’
Giải quyết:
BEGIN TRANSACTION trnUpdatePosition
UPDATE Employee
SET cCurrentPosition = '0001'
WHERE cEmployeeCode = '000002'
UPDATE Position
SET iCurrentStrength = iCurrentStrength + 1
WHERE cPositionCode = '0001'
COMMIT TRANSACTION trnUpdatePosition
2) Cho bảng SinhVien (MASV, TenNV, Tuoi, MaKhoa) với MASV là khóa chính. Trong
cơ sở dữ liệu hiện có 2 sinh viên: sinh viên Nguyễn Văn A có mã số SV001, 18 tuổi
và thuộc khoa Toán và sinh viên Nguyễn Văn B có mã số SV002, 22 tuổi và thuộc
khoa Lý. Cho bảng Khoa (MaKhoa, TenKhoa) với MaKhoa là khóa chính. Trong
CSDL hiện có 2 khoa: khoa Toán có mã khoa là MT và khoa Lý có mã khoa là ML.
a) Viết câu lệnh tạo bảng với khóa chính khóa ngoại thích hợp và các câu lệnh
insert dữ liệu vào các bảng trên.
Create table Khoa(
@TenKhoa nchar(30))
AS
INSERT INTO Khoa (@MaKhoa, @TenKhoa)
EXECUTE prc_ThemKhoa ‘MH’, N’Khoa Hóa’
CREATE TRIGGER trgThemSinhVien
ON SinhVien
FOR INSERT
AS
DECLARE @Tuoi int
SELECT @Tuoi = Tuoi
FROM SinhVien
IF @Tuoi < 18
BEGIN
PRINT ‘Tuoi sinh vien phai lon hon 18 !’
ROLLBACK TRANSACTION
END
3) Vẽ cây phân tích <SFW> của câu truy vấn sau và biến đổi sang đại số quan hệ:
Select TenSV, Tuoi
From SinhVien, Khoa
Where MaKhoa in (select MaKhoa from Khoa where TenKhoa like ‘L%’) and Tuoi >
20
<Query>
<SFW>
SELECT <Select list> FROM <From list> WHERE <Condition>
Attribute> , <Attribute> <Relation> , <Relation>
TenSV Tuoi SinhVien Khoa
<Condition> AND <Condition>
<Attribute> > <Attribute> <Attribute> IN <Attribute>
Tuoi 20 MaKhoa <Query>
- Dữ liệu của bảng sắp xếp theo thứ tự của cluster index
o Non Cluster Index:
- Có thể tạo 249 noncluster index cho một bảng dữ liệu.
- Dữ liệu của bảng không sắp theo thứ tự của non-cluster index.
- Thường tạo index cho các cột dữ liệu dùng để join hay trong điều kiện where
hoặc giá trị cột này thường xuyên thay đổi.
DTS (Dịch vụ chuyển dịch dữ liệu)
• DTS được thiết kế ở mức tổng quát hóa với giao diện đồ họa thân thiện. Chúng
ta vừa có thể chuyển dịch dữ liệu từ nơi này đến nơi khác lại vừa có thể lập
trình được trên nó.
* CONNECTION
Thông thường chúng ta sử dụng SQL Server như là dữ liệu nguồn hoặc dữ liệu
đích cho connection.
Tuy nhiên, DTS có thể cho chúng ta di chuyển dữ liệu ở những nguồn và đích
khác nhau không nhất thiết phải là SQL Server, ví dụ như: DB2 sang Oracle.
* TÁC V Ụ (Task)
Là một đơn vị công việc mà bạn muốn DTS thực hiện. Có rất
nhiều dạng tác vụ được xây dựng sẵn trong DTS.
Chúng ta cũng có thể tự tạo ra những task riêng cho mình.
Những task mà DTS cung cấp có thể đáp ứng hầu hết những
công việc chuyển dữ liệu mà chúng ta cần.
o FTP: cho phép tải về hoặc chuyển file lên server bằng giao
thức FTP. Tiện dụng khi làm việc thường xuyên với các
máy chủ ở xa.
o ActiveX Script: cho phép sử dụng các ngôn ngữ kịch bản
như Vbscript hay Jscript…
o Transform Data (chuyển dịch dữ liệu): bao gồm các chức
năng chuyển đổi và lưu trữ dữ liệu. Nó cho phép cả việc
thay đổi khi chuyển dữ liệu.
Ngoài ra còn có các Task như