You are on page 1of 296

• Bài 1: Giới thiệu hệ quản trị cơ sở dữ liệu và mô hình dữ liệu

– ðịnh nghĩa hệ quản trị cơ sở dữ liệu (CSDL).


– Người dùng của hệ quản trị cơ sở dữ liệu.
– Mô tả sự cần thiết của cơ sở dữ liệu.
– Các thành phần trong CSDL.
– Xác ñịnh sự cần thiết của việc lên kế hoạch phát triển CSDL.
– Xác ñịnh các giai ñoạn phát triển cơ sở dữ liệu.
– Xác ñịnh hậu quả của việc phân tích thiết kế CSDL nếu thực
hiện không tốt.
– Mô hình dữ liệu.
– Sơ ñồ ERD.

6/17/2009 Các Hệ Cơ Sở Dữ Liệu 1


• Giới thiệu về hệ quản trị cơ sở dữ liệu

– Cơ sở dữ liệu là tập hợp các bản ghi (record) thông tin. Một
trong những nhiệm vụ quan trọng của hệ thống máy tính là lưu
trữ và xử lý dữ liệu.
– Hệ quản trị cơ sở dữ liệu (Database Management System
DBMS) ñược thiết kế ñể quản lý khối lượng dữ liệu rất lớn.
Mục ñích chính của hệ quản trị CSDL là:
• Cung cấp môi trường và công cụ ñể lưu trữ và truy xuất dữ liệu từ
cơ sở dữ liệu một cách hiệu quả.
• Lưu giữ thông tin về người dùng của hệ quản trị cơ sở dữ liệu và
những tác vụ mà người dùng này có thể tương tác với dữ liệu
ñược lưu trữ.

6/17/2009 Các Hệ Cơ Sở Dữ Liệu 2


• Các loại người dùng trong hệ quản trị CSDL
 Người lập trình ứng dụng (Application
Programmer): là người phát triển ứng dụng ñể
người dùng cuối có thể sử dụng ñể tương tác với
cơ sở dữ liệu.
 Người dùng cuối (End User): Người dùng cuối có
thể tương tác với cơ sở dữ liệu thông qua chương
trình ứng dụng.
 Người quản trị cơ sở dữ liệu (Database
administrator DBA): Người quản trị cơ sở dữ liệu
có nhiệm vụ là thiết kế cơ sở dữ liệu, thu thập
thông tin về dữ liệu cần ñược lưu trữ, bảo trì cơ sở
dữ liệu và bảo mật cho hệ thống.
6/17/2009 Các Hệ Cơ Sở Dữ Liệu 3
• Lý do dùng hệ quản trị CSDL ñể lưu trữ
• ðầu tiên ñể lưu trữ dữ liệu người ta dùng hệ
thống tập tin ñể lưu trữ. Cách lưu trữ này thể
hiện một số nhược ñiểm sau:
– Dữ liệu lưu trữ bị dư thừa: Cùng một dữ
liệu lưu ở nhiều hơn 1 nơi không cần
thiết.
– Dữ liệu không nhất quán: Do dữ liệu
ñược lưu ở nhiều nơi nên khi cập nhật
nếu không cập nhật toàn bộ sẽ dẫn ñến
tình trạng không nhất quán của dữ liệu.

6/17/2009 Các Hệ Cơ Sở Dữ Liệu 4


• Ví dụ về lưu trữ theo hệ thống file

6/17/2009 Các Hệ Cơ Sở Dữ Liệu 5


• Lý do dùng hệ quản trị CSDL lưu trữ
(tiếp theo)
Dùng hệ quản trị CSDL ñể lưu trữ có các ưu
ñiểm như sau:
Giảm thiểu sự dư thừa dữ liệu
Tránh ñược sự không ñồng nhất về dữ liệu
Dữ liệu ñược chia sẻ.
Dữ liệu sẽ ñược bảo mật an toàn hơn.
Tính nhất quán của dữ liệu sẽ ñược ñảm
bảo.

6/17/2009 Các Hệ Cơ Sở Dữ Liệu 6


• Các thành phần chức năng của hệ
quản trị CSDL
• Database manager: ñây là thành phần chính của
hệ quản trị cơ sở dữ liệu. Thành phần này có
nhiệm vụ ñáp ứng các lệnh truy vấn dữ liệu từ
người dùng và ñảm bảo tính nhất quán của cơ sở
dữ liệu.
 File Manager: Thành phần này sẽ chịu trách nhiệm
phục vụ tất cả các yêu cầu về dữ liệu. Nó sẽ liên
hệ với disk manager ñể lấy các khối dữ liệu từ ñĩa.
 Disk Manager: ñây là phần thực hiện việc quản lý
dữ liệu ở cấp ñộ vật lý.

6/17/2009 Các Hệ Cơ Sở Dữ Liệu 7


• Ví dụ về dùng hệ quản trị CSDL ñể lưu
trữ

6/17/2009 Các Hệ Cơ Sở Dữ Liệu 8


• Ngôn ngữ truy vấn dữ liệu
• ðể tương tác với dữ liệu ñược lưu trữ bên
trong cơ sở dữ liệu người dùng có thể dùng
ngôn ngữ truy vấn dữ liệu (Query language).
Ngôn ngữ truy vấn dữ liệu có 3 dạng sau:
– Ngôn ngữ ñịnh nghĩa dữ liệu ( Data
Definition Language DDL)
– Ngôn ngữ xử lý dữ liệu (Data
Manipulation Language DML)
– Ngôn ngữ ñiều khiển dữ liệu (Data
Control Language DCL)
6/17/2009 Các Hệ Cơ Sở Dữ Liệu 9
• Lên kế hoạch phát triển cơ sở dữ liệu
 Lên kế hoạch phát triển cho hệ quản trị cơ sở dữ
liệu là quá trình chiến lược ñể tìm xem những
thông tin nào mà tổ chức sẽ cần thiết cho thời gian
tới.
 Lợi ích của việc lên kế hoạch phát triển database:
• Cho thấy rõ ñược tình trạng hiện tại của thông
tin ñược lưu trong tổ chức.
• Tìm và ñiều chỉnh lại các yêu cầu về tài nguyên
cho tổ chức.
• Giúp cho phát triển ñược hệ quản trị CSDL ñáp
ứng ñược các yêu cầu của tổ chức.
• Giúp cho việc lên kế hoạch hành ñộng ñể ñạt
ñược các mục tiêu của tổ chức.
6/17/2009 Các Hệ Cơ Sở Dữ Liệu 10
• Quy trình phát triển cơ sở dữ liệu bao gồm 6
giai ñoạn:
Lên kế hoạch ban ñầu: Trong giai ñoạn này,
công ty sẽ thu thập thông tin về các ứng dụng
ñang dùng.
Nghiên cứu về tính khả thi: Trong giai ñoạn
này sẽ nghiên cứu về tính khả thi của kỹ
thuật, kinh tế và cách vận hành CSDL.
ðịnh nghĩa các yêu cầu về CSDL: Giai ñoạn
này xác ñịnh tầm vực của CSDL, các yêu cầu
về thông tin ñể quản lý, các yêu cầu về phần
cứng, các yêu cầu về phần mềm.
6/17/2009 Các Hệ Cơ Sở Dữ Liệu 11
• Quy trình phát triển CSDL (tiếp theo)
Thiết kế ở mức luận lý: Trong giai ñoạn này
sẽ thiết kế lược ñồ CSDL ở mức luận lý.
Hiện thực: Trong giai ñoạn này ta sẽ chọ hệ
quản trị CSDL và chuyển thiết kế từ mức luận
lý sang hiện thực trên hệ quản trị CSDL vừa
chọn.
ðánh giá và bảo trì cơ sở dữ liệu: sau khi
thiết kế và hiện thực ta ñưa CSDL và dùng,
ñánh giá lại hiệu quả của CSDL và ñồng thời
phải bảo trì nâng cấp CSDL ñã hiện thực.
6/17/2009 Các Hệ Cơ Sở Dữ Liệu 12
• Hậu quả của việc phân tích, thiết kế và
hiện thực CSDL không tốt
• Nếu ta phân tích, thiết kế và hiện thực CSDL
không tốt, cơ sở dữ liệu sẽ không hoạt ñộng
giống như ta mong ñợi. Một số nguyên nhân
thường dẫn ñến CSDL hoạt ñộng sai như:
– Người dùng trực tiếp của CSDL không ñược xác
ñịnh ñầy ñủ khi phân tích và thiết kế.
– Dữ liệu ñược thu thập quá ít.
– Cơ sở dữ liệu không dễ dàng thay ñổi ñể ñáp ứng
với sự thay ñổi về nghiệp vụ của tổ chức…

6/17/2009 Các Hệ Cơ Sở Dữ Liệu 13


• Mô hình dữ liệu
Mô hình dữ liệu mô tả cách tổ chức dữ liệu
bên trong CSDL.
Mô hình dữ liệu còn mô tả mối quan hệ dữ
liệu và các ràng buộc ñược ñịnh nghĩa trên
dữ liệu ñó.
Mô hình dữ liệu ñược dùng rộng rãi nhất là
mô hình thực thể mối liên kết (Entity
Relationship Model)

6/17/2009 Các Hệ Cơ Sở Dữ Liệu 14


• Mô hình thực thể mối liên kết

 Mô hình thực thể mối liên kết dựa trên sự mô tả các


ñối tượng trong thế giới thực gọi là các thực thể và
các mối liên kết giữa chúng.
 Sơ ñồ dùng ñể hiện thực mô hình thực thể mối liên
kết gọi là sơ ñồ thực thể mối liên kết ERD (Entity
Relationship Diagram).
 Các thành phần của sơ ñồ ERD:
• Thực thể
• Mối quan hệ
• Thuộc tính

6/17/2009 Các Hệ Cơ Sở Dữ Liệu 15


• Ví dụ về sơ ñồ ERD

6/17/2009 Các Hệ Cơ Sở Dữ Liệu 16


• Thực thể (Entity)
 Thực thể là các ñối tượng, nơi chốn, con người…
mà cần lưu giữ thông tin.
 Thực thể ñược ñặt tên và ñược vẽ trong hình chữ
nhật.

 Thực thể có 2 loại là thực thể ñộc lập và thực thể


phụ thuộc.
 Thực thể phụ thuộc còn ñược gọi là thực thể yếu là
thực thể mà sự tồn tại của nó phụ thuộc vào một
thực thể khác.
 Thực thể yếu ñược mô tả bằng hình chữ nhật có
các cạnh bên ngoài là cạnh kép.

6/17/2009 Các Hệ Cơ Sở Dữ Liệu 17


• Ví dụ về thực thể

6/17/2009 Các Hệ Cơ Sở Dữ Liệu 18


Ví dụ về thực thể (t.t)

6/17/2009 Các Hệ Cơ Sở Dữ Liệu 19


• Mối quan hệ

 Mối quan hệ thể hiện sự cộng tác giữa 2 thực thể.


 Mối quan hệ ñược thể hiện bằng hình thoi chính
giữa có tên quan hệ ñó.
 Mối quan hệ có thể ñược tồn tại trên 2 thực thể
hoặc trên cùng 1 thực thể. Giữa hai thực thể có thể
có nhiều mối quan hệ.
 Mối quan hệ có 3 dạng
• Quan hệ 1 – 1
• Quan hệ 1 – n
• Quan hệ n - n

6/17/2009 Các Hệ Cơ Sở Dữ Liệu 20


Ví dụ về các mối quan hệ:

6/17/2009 Các Hệ Cơ Sở Dữ Liệu 21


Ví dụ về các mối quan hệ:

6/17/2009 Các Hệ Cơ Sở Dữ Liệu 22


Ví dụ về các mối quan hệ:

6/17/2009 Các Hệ Cơ Sở Dữ Liệu 23


Ví dụ về các mối quan hệ:

6/17/2009 Các Hệ Cơ Sở Dữ Liệu 24


Ví dụ về các mối quan hệ:

6/17/2009 Các Hệ Cơ Sở Dữ Liệu 25


Ví dụ về các mối quan hệ:

6/17/2009 Các Hệ Cơ Sở Dữ Liệu 26


• Thuộc tính

Thuộc tính thể hiện ñặt ñiểm của thực thể.

Thuộc tính ñược thể hiện bằng hình elipse,


với tên thuộc tính ñược vẽ bên trong hình.
Thuộc tính khóa ñược gạch dưới.

Các quan hệ cũng có thể có các thuộc tính.

6/17/2009 Các Hệ Cơ Sở Dữ Liệu 27


• Ví dụ về thuộc tính:

6/17/2009 Các Hệ Cơ Sở Dữ Liệu 28


• Tóm tắt

• Trong bài này bạn ñã ñược học:


– ðịnh nghĩa hệ quản trị cơ sở dữ liệu (CSDL).
– Người dùng của hệ quản trị cơ sở dữ liệu.
– Mô tả sự cần thiết của cơ sở dữ liệu.
– Các thành phần trong CSDL.
– Xác ñịnh sự cần thiết của việc lên kế hoạch
phát triển CSDL.
– Xác ñịnh các giai ñoạn phát triển cơ sở dữ liệu.
– Xác ñịnh hậu quả của việc phân tích thiết kế
CSDL nếu thực hiện không tốt.
– Mô hình dữ liệu.
– Sơ ñồ ERD: thực thể, thuộc tính, mối kết hợp
6/17/2009 Các Hệ Cơ Sở Dữ Liệu 29
Quản Lý Truy Xuất ðồng Thời

Creater: Trần Sơn Hải

03/07/08 Hệ Quản Trị Cơ Sở Dữ Liệu 1 of 27


Mục Tiêu
• Khái niệm giao tác (transaction).
• Các vấn ñề xảy ra khi nhiều người cùng
khai thác Cơ Sở Dữ Liệu.
• Các giải pháp cho các vấn ñề trên.
• Sử dụng giao tác trong SQL Server.

03/07/08 Hệ Quản Trị Cơ Sở Dữ Liệu 2 of 27


Giao Tác
• 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ả.

03/07/08 Hệ Quản Trị Cơ Sở Dữ Liệu 3 of 27


Giao Tác
• Ví dụ: giao tác chuyển khoản từ A  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.
03/07/08 Hệ Quản Trị Cơ Sở Dữ Liệu 4 of 27
Các vấn ñề trong truy xuất ñồng
thời
• Vấn ñề mất dữ liệu ñã cập nhật
• Vấn ñề không thể ñọc lại
• Vấn ñề dữ liệu không nhất quán

03/07/08 Hệ Quản Trị Cơ Sở Dữ Liệu 5 of 27


Các vấn ñề trong truy xuất ñồng
thời
• Vấn ñề mất dữ liệu ñã cập nhật
• Ví dụ: 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 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

03/07/08 Hệ Quản Trị Cơ Sở Dữ Liệu 6 of 27


Các vấn ñề trong truy xuất ñồng
thời
• Vấn ñề mất dữ liệu ñã cập nhật
• Ví dụ: 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 nhật sẽ bị
mất vì B cập nhật sau. (last in wind)

03/07/08 Hệ Quản Trị Cơ Sở Dữ Liệu 7 of 27


Các vấn ñề trong truy xuất ñồng
thời
• Vấn ñề không thể ñọc lại
• Ví dụ: Giả sử nhà sách còn 200 quyển sách.
– Vào lúc T1 nhân viên A bán cho khách 150 quyển, sẽ
thực hiện cập nhật số sách từ 200 thành 50. (giao
dịch chưa hoàn thành chẳng hạn vì việc giao nhận
tiền chưa xong)
– Sau ñó lúc T2, B nhận ñươc yêu cầu mua 100 quyển
sách, nếu B ñược ñọc dữ liệu chưa hoàn tất thì B sẽ
từ chối bán 100 quyển sách này.

03/07/08 Hệ Quản Trị Cơ Sở Dữ Liệu 8 of 27


