Mục Tiêu

(cid:1) Các thành phần liên quan. (cid:1) Tổ chức vật lý của SQL Server. (cid:1) Cấu trúc lưu trữ và phương thức truy

xuất. xuất.

DBMS04 – Slides 2

Tổ Chức Vật Lý trên SQL Server

Các Thành Phần Liên Quan

(cid:1) Bộ phận quản lý tập tin

(cid:1) 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….

(cid:1) .mdf (cid:1) .ldf .bak (cid:1) .bak

: meta data file : log data file : bakup data file : bakup data file

(cid:1) Dữ liệu vật lý có thể lưu trên nhiều file (cid:1) Dữ liệu vật lý có thể lưu trên nhiều file

hay thậm chí nhiều ổ ñĩa.

(cid:1) Bộ phận quản lý ñĩa (cid:1) Bộ phận quản lý dữ liệu vật lý

(cid:1) 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.

DBMS04 – Slides 3

DBMS04 – Slides 4

Kiến trúc của SQL Server

Kiến trúc của SQL Server

(cid:1) Các database hệ thống của SQL Server (cid:1) master Database chứa thông tin về cấu

hình, phần quyền của hệ thống

(cid:1) tempdb Database chứa dữ liệu tạm cần lưu

trữ trữ

(cid:1) model Database chứa database mẫu ñể tạo

một database mới

(cid:1) msdb Database ñể hỗ trợ SQL Server Agent

DBMS04 – Slides 5

DBMS04 – Slides 6

Kiến trúc của SQL Server

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 • Tập tin tuần tự chỉ mục • Cây B+ và Kỹ thuật bảng băm

DBMS04 – Slides 7

DBMS04 – Slides 8

Giới thiệu Index

Các Loại Index

(cid:1) Clustered/Non clustered

(cid:1) Tại sao tạo Index

(cid:1) Clustered = thứ tự các record lưu trữ vật lý sắp thứ

tự của index

(cid:1) Non clustered = thứ tự các record lưu trữ vật lý

(cid:1) Tăng tốc ñộ truy xuất dữ liệu (cid:1) Không bắt buộc tính liên tục trên các dòng

không sắp thứ tự của index

(cid:1) Khi nào không nên tạo Index?

(cid:1) Dense/sparse (cid:1) Dense/sparse

(cid:1) Dense = ðánh chỉ mục cho tất cả các records (cid:1) Sparse = Chỉ ñánh chỉ một số records

Tốn bộ nhớ trên ñĩa ñể lưu trữ Index. Khi (cid:1) Tốn bộ nhớ trên ñĩa ñể lưu trữ Index. Khi user cập nhật dữ liệu trên cột Index, SQL Server cũng cập nhật index

(cid:1) Primary/secondary

(cid:1) 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.

(cid:1) B+ tree / Hash table / …

(cid:1) Việc quản lý Index sẽ tốn thời gian và tài nguyên nên nếu Index không thường sử dụng thì không cần tạo.

DBMS04 – Slides 9

DBMS04 – Slides 10

Clustered Index

Non clustered Indexes

(cid:1) File ñược sắp theo thứ tự của thuộc

(cid:1) Dùng ñể sắp chỉ mục các thuộc tính không

tính chỉ mục index

phải là khóa chính

10

20 20

30

10

40

10

20

50

20

60

70

20

80

30

30

30

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

DBMS04 – Slides 11

DBMS04 – Slides 12

Clustered vs. Non clustered Index

Cây B+

(cid:1) d là bậc (cid:1) Mỗi node có >= d và <= 2d keys trừ nút gốc

30

120

240

Data entries

Data entries

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

(Index File) (Data file)

(cid:1) Nút lá:

Data Records

40

50

60

Data Records

Next leaf

CLUSTERED

UNCLUSTERED

40 50 60

DBMS04 – Slides 13

DBMS04 – Slides 14

B+ Tree Example

B+ Tree Design

d = 2

(cid:1) How large d ? (cid:1) Example:

80

20

60

100

120

140