Các vấn ñề trong truy xuất ñồng
thời
• Vấn ñề không thể ñọc lại
• Ví dụ: Giả sử nhà sách còn 200 quyển sách.
– Nếu vào lúc T3 vì lý do nào ñó chẳng hạn không ñủ
tiền khách hàng của A không mua 150 quyển sách
nửa. Giao tác bán hàng của A sẽ không thể thực hiện
nên quay về trạng thái số sách còn là 200.
– Nhưng B ñã từ chối khách hàng.
– Nếu B không ñọc ñược dữ liệu từ lúc T1 ñến T3 thì sẽ
như thế nào?

03/07/08 Hệ Quản Trị Cơ Sở Dữ Liệu 9 of 27


Các vấn ñề trong truy xuất ñồng
thời
• Vấn ñề dữ liệu không nhất quán
• Ví dụ: Giả sử nhân viên C cần tổng hợp 5
dòng dữ liệu 1 2 3 4 5 ñể làm một bản báo
cáo.
– T1:C ñọc và ñưa các dòng 1 2 3 4 vào báo cáo
– T2 :D lại xóa dòng 1 thay bằng dòng 6.
– T3:C ñọc tiếp 5 6 ñưa vào báo cáo
– Vậy báo cáo này xử lý cả dữ liệu cũ và mới  sai

03/07/08 Hệ Quản Trị Cơ Sở Dữ Liệu 10 of 27


Kỹ Thuật Khóa
• Share Lock: khi một giao tác ñang ñọc dữ
liệu X thì X sẽ bị share lock. Nghĩa là giao
tác khác trong cùng thời ñiểm chỉ có
quyền ñọc X và không có quyền sửa X.
• Exclusive Lock: khi một giao tác ñang cập
nhật dữ liệu X thì X sẽ bị exclusive lock.
Nghĩa là giao tác khác trong cùng thời
ñiểm không thể ñọc hay sửa X.

03/07/08 Hệ Quản Trị Cơ Sở Dữ Liệu 11 of 27


Kỹ Thuật Khóa
• Kỹ thuật khóa 2 giai ñoạn
• Kỹ thuật khóa trên dữ liệu phân cấp
• Khóa chết (dead lock):là tình trạng 2 hay
nhiều giao tác cùng trong trạng thái chờ
giao tác giải phóng tài nguyên cần thiết ñể
thực hoàn thành giao tác.

03/07/08 Hệ Quản Trị Cơ Sở Dữ Liệu 12 of 27


Kỹ Thuật Khóa
• Khóa chết (dead lock)

TRANSACTION A TRANSACTION B

DISTRIBUTOR PRODUCTS

03/07/08 Hệ Quản Trị Cơ Sở Dữ Liệu 13 of 27


Lịch thao tác
• Lịch tuần tự
• Lịch khả tuần tự

03/07/08 Hệ Quản Trị Cơ Sở Dữ Liệu 14 of 27


Nhãn thời gian

03/07/08 Hệ Quản Trị Cơ Sở Dữ Liệu 15 of 27


Transaction in SQL Server
• Transaction Recovery: 2 thao tác
– COMMIT: hoàn tất giao tác thành công
– ROLLBACK: giao tác thất bại quay về trạng
thái trước khi thực hiện giao tác
• Transaction Log: undo the changes
– Khi user muốn một chỉnh sửa dữ liệu, trong
transaction log lưu 2 phiên bản của dòng dữ
liệu ñó: trước và sau khi chỉnh sửa.

03/07/08 Hệ Quản Trị Cơ Sở Dữ Liệu 16 of 27


Transaction in SQL Server
• Nếu user thực hiện câu lệnh Commit thì
end-of-transaction ñược ghi xuống
transaction log.
• Nếu user thực hiện câu lệnh 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.
• ðiều gì xảy ra khi SQL Server khởi ñộng
và trong transaction log có một giao tác
chưa Commit và cũng không Rollback?
03/07/08 Hệ Quản Trị Cơ Sở Dữ Liệu 17 of 27
Cài ñặt Transaction trên SQL Server
ðảm bảo tính nhất quán của dữ liệu
Vn ñ 1:
Mt nhân viên có mã ‘000002’ ñc chn làm
‘Sales Manager’ (position code=‘0001’). Ta
s c n c
p trong b ng Employee và c trong b ng
Position s lng ngi hin ti nm gi v trí có
Position Code=‘0001’.
• The update statement to do the above is as follows:
UPDATE Employee
SET cCurrentPosition = '0001'
WHERE cEmployeeCode= '000002‘
UPDATE Position
SET iCurrentStrength=iCurrentStrength + 1
WHERE cPositionCode='0001’

03/07/08 Hệ Quản Trị Cơ Sở Dữ Liệu 18 of 27


Cài ñặt Transaction trên SQL
Server
Gi i quyt vn ñ 1:
BEGIN TRANSACTION trnUpdatePosition
UPDATE Employee
SET cCurrentPosition = '0001'
WHERE cEmployeeCode= '000002'

UPDATE Position
SET iCurrentStrength = iCurrentStrength + 1
WHERE cPositionCode = '0001'
COMMIT TRANSACTION trnUpdatePosition

03/07/08 Hệ Quản Trị Cơ Sở Dữ Liệu 19 of 27


Cài ñặt Transaction trên SQL Server
Vn ñ 2:
Ten candidates have been recruited for the position 0015. To
reflect this change, the siNoOfVacancy attribute of the
Requisition table is to be decreased by 10 for cRequisitionCode
000004. Also the iCurrentStrength attribute of the Position
table is to be increased by 10 for cPositionCode 0015 using the
following commands:

UPDATE Requisition
set siNoOfVacancy=siNoOfVacancy - 10
WHERE cRequisitionCode='000004‘

UPDATE Position
set iCurrentStrength=iCurrentStrength + 10
WHERE cPositionCode='0015’

Both these statements should be atomic and if the iCurrentStrength attribute


becomes more than the iBudgetedStrength attribute, then the changes made by the
UPDATE statements must be reverted.

03/07/08 Hệ Quản Trị Cơ Sở Dữ Liệu 20 of 27


Cài ñặt Transaction trên SQL
Server
Gi i quyt vn ñ 1:
In the Query Analyzer window, type:
BEGIN TRANSACTION
UPDATE Requisition
SET siNoOfVacancy=siNoOfVacancy - 10
WHERE cRequisitionCode='000004'

UPDATE Position
SET iCurrentStrength=iCurrentStrength + 10
WHERE cPositionCode='0015'

03/07/08 Hệ Quản Trị Cơ Sở Dữ Liệu 21 of 27


Cài ñặt Transaction trên SQL
Server
IF (SELECT iBudgetedStrength-iCurrentStrength FROM Position
WHERE cPositionCode = '0015') <0
BEGIN
PRINT 'Current strength cannot be more than
budgeted strength. Transaction has not been
committed.'
ROLLBACK TRANSACTION
END
ELSE
BEGIN
PRINT 'The transaction has been committed.'
COMMIT TRANSACTION
END
Press F5 to execute the transaction

03/07/08 Hệ Quản Trị Cơ Sở Dữ Liệu 22 of 27


Cài ñặt Transaction trên SQL
Server
Identify how to break the transaction
into parts
• SAVE TRANSACTION
• It sets a save-point within a transaction. A save-point
divides a transaction into logical units so that the
transaction can return to the save point, if a part of the
transaction is conditionally canceled.
• Syntax
SAVE TRAN[SACTION] {savepoint_name |
@savepoint_variable}
• Result
• The transaction can be broken into logical units using SAVE
TRANSACTION statement

03/07/08 Hệ Quản Trị Cơ Sở Dữ Liệu 23 of 27


Cài ñặt Transaction trên SQL
Server
Execute the transaction
• Action:
• In the Query Analyzer window, type:
BEGIN TRANSACTION
UPDATE Employee
SET cCurrentPosition = '0015'
WHERE cEmployeeCode = '000002'
UPDATE Position
SET iCurrentStrength = iCurrentStrength + 1
WHERE cPositionCode = '0015'

03/07/08 Hệ Quản Trị Cơ Sở Dữ Liệu 24 of 27


Cài ñặt Transaction trên SQL
Server
Execute the transaction (Contd.)
SAVE TRANSACTION trnTransaction1

UPDATE Requisition
SET siNoOfVacancy=siNoOfVacancy - 10
WHERE cRequisitionCode='000004'
UPDATE Position
SET iCurrentStrength=iCurrentStrength+10
WHERE cPositionCode='0015‘

03/07/08 Hệ Quản Trị Cơ Sở Dữ Liệu 25 of 27


Cài ñặt Transaction trên SQL
Server
Execute the transaction (Contd.)
IF (SELECT iBudgetedStrength-iCurrentStrength
FROM Position WHERE cPositionCode = '0015')
<0
BEGIN
PRINT 'Transaction 1 has been committed but
transaction 2 has not been committed.'
ROLLBACK TRANSACTION trnTransaction1
END
ELSE
BEGIN
PRINT 'Both the transactions have been committed.'
COMMIT TRANSACTION
END
03/07/08 Hệ Quản Trị Cơ Sở Dữ Liệu 26 of 27
Tóm lại
• Giao tác (Transaction) là một loạt các thao tác
cần thực hiện dưới dạng một ñơn vị duy nhất.
• Truy xuất ñồng thời  vấn ñề
– Mất dữ liệu ñã cập nhật
– Không thể ñọc lại
– Dữ liệu không nhất quán
• Cài transaction trên SQL Server: begin
transaction, commit, rollback, save transaction…

03/07/08 Hệ Quản Trị Cơ Sở Dữ Liệu 27 of 27


An Toàn và Khôi Phục Dữ Liệu
(Backup and Restore)
Creater: Trần Sơn Hải

1 of 27
Mục Tiêu
• Khái niệm an toàn dữ liệu.
• Các loại sự cố.
• Sao lưu và phục hồi dữ liệu.
• Cài ñặt trên SQL Server.

2 of 27
An Toàn Dữ Liệu
• Các cơ chế an toàn dữ liệu:
– Mã hóa dữ liệu
– Phân quyền truy cập

3 of 27
Phân quyền truy cập
• Tạo bảng ảo View
• Dùng lệnh grant và revoke
– Grant Update On Product To Smith
• Cấp quyền sửa trên bảng Product cho user Smith
– Revoke Update on Product To Smith
• Bỏ quyền sửa trên bảng Product của user Smith
• Tạo user truy cập CSDL với quyền giới
hạn
– Demo Flash SQLSecurity Demo.rar

4 of 27
Bảng Ảo View
• View là bảng ảo giúp giới hạn truy cập một số cột
dòng trên các bảng dữ liệu.
• Views ñảm bảo tính bảo mật bằng các giới hạn truy cập
sau:
• Trích chọn một số dòng của bảng
• Trích chọn một số cột của bảng
• Trích chọn một số dòng và cột của bảng
• Kết các dòng từ nhiều bảng
• Cú Pháp tạo View:
• Create View ViewName
• As
• Select Col1, Col2 From Table1 Where Col = …
5 of 27
Bảng Ảo View

• Thuận lợi của View:


• Cung cấp dữ liệu cần thiết cho người
dùng
• Che dấu sự phức tạp của dữ liệu
• Tổ chức dữ liệu từ nhiều tài nguyên
không ñồng nhất
• Giảm kích cỡ của ñối tượng

6 of 27
Bảng Ảo View
Problem statement
Bạn thường xuyên phải thực hiện các câu truy vấn dạng như
sau:

SELECT vFirstName, vSkill


FROM Employee JOIN PositionSkill ON
Employee.cCurrentPosition = PositionSkill.cPositionCode
JOIN Skill ON
PositionSkill.cSkillCode = Skill.cSkillCode

SELECT vFirstName, vLastName,vSkill


FROM Employee JOIN PositionSkill ON
Employee.cCurrentPosition =PositionSkill.cPositionCode
JOIN Skill ON PositionSkill.cSkillCode = Skill.cSkillCode

7 of 27
Bảng Ảo View
SELECT vFirstName, vLastName, vSkill
FROM Employee JOIN PositionSkill
ON Employee.cCurrentPosition =PositionSkill.cPositionCode
JOIN Skill ON PositionSkill.cSkillCode =Skill.cSkillCode
AND vFirstName = 'Angela‘

SELECT vFirstName, vLastName, vQualification,


vSkill
FROM Employee JOIN PositionSkill
ON Employee.cCurrentPosition = PositionSkill.cPositionCode
JOIN Skill
ON PositionSkill.cSkillCode = Skill.cSkillCode

8 of 27
Bảng Ảo View
Giải pháp
• The tables from where the view derives
its data are Employee, positionSkill, and
Skill
• The columns that are to be included in the
view are vFirstName, vLastName, and
vQualification from the Employee table
and vSkill from the Skill table

9 of 27
Bảng Ảo View
Triển khai giải pháp trên T-SQL
CREATE VIEW vwEmpSkill
AS
SELECT vFirstName, vLastName, vQualification,
vSkill
FROM Employee
JOIN PositionSkill
ON Employee.cCurrentPosition =
PositionSkill.cPositionCode
JOIN Skill
ON PositionSkill.cSkillCode =
Skill.cSkillCode

10 of 27
Bảng Ảo View
Query on View:
• SELECT vFirstName, vSkill
FROM vwEmpSkill

• SELECT vFirstName, vLastName, vSkill


FROM vwEmpSkill

11 of 27
Bảng Ảo View
Create the view
• A view can be created using the CREATE VIEW
statement
• Syntax
CREATE VIEW view_name
[(column_name [, column_name]...)]
[WITH ENCRYPTION]
AS select_statement [WITH CHECK OPTION]

12 of 27
Bảng Ảo View
Altering, Dropping Views
• Altering Views
• You can modify a view by using the ALTER VIEW statement
• Syntax
ALTER VIEW view_name [(column_name)]
[WITH ENCRYPTION]
AS select_statement
[WITH CHECK OPTION]

13 of 27
Bảng Ảo View
Altering, Dropping Views (Contd.)
• Dropping Views
• You can drop a view from a database
by using the DROP VIEW statement
• Syntax
DROP VIEW view_name

14 of 27
Một số loại sự cố
• Sự cố do thực hiện thao tác sai: thêm xóa
sửa dữ liệu không ñúng
– Trên CSDL thường không thể nhấn Crtl + Z ñể undo lại một thao tác
như insert, delete, update hay drop….

• Sự cố do hệ thống phần mềm


• Sự cố do lỗi thiết bị

15 of 27
Khôi Phục Dữ Liệu
• Khôi phục sau sự cố từ một giao tác
– Dựa vào file log
• Khôi phục sau sự cố hệ thống
– Dựa vào file backup
• Khôi phục sau sự cố từ thiết bị lưu trữ
– ???

16 of 27
Cài ñặt trên SQL Server
• Sao lưu (backup)
• Khôi phục (Restore)

17 of 27
Saolưu (Backup)
• Full Database Backups : Copy tất cả data files trong
một database . Tất cả những user data và database
objects như system tables, indexes, user-defined tables
ñều ñược backup.
• Differential Database Backups : Copy những thay ñổi
trong tất cả data files kể từ lần full backup gần nhất.
• Incremental Database Backups: Copy những thay ñổi
trong tất cả data files kể từ lần full backup hay
Incremental backup gần nhất.

• File or File Group Backups : Copy một data file ñơn hay một file group.
• Differential File or File Group Backups : Tương tự như differential
database backup nhưng chỉ copy những thay ñổi trong data file ñơn hay
một file group.
• Transaction Log Backups : Ghi nhận một cách thứ tự tất cả các
transactions chứa trong transaction log file kể từ lần transaction log backup
gần nhất. Loại backup này cho phép ta phục hồi dữ liệu trở ngược lại vào
một thời ñiểm nào ñó trong quá khứ mà vẫn ñảm bảo tính ñồng nhất
(consistent). 18 of 27
Saolưu (Backup)

Trong ví dụ này ta schedule một Full Database Backup vào


ngày Chủ Nhật và Differential Backup vào các ngày thứ Ba và
Thứ Năm. Transaction Log Backup ñược schedule hằng ngày.

19 of 27
Thuật ngữ về Backup
Thuật
Giải Thích
Ngữ
Quá trình copy toàn bộ hay một phần của database, transaction log, file
hay file group hình thành một backup set. Backup set ñược chứa trên
Backup
backup media (tape or disk) bằng cách sử dụng một backup device (tape
drive name hay physical filename)
Backup Một file vật lý (như C:\SQLBackups\Full.bak) hay tape drive cụ thể (như
Device \\.\Tape0) dùng ñể record một backup vào một backup media.
Backup
File chứa một backup set
File
Disk hay tape ñược sử dụng ñể chứa một backup set. Backup media có
Backup
thể chứa nhiều backup sets (ví dụ như từ nhiều SQL Server 2000
Media
backups và từ nhiều Windows 2000 backups).
Backup
Một bộ backup từ một lần backup ñơn ñược chứa trên backup media.
Set

20 of 27
Backup
• Chúng ta có thể tạo một backup device cố ñịnh
(permanent) hay tạo ra một backup file mới cho mỗi lần
backup. Thông thường chúng ta sẽ tạo một backup
device cố ñịnh ñể có thể dùng ñi dùng lại ñặc biệt cho
việc tự ñộng hóa công việc backup. Ðể tạo một backup
device dùng Enterprise Manager bạn chọn
Management->Backup rồi Right-click->New Backup
Device.
• Ngoài ra bạn có thể dùng sp_addumpdevice system
stored procedure như ví dụ sau:
– USE Master
– Sp_addumpdevice 'disk' , 'FullBackupDevice' ,
'E:\SQLBackups\Full.bak'

21 of 27
Backup
• Ðể backup database bạn có thể dùng Backup Wizard hoặc click lên trên
database muốn backup sau ñó Right-click->All Tasks->Backup Database

22 of 27
Phục Hồi (Restore)
• Full Recovery Model : Ðây là model cho phép phục hồi dữ liệu với ít rủi ro
nhất. Nếu một database ở trong mode này thì tất cả các hoạt ñộng không
chỉ insert, update, delete mà kể cả insert bằng Bulk Insert, hay bcp ñều
ñược log vào transaction log file. Khi có sự cố thì ta có thể phục hồi lại dữ
liệu ngược trở lại tới một thời ñiểm trong quá khứ. Khi data file bị hư nếu ta
có thể backup ñược transaction log file thì ta có thể phục hồi database ñến
thời ñiểm transaction gần nhất ñược commited.
• Bulk-Logged Recovery Model : Ở mode này các hoạt ñộng mang tính
hàng loạt như Bulk Insert, bcp, Create Index, WriteText, UpdateText chỉ
ñược log minimum vào transaction log file ñủ ñể cho biết là các hoạt ñộng
này có diễn ra mà không log toàn bộ chi tiết như trong Full Recovery Mode.
Các hoạt ñộng khác như Insert, Update, Delete vẫn ñược log ñầy ñủ ñể
dùng cho việc phục hồi sau này.
• Simple Recovery Model : Ở mode này thì Transaction Log File ñược
truncate thường xuyên và không cần backup. Với mode này bạn chỉ có thể
phục hồi tới thời ñiểm backup gần nhất mà không thể phục hồi tới một thời
ñiểm trong quá khứ.

23 of 27
Phục Hồi (Restore)
• Trước khi restore database ta phải xác ñịnh ñược thứ tự file cần restore.
Các thông tin này ñược SQL Server chứa trong msdb database và sẽ cho
ta biết backup device nào, ai backup vào thời ñiểm nào. Sau ñó ta tiến hành
restore. Ðể restore bạn Right-click->All Tasks->Restore database

24 of 27
Phục Hồi (Restore)
• Nếu bạn restore từ một instance khác của SQL Server hay từ một server khác bạn có chọn From
device option và chọn backup device (file backup) tương ứng .
• Lưu ý nếu bạn muốn overwrite database có sẵn với data ñược backup bạn có thể chọn option
Force restore over existing database như hình vẽ sau:

25 of 27
Tóm lại
• An toàn dữ liệu
• Các loại sự cố thường xảy ra
• Sao lưu và phục hồi dữ liệu trên SQL
Server

26 of 27
Câu hỏi
• Phân biệt: thông tin (information), dữ liệu (data) và
tri thức (knowlegde)
• Transaction là gì?
• Nếu không sao lưu dữ liệu thường xuyên thì gặp phải
vấn ñề gì?
• Một số database object trong SQL Server?
Table, View, Store, Trigger, Index, User, (Cursor)
• Một số action object trong SQL Server?
Backup, Restore, Transaction, DTS, BCP

27 of 27
Kiến Trúc của Hệ Quản Trị Cơ
Sở Dữ Liệu
Kiến Trúc của Hệ CSDL
• External
• Conceptual
• Internal
Ngôn ngữ truy vấn
• Ngôn ngữ truy vấn là sự kết hợp của 3
ngôn ngữ thành phần
– Ngôn ngữ ñịnh nghĩa dữ liệu (Data Definition
Language – DDL)
– Ngôn ngữ thao tác dữ liệu (Data Manipulation
Language – DML)
– Ngôn ngữ ñiều khiển (Data Control Language
– DCL)
Câu Hỏi
• Liệt kê các câu lệnh trong SQL thuộc về
– DDL
– DML
– DCL
Chức năng của Hệ QTCSDL
• Quản Lý Dữ Liệu
• Quản Lý File
• Quản Lý ðĩa
Ứng dụng của Hệ QTCSDL
• Hàng không
• Ngân hàng
• Sản xuất
• Quản lý ñơn ñặt hàng
• Quản lý bệnh viện
• Thư viện
• Khách sạn
Một số Hệ QTCSDL
• Sysbase
• Oracle
• Microsoft SQL Server
• Ingress
• DB2
Bài tập tình huống.
• Công ty SMX sử dụng phần mềm kế toán
EasyAccount của công ty NVS trên nền hệ quản trị
cơ sở dữ liệu SQL Server 2000 ñể quản lý sổ sách thu
chi. Nhân viên kế toán sử dụng phần mềm này ñể
nhập số liệu kế toán và in ấn các báo cáo ñưa cho
giám ñốc xem. Nhân viên IT của SMX có nhiệm vụ
quản lý sao lưu, bảo mật CSDL này trên SQL Server
2000. Lập trình viên của NVS thì dùng DOT.NET ñể
viết ra chương trình EasyAccount.
• Cho biết Kế Toán, Giám ðốc, IT của SMX và lập
trình viên của NVS là các loại user nào của CSDL kế
toán trên?
Mô hình thực thể
• Thực thể (Entity)  Bảng (Table)
• Thuộc tính (attribute)  Cột (column)
• Record  Dòng (row)
Mô hình thực thể
• Thực thể (Entity)  Bảng (Table)
– ðược biểu diễn bởi hình gì?
– Hình chữ nhật
• Thuộc tính (attribute) Cột (column)
– ðược biểu diễn bởi hình gì?
– Hình elip hay chấm ñen
• Record  Dòng (row)
• Mối kết hợp (1-1, 1-n, n-n)  Relationship
– ðược biểu diễn bởi hình gì?
– Hình thoi hay elip
Bài tập tình huống
Kết quả khảo sát hiện trạng hệ thống quản lý nhân sự tiền lương tại một
doanh nghiệp thu thập ñược các thông tin sau:
• Mỗi nhân viên có một mã nhân viên duy nhất, và có họ tên,
ngày tháng năm sinh và ñược lãnh lương theo hệ bậc lương
của mình. ðồng thời một nhân viên thì chỉ thuộc biên chế của
một và chỉ một phòng ban. Ví dụ: Nhân viên tên A có mã số
NV1 thuộc biên chế phòng Tổng Hợp (với mã phòng TH) sinh
năm 1986 lãnh lương chuyên viên chính.
• Thông tin cần quản lý về phòng ban bao gồm: tên phòng ban,
mã phòng ban và số lương nhân viên và người trưởng
phòng.Ví dụ: phòng Tổng Hợp có mã TH, số lượng nhân viên
là 5 có trưởng phòng là Nhân Viên A.
• Mức lương gồm tên, số tiền và mô tả yêu câu công việc. Ví
dụ: Mức lương chuyên viên chính là 2,5 triệu VNð, cần tối
thiểu 5 năm kinh nghiệm.
Vẽ sơ ñồ CSDL quản lý Nhân Sự Tiền Lương nói trên theo mô hình
thực thể
• 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 lại ñể 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ích 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).
MaNV TenNv TuoiNV NhanVien

M1 NVA 40
M2 NVB 45 ThanNhan

M3 NVC 20 MaTN TenTN MaNV QuanHe

TN1 NVAA M1 con


Viết câu lệnh thực hiện việc xóa
nhân viên NVA và các thân nhân
của người này dưới dạng một TN2 NVAB M1 Con
giao tác.
Viết câu lệnh tạo bảng ảo chứa TN3 NVBB M2 vo
thông tin MaNV, TenNV có thân
nhân.
Backup Quiz
(Matching)
Full backup: – Copies all the files and clears the data
archive to mark them as backed up.
– Makes a backup of only those files that
Differential
backup: have been changed or are new since
the last incremental or full backup. You
can combine the previous full backup
and the recent incremental backup to
restore the data.
Incremental – Copies only the files that are new or
backup: changed since the last Incremental or
full backup, and does not mark the files
as backed up.
• Cấu Trúc Của SQL Server
Như ñã trình bày ở các bài trước một trong những ñặc ñiểm của SQL Server 2000 là
Multiple-Instance nên khi nói ñến một (SQL) Server nào ñó là ta nói ñến một
Instance của SQL Server 2000, thông thường ñó là Default Instance. Một Instance
của SQL Server 2000 có 4 system databases và một hay nhiều user database. Các
system databases bao gồm:

• Master : Chứa tất cả những thông tin cấp hệ thống (system-level information) bao
gồm thông tin về các database khác trong hệ thống như vị trí của các data files, các
login account và các thiết ñặt cấu hình hệ thống của SQL Server (system
configuration settings).
• Tempdb : Chứa tất cả những table hay stored procedure ñược tạm thời tạo ra trong
quá trình làm việc bởi user hay do bản thân SQL Server engine. Các table hay stored
procedure này sẽ biến mất khi khởi ñộng lại SQL Server hay khi ta disconnect.
• Model : Database này ñóng vai trò như một bảng kẻm (template) cho các database
khác. Nghĩa là khi một user database ñược tạo ra thì SQL Server sẽ copy toàn bộ
các system objects (tables, stored procedures...) từ Model database sang database
mới vừa tạo.
• Msdb : Database này ñược SQL Server Agent sử dụng ñể hoạch ñịnh các báo ñộng
và các công việc cần làm (schedule alerts and jobs).
• Cấu Trúc Vật Lý Của Một SQL Server Database
Mỗi một database trong SQL Server ñều chứa ít nhất một data file
chính (primary), có thể có thêm một hay nhiều data file phụ
(Secondary) và một transaction log file.

• Primary data file (thường có phần mở rộng .mdf) : ñây là file chính
chứa data và những system tables.
• Secondary data file (thường có phần mở rộng .ndf) : ñây là file
phụ thường chỉ sử dụng khi database ñược phân chia ñể chứa trên
nhiều dĩa.
• Transaction log file (thường có phần mở rộng .ldf) : ñây là file ghi
lại tất cả những thay ñổi diễn ra trong một database và chứa ñầy ñủ
thông tin ñể có thể roll back hay roll forward khi cần.
Cấu Trúc Lưu Trữ và Phương Thức
Truy Xuất
Creater: Trần Sơn Hải

6/17/2009 Hệ Quản Trị Cơ Sở Dữ Liệu 1 of 45


Mục Tiêu
• Các thành phần liên quan.
• Tổ chức vật lý của SQL Server.
• Cấu trúc lưu trữ và phương thức truy xuất.

6/17/2009 Hệ Quản Trị Cơ Sở Dữ Liệu 2 of 45


Các Thành Phần Liên Quan
• Bộ phận quản lý tập tin
– .mdf : meta data file
– .ldf : log data file
– .bak : bakup data file
• Bộ phận quản lý ñĩa
• Bộ phận quản lý dữ liệu vật lý

6/17/2009 Hệ Quản Trị Cơ Sở Dữ Liệu 3 of 45


Tổ Chức Vật Lý trên SQL Server
• Dữ liệu trong CSDL ñược tổ chức thành
các thành phần (Component) logic cho
user sử dụng như: Table, View….
• Dữ liệu vật lý có thể lưu trên nhiều file hay
thậm chí nhiều ổ ñĩa.
• Người dùng (trừ các DBA) chỉ làm việc
trên các thành phần logic của SQL Server.

6/17/2009 Hệ Quản Trị Cơ Sở Dữ Liệu 4 of 45


Kiến trúc của SQL Server

6/17/2009 Hệ Quản Trị Cơ Sở Dữ Liệu 5 of 45


Kiến trúc của SQL Server
• Các database hệ thống của SQL
Server
–master Database chứa thông tin về cấu
hình, phần quyền của hệ thống
–tempdb Database chứa dữ liệu tạm cần
lưu trữ
–model Database chứa database mẫu ñể
tạo một database mới
–msdb Database ñể hỗ trợ SQL Server
6/17/2009
Agent Hệ Quản Trị Cơ Sở Dữ Liệu 6 of 45
Kiến trúc của SQL Server

6/17/2009 Hệ Quản Trị Cơ Sở Dữ Liệu 7 of 45


Cấu Trúc Lưu Trữ và Phương
Thức Truy Xuất
• Tập tin tuần tự
• Tập tin chỉ mục(Index)
• Tập tin tuần tự chỉ mục
• Cây B+ và Kỹ thuật bảng băm

6/17/2009 Hệ Quản Trị Cơ Sở Dữ Liệu 8 of 45


Các Loại Index
• Clustered/Non clustered
– Clustered = thứ tự các record lưu trữ vật lý sắp thứ tự
của index
– Non clustered = thứ tự các record lưu trữ vật lý không
sắp thứ tự của index
• Dense/sparse
– Dense = ðánh chỉ mục cho tất cả các records
– Sparse = Chỉ ñánh chỉ một số records
• Primary/secondary
– Ví dụ: Sắp tăng theo tên, cùng tên thì sắp theo tuổi thì
tên là primary và tuổi là secondary.
• B+ tree / Hash table / …
6/17/2009 Hệ Quản Trị Cơ Sở Dữ Liệu 9 of 45
Clustered Index
• File ñược sắp theo thứ tự của thuộc
tính chỉ mục index

10 10
20 20 ục
30
40 30
40
50
60
50
70
80
60

70
80

6/17/2009 Hệ Quản Trị Cơ Sở Dữ Liệu 10 of 45


Non clustered Indexes
• Dùng ñể sắp chỉ mục các thuộc tính không
phải là khóa chính

10 20
10 30
20
20 30
20
20
30
10
30
30
20

10
30

6/17/2009 Hệ Quản Trị Cơ Sở Dữ Liệu 11 of 45


Clustered vs. Non clustered Index

Data entries
Data entries
(IndexFile)
(Data file)

Data Records Data Records

CLUSTERED UNCLUSTERED
6/17/2009 Hệ Quản Trị Cơ Sở Dữ Liệu 12 of 45
Cây B+
• d là bậc
• Mỗi node có >= d và <= 2d keys trừ nút gốc
30 120 240

Keys k < 30
Keys 30<=k<120 Keys 120<=k<240 Keys 240<=k

• Nút lá:
40 50 60
Next leaf