(cid:1) Key size = 4 bytes (cid:1) Pointer size = 8 bytes (cid:1) Pointer size = 8 bytes (cid:1) Block size = 4096 byes

(cid:1) 2d x 4 + (2d+1) x 8 <= 4096 (cid:1) d = 170

10 15 18 20 30 40 50 60 65 80 85 90

10 15 18 20 30 40 50 60 65 80 85 90

DBMS04 – Slides 15

DBMS04 – Slides 16

Searching a B+ Tree

Insertion in a B+ Tree

Insert K=19

80

(cid:1) Exact key values: (cid:1) Start at the root (cid:1) Proceed down, to the leaf

20

60

100

120

140

Select name From people Where age = 25

(cid:1) Range queries:

(cid:1) As above (cid:1) Then sequential traversal

Select name From people Where 20 <= age and age <= 30

10 15 18 20 30 40 50 60 65 80 85 90

10 15 18 20 30 40 50 60 65 80 85 90

DBMS04 – Slides 17

DBMS04 – Slides 18

Insertion in a B+ Tree

Insertion in a B+ Tree

Now insert 25

After insertion

80

80

20

60

100

120

140

20

60

100

120

140

10 15 18 19 20 30 40 50 60 65 80 85 90 10 15 18 19 20 30 40 50 60 65 80 85 90

10 15 18 19 20 30 40 50 60 65 80 85 90 10 15 18 19 20 30 40 50 60 65 80 85 90

DBMS04 – Slides 19

DBMS04 – Slides 20

Insertion in a B+ Tree

Insertion in a B+ Tree

After insertion

But now have to split !

80

80

20

60

100

120

140

20

60

100

120

140

10 15 18 19 20 25 30 40 50 60 65 80 85 90 10 15 18 19 20 25 30 40 50 60 65 80 85 90

10 15 18 19 20 25 30 40 50 60 65 80 85 90 10 15 18 19 20 25 30 40 50 60 65 80 85 90

DBMS04 – Slides 21

DBMS04 – Slides 22

Insertion in a B+ Tree

Deletion from a B+ Tree

After the split

Delete 30

80

80

20

30

60

100

120

140

20

30

60

10

15

18

19

20

25

30

40

50

60

65

80

85

90

10

15

18

19

20

25

30

40

50

60

65

80

85

90

100 120 140

10 15 18 19 20 25 30 40 50 60 65 80 85 90 10 15 18 19 20 25 30 40 50 60 65 80 85 90

DBMS04 – Slides 23

DBMS04 – Slides 24

Deletion from a B+ Tree

Deletion from a B+ Tree

After deleting 30

Now delete 25

80

80

May change to 40, or not

20

30

60

20

30

60

25

10

15

18

19

20

25

40

50

60

65

80

85

90

10

15

18

19

20

40

50

60

65

80

85

90

100 120 140 100 120 140

10 15 18 19 20 25 40 50 60 65 80 85 90 10 15 18 19 20 25 40 50 60 65 80 85 90

DBMS04 – Slides 25

DBMS04 – Slides 26

Deletion from a B+ Tree

Deletion from a B+ Tree

Now delete 40

80

80

After deleting 25 Need to rebalance Rotate

20

30

60

19

30

60

10

15

18

19

20

40

50

60

65

80

85

90

10

15

18

19

20

40

50

60

65

80

85

90

100 120 140 100 120 140

10 15 18 19 20 40 50 60 65 80 85 90 10 15 18 19 20 40 50 60 65 80 85 90

DBMS04 – Slides 27

DBMS04 – Slides 28

Deletion from a B+ Tree

Deletion from a B+ Tree

Final tree

After deleting 40 Rotation not possible Need to merge nodes

80

80

19

30

60

19

60

10

15

18

19

20

50

60

65

80

85

90

10

15

18

19

20

50

60

65

80

85

90

100 120 140 100 120 140

10 15 18 19 20 50 60 65 80 85 90 10 15 18 19 20 50 60 65 80 85 90

DBMS04 – Slides 29

DBMS04 – Slides 30