40 50 60
6/17/2009 Hệ Quản Trị Cơ Sở Dữ Liệu 13 of 45
B+ Tree Example
d=2
80

20 60 100 12 140
0

10 1 18 20 3 40 50 60 6 80 8 90
5 0 5 5

10 15 18 20 30 40 50 60 65 80 85 90
6/17/2009 Hệ Quản Trị Cơ Sở Dữ Liệu 14 of 45
B+ Tree Design
• How large d ?
• Example:
– Key size = 4 bytes
– Pointer size = 8 bytes
– Block size = 4096 byes
• 2d x 4 + (2d+1) x 8 <= 4096
• d = 170

6/17/2009 Hệ Quản Trị Cơ Sở Dữ Liệu 15 of 45


Searching a B+ Tree
• Exact key values:
– Start at the root Select name
– Proceed down, to the leaf From people
Where age = 25

• Range queries:
Select name
– As above
From people
– Then sequential traversal Where 20 <= age
and age <= 30

6/17/2009 Hệ Quản Trị Cơ Sở Dữ Liệu 16 of 45


Insertion in a B+ Tree
Insert K=19
80

20 60 100 12 140
0

10 1 18 20 3 40 50 60 6 80 8 90
5 0 5 5

10 15 18 20 30 40 50 60 65 80 85 90
6/17/2009 Hệ Quản Trị Cơ Sở Dữ Liệu 17 of 45
Insertion in a B+ Tree
After insertion
80

20 60 100 12 140
0

10 1 18 19 20 3 40 50 60 6 80 8 90
5 0 5 5

10 15 18 19 20 30 40 50 60 65 80 85 90
6/17/2009 Hệ Quản Trị Cơ Sở Dữ Liệu 18 of 45
Insertion in a B+ Tree
Now insert 25
80

20 60 100 12 140
0

10 1 18 19 20 3 40 50 60 6 80 8 90
5 0 5 5

10 15 18 19 20 30 40 50 60 65 80 85 90
6/17/2009 Hệ Quản Trị Cơ Sở Dữ Liệu 19 of 45
Insertion in a B+ Tree
After insertion
80

20 60 100 12 140
0

10 1 18 19 20 2 30 4 5 60 6 80 8 90
5 5 0 0 5 5

10 15 18 19 20 25 30 40 50 60 65 80 85 90
6/17/2009 Hệ Quản Trị Cơ Sở Dữ Liệu 20 of 45
Insertion in a B+ Tree
But now have to split !
80

20 60 100 12 140
0

10 1 18 19 20 2 30 4 5 60 6 80 8 90
5 5 0 0 5 5

10 15 18 19 20 25 30 40 50 60 65 80 85 90
6/17/2009 Hệ Quản Trị Cơ Sở Dữ Liệu 21 of 45
Insertion in a B+ Tree
After the split
80

20 30 60 100 12 140
0

10 1 18 19 20 2 30 4 5 60 6 80 8 90
5 5 0 0 5 5

10 15 18 19 20 25 30 40 50 60 65 80 85 90
6/17/2009 Hệ Quản Trị Cơ Sở Dữ Liệu 22 of 45
Deletion from a B+ Tree
Delete 30
80

20 30 60 100 12 140
0

10 1 18 19 20 2 30 4 5 60 6 80 8 90
5 5 0 0 5 5

10 15 18 19 20 25 30 40 50 60 65 80 85 90
6/17/2009 Hệ Quản Trị Cơ Sở Dữ Liệu 23 of 45
Deletion from a B+ Tree
After deleting 30
May change to 80
40, or not

20 30 60 100 12 140
0

10 1 18 19 20 2 40 5 60 6 80 8 90
5 5 0 5 5

10 15 18 19 20 25 40 50 60 65 80 85 90
6/17/2009 Hệ Quản Trị Cơ Sở Dữ Liệu 24 of 45
Deletion from a B+ Tree
Now delete 25
80

20 30 60 100 12 140
0

10 1 18 19 20 25 40 5 60 6 80 8 90
5 0 5 5

10 15 18 19 20 25 40 50 60 65 80 85 90
6/17/2009 Hệ Quản Trị Cơ Sở Dữ Liệu 25 of 45
Deletion from a B+ Tree
After deleting 25
Need to rebalance
80
Rotate

20 30 60 100 12 140
0

10 1 18 19 20 40 5 60 6 80 8 90
5 0 5 5

10 15 18 19 20 40 50 60 65 80 85 90
6/17/2009 Hệ Quản Trị Cơ Sở Dữ Liệu 26 of 45
Deletion from a B+ Tree
Now delete 40
80

19 30 60 100 12 140
0

10 1 18 19 2 40 5 60 6 80 8 90
5 0 0 5 5

10 15 18 19 20 40 50 60 65 80 85 90
6/17/2009 Hệ Quản Trị Cơ Sở Dữ Liệu 27 of 45
Deletion from a B+ Tree
After deleting 40
Rotation not possible
Need to merge nodes 80

19 30 60 100 12 140
0

10 1 18 19 2 50 60 6 80 8 90
5 0 5 5

10 15 18 19 20 50 60 65 80 85 90
6/17/2009 Hệ Quản Trị Cơ Sở Dữ Liệu 28 of 45
Deletion from a B+ Tree
Final tree
80

19 60 100 12 140
0

10 1 18 19 2 5 60 6 80 8 90
5 0 0 5 5

10 15 18 19 20 50 60 65 80 85 90
6/17/2009 Hệ Quản Trị Cơ Sở Dữ Liệu 29 of 45
Deletion from a B+ Tree
Quá trình tìm 85 sẽ như thế nào cần bao nhiêu lần so sánh.
Thử tiến hành xóa 50, sau ñó thêm 49.

80

19 60 100 12 140
0

10 1 18 19 2 5 60 6 80 8 90
5 0 0 5 5

10 15 18 19 20 50 60 65 80 85 90
6/17/2009 Hệ Quản Trị Cơ Sở Dữ Liệu 30 of 45
Variation on B+tree: B-tree (no +)

• Idea:
– Avoid duplicate keys
– Have record pointers in non-leaf nodes

• Note: Textbook’s B-Tree means B+-tree!

6/17/2009 Hệ Quản Trị Cơ Sở Dữ Liệu 31 of 45


Hash Tables

6/17/2009 Hệ Quản Trị Cơ Sở Dữ Liệu 32 of 45


Hash Tables
• Bảng băm:
– Có n khối dữ liệu cần lưu trữ
– Cho một hàm hash f(k):khóa k  {0, 1, …,
n-1}
– f(k) sẽ trỏ ñến dữ liệu có khóa k

6/17/2009 Hệ Quản Trị Cơ Sở Dữ Liệu 33 of 45


Ví dụ bảng băm
• Giả lưu giữ khối các dữ liệu với các khóa
như sau
• h(e)=0 e
0
• h(b)=h(f)=1
b
• h(g)=2 1
f

• h(a)=h(c)=3 2
g

• h(ê)=0 3 a
c

6/17/2009 Hệ Quản Trị Cơ Sở Dữ Liệu 34 of 45


Tìm một record trong bảng băm
• Tìm khối dữ liệu a:
• Tính hàm băm (hash) h(a)=3
• ðọc khối dữ liệu 3 e
0
• Truy cập lần lượt các
b
1
record trong khối 3 f
g
2
a
3
c

6/17/2009 Hệ Quản Trị Cơ Sở Dữ Liệu 35 of 45


Thêm vào bảng băm
• Thêm record vào một khối khi còn chỗ
trống
• Ví dụ: thêm d với h(d)=2 e
0
b
1
f
g
2
d
a
3
c

6/17/2009 Hệ Quản Trị Cơ Sở Dữ Liệu 36 of 45


Câu Hỏi về bảng băm
• Quá trình tìm kiếm khóa c sẽ ñược thực
hiện như thế nào?
• Ví dụ: thêm ê với h(ê)=0 e
0
và thêm ñ với
b
h(ñ) = 2 thì sao? 1
f
g
2
d
a
3
c

6/17/2009 Hệ Quản Trị Cơ Sở Dữ Liệu 37 of 45


Thêm vào bảng băm

• Tạo khối tràn (overflow) nếu hết chỗ


trống
e
• Ví dụ: 0
thêm k 1
b k
f
với h(k)=1 g
2
d
a
3
c

6/17/2009 Hệ Quản Trị Cơ Sở Dữ Liệu 38 of 45


Hiệu suất của bảng băm
• Bảng băm cho hiệu suất tốt khi nào?
• Tốt nếu ít khối overflow.

6/17/2009 Hệ Quản Trị Cơ Sở Dữ Liệu 39 of 45


Tạo Index trên SQL Server
• Trên SQL hỗ trợ 2 loại Index:
– Cluster Index
– Non Cluster Index

6/17/2009 Hệ Quản Trị Cơ Sở Dữ Liệu 40 of 45


Tạo Index trên SQL Server
• Cluster Index: chỉ có thể tạo một cluster
index duy nhất cho một bảng dữ liệu.
– Mặc ñịnh khóa chính sẽ thành cluster index
– Dữ liệu của bảng sắp xếp theo thứ tự của
cluster index

6/17/2009 Hệ Quản Trị Cơ Sở Dữ Liệu 41 of 45


Tạo Index trên SQL Server
• Non Cluster Index: có thể tạo 249 non-
cluster 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.

6/17/2009 Hệ Quản Trị Cơ Sở Dữ Liệu 42 of 45


Tạo Index trên SQL Server
• Cú pháp tạo Index:
– CREATE [UNIQUE] [CLUSTERED |
NONCLUSTERED] INDEX index_name
ON table_name
(column_name[,column_name]…)

6/17/2009 Hệ Quản Trị Cơ Sở Dữ Liệu 43 of 45


Tạo Index trên SQL Server
• Cú pháp tạo Index:
– CREATE NONCLUSTERED INDEX
idxExternalCandidate
ON ExternalCandidate(cAgencyCode)
– CREATE CLUSTERED INDEX
idxRecruitment
ON RecruitmentAgencies(cAgencyCode)

6/17/2009 Hệ Quản Trị Cơ Sở Dữ Liệu 44 of 45


Bài tập tạo Index trên SQL Server
• Trong CSDL của bạn có bảng SinhVien(MaSV,
TenSV, TuoiSV, DiaChi) với MaSV là khóa
chính. Khóa chính thường dùng ñể join vói các
bảng khác, khóa chính và tên thường xuất hiện
trong ñiều kiện where của các câu truy vấn
thông tin.
• Hãy xác ñịnh một cluster và một non-cluster
index cho bảng SinhVien. Viết câu lệnh SQL ñể
tạo bảng và tạo các index tương ứng.

6/17/2009 Hệ Quản Trị Cơ Sở Dữ Liệu 45 of 45


Index trên SQL Server
• Khóa chính  Cluster Index
• Các cột hay truy xuất nên tạo non cluster
index.
•  tăng tốc ñộ truy xuất CSDL.
• Ngoài ra, có thể sử dụng cộng cụ Index
Turning của SQL Server ñể tạo index cho
CSDL của mình tự ñộng theo suggest của
SQL Server
6/17/2009 Hệ Quản Trị Cơ Sở Dữ Liệu 46 of 45
Tóm lại
• Các thành phần liên quan ñến tổ chức vật lý
của một Hệ quản trị Cơ Sở Dữ Liệu
• Kiến trúc Hệ quản trị Cơ Sở Dữ Liệu
• Cấu trúc lưu trữ và phương thức truy xuất

6/17/2009 Hệ Quản Trị Cơ Sở Dữ Liệu 47 of 45


Câu hỏi
• What is a transaction and what are ACID properties?
– A transaction is a logical unit of work in which, all the steps must be performed or none.
ACID stands for Atomicity, Consistency, Isolation, Durability. These are the properties of a
transaction. For more information and explanation of these properties, see SQL Server
books online or any RDBMS fundamentals text book.
• Explain different isolation levels
– An isolation level determines the degree of isolation of data between concurrent transactions.
The default SQL Server isolation level is Read Committed. Here are the other isolation levels
(in the ascending order of isolation): Read Uncommitted, Read Committed, Repeatable
Read, Serializable. See SQL Server books online for an explanation of the isolation levels.
Be sure to read about SET TRANSACTION ISOLATION LEVEL, which lets you customize
the isolation level at the connection level.

• CREATE INDEX myIndex ON myTable(myColumn). What type of Index will get


created after executing the above statement?
– Non-clustered index. Important thing to note: By default a clustered index gets created on the
primary key, unless specified otherwise.
• What’s the maximum size of a row?
– 8060 bytes. Don’t be surprised with questions like ‘what is the maximum number of columns
per table’. Check out SQL Server books online for the page titled: “Maximum Capacity
Specifications”.

6/17/2009 Hệ Quản Trị Cơ Sở Dữ Liệu 48 of 45


Câu hỏi
• Explain Active/Active and Active/Passive cluster configurations
– Hopefully you have experience setting up cluster servers. But if you don’t, at least be familiar
with the way clustering works and the two clusterning configurations Active/Active and
Active/Passive. SQL Server books online has enough information on this topic and there is a
good white paper available on Microsoft site.
• Explain the architecture of SQL Server
– This is a very important question and you better be able to answer it if consider yourself a
DBA. SQL Server books online is the best place to read about SQL Server architecture.
Read up the chapter dedicated to SQL Server Architecture.
• What is lock escalation?
– Lock escalation is the process of converting a lot of low level locks (like row locks, page
locks) into higher level locks (like table locks). Every lock is a memory structure too many
locks would mean, more memory being occupied by locks. To prevent this from happening,
SQL Server escalates the many fine-grain locks to fewer coarse-grain locks. Lock escalation
threshold was definable in SQL Server 6.5, but from SQL Server 7.0 onwards it’s dynamically
managed by SQL Server.
• What’s the difference between DELETE TABLE and TRUNCATE TABLE commands?
– DELETE TABLE is a logged operation, so the deletion of each row gets logged in the
transaction log, which makes it slow. TRUNCATE TABLE also deletes all the rows in a table,
but it won’t log the deletion of each row, instead it logs the deallocation of the data pages of
the table, which makes it faster. Of course, TRUNCATE TABLE can be rolled back.

6/17/2009 Hệ Quản Trị Cơ Sở Dữ Liệu 49 of 45


Câu hỏi
• Explain the storage models of OLAP
– Check out MOLAP, ROLAP and HOLAP in SQL Server books online for more infomation.
• What are the new features introduced in SQL Server 2000 (or the latest release of SQL Server at the time of your
interview)? What changed between the previous version of SQL Server and the current version?
– This question is generally asked to see how current is your knowledge. Generally there is a section in the beginning of the books
online titled “What’s New”, which has all such information. Of course, reading just that is not enough, you should have tried those
things to better answer the questions. Also check out the section titled “Backward Compatibility” in books online which talks about
the changes that have taken place in the new version.
• What are constraints? Explain different types of constraints.
– Constraints enable the RDBMS enforce the integrity of the database automatically, without needing you to create triggers, rule or
defaults.
• Types of constraints: NOT NULL, CHECK, UNIQUE, PRIMARY KEY, FOREIGN KEY
• For an explanation of these constraints see books online for the pages titled: “Constraints” and “CREATE TABLE”,
“ALTER TABLE”
• What is an index? What are the types of indexes? How many clustered indexes can be created on a table? I
create a separate index on each column of a table. what are the advantages and disadvantages of this approach?
• Indexes in SQL Server are similar to the indexes in books. They help SQL Server retrieve the data quicker.
• Indexes are of two types. Clustered indexes and non-clustered indexes. When you craete a clustered index on a
table, all the rows in the table are stored in the order of the clustered index key. So, there can be only one
clustered index per table. Non-clustered indexes have their own storage separate from the table data storage.
Non-clustered indexes are stored as B-tree structures (so do clustered indexes), with the leaf level nodes having
the index key and it’s row locater. The row located could be the RID or the Clustered index key, depending up on
the absence or presence of clustered index on the table.
• If you create an index on each column of a table, it improves the query performance, as the query optimizer can
choose from all the existing indexes to come up with an efficient execution plan. At the same t ime, data
modification operations (such as INSERT, UPDATE, DELETE) will become slow, as every time data changes in
the table, all the indexes need to be updated. Another disadvantage is that, indexes need disk space, the more
indexes you have, more disk space is used.

6/17/2009 Hệ Quản Trị Cơ Sở Dữ Liệu 50 of 45


Stored Procedure and Trigger

6/17/2009 Các Hệ Cơ Sở Dữ Liệu 1 of 29


Objectives
In this lesson, you will learn to:
• Create a stored procedure
• Execute a stored procedure
• Pass parameters to a stored procedure
• Create a trigger
• Magic Tables

6/17/2009 Các Hệ Cơ Sở Dữ Liệu 2 of 29


Introduction to Stored Procedure
• A stored procedure is a collection or batch of T-
SQL statements and control-of-flow language that
is stored under one name, and executed as a
single unit
• Benefits of Stored Procedures
• Improved performance
• Reduction in network congestion
• Better consistency
• Better security mechanism

6/17/2009 Các Hệ Cơ Sở Dữ Liệu 3 of 29


Stored procedure Syntax

• The CREATE PROCEDURE Statement


• Syntax
CREATE PROCEDURE proc_name
AS
BEGIN
sql_statement1
sql_statement2
END

6/17/2009 Các Hệ Cơ Sở Dữ Liệu 4 of 29


Problem Statement

A list containing the name, address, city, zip


code, telephone number, and the fax number
of recruitment agencies is required
frequently.
Recently, it has been noticed that there is a
delay in generating this report due to the
network congestion.
Besides, the Human Resources department
personnel make mistakes while querying for
this information. Suggest and implement a
solution.

6/17/2009 Các Hệ Cơ Sở Dữ Liệu 5 of 29


Example stored procedure for
problem statement
Action:
In the Query Analyzer window, type:
CREATE PROCEDURE prcPrintRecruitmentAgencyList
AS
BEGIN
PRINT 'List of Recruitment Agencies'
SELECT cName, vAddress, cCity, cZip, cPhone, cFax
FROM RecruitmentAgencies
END
Press F5 to execute the statement

6/17/2009 Các Hệ Cơ Sở Dữ Liệu 6 of 29


Check the existence of the procedure
in the database
• The sp_helptext Command is used to check the
existence of a procedure in the database
• Syntax
sp_helptext proc_name
• Action
• In the Query Analyzer window, type:
sp_helptext prcPrintRecruitmentAgencyList
• Check the result. The output must be the code
that you wrote to create the procedure

6/17/2009 Các Hệ Cơ Sở Dữ Liệu 7 of 29


Execute the procedure

• The EXECUTE PROCEDURE statement


is used to execute the stored
procedure
• Syntax
EXECUTE proc_name
or
EXEC proc_name
or
proc_name

6/17/2009 Các Hệ Cơ Sở Dữ Liệu 8 of 29


Example Execute the procedure for
problem statement
• Action:
• In the Query Analyzer window, type:
EXECUTE prcPrintRecruitmentAgencyList
or
EXEC prcPrintRecruitmentAgencyList
or
prcPrintRecruitmentAgencyList
• Press F5 to execute the command

6/17/2009 Các Hệ Cơ Sở Dữ Liệu 9 of 29


Problem Statement
Information on contract recruiters in
aparticular city is required
frequently.

The city for which details are


required changes from time to time.

Create a stored procedure that will


generate information for a specified
city

6/17/2009 Các Hệ Cơ Sở Dữ Liệu 10 of 29


Identify a method to write a generic
procedure that will generate results
for variable inputs
• Parameter
• A parameter is a placeholder in a query or a
stored procedure that accepts a user-defined
value whenever the query or stored procedure
is executed
• Types of Parameters
• Input parameters
• Output parameters
• Result:
• As the city name will be supplied by the user,
use input parameters

6/17/2009 Các Hệ Cơ Sở Dữ Liệu 11 of 29


Create the stored procedure in the
Database
• Action:
• In the Query Analyzer window, type:
CREATE PROC prcListContractRecruiter @cCity char(15)
AS
BEGIN
PRINT 'List of Contract Recruiters'
SELECT cName,cCity,cZip,cPhone
FROM ContractRecruiter
WHERE cCity = @cCity
END
• Press F5 to execute the query

6/17/2009 Các Hệ Cơ Sở Dữ Liệu 12 of 29


Execute the procedure with parameter
• Action:
• In the Query Analyzer window, type:
exec prcListContractRecruiter Alexandria
Press F5 to execute the procedure

• Action:
• In the Query Analyzer window, type:
execute prcListContractRecruiter Boston
Press F5 to execute the procedure

6/17/2009 Các Hệ Cơ Sở Dữ Liệu 13 of 29


Create the procedure with output
param
• Action:
• In the Query Analyzer Window, type the statements given
below.
CREATE PROCEDURE prcGetPositionDetail
@Pcode char(4),
@Description char(30) OUTPUT,
@budget int OUTPUT,
@CurrentStrength int OUTPUT
AS
BEGIN
…………………………………..
END

6/17/2009 Các Hệ Cơ Sở Dữ Liệu 14 of 29


Identify the object that can maintain
user-defined data integrity
• A trigger is a block of code that constitutes a set of T-SQL
statements that are activated in response to certain actions
Characteristics of a Trigger
• It is fired automatically by SQL Server when any data
modification statement is issued
• It cannot be explicitly invoked or executed, as in the case of
the stored procedures
• It prevents incorrect, unauthorized or inconsistent changes
in data
• It cannot return data to the user
Result
• A trigger can be used to maintain data integrity

6/17/2009 Các Hệ Cơ Sở Dữ Liệu 15 of 29


Draft the statements to create an
INSERT trigger
Creating triggers

• Syntax
CREATE TRIGGER trigger_name
ON table_name
[WITH ENCRYPTION]
FOR [INSERT | DELETE | UPDATE]
AS sql_statements

6/17/2009 Các Hệ Cơ Sở Dữ Liệu 16 of 29


Problem Statement Trigger
When a new row is inserted in the
Requisition table.
The value of the siNoOfVacancy attribute
should be less than the difference
between the iBudgetedStrength and
iCurrentStrength attributes of the
Position table.
Ensure that this user-defined data
integrity requirement is implemented.

6/17/2009 Các Hệ Cơ Sở Dữ Liệu 17 of 29


Draft the statements to create an
INSERT trigger (Contd.)
Magic tables
• Whenever a trigger fires in response to the
INSERT, DELETE, or UPDATE statement, two
special tables are created. These are the
inserted and the deleted tables. They are also
referred to as magic tables
• The inserted table contains a copy of all
records that are inserted in the trigger table
• The deleted table contains all records that
have been deleted from the trigger table
• Whenever any updation takes place, the
trigger uses both the inserted and the deleted
tables

6/17/2009 Các Hệ Cơ Sở Dữ Liệu 18 of 29


Draft the statements to create an
INSERT trigger (Contd.)
The INSERT Trigger
• An INSERT trigger is fired whenever an
attempt is made to insert a row in the trigger
table
• When an INSERT statement is issued, a new
row is added to both the trigger and the
inserted tables
Action
• The table on which the trigger has to be
created is Requisition
• The trigger has to be of insert type
• The name of the trigger can be
trgInsertRequisition

6/17/2009 Các Hệ Cơ Sở Dữ Liệu 19 of 29


Draft the statements to create an
INSERT trigger (Contd.)
• Write the batch statements
CREATE TRIGGER trgInsertRequisition
ON Requisition FOR insert AS
DECLARE @VacancyReported int
DECLARE @ActualVacancy int
SELECT @ActualVacancy = iBudgetedStrength -
iCurrentStrength
FROM Position Join Inserted on
Position.cPositionCode = Inserted.cPositionCode
SELECT @VacancyReported =
inserted.siNoOfVacancy
FROM inserted
IF(@VacancyReported > @Actualvacancy)
BEGIN
PRINT 'The actual vacancies are less than the vacancies
reported. Hence, cannot insert.'
ROLLBACK TRANSACTION
END
RETURN

6/17/2009 Các Hệ Cơ Sở Dữ Liệu 20 of 29


Check the existence of the trigger in
the database
Action
sp_help trgInsertRequisition

INSERT Requisition
VALUES('000003','0001',getdate(), getdate() + 7, '0001', 'North', 20)

6/17/2009 Các Hệ Cơ Sở Dữ Liệu 21 of 29


Practice-Using Trigger
Problem Statement
When a new row is added to the Employee table, the
iCurrentStrength attribute of the Position table should be
increased by one.

Problem Statement
Create a trigger to disable deleting rows from the
ContractRecruiter table.

6/17/2009 Các Hệ Cơ Sở Dữ Liệu 22 of 29


Draft statements to create a DELETE
trigger (Contd.)
CREATE TRIGGER trgDeleteContractRecruiter
ON ContractRecruiter FOR delete
AS
PRINT 'Deletion of Contract Recruiters is
not allowed'
ROLLBACK TRANSACTION RETURN

6/17/2009 Các Hệ Cơ Sở Dữ Liệu 23 of 29


Draft statements to create an UPDATE
trigger (Contd.)
• The trigger is:
CREATE TRIGGER trgUpdateContractRecruiter
ON ContractRecruiter FOR UPDATE
AS
DECLARE @AvgPercentageCharge int
SELECT @AvgPercentageCharge =
avg(siPercentageCharge)
FROM ContractRecruiter
IF(@AvgPercentageCharge > 11)
BEGIN
PRINT 'The average cannot be more than 11'
ROLLBACK TRANSACTION
END
RETURN

6/17/2009 Các Hệ Cơ Sở Dữ Liệu 24 of 29


Summary
In this lesson, you learned that:
• A stored procedure is a collection of various T-SQL
statements that are stored under one name and
executed as a single unit
• A stored procedure can be created either in the
Enterprise Manager or in the Query Analyzer window
with the CREATE PROCEDURE statement
• A stored procedure allows you to declare parameters,
variables, and use T-SQL statements and programming
logic
• A stored procedure provides better performance,
security, and accuracy, and reduces network congestion

6/17/2009 Các Hệ Cơ Sở Dữ Liệu 25 of 29


Summary
In this lesson, you learned that
• A trigger is a block of code that constitutes a set of T-SQL statements
that get activated in response to certain actions
• A trigger fires in response to the INSERT, UPDATE, and DELETE
statements
• A trigger can be created in the Query Analyzer by using the CREATE
TRIGGER statement
• A magic table is a conceptual table that is structurally similar to the table
on which a trigger is defined
• There are two types of magic tables:
• Inserted, which stores a copy of the rows that have been inserted
into the trigger table
• Deleted, which stores those records that have been deleted from
the trigger table
• A trigger can be viewed using the sp_help and sp_helptext system
stored procedures

6/17/2009 Các Hệ Cơ Sở Dữ Liệu 26 of 29


Question
• What DBMS supports stored procedure?

• What DBMS supports trigger?

6/17/2009 Các Hệ Cơ Sở Dữ Liệu 27 of 29


Questions
• What is the purpose of Stored Procedure?

• What is the purpose of Trigger?

6/17/2009 Các Hệ Cơ Sở Dữ Liệu 28 of 29


Question
• Store Procedure vs Trigger?

6/17/2009 Các Hệ Cơ Sở Dữ Liệu 29 of 29


Bài tập
Bài Tập
• Cho bảng Employes(EID, Ename, PrID,
EAge) với các record (E1, A, P001, 25),
(E2, C, P001, 20), (E3, B, P002, 30). Cho
bảng Projects(PrID, PrName, PrDesc,
NumOFEmp) với các record (P001, IT,
Big, 2), (P002, HR, Small, 1). Trong ñó
PrID là khóa ngoại, NumOfEmp là số nhân
viên thuộc Project tương ứng.
Cho bảng Employes(EID, Ename, PrID, EAge) với các record (E1,
A, P001, 25), (E2, C, P001, 20), (E3, B, P002, 30). Cho bảng
Projects(PrID, PrName, PrDesc, NumOFEmp) với các record (P001,
IT, Big, 2), (P002, HR, Small, 1). Trong ñó PrID là khóa ngoại,
NumOfEmp là số nhân viên thuộc Project tương ứng.

1. Viết các câu lệnh tạo bảng và insert dữ liệu vào 2 bảng trên?
2. Viết các câu lệnh chuyển E2 từ Project P001 qua Project P002
dưới dạng Transaction ñể ñảm bảo ràng buộc của dữ liệu.
3. Tạo bảng ảo vwEmpPrj(EID, Ename, PrName)
4. Bạn thường truy xuất thông tin Employees theo Ename. Hãy
viết câu lệnh tạo Index ñể tăng tốc ñộ truy vấn của các câu truy
vấn dạng này.
5. Viết câu lệnh tạo store prcGetEmpByName với một tham số là
ñộ tuổi. Store này sẽ trả ra thông tin các nhân viên có ñộ bằng
với tham số của store. Sau ñó sử dụng store này tìm các nhân
viên 20 tuổi.
6. Tạo trigger không cho phép xóa bất cứ record nào trong bảng
Projects
Chương 5

Xử lý câu truy vấn

6/17/2009 Hệ Quản Trị CSDL 1 of 82


Nội dung chi tiết
• Giới thiệu
• Bộ biên dịch câu truy vấn (query compiler)
• Phân tích cú pháp
– Cây phân tích (parse tree)
• Chuyển cây phân tích sang ðSQH
– Câu truy vấn ñơn giản
– Câu truy vấn lồng - lồng tương quan
• Qui tắc tối ưu cây truy vấn
Ước lượng chi phí
•6/17/2009 Hệ Quản Trị CSDL 2 of 82
Giới thiệu
• R(A, B, C)
• S(C, D, E)

SELECT B, D
FROM R, S
WHERE R.A=‘c’ AND S.E=2 AND R.C=S.C

6/17/2009 Hệ Quản Trị CSDL 3 of 82


Giới thiệu (tt)
• Câu truy vấn ñược thực hiện như thế nào?

R A B C S C D E
a 1 10 10 x 2
b 1 10 20 y 2
c 2 10 30 z 2
d 2 10 40 x 1
e 3 10 50 y 3
Kết quả
B D
2 x
6/17/2009 Hệ Quản Trị CSDL 4 of 82
Giới thiệu (tt)
• Cách 1
– Tích cartesian
– Phép chọn (selection)
– Phép chiếu (projection)

ΠB,D [ σR.A=‘c’ ∧ S.E=2 ∧ R.C = S.C (RxS)]

6/17/2009 Hệ Quản Trị CSDL 5 of 82


Giới thiệu (tt)
RxS A B C C D E
a 1 10 10 x 2
a 1 10 20 y 2
..
.
c 2 10 10 x 2
c 2 10 20 y 2
c 2 10 30 z 2
..
.

6/17/2009 Hệ Quản Trị CSDL 6 of 82


Giới thiệu (tt)
• Cách 2
– Phép chọn (selection)
– Phép kết (natural join)
– Phép chiếu (projection)

ΠB,D [ σR.A=‘c’ (R) σS.E=2 (S)]

6/17/2009 Hệ Quản Trị CSDL 7 of 82


Giới thiệu (tt)
R A B C S C D E
a 1 10 10 x 2
b 1 10 20 y 2
c 2 10 30 z 2
d 2 10 40 x 1
e 3 10 50 y 3

σR A B C σS C D E
a 2 10 10 x 10
20 y 10
30 z 10
6/17/2009 Hệ Quản Trị CSDL 8 of 82
Giới thiệu (tt)
• Cách 3 - sử dụng chỉ mục trên R.A và S.C
– Tìm các bộ trong R thỏa R.A=‘c’
– Với mỗi bộ tìm thấy, tìm tiếp các bộ trong S
thỏa R.C=S.C
– Bỏ ñi những bộ S.E ≠ 2
– Kết các bộ phù hợp của R và S
– Chiếu trên thuộc tính B và D