Variation on B+tree: B-tree (no +)

(cid:1) Idea:

Hash Tables

(cid:1) Avoid duplicate keys (cid:1) Have record pointers in non-leaf nodes

(cid:1) Note: Textbook’s B-Tree means B+-tree!

DBMS04 – Slides 31

Hash Tables

Ví dụ bảng băm

(cid:1) Giả lưu giữ khối các dữ liệu với các khóa

(cid:1) Bảng băm:

(cid:1) Có n khối dữ liệu cần lưu trữ (cid:1) Cho một hàm hash f(k):khóa k (cid:2) {0, 1, …,

e

0 0

n-1} (cid:1) f(k) sẽ trỏ ñến dữ liệu có khóa k f(k) sẽ trỏ ñến dữ liệu có khóa k

b

1

f

như sau (cid:1) h(e)=0 (cid:1) h(b)=h(f)=1 (cid:1) h(b)=h(f)=1 (cid:1) h(g)=2 (cid:1) h(a)=h(c)=3

g

2

a

3

c

DBMS04 – Slides 33

DBMS04 – Slides 34

Tìm một record trong bảng băm

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

(cid:1) Thêm record vào một khối khi còn chỗ

trống

(cid:1) Ví dụ: thêm d với h(d)=2

e

e e

0 0

0 0

b

b

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

1

1

f

f

g

g

2

2

d

a

3

a

3

c

c

DBMS04 – Slides 35

DBMS04 – Slides 36

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

Hiệu suất của bảng băm

(cid:1) Tốt nếu ít khối overflow.

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

e

0 0

b

k

1

f

trống (cid:1) Ví dụ: (cid:1) Ví dụ: thêm k với h(k)=1

g

2

d

a

3

c

DBMS04 – Slides 37

DBMS04 – Slides 38

Tạo Index trên SQL Server

Tạo Index trên SQL Server

(cid:1) Trên SQL hỗ trợ 2 loại Index:

(cid:1) Cluster Index (cid:1) Non Cluster Index

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

cluster index cluster index

DBMS04 – Slides 39

DBMS04 – Slides 40

Tạo Index trên SQL Server

Tạo Index trên SQL Server

(cid:1) Cú pháp tạo Index:

(cid:1) CREATE [UNIQUE] [CLUSTERED |

(cid:1) Non Cluster Index: có thể tạo 249 non- cluster index cho một bảng dữ liệu. (cid:1) Dữ liệu của bảng không sắp theo thứ tự

NONCLUSTERED] INDEX index_name ON table_name (column_name[,column_name]…) (column_name[,column_name]…)

của non-cluster index. Thường tạo index cho các cột dữ liệu dùng (cid:1) 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.

DBMS04 – Slides 41

DBMS04 – Slides 42

Bài tập tạo Index trên SQL Server

Tạo Index trên SQL Server

Giả sử CSDL của bạn có 1 bảng sau:

(cid:1) Cú pháp tạo Index:

(cid:1) CREATENONCLUSTEREDINDEX

idxExternalCandidate ONExternalCandidate(cAgencyCode) ONExternalCandidate(cAgencyCode)

(cid:1) CREATECLUSTEREDINDEX

SinhVien(MaSV, TenSV, TuoiSV, DiaChi) Trong ñó MaSV là khóa chính, thường dùng ñể join các bảng khác; tên (TenSV) thường xuất join các bảng khác; tên (TenSV) thường xuất hiện trong ñiều kiện WHERE trong các câu hiện trong ñiều kiện WHERE trong các câu truy vấn thông tin.

idxRecruitment ON RecruitmentAgencies(cAgencyCode)

Yêu cầu: Xác ñịnh Cluster và non cluster index cho bảng SinhVien. Viết câu lệnh SQL tạo bảng và tạo các câu Index tương ứng.

DBMS04 – Slides 43

DBMS04 – Slides 44

Index trên SQL Server

Tóm lại

(cid:1) 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

(cid:1) Khóa chính (cid:2) Cluster Index (cid:1) Các cột hay truy xuất nên tạo non