6/17/2009 Hệ Quản Trị CSDL 9 of 82


Giới thiệu (tt)
R S
A =‘c’ C
A B C I1 I2 C D E
a 1 10 10 x 2
b 1 10 <c, 2, 10> <10, x, 2> 20 y 2
c 2 10 30 z 2
d 2 10 Kiểm tra 40 x 1
e 3 10 Kết quả <2, x> E=2? 50 y 3

Bộ có A=‘c’ kế tiếp
<c, 5, 20>

6/17/2009 Hệ Quản Trị CSDL 10 of 82


Câu Hỏi
• Cho quan hệ SinhVien(MaSV, TenSV,
TuoiSV, MaKhoa) có các bộ (M1, ‘Nguyen
A’ 25, K1), (M2, ‘N B’, 18, K2) và (M3, ‘C’,
20, K2) và Khoa(MaKhoa, TenKhoa) có
các bộ (K1, Toan) và (K2, Ly).
• Trình bày các cách thực hiện khác nhau
của câu truy vấn như sau:
Select TenSV, TenKhoa
From SinhVien s, Khoa k
Where s.MaKhoa = k.MaKhoa And s.TuoiSV > 20
6/17/2009 Hệ Quản Trị CSDL 11 of 82
Giới thiệu (tt)

DBMS thực hiện cách nào

6/17/2009 Hệ Quản Trị CSDL 12 of 82


Bộ biên dịch
SQL Query

Tập trung vào RDBMS


Parse query

Query expression tree

Select logical
query plan
Query optimization Logical query plan tree

Select physical
plan

Physical query plan tree

Execute plan
6/17/2009 Hệ Quản Trị CSDL 13 of 82
Quá trình biên dịch
Query

Parse
Parse tree
Answer
Convert
Logical query plan Execute
statistics
Apply laws Pi
Improve logical query plan Pick the best
Estimate {(P1,C1), (P2,C2) … }
result sizes
Logical query plan + sizes Estimate costs
Consider
physical plans {P1, P2, … }
6/17/2009 Hệ Quản Trị CSDL 14 of 82
Cây phân tích
<Query>

<SFW>

SELECT <SelectList> FROM <FromList> WHERE <Condition>

<Attribute> <Relation> <Attribute> = <Attribute>


<SelectList> <FromList> <Tuple> IN <Query>
<Attribute> LIKE <pattern>
<Condition> AND <Condition>

6/17/2009 Hệ Quản Trị CSDL 15 of 82


Ví dụ 1
• Customer(cusID, cusNm, cusStreet,
cusCity)
• Account(accID, cusID, balance)
SELECT cusNm
FROM Customer
WHERE cusID IN (
SELECT cusID
FROM Account
WHERE balance > 100)
6/17/2009 Hệ Quản Trị CSDL 16 of 82
Ví dụ 1 (tt)
<Query>

<SFW>

SELECT <SelectList> FROM <FromList> WHERE <Condition>

<Attribute> <Relation> <Tuple> IN <Query>

cusNm Customer <Attribute>

cusID <SFW>

SELECT <SelectList> FROM <FromList> WHERE <Condition>

<Attribute> <Relation> <Attribute> = <pattern>

cusID Account balance 100


6/17/2009 Hệ Quản Trị CSDL 17 of 82
Ví dụ 2
• Customer(cusID, cusNm, cusStreet,
cusCity)
• Account(accID, cusID, balance)
SELECT cusNm
FROM Customer, Account
WHERE Customer.cusID = Account.cusID
AND balance = 100

6/17/2009 Hệ Quản Trị CSDL 18 of 82


Ví dụ 2 (tt)
<Query>

<SFW>

SELECT <SelectList> FROM <FromList> WHERE <Condition>

<Attribute> <Relation> , <Relation>

cusNm Customer Account

<Condition> AND <Condition>

<Attribute> = <Attribute> <Attribute> = <Pattern>

Customer.cusID Account.cusID balance 100

6/17/2009 Hệ Quản Trị CSDL 19 of 82


Câu Hỏi
• Vẽ cấu trúc cây <SFW> của câu truy vấn
sau:
Select * from Customers

Select CustomerID, CustomerName


From Customers
Where CustomerID in ( Select CustomerID
From Invoices Where TotalCost > 1000 )
6/17/2009 Hệ Quản Trị CSDL 20 of 82
Nhận xét
• Giới hạn
– GROUP BY
– HAVING
– ORDER BY
– DISTINCT

– Aggregation function (Max, Min, Count, Sum,


Avg)

– Alias name
6/17/2009 Hệ Quản Trị CSDL 21 of 82
Tiền xử lý (preprocessing)
• Kiểm tra ngữ nghĩa
– Quan hệ
– Thuộc tính
• Select
• From
– Kiểu dữ liệu
• Where

6/17/2009 Hệ Quản Trị CSDL 22 of 82


Quá trình biên dịch
Query

Parse
Parse tree
Answer
Convert
Logical query plan Execute
statistics
Apply laws Pi
Improve logical query plan Pick the best
Estimate {(P1, C1), (P2,C2) … }
result sizes
Logical query plan + sizes Estimate costs
Consider
physical plans {P1, P2, … }
6/17/2009 Hệ Quản Trị CSDL 23 of 82
Biến ñổi sang ðSQH
• Truy vấn ñơn
– Xét câu trúc <SFW>
• Thay thế <FromList> thành các biến quan hệ
– Sử dụng phép tích cartesian cho các biến quan hệ
• Thay thế <Condition> thành phép chọn σC
• Thay thế <SelectList> thành phép chiếu πL
π L

σ C Cây truy vấn


x

R S T …
6/17/2009 Hệ Quản Trị CSDL 24 of 82
Xét ví dụ 2

πcusNm
σCustomer.cusID=Account.cusID ∧ balance=100
x

Customer Account

6/17/2009 Hệ Quản Trị CSDL 25 of 82


Biến ñổi sang ðSQH (tt)
• Truy vấn lồng
– Tồn tại câu truy vấn con S trong <Condition>
– Áp dụng qui tắc <SFW> cho truy vấn con
– Phép chọn 2 biến (two-argument selection)
• Nút là phép chọn không có tham số
• Nhánh con trái là biến quan hệ R
• Nhánh con phải là <condition> σ
áp dụng cho mỗi bộ trong R

R <Condition>

Tuple Operator S

6/17/2009 Hệ Quản Trị CSDL 26 of 82


Xét ví dụ 1
πcusNm
σ
Customer <condition>

<tuple> IN ΠcusID
<attribute> σbalance=100
cusID Account

6/17/2009 Hệ Quản Trị CSDL 27 of 82


Biến ñổi sang ðSQH (tt)
• Truy vấn lồng
– Biến ñổi phép chọn 2 biến
• Thay thế <Condition> bằng 1 cây có gốc là S
– Nếu S có các bộ trùng nhau thì phải lược bỏ bớt bộ trùng nhau ñi
– Sử dụng phép δ
• Thay thế phép chọn 2 biến thành σC
• σC là kết quả của phép cartesian của R và S

σ
σ C

x
R <Condition>
R δ
Tuple Operator S
6/17/2009 Hệ Quản Trị CSDL S 28 of 82
Xét ví dụ 1 (tt)
πcusNm
σCustomer.cusID=Account.cusID
X

Customer δ
πcusID
σbalance=10
6/17/2009 Account
Hệ Quản Trị CSDL 29 of 82
Xét ví dụ 1 (tt)
πcusNm

Customer.cusID=Account.cusID

Customer δ
πcusID
σbalance=10
Account
6/17/2009 Hệ Quản Trị CSDL 30 of 82
Ví dụ 3
• Customer(cusID, cusNm, cusStreet,
cusCity)
• Account(accID, cusID, balance)
SELECT c.cusNm Truy vấn lồng tương quan
FROM Customer c
WHERE 10000 >= (
SELECT SUM(a.balance)
FROM Account a
WHERE a.cusID=c.cusID)
6/17/2009 Hệ Quản Trị CSDL 31 of 82
Ví dụ 3 (tt)
πcusNm
σ
X

Customer c <Condition>

<Pattern> ≥ γSUM(a.balance)
10000 σc.custID=a.cusID
Account a
6/17/2009 Hệ Quản Trị CSDL 32 of 82
Ví dụ 3 (tt)
πc.cusNm
σ10000 ≥ SoB

c.cusID = a.cusID

Customer c γa.custID, SUM(a.balance) SoB

Account a

6/17/2009 Hệ Quản Trị CSDL 33 of 82


Câu hỏi
• Biến ñổi câu truy vấn sau sang ðại số
quan hệ:
Select custID, CustomerName, InvoieID
From Customers, Invoices
Where Customers.custID = Invoices.custID
Quá trình biên dịch
Query

Parse
Parse tree
Answer
Convert
Logical query plan Execute
statistics
Apply laws Pi
Improve logical query plan Pick the best
Estimate {(P1, C1), (P2,C2) … }
result sizes
Logical query plan + sizes Estimate costs
Consider
physical plans {P1, P2, … }
6/17/2009 Hệ Quản Trị CSDL 35 of 82
Qui tắc: Kết tự nhiên, tích cartesian,
hội
R S = S R
(R S) T = R (S T)

RxS=SxR
(R x S) x T = R x (S x T)
R∪S=S∪R
R ∪ (S ∪ T) = (R ∪ S) ∪ T
6/17/2009 Hệ Quản Trị CSDL 36 of 82
Qui tắc: Phép chọn σ
• Cho
– p là vị từ chỉ có các thuộc tính của R
– q là vị từ chỉ có các thuộc tính của S
– m là vị từ có các thuộc tính của R và S

σp1∧∧p2(R)
Pushing selections

=σp1 [ σp2 (R)]


σp1vp2(R) = [ σ (R)] ∪ [ σ (R)]
p1 p2
Quan hệ R là tập hợp
∪S là phép hội trên tập hợp
6/17/2009 Hệ Quản Trị CSDL 37 of 82
Qui tắc: σ,

σp (R S) = [ σp (R)] S

σq (R S) = R σq (S)]
[

6/17/2009 Hệ Quản Trị CSDL 38 of 82


Qui tắc: σ, (tt)

σp∧q (R S) =[ σp (R)] σq (S)]


[

σp∧q∧m (R S) = σm [σp(R) σq (S)]

σp∨q (R σp (R)
S) [ = S] ∪ [R σq (S)]
6/17/2009 Hệ Quản Trị CSDL 39 of 82
Qui tắc: σ, ∪ và σ, –

σc (R ∪ S) = σc (R) ∪ σc (S)
σc (R – S) = σc (R) – S = σc (R) – σc (S)]

6/17/2009 Hệ Quản Trị CSDL 40 of 82


Qui tắc: Phép chiếu π
• Cho
– X = tập thuộc tính con của R
– Y = tập thuộc tính con của R
• Ta có
– XY = X ∪ Y

πXY (R) = πX [πY (R)]

6/17/2009 Hệ Quản Trị CSDL 41 of 82


Qui tắc: π,
• Cho
– X = tập thuộc tính con của R
– Y = tập thuộc tính con của S
– Z = tập giao thuộc tính của R và S
Pushing projections

πXY (R S) = πXY [ πXZ(R) πYZ(S)]


Except intersection and difference
6/17/2009 Hệ Quản Trị CSDL 42 of 82
Qui tắc: σ, π
• Cho
– X = tập thuộc tính con của R
– Z = tập thuộc tính con của R xuất hiện trong vị
từ p

πXZ
πX [σp (R)] = πX {σp [πX (R)]}

6/17/2009 Hệ Quản Trị CSDL 43 of 82


Qui tắc: σ, π,
• Cho
– X = tập thuộc tính con của R
– Y = tập thuộc tính con của S
– Z = tập giao thuộc tính của R và S
– Z’ = Z ∪ {các thuộc tính xuất hiện trong vị từ p}

πXY [σp (R S)] =

πXY {σp [πXZ’ (R) πYZ’ (S)]}


6/17/2009 Hệ Quản Trị CSDL 44 of 82
Nhận xét: σ, π
• Ví dụ
– R(A, B, C, D, E)
– X={E}
– p: A=3 ∧ B=‘a’

πx [σp (R)] πE {σp [πABE(R)]}


Chọn trước Chiếu trước
tốt hơn??? tốt hơn???
6/17/2009 Hệ Quản Trị CSDL 45 of 82
Nhận xét: σ, π (tt)
• Bình thường
– Chiếu trước
• Nhưng
– Giả sử A và B ñược cài ñặt chỉ mục (index)
– Physical query plan dùng chỉ mục ñể chọn ra
những bộ có A=3 và B=‘a’ trước
– Nếu thực hiện chiếu trước πAB(R) thì chỉ mục
trên A và B là vô ích
– Chọn trước
– →Thông thường chọn trước tốt hơn
6/17/2009 Hệ Quản Trị CSDL 46 of 82
Qui tắc: ×,

σC (R S) = R C S

R×S = π [σC (R × S)]


L

6/17/2009 Hệ Quản Trị CSDL 47 of 82


Qui tắc: δ

δ(R S) = δ(R) δ(S)

δ(R × S) = δ(R) × δ(S)

δ[ σC (R)] = σC [δ(R)]
δ(R ∩B S) = δ(R) ∩B S = R ∩B δ(S)
= δ(R) ∩B δ(S)
Except: ∪B , −B , π
6/17/2009 Hệ Quản Trị CSDL 48 of 82
γ Qui tắc:
• Cho
– X = tập thuộc tính trong R ñược gom nhóm
– Y = X ∪ {một số thuộc tính khác của R}

δ[γX(R)] = γX(R)
γX(R) = γX [πY (R)]

6/17/2009 Hệ Quản Trị CSDL 49 of 82


Xét ví dụ 2

πcusNm
σCustomer.cusID=Account.cusID ∧ balance=100
x

Customer Account

6/17/2009 Hệ Quản Trị CSDL 50 of 82


Xét ví dụ 2

Qui tắc σ
πcusNm
σbalance=100
σCustomer.cusID=Account.cusID
x

Customer Account

6/17/2009 Hệ Quản Trị CSDL 51 of 82


Xét ví dụ 2 (tt)

Qui tắc σ, πcusNm


σbalance=100

Customer.cusID=Account.cusID

Customer Account

6/17/2009 Hệ Quản Trị CSDL 52 of 82


Xét ví dụ 2 (tt)

Pushing σ
πcusNm

Customer.cusID=Account.cusID

Customer σbalance=100
Account

6/17/2009 Hệ Quản Trị CSDL 53 of 82


Xét ví dụ 2 (tt)
πcusNm
Pushing π

Customer.cusID=Account.cusID

πcusNm, cusID πcusID


Customer σbalance=100
Account
6/17/2009 Hệ Quản Trị CSDL 54 of 82
Quá trình biên dịch
Query

Parse
Parse tree
Answer
Convert
Logical query plan Execute
statistics
Apply laws Pi
Improve logical query plan Pick the best
Estimate {(P1, C1), (P2,C2) … }
result sizes
Logical query plan + sizes Estimate costs
Consider
physical plans {P1, P2, … }
6/17/2009 Hệ Quản Trị CSDL 55 of 82
Ước lượng chi phí
• Ước lượng kích thước cây truy vấn
– Quan hệ
– Các phép toán

• Ước lượng số lần truy xuất IOs


– Số blocks ñược ñọc hoặc ghi ñể thực hiện cây
truy vấn

6/17/2009 Hệ Quản Trị CSDL 56 of 82


Ước lượng kích thước
• Thống kê quan hệ R
– T(R): số bộ trong R
– S(R): tổng số byte của 1 bộ trong R
– B(R): tổng số block chứa tất cả các bộ của R
– V(R, A): số giá trị khác nhau mà thuộc tính A
trong R có thể có

6/17/2009 Hệ Quản Trị CSDL 57 of 82


Ví dụ
R A B C D
A: chuỗi 20 bytes
x 1 10 a
B: số nguyên 4 bytes
x 1 20 b C: ngày 8 bytes
y 1 30 a D: chuỗi 68 bytes
y 1 40 c
z 1 50 d
1 block = 1024 bytes
(block header: 24 bytes)

T(R) = 5 V(R, A) = 3 V(R, B) = 1


S(R) = 100 V(R, C) = 5 V(R, D) = 4
B(R) = 1
6/17/2009 Hệ Quản Trị CSDL 58 of 82
Ước lượng: W = R1 × R2

S(W) = S(T1) + S(T2)

T(W) = T(R1) x T(T2)

6/17/2009 Hệ Quản Trị CSDL 59 of 82


Ước lượng: W = σZ = val (R)

S(W) = S(R)

T(R)
T(W) =
V(R, Z)
Số bộ trung bình thỏa ñiều kiện Z=val

6/17/2009 Hệ Quản Trị CSDL 60 of 82


Ước lượng: W = σZ ≥ val (R)
T(W) = ???

• Cách 1 T(R)
T(W) =
2

T(R)
T(W) =
• Cách 2 3
6/17/2009 Hệ Quản Trị CSDL 61 of 82
Ví dụ
• Cho
– R(A, B, C)
– T(R) = 10000
– V(R, A) = 50
S= σA=10 ∧ B<20 (R)
• Ước lượng kích thước biểu thức

T(R) 10000
T(S) = = = 67
V(R, A) x 3 50 x 3
6/17/2009 Hệ Quản Trị CSDL 62 of 82
Ví dụ (tt)
• Ước lượng kích thước biểu thức
σ
S = A=10 ∨ B<20 (R)
• Giả sử
– n là T(R)
– m1 là số bộ thỏa A=10 trong R
– m2 là số bộ thỏa B<20 trong R

m1 m2
T(S) = n(1 – (1 – )(1 – ))
n n
6/17/2009 Hệ Quản Trị CSDL 63 of 82
Ước lượng: W = R1 R2
• Cho
– X = tập thuộc tính của R1
– Y = tập thuộc tính của R2

• Xét trường hợp X ∩ Y = ∅


T(W) = ?
Tương tự R1 × R2

6/17/2009 Hệ Quản Trị CSDL 64 of 82


Ước lượng: W = R1 R2 (tt)
• Xét trường hợp X ∩ Y = A
R1 A B C R2 A D

• Giả sử
– V(R1, A) ≤ V(R2, A)
• Mọi giá trị của A trong R1 thì có trong R2
– V(R2, A) ≤ V(R1, A)
• Mọi giá trị của A có trong R2 thì có trong R1

6/17/2009 Hệ Quản Trị CSDL 65 of 82


Ước lượng: W = R1 R2 (tt)
R1 A B C R2 A D

Chọn 1 bộ
Tìm

1 bộ trong R1 sẽ thỏa với T(R2) bộ trong R2


V(R2, A)

T(R2)
T(W) = T(R1) x
V(R2, A)
6/17/2009 Hệ Quản Trị CSDL 66 of 82
Ước lượng: W = R1 R2 (tt)
• V(R1, A) ≤ V(R2, A)
T(W) = T(R1) x
T(R2)
V(R2, A)

• V(R2, A) ≤ V(R1, A)
T(W) = T(R2) x
T(R1)
V(R1, A)

T(T1) T(R2)
T(W)
• Tổng quát=
max{V(R1, A), V(R2, A)}
6/17/2009 Hệ Quản Trị CSDL 67 of 82
Ước lượng: W = R1 R2 (tt)
• Xét trường hợp X ∩ Y = A

R1 A B C R2 A D

• W(A, B, C, D)
– Các thuộc tính không tham gia vào phép kết thì
số lượng các giá trị vẫn giữ nguyên
– V(W, A) = min {V(R1, A), V(R2, A)}
– V(W, B) = V(R1, B)
– V(W, C) = V(R1, C)
– V(W, D) = V(R2, D)
6/17/2009 Hệ Quản Trị CSDL 68 of 82
Ví dụ

Z = R1(A, B) R2(B, C) R3(C, D)

R1 R2 R3
T(R1) = 1000 T(R2) = 2000 T(R3) = 3000
V(R1, A) = 50 V(R2, B) = 200 V(R3, C) = 90
V(R1, B) = 100 V(R3, C) = 300 V(R3, D) = 500

6/17/2009 Hệ Quản Trị CSDL 69 of 82


Ví dụ (tt)

U = R1(A, B) R2(B, C)

V(U, A) = 50
T(U) = 1000 x 2000
V(U, B) = 100
200
V(U, C) = 300

6/17/2009 Hệ Quản Trị CSDL 70 of 82


Ví dụ (tt)

Z=U R3(C, D)

V(Z, A) = 50
T(Z) = 1000 x 2000 x 3000 V(Z, B) = 100
200 x 300 V(Z, C) = 90
V(Z, D) = 500

6/17/2009 Hệ Quản Trị CSDL 71 of 82


Nhận xét
• Phép chiếu
Ước lượng chính xác
• Phép tích
Ước lượng tương ñối hợp lý
• Phép chọn - số lượng bộ của các quan hệ tương ñối lớn
- giá trị của các thuộc tính phân bố ñồng ñều
• Phép kết

• Phép toán khác


– Hội
– Giao
– Trừ
– Lược bỏ trùng lắp
– Gom nhóm
6/17/2009 Hệ Quản Trị CSDL 72 of 82
Ước lượng: W = R1 ∪ R2
• R1 và R2 là bag
T(W) = T(R1) + T(R2)

• R1 và R2 là set
T’(W) = T(R1) + T(R2)
T’’(W) ≤ T(R1) + T(R2)

T’(W) + T’’(W)
→T(W) =
6/17/2009
2
Hệ Quản Trị CSDL 73 of 82
Ước lượng: W = R1 ∩ R2
• Cách 1 R1 R2

– TH1: T’(W)=0

– TH2: T’’(W)= T(R1) hoặc T’’(W)=T(R2)


T’(W) + T’’(W)
• Cách 2 →T(W) =
2
– Trường hợp ñặc biệt của phép kết tự nhiên
• Chỉ áp dụng cho ∩S
T(R1) T(R2)
T(W) =
6/17/2009
max{V(R
Hệ Quản1
, Z), V(R2, Z)}
Trị CSDL 74 of 82
Ước lượng: W = R1 − R2
• TH1: T(W) = T(R1)

• TH2: T(W) = T(R1) – T(R2)

→ T(W) = T(R1) − 1 T(R2)


2

6/17/2009 Hệ Quản Trị CSDL 75 of 82


Ước lượng: W = δ(R)
• TH1: T(W) = 1
– Nếu trong R không có bộ nào thì T(W)=0

• TH2: T(W) = T(R)


– R(a1, a2, …, an)
– Số bộ phân biệt tối ña của R là tích các V(R, ai),
i=1..n
→ T(W) = min{ 1 T(R1), tích các V(R, ai)}
2
6/17/2009 Hệ Quản Trị CSDL 76 of 82
Ước lượng: γW = (R)
• γL(R)
– Số lượng bộ trong W và cũng là số lượng nhóm

• TH1: T(W) = 1

• TH2: T(W) = T(R)


– R(a1, a2, …, an)
→ T(W)
– Số lượng= nhóm 1 ña
min{ tối T(Rlà1), tích
tích cáccác
V(R,V(R, ai)}
ai), i=1..n
2
6/17/2009 Hệ Quản Trị CSDL 77 of 82
Ví dụ
• R(a, b)
δ – T(R)=5000
– V(R, a)=50
σa =10 – V(R, b)=100

• S(b, c)
R S
– T(S)=2000
– V(S, b)=200
– V(S, c)=100
6/17/2009 Hệ Quản Trị CSDL 78 of 82
Ví dụ (tt)
250 500

δ
50 δ δ 1000 1000

100 σa =10 S 100 σa =10 S


2000 2000

R R
5000 5000

(1) (2)
6/17/2009 Hệ Quản Trị CSDL 79 of 82
Ví dụ (tt)
• Cộng kích thước sau khi thực hiện các phép
toán, ngoại trừ
– Các nút lá
– Nút gốc

• (1): 100+50+1000=1150
• (2): 100+1000=1100

• Phép lược bỏ trùng lắp thực hiện sau thì tốt


6/17/2009 Hệ Quản Trị CSDL 80 of 82
hơn
Ước lượng số lần truy xuất
IOs
• Các tham số thống kê
– B(R): tổng số block chứa tất cả các bộ của R
– f(R): số bộ tối ña trong mỗi block
– M: số block trống trên bộ nhớ

• Quan tâm
– Quan hệ R có ñược gom thành cụm không (clustered)?
– Thuộc tính trong các phép toán có chỉ mục không
(index)?
– Chỉ mục có gom cụm không (clustering index)?
– Kết quả cần ñược sắp thứ tự không?
6/17/2009 Hệ Quản Trị CSDL 81 of 82
Clustering
• Clustered-file
R R R R T T T …

S S S S S U U

• Clustered
R relation
R S T …

• Clustering
r1 r1index
r1 r1 r1 r1 r1 r1 r1 r1 r2 r2 r2 …

r1 r1 r1 r1 r1 r1 r1 r1 r1 r1 r2 r2 r2 r2 r2 r2 …

6/17/2009 Hệ Quản Trị CSDL 82 of 82


Ví dụ
• R1 R2
– T(R1) = 10000
– T(R2) = 5000
– S(R1) = S(R2) = 1/10 block
– M=101 blocks

• Số block ñược ñọc (bỏ qua việc ghi) ñể thực


hiện phép kết tự nhiên trên là bao nhiêu?

6/17/2009 Hệ Quản Trị CSDL 83 of 82


Nhận xét
• Ước lượng số lần truy xuất IOs không là
cách tốt nhất
– Bỏ qua chi phí CPU
– Bỏ qua tham số thời gian
– Xét trường hợp M ñủ hoặc thiếu

6/17/2009 Hệ Quản Trị CSDL 84 of 82


6/17/2009 Hệ Quản Trị CSDL 85 of 82
Ôn Tập
Tổng quan về Các Hệ CSDL
• CSDL(Database) là gì? Hệ Quản trị CSDL
(DBMS)là gì? Các ñối tượng sử dụng
CSDL?
• Kiến trúc, các thành phần của một hệ
quản trị CSDL?
• Mô hình thực thể
Các vấn ñề trong truy xuất ñồng
thời
• Vấn ñề mất dữ liệu ñã cập nhật (lost
updated problem)
• Vấn ñề không thể ñọc lại (Uncommitted
dependency)
• Vấn ñề dữ liệu không nhất quán
(Inconsistent Data Problem)
Kỹ thuật khóaLock
• Share Lock
• Exclusive Lock
• Kỹ thuật khóa 2 giai ñoạn
• Kỹ thuật khóa trên dữ liệu phân cấp
Transaction
• Transaction là gì?
• Cài ñặt Transaction trên SQL Server ntn?
An toàn & khôi phục dữ liệu
An toàn & khôi phục dữ liệu
• An toàn dữ liệu
• Khôi phục dữ liệu
• Cài ñặt khôi phục dữ liệu
An toàn dữ liệu
• An toàn dữ liệu:
• Các cơ chế an toàn dữ liệu
– Phân quyền và thu hồi quyền: Grant và
revoke
– Tạo bảng ảo View
• Mã hóa dữ liệu
Khôi phục dữ liệu
• Sau sự cố một giao tác
• Sau sự cố hệ thống
• Sau sự cố thiết bị
Cài ñặt khôi phục dữ liệu trên SQL
Server
• Các loại Backup: Full, Different,
Increment.
• Cách sử dụng công các công cụ Backup
và Restore trong SQL Server.
Cấu trúc lưu trữ và các
phương thức truy xuất
Cấu trúc lưu trữ và các phương
thức truy xuất
• Index là gì? Các loại Index? Cách tạo
Index trong SQL Server.
Tối ưu hóa câu hỏi
Tối ưu hóa câu hỏi
• Nhắc lại các cơ chế tối ưu : Các bước
thực hiện tối ưu hoá
• ðánh giá chi phí của một kế hoạch thực
hiện một câu hỏi
• Thực hiện một câu truy vấn
• Chuyển câu truy vấn thành ðại Số Quan
Hệ và cây phân tích <SFW>
Hệ QTCSDL phân tán
Hệ QTCSDL phân tán
• Kiến trúc khách/chủ (Client/Server) : Kiến
trúc khách/chủ -
• Các mô hình khách/chủ
• Cơ sở dữ liệu phân tán: Các ñặc trưng
của một hệ phân tán
• Quản lý tự ñiển dữ liệu (Catalog Manager)
– Quản lý truy xuất ñồng thời
– Tối ưu hoá câu hỏi
Câu Hỏi
• 1.So sánh sữ giống và khác nhau giữa View và Table. Cho ví dụ dùng SQL
Script tạo các ñối tượng trên?

• 2.So sánh sữ giống và khác nhau giữa Clustered Index và Non Clustered.
Cho ví dụ dùng SQL Script tạo các ñối tượng trên.

• 3.Transaction là gì, các ñặc ñiểm của transaction? Cho ví dụ bằng SQL
Script.

• 4.Hãy viết script tạo database có tên CNTT2, có kích thứơc ban ñầu là
10Mb và mỗi lần tăng thêm 1Mb khi ñầy.

• 5.Hãy trình bày ý nghĩa và cách thức sử dụng các công cụ: Backup và
Restore, DTS, BCP và Index Turning trong SQL Server.

• 6.So sánh sữ giống và khác nhau giữa Store và Trigger. Cho ví dụ dùng
SQL Script tạo các ñối tượng trên.
Bài Tập
• Bài tập chuyển câu truy vấn thành DSQH.
• Bài tập chuyển câu truy vấn thành cây <SFW>.
• Các bước thực hiện một câu truy vấn theo một
cách nào ñó.
• Viết Script SQL: tạo bảng, thêm xóa sửa dữ liệu.
Tạo, xóa, sửa và sử dụng View, Index, Store,
Trigger;
• Viết script triển khai transaction, grant, revoke
Tóm tắt các câu lệnh TSQL ñã học
1) Trên c s d liu (database)
Các phiên bản của SQL Server: Enterprise, Personal, Desktop, Developer,..
Các bộ phận của SQL Server: Enterprise Manager, Query Analyzer, Books Online,..
Các loại tập tin của SQL Server: data file (primary, secondary), log file
Các loại cơ sở dữ liệu của SQL Server: system database, user database

create database: tạo cơ sở dữ liệu


create database HoSoSinhVien

create database HoSoSinhVien


on (name=’HSSV_data’, filename=’c:\HSSV_data.mdf’)
log on (name=’HSSV_log’, filename=’c:\HSSV_log.ldf’)

drop database: xóa cơ sở dữ liệu


drop database HoSoSinhVien

alter database: sửa các thông tin của cơ sở dữ liệu


alter database HoSoSinhVien
modify name = HSSV

exec sp_dboption: sửa các thông tin của cơ sở dữ liệu


exec sp_dboption HoSoSinhVien, ‘read only’, ‘true’
exec sp_dboption HoSoSinhVien, ‘autoshrink’, ‘true’
exec sp_dboption HoSoSinhVien, ‘single_user’

dbcc: ñiều khiển cơ sở dữ liệu


dbcc shrinkdatabase(HoSoSinhVien, 10)