cluster index.

(cid:1) Kiến trúc Hệ quản trị Cơ Sở Dữ Liệu (cid:1) Cấu trúc lưu trữ và phương thức truy xuất (cid:1) Cấu trúc lưu trữ và phương thức truy xuất

(cid:3) tăng tốc ñộ truy xuất CSDL. (cid:3) tăng tốc ñộ truy xuất CSDL. (cid:1) 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

DBMS04 – Slides 45

DBMS04 – Slides 46

Stored Procedure

(cid:1) Cho phép lập trình theo hướng Module (cid:1) Thực thi nhanh hơn, giảm ñược việc

chiếm dụng ñường truyền mạng

Stored Procedure và Trigger

(cid:1) Bảo mật (cid:1) Bảo mật (cid:1) Xử lý các chức năng và chia sẽ với các

ứng dụng khác

DBMS04 – Slides 48

Stored Procedure

Stored Procedure Syntax

(cid:4) Cú pháp:

CREATE PROCEDURE proc_name

AS BEGIN

sql_statement1 sql_statement1 sql_statement2

END

DBMS04 – Slides 49

DBMS04 – Slides 50

Ví dụ 1 – SP không tham số

Ví dụ 2 – SP có tham số

• Mở Query Analyzer, gõ:

• Mở Query Analyzer, gõ: CREATE PROCEDURE sp_XemSV @MaSV nvarchar(11)

CREATE PROCEDURE sp_XemDSSV AS BEGIN

AS BEGIN BEGIN

PRINT N‘DANH SÁCH SINH VIÊN’ PRINT N‘DANH SÁCH SINH VIÊN’ SELECT MSSV, HoLot, Ten, NgaySinh,

NoiSinh, DiaChi

PRINT N‘SINH VIÊN’ SELECT HoLot, Ten, NgaySinh,

FROM SinhVien

NoiSinh, DiaChi

END

FROM SinhVien WHERE MSSV = @MaSV

• Bấm F5 ñể thực thi

END

• Bấm F5 ñể thực thi

DBMS04 – Slides 51

DBMS04 – Slides 52

Xem nội dung SP

Gọi Stored Procedure

(cid:4) Cú pháp:

• Cú pháp:

EXECUTE proc_name danh_sách_tham_số

sp_helptext proc_name

(cid:4)Ví dụ:

hoặc

• Mở Query Analyzer, gõ:

EXEC proc_name danh_sách_tham_số EXEC proc_name danh_sách_tham_số

sp_helptext sp_XemDSSV

hoặc

sp_helptext sp_XemSV

proc_name danh_sách_tham_số

• Kiểm tra chính tả, nội dung procedure.

//Mỗi tham số các nhau một dấu phẩy

DBMS04 – Slides 53

DBMS04 – Slides 54

Ví dụ

Trigger là gì?

• Mở Query Analyzer, gõ: EXECUTE sp_XemDSSV

(cid:1) Là một Stored Procedure gắn liền với Table cụ thể, ñược gọi tự ñộng khi user thay ñổi dữ liệu trên một table.

EXECUTE sp_XemSV ‘K29.103.010’

hoặc

EXEC sp_XemDSSV

(cid:1) Khi có thao tác cập nhật dữ liệu (insert, update, delete) thì trigger ứng với thao tác ñó ñược thực delete) thì trigger ứng với thao tác ñó ñược thực hiện tự ñộng

EXEC sp_XemSV ‘K29.103.010’

(cid:1) Trigger không ñược gọi trực tiếp, không có tham

hoặc

số

sp_XemDSSV

(cid:1) Là thành phần của Transaction: Những lệnh

sp_XemSV ‘K29.103.010’

trong Trigger có thể ROLL BACK.

• Bấm F5 ñể thực thi

DBMS04 – Slides 55

DBMS04 – Slides 56

Sử dụng Trigger ñể làm gì?

Tạo Trigger: Cú pháp chung

(cid:1) ðể thực hiện cascade updates và cascade

CREATE TRIGGER trigger_name