2) Trên b ng (table)
Nhớ các kiểu số liệu: text, binary, numberic, money, datetime, bit, variant
Nhớ các các ràng buộc: default, check, unique, foreign, primary
Nhớ các kiểu toàn vẹn: entity, domain, referential, user
Nhớ các thuộc tính bổ trợ: identity, null

create table: tạo bảng


Tạo bảng với các cột
create table SinhVien (
MaSV int,
TenSV nchar(50)
)

1
Tạo với các ràng buộc
create table SinhVien (
MaSV int primary key,
TenSV nvarchar(50) not null,
QueQuan int references DiaPhuong(MaDP)
)

drop table: xóa bảng


drop table SinhVien

alter table..add: thêm cột


Thêm cột bằng cách dùng lệnh alter table
alter table SinhVien
add QueQuan int

alter table..drop column: xóa cột


alter table SinhVien
drop column QueQuan

alter table..alter column: thêm thuộc tính not null


alter table SinhVien
alter column TenSV nchar(50) not null

alter table..add primary key: thêm khóa chính


Thêm ràng buộc khóa chính cần phải biến một cột null thành not null trước khi thêm.
Nếu ñể lệnh chuyển ñổi thuộc tính not null ngay cạnh lệnh thêm khóa chính thì phải chèn
từ khóa go vào vì có thể lệnh trên chưa ñược thực hiện do ñó lệnh dưới báo lỗi
alter table SinhVien
alter column MaSV int not null
go

alter table SinhVien


add primary key (MaSV)

alter table..add foreign key: thêm ràng buộc khóa ngoài


alter table SinhVien
add foreign key (QueQuan) references DiaPhuong(MaDP)

2
alter table..add default: thêm ràng buộc mặc ñịnh
alter table SinhVien
add default 'khong ten' for TenSV

exec sp_help: xem thông tin bảng


exec sp_help SinhVien

3) Trên b n ghi (record)


Nhớ thêm phần biểu thức ñiều kiện
Nhớ thêm phần ký tự thay thế

insert..values: thêm các bản ghi vào bảng


insert into SinhVien (MaSV, TenSV, QueQuan)
values (1, N’Nguyễn Văn A’, 1)

insert..select: thêm các bản ghi từ bảng khác vào bảng


insert into DocGia
select MaSV, TenSV, QueQuan from SinhVien
insert into DocGia
select MaGV, TenGV, QueQuan from GiaoVien

select..into: ñưa kết quả lựa chọn vào bảng mới


select MaSV, TenSV, Diem
into SinhVienKha
from SinhVien
where Diem > 7.0

delete: xóa các bản ghi từ bảng


delete from SinhVien
delete from SinhVien where MaSV=1234

truncate: xóa toàn bộ bản ghi của bảng


truncate table SinhVien

update: sửa các bản ghi trong bảng


update SinhVien
set NhomTruong = 1
where MaSV < 4

3
update SinhVien
set NhomTruong = 4
where (MaSV > 3 and MaSV < 8)

4) Truy vn (query)


Hỗ trợ truy vấn: distinct, top, as, identity
Phép toán tập hợp: in, like, between
Các hàm tổng nhóm: sum, max, min, avg

4.1) Truy vấn ñơn giản

select *: Hiện tất cả bảng


select *
from SinhVien

select: Hiện một số cột


select TenSV, DiemTB
from SinhVien

select..where: Hiện một số dòng / bản ghi


select TenSV, DiemTB
from SinhVien
where DiemTB > 6.0

select..order by: Hiện và sắp xếp theo ñiểm rồi theo tên
select TenSV, DiemTB
from SinhVien
order by DiemTB desc, TenSV asc

select..distinct: Hiện danh sách giá trị không trùng lặp


select distinct QueQuan
from SinhVien

select..top: Hiện các dòng ñầu tiên trong bảng


select top 3 TenSV, DiemTB
from SinhVien
order by DiemTB desc, TenSV asc

4
4.2) Truy vấn lồng nhau (nested query)

select..where (select)
Hiện tất cả những người trong bảng nhân viên có lương bằng lương lớn nhất của
những người có trong công ty
select TenNV, Luong
from NhanVien
where Luong = (select max(Luong) from NhanVien)

select..where (in)
Hiện tất cả những người trong bảng nhân viên có lương lớn nhất hoặc lớn nhì của
những người có trong công ty.
select TenNV, Luong
from NhanVien
where Luong in (select top 2 Luong from NhanVien order by Luong)
Câu lệnh select trong sẽ tạo ra một tập hai giá trị (top 2) ñó là lương lớn nhất và lương
lớn nhì. Và câu lệnh select thứ nhất sẽ chọn ra những người mà lương nằm trong tập lớn
nhất và lớn nhì

select..where (in sub)


Hiện ra tất cả những người có lương lớn nhất phòng của anh ta (không phải lớn nhất
trong công ty mà lớn nhất trong phòng hoặc ñơn vị mà anh ta thuộc về)
select nv1.TenNV, nv1.Luong
from NhanVien as nv1
where nv1.Luong = (select max(Luong) from NhanVien where Phong=nv1.Phong)
Câu lệnh select trong sẽ trả về giá trị lương lớn nhất nhưng không phải lớn nhất trong
toàn công ty mà lớn nhất trong phòng của nv1. Sau ñó câu lệnh select ngoài cùng sẽ xác
ñịnh xem nv1 có ñược chọn không bằng cách kiểm tra lương anh ta với lương lớn nhất
của phòng anh ta.

4.3) Truy vấn tổng nhóm (subtotal query / grouping query)

select..group by: Thống kê theo tiêu chí


Hiện ra số lượng các nhân viên ứng với từng quê
select QueQuan, count(*)
from NhanVien
group by QueQuan

ðếm số nam và số nữ trong công ty


select GioiTinh, count(*)
from NhanVien
group by GioiTinh

Tính tổng thu nhập theo từng phòng


select Phong, sum(Luong)

5
from NhanVien
group by Phong

select..having: Hiện ra một số nhóm phù hợp


Chỉ ñếm số lượng người ở Hải Phòng và số lượng người ở Hà nội
select QueQuan, count(*)
from NhanVien
group by QueQuan
having (QueQuan = ‘HP’, QueQuan = ‘HN’)

Chỉ hiện ra những phòng nào có tổng thu nhập lớn hơn 500000
select Phong, sum(Luong)
from NhanVien
group by Phong
having sum(Luong) > 5000000

Chỉ hiện ra những tỉnh nào có số lượng người lớn hơn 10


select QueQuan, count(*)
from NhanVien
group by QueQuan
having count(*) > 10

4.4) Truy vấn liên bảng (cross table query / joining query)

select..inner join: ghép các cặp bản ghi thỏa mãn ñiều kiện
Ghép bảng nhân viên và hiện ra tên nhân viên và tên ñịa phương
select NhanVien.TenNV, DiaPhuong.TenDP
from NhanVien inner join DiaPhuong on NhanVien.QueQuan = DiaPhuong.MaDP

select..left outer join: lấy tất cả phía trái và ghép (nếu có) với phải
Lấy tất cả những nhân viên kể cả những nhân viên có quê quán không hợp lệ (nghĩa là
mã quê quán không có trong bảng ñịa phương)
select NhanVien.TenNV, DiaPhuong.TenDP
from NhanVien left outer join DiaPhuong on NhanVien.QueQuan = DiaPhuong.MaDP

select..right outer join: lấy tất cả phía phải và ghép (nếu có) với phía
trái
Lấy tất cả những ñịa phương ghép với nhân viên, các ñịa phương không hợp lệ sẽ
ñược ghép với bộ dữ liệu rỗng. Không hiện ra các nhân viên không có mã quê quán phù
hợp
select NhanVien.TenNV, DiaPhuong.TenDP
from NhanVien right outer join DiaPhuong on NhanVien.QueQuan =
DiaPhuong.MaDP

6
select..full outer join: lấy từ hai phía và ghép nếu có
Lấy tất cả những nhân viên (nếu không có quê quán phù hợp thì ghép với bộ dữ liệu
rỗng) và tất cả những ñịa phương kể cả không có nhân viên.
select NhanVien.TenNV, DiaPhuong.TenDP
from NhanVien right outer join DiaPhuong on NhanVien.QueQuan =
DiaPhuong.MaDP

select..cross join: trả về tất cả các cặp có thể ghép


Ghép từng nhân viên với tất cả các ñịa phương. Như vậy nếu có m nhân viên và có n
ñịa phương thì bảng ñích sẽ có m*n dòng. n dòng ñầu cho nhân viên thứ nhất ghép với
các ñịa phương. n dòng sau cho nhân viên thứ hai ghép với các ñịa phương. và tiếp tục
như thế tới nhân viên thứ m.
select NhanVien.TenNV, DiaPhuong.TenDP
from NhanVien cross join DiaPhuong

ref: Tham khảo thêm một số lệnh


Xem tất cả các CƠ SỞ DỮ LIỆU người dùng trong MÁY CHỦ
Mỗi khi một cơ sở dữ liệu ñược tạo ra, bảng sysdatabase trong cơ sở dữ liệu master sẽ
chứa thông tin về bảng mới tạo ra ñó. Do vậy chúng ta có thể liệt kê tất cả các cơ sở dữ
liệu trong một máy chủ bằng cách liệt kê các bản ghi trong bảng sysdatabase
select *
from master.dbo.sysdatabases
where sid <> 1

Xem tất cả các BẢNG người dùng trong CƠ SỞ DỮ LIỆU


Mỗi khi một bảng ñược tạo ra trong một cơ sở dữ liệu, thông tin về bảng ñó sẽ ñược
chứa trong bảng sysobjects của chính cơ sở dữ liệu chứa bảng vừa tạo. Vì vậy chúng ta
có thể xem danh sách các bảng trong cơ sở dữ liệu bằng cách truy vấn bảng sysobjects.
Các bảng do người dùng tạo có kiểu là ‘U’
select *
from Northwind.dbo.sysobjects
where xtype='U'
Trong ví dụ này, chúng ta lấy tất cả các bản ghi bảng sysobjects của cơ sở dữ liệu
Northwind nhưng chỉ lấy những bảng người dùng, nghĩa là những bảng có xtype là ‘U’

Xem tất cả các CỘT thuộc về một BẢNG


Mỗi khi một cột trong bảng ñược tạo, bảng syscolumns trong cơ sở dữ liệu sẽ chứa
thông tin về cột vừa tạo. Thuộc tính id của cột sẽ chứa ñịnh danh của bảng mà cột ñó
thuộc về. Vì vậy ñể xem các cột trong một bảng dữ liệu, chúng ta có thể truy vấn bảng
syscolumns
declare @x int

7
set @x = (select id from sysobjects where name='Employees')
select * from syscolumns where id = @x
Trong ví dụ này, ta khai báo biến @x kiểu int, sau ñó lấy id của bảng Employees vào
biến @x, rồi ta lấy tất cả các cột trong bảng syscolumns mà có id bằng @x, cũng có
nghĩa là id của bảng Employees. Do vậy ta sẽ liệt kê ñược tất cả các cột trong bảng
Employees

Sử dụng bảng tạm


Khai báo bảng, cập nhật bảng, và hiện bảng
declare @x table(MaSV int, TenSV nvarchar(20))

insert into @x values(1, N'Thưởng')


insert into @x values(2, N'Yến')

select * from @x

Khai báo bảng, tải bảng khác từ trong cơ sở dữ liệu lên bảng vừa khai báo, và hiện
bảng
declare @x table(MaSV int, TenSV nvarchar(20))

insert into @x
select EmployeeID, firstname
from Northwind.dbo.Employees

select * from @x

Sử dụng biến tạm


declare @t money
set @t = (select max(UnitPrice) from Northwind.dbo.products)
select * from Northwind.dbo.products where UnitPrice >= @t

ref: Các khái niệm cơ bản của cơ sở dữ liệu


Các mô hình dữ liệu (data model)
+ Mô hình thứ bậc (hierarchical)
+ Mô hình mạng lưới (network)
+ Mô hình quan hệ (relational)

Các vấn ñề của lưu trữ


+ Sự dư thừa (redundance)
+ Sự nhất quán (consistence)
+ Tính toàn vẹn (integrity)
+ Sự an toàn (security)
+ Sự chia sẻ (sharing)

8
Các khái niệm cơ bản
+ Cơ sở dữ liệu (database)
+ Bảng (table) hoặc quan hệ (relation)
+ Bản ghi (record) hoặc dòng (row) hoặc bộ (tuple)
+ Trường (field) hoặc cột (column)
+ Mối quan hệ (relationship) ñược biểu hiện bằng bảng (table) hoặc khóa (key)

Mối quan hệ giữa các


+ Tại sao phải lưu mối quan hệ
+ Phương pháp lưu các mối quan hệ (dùng khóa, dùng bảng)
+ Khóa chính (primary key) và khóa ngoài (foreign key)
+ Vấn ñề toàn vẹn tham chiếu (referential integrity)

Ngôn ngữ ñịnh nghĩa và xử lý dữ liệu


+ Thao tác trên các ñối tượng như cơ sở dữ liệu, bảng, cột
+ Phần ñịnh nghĩa cơ sở dữ liệu và bảng: create, drop, alter
+ Phần cập nhật dữ liệu: insert, delete, update
+ Phần truy vấn dữ liệu: join, union, projection, selection, sort, group
+ Phần lập trình và thao tác: declare, set, use, go

ref: Liên quan tới ñịnh nghĩa bảng


Các vấn ñề về toàn vẹn dữ liệu
+ Toàn vẹn thực thể (entity integrity): primary key, unique, identity
+ Toàn vẹn tham chiếu (referential integrity): foreign key, check
+ Toàn vẹn miền dữ liệu (domain integrity): default, foreign key, check, not null
+ Toàn vẹn người dùng (user integrity): rules, stored procedures, triggers

Các hỗ trợ với toàn vẹn


+ Ràng buộc kiểm tra (check constraint): phải thỏa mãn ñiều kiện nào ñó
+ Ràng buộc mặc ñịnh (default constraint): phải có một giá trị mặc ñịnh
+ Ràng buộc duy nhất (unique constraint): các giá trị trong cột không ñược trùng lặp

+ Ràng buộc khóa ngoài (foreign key constraint): các giá trị phải hợp lệ với cột khóa
chính tương ứng
+ Ràng buộc khóa chính (primary key constraint): phải duy nhất và không trống

+ Thuộc tính ñịnh danh (identity property): có thể ñược tăng tự ñộng
+ Thuộc tính không trống (not null property): không ñược phép ñể trống

Các kiểu dữ liệu


Giá trị nhị phân: bit
Các số nguyên: bigint, int, smallint, tinyint
Các số thực xấp xỉ: float, real

9
Giá trị số thực chính xác: decimal, numberic
Giá trị tiền tệ: money, smallmoney
Giá trị hời gian: datetime, smalldatetime

Các chuỗi: char, varchar, text, nchar, nvarchar, ntext,


Các chuỗi nhị phân: binary, varbinary, image
Các kiểu khác: cursor, table, variant, timestamp, uniqueidentifier

10
baigiai4_2

select * from Employee


create database test
use test
create table project(
prid char(2) primary key,
prname varchar(10),
prdesc varchar(20),
numofpr int
)
create table employee(
empid char(2) primary key,
empname varchar(10),
empage int,
prid char(2) foreign key references project(prid)
)

insert into project values('p1','hr','big',2)


insert into project values('p2','it','small',1)
insert into employee values('e1','a',25,'p1')
insert into employee values('e2','c',30,'p1')
insert into employee values('e3','b',22,'p2')

begin tran
update employee
set prid = 'p2'
where empid = 'e1'

update project
set numofpr = numofpr - 1
where prid = 'p1'

update project
set numofpr = numofpr + 1
where prid = 'p2'
commit tran

create view vwpremp


as
select empid, empname, prname
from employee, project
where employee.prid = project.prid

select * from vwpremp

create nonclustered index idx_empname on employee(empname)

Page 1/1

You might also like