deletes qua các table quan hệ trong database (cid:1) Ép buộc tính toàn vẹn của dữ liệu phức tạp: (cid:1) Thực hiện các ràng buộc có tham chiếu ñến các

column trong nhiều table. column trong nhiều table.

ON table_name [WITH ENCRYPTION] FOR [INSERT | DELETE | UPDATE] FOR [INSERT | DELETE | UPDATE] AS sql_statements

(cid:1) ðịnh nghĩa Custom Error Messages:

(cid:1) Dùng trigger ñể trả về các chuỗi thông báo trạng

thái của môt hành ñộng nào ñó.

(cid:1) Bảo trì các dữ liệu không ñược chuẩn hoá

DBMS04 – Slides 57

DBMS04 – Slides 58

Tạo Trigger trong câu lệnh Update

Ví dụ

CauThu (MACT, HOTEN, VITRI, NGAYSINH,

DIACHI, MACLB, MAQG, SO)

Yêu cầu: Khi thêm 1 cầu thủ, kiểm tra số áo

không ñược trùng nhau! không ñược trùng nhau!

CREATE TRIGGER tên_Trigger ON tên_bảng FOR UPDATE AS AS

IF UPDATE (tên_cột)

[AND UPDATE(tên_cột)| OR UPDATE(tên_cột)]

các câu lệnh của trigger

DBMS04 – Slides 59

DBMS04 – Slides 60

Trigger

Lời giải

(cid:1) Khi INSERT mới 1 record thì nó sẽ nằm

trong bảng INSERTED.

(cid:1) Khi UPDATE, DELETE 1 record thì nó sẽ

CREATE TRIGGER trg_KiemTraSoAo ON CauThu FOR INSERT AS

nằm trong bảng DELETED. nằm trong bảng DELETED.

BEGIN

DECLARE @So int DECLARE @MaCLB varchar(6) --Lấy Số áo và Mã CLB vừa Insert SELECT @So = SO, @MaCLB = MACLB FROM INSERTED

DBMS04 – Slides 61

DBMS04 – Slides 62

Lời giải

Lập trình với con trỏ

(cid:1) Một con trỏ là một ñối tượng cơ sở dữ liệu ñược

IF (SELECT COUNT(SO) FROM CAUTHU WHERE MACLB = @MaCLB AND SO = @SO) > 1

sử dụng bởi ứng dụng ñể thao tác với các hàng dữ liệu thay vì các tập hợp dữ liệu.

BEGIN

PRINT N’Bị trùng số áo’ ROLLBACK ROLLBACK

(cid:1) Con trỏ ñược dùng với Procedure và Trigger (cid:1) Với con trỏ chúng ta có thể: (cid:1) Với con trỏ chúng ta có thể:

END

(cid:1) Cho phép ñịnh vị các hàng chỉ ñịnh của tập kết quả. (cid:1) Nhận về một hàng ñơn hoặc tập hợp các hàng từ vị trí

ELSE

hiện tại của tập kết quả.

BEGIN

(cid:1) Hỗ trợ sửa ñổi dữ liệu của hàng ở vị trí hiện tại trong

tập kết quả.

PRINT N’Thêm cầu thủ thành công’ COMMIT

END

(cid:1) Hỗ trợ nhiều cấp ñộ quan sát ñối với các thay ñổi ñược tạo ra bởi các người dùng khác trên các dữ liêu của tập kết quả.

END

DBMS04 – Slides 63

DBMS04 – Slides 64

Quy trình xử lý con trỏ

Tạo con trỏ

(cid:1) Lệnh DECLARE dùng ñể tạo một con trỏ. (cid:1) Nó chứa các lệnh SELECT ñể bao gồm các bản ghi từ

bảng.

(cid:1) Cú pháp là:

DECLARE CURSOR DECLARE CURSOR [LOCAL | GLOBAL] [FORWARD ONLY | SCROLL] [STATIC | KEYSET | DYNAMIC |FAST_FORWARD] [READ_ONLY | SCROLL_LOCKS | OPTIMISTIC] [TYPE_WARNING] FOR