1. Trang chủ
  2. » Công Nghệ Thông Tin

Hệ quản trị cơ sở dữ liệu SQL Server

19 1K 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 19
Dung lượng 0,94 MB

Nội dung

Nội dung tài liệu Hệ quản trị cơ sở dữ liệu SQL Server giới thiệu đến các bạn những nội dung về hệ quản trị cơ sở dữ liệu, tổng quan về SQL Server, những điểm mới của SQL Server 2008,... Mời các bạn cùng tham khảo, với các bạn chuyên ngành Công nghệ thông tin thì đây là tài liệu tham khảo hữu ích.

Trang 1

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

1 Dữ liệu và cơ sở dữ liệu:

- Dữ liệu có nghĩa là thông tin và nó là thành phần quan trọng trong bất kỳ lĩnh vực, công việc nào Trong công việc

thường ngày bao gồm cả việc sử dụng đã có và tạo ra những dữ liệu mới Khi dữ liệu được tạo ra và được phân tích

thì chúng trở thành thông tin Thông tin giúp ta tiên định được các sự kiện

- CSDL là một tập hợp dữ liệu được tổ chức sao cho nội dung của nó có thể dễ dàng truy cập, quản lý và cập nhật

2 Quản trị dữ liệu: chỉ việc quản lý lượng lớn thông tin, bao gồm cả việc lưu trữ thông tin và cơ chế thao tác thông

tin trên các thông tin đó Ngoài ra, hệ thống phải đảm bảo tính an toàn thông tin được lưu trữ trong nhiều tình huống

khác nhau Có 2 phương pháp quản trị dữ liệu khác nhau:

Hệ thống dựa trên tập tin Hệ thống cơ sở dữ liệu

+ Hệ thống này lưu trữ dữ liệu trong các tập tin riêng

biệt Trong đó, một nhóm tập tin được lưu trên một máy

tính và được truy cập bằng các thao tác máy tính Tập

tin lưu dữ liệu được gọi là bảng, các dòng được gọi là

các bản ghi, các cột gọi là các trường

+ Nhược điểm của hệ thống này: những chương trình

khác nhau trong cùng một ứng dụng tương tác với các

file dữ liệu khác nhau Nó không tồn tại bất kỳ một hệ

thống nào ép buộc theo một chuẩn nào đó trong việc lưu

trữ và cấu trúc những file dữ liệu

● Dư thừa và mâu thuẫn dữ liệu

● Khó khăn khi phải truy xuất bất ngờ

● Cô lập dữ liệu

● Khó khăn trong việc xử lý và truy cập đồng thời bất

thường

● Vấn đề bảo mật và tính toàn vẹn dữ liệu phải lập trình

trong từng chương trình

+ Được phát triển vào cuối những năm 1960 để giải quyết những vấn đề cơ bản trong các ứng dụng có dữ liệu lớn và khắc phục được những nhược điểm của hệ thống quản lý theo file

+ CSDL được sử dụng để lưu trữ dữ liệu có hệ thống và

có tổ chức CSDL giúp quản lý dữ liệu nhanh chóng và

dễ dàng Dữ liệu lưu trữ có thể được truy xuất ngay cả khi lưu trữ trên những file đơn giản và thời gian lưu trữ lâu hơn

+ Ưu điểm của hệ thống này là quản lý dữ liệu tập trung

● Giảm dư thừa dữ liệu

● Giảm mâu thuẫn dữ liệu

● Dữ liệu lưu trữ có thể được chia sẻ

● Các chuẩn có thể được thiết lập và duy trì

● Toàn vẹn dữ liệu được duy trì

● Bảo mật dữ liệu có thể được cài đặt

3 Hệ quản trị cơ sở dữ liệu (DBMS – DataBase Management System):

- Khái niệm:

Một hệ quản trị CSDL có thể được định nghĩa là một tập các bản ghi có liên quan với nhau và tập hợp các

chương trình cho phép cập nhật và thao tác trên các bản ghi đó

Hệ quản trị CSDL tập trung, CSDL được lưu trũ tập trung tại một nơi, mọi người có thể truy cập đến CSDL tập

trung từ máy tính của họ

CSDL là tập hợp các dữ liệu có liên quan với nhau và hệ quản trị CSDL là một tập hợp các chương trình được

thêm vào để thêm vào và sửa đổi dữ liệu đó Do đó, hệ quản trị CSDL là phần mềm cho phép định nghĩa, xây dựng

và bảo trì CSDL

Hệ quản trị CSDL cung cấp một môi trường thuận tiện và hiệu quả để khi có một lượng lớn dữ liệu và giao dịch

được xử lý Các loại hệ quản trị CSDL được sử dụng từ hệ thống nhỏ chạy trên máy tính cá nhân cho đến các hệ

thống lớn chạy trên các máy chủ lớn Các hệ quản trị CSDL khác nhau hỗ trợ các câu lệnh truy vấn khác nhau, mặc

dù có một ngôn ngữ truy vấn chuẩn được gọi là ngôn ngữ vấn tin có cấu trúc (SQL) Hiện nay đang ở thế hệ thứ tư

Không cần phải sử dụng hệ quản trị CSDL phổ biến để thiết lập một CSDL Người viết có thể tự viết các chương

trình để tạo ra và quản lý CSDL của họ, nó sẽ hiệu quả nếu họ tạo ra phần mềm quản lý CSDL theo mục đích riêng

Môi trường hệ thống CSDL đơn giản được mô tả ở bên

- Lợi ích của hệ quản trị CSDL

+ Lưu trữ dữ liệu

+ Định nghĩa dữ liệu

+ Thao tác trên dữ liệu

+ Bảo mật và toàn vẹn dữ liệu

+ Truy vấn đồng thời và phục hồi dữ liệu + Hiệu năng

+ Điều khiển đa truy cập + Ngôn ngữ truy xuất CSDL và giao diện lập trình ứng dụng API

- Các mô hình CSDL: một mô hình dữ liệu mô tả kho chứa dữ liệu và xử lý việc lưu trữ và truy xuất dữ liệu từ kho

đó Người phân tích và thiết kế các mô hình dữ liệu phải dựa vào quá trình phát triển của CSDL Mỗi mô hình được

phát triển dựa vào mô hình trước đó

+ Mô hình dữ liệu file phằng: chỉ chứa một bảng hay một file Nó được dùng cho những CSDL đơn giản mà không

thể quản lý lượng lớn dữ liệu Nó có thể tạo ra dư thừa dữ liệu được mô tả nhiều lần

+ Mô hình phân cấp: các bản ghi liên kết với nhau thông qua các cấp bậc giống như cấu trúc cây Trong đó các quan

hệ được gọi là quan hệ cha-con Một bản ghi cha có thể có một vài bản ghi con, nhưng một bản ghi con chỉ có một

bản ghi cha Để tìm dữ liệu trong đó, người dùng cần phải biết được cấu trúc của cây Ưu điểm của mô hình này:

● Dữ liệu được lưu trữ trên CSDL, vì vậy dữ liệu được chia sẻ dễ dàng và được bảo mật bởi hệ quản trị CSDL

● Độc lập giữ liệu được hệ quản trị CSDL giúp giúp giảm được chi phí bảo trì chương trình

+ Mô hình mạng: tương tự như mô hình phân cấp Thực chất mô hình phân cấp là tập con của mô hình mạng Tuy nhiên, nó sử dụng lý thuyết tập để tạo ra một cây phân cấp mà trong đó mỗi nút con có thể có nhiều hơn một nút cha

Dữ liệu được lưu trữ trên các tập thay vì định dạng theo phân cấp Nó giúp hạn chế dư thừa dữ liệu

Nó cho phép một nút con có nhiều hơn một nút cha Vì vậy, các bản ghi vật lý liên quan với nhau thông qua một danh sách liên kết

Mô hình mạng kết hợp với mô hình phân cấp là mô hình dữ liệu cơ sở để c ài đặt nhiều hệ thống CSDL thương mại Ngôn ngữ và cấu trúc của mô hình mạng được định nghĩa bởi Hội thảo về ngôn ngữ và hệ thống dữ liệu (CODASYN)

Đối với mọi CSDL, tên CSDL, tên bản ghi và các thành phần tạo nên bản ghi đều được lưu trữ Nó gọi là một sơ

đồ mạng, một phần của chúng được nhìn thấy bởi các chương trình ứng dụng, các chương trình này lấy thông tin cần thiết từ dữ liệu trong CSDL được gọi là sơ đồ con

Những thành phần của ngôn ngữ được sử dụng trong mô hình mạng:

● Ngôn ngữ định nghĩa dữ liệu

● Ngôn ngữ thao tác dữ liệu

● Ngôn ngữ điều khiển dữ liệu

- Các quan hệ dễ dàng được thiết lập trên mô hình mạng hơn so với mô hình phân cấp

- Mô hình này đảm bảo sự toàn vẹn dữ liệu

- Mô hình này đạt được sự độc lập dữ liệu cần thiết

- Khó thiết lập CSDL theo mô hình này

- Người lập trình phải nắm rõ cấu trúc bên trong CSDL

để truy cập

- Nó cung cấp môi trường truy cập CSDL nên để di chuyển từ A sang E thì phải qua B, C, D

+ Mô hình quan hệ:

Tất cả dữ liệu được chứa trong các bảng, các bảng chứa các dòng và các cột Dữ liệu trên 2 bảng được quan hệ với nhau thông qua các cột thay cho liên kết vật lý Những phép toán được cung cấp để thực hiện trên các dòng của bảng dữ liệu

Mô hình này mô tả CSDL là một tập hợp các quan hệ Trong thuật ngữ mô hình, một dòng được gọi là Tuple, cột được gọi là thuộc tính, bảng được gọi là quan hệ Danh sách các giá trị trong một trường gọi là miền Có thể có một vài thuộc tính có chung miền Số thuộc tính của một quan hệ gọi là bậc của quan hệ Số Tuple xác định số thành viên trong quan hệ

Ưu điểm của nó cho phép lập trình viên tập trung vào góc nhìn logic hơn hơn là tập trung vào góc nhìn vật lý Nhược điểm của nó là thực thi châm hơn so với các mô hình CSDL khác

4 Hệ quản trị CSDL quan hệ (Relational DataBase Management System - RDBMS):

+ Thực thể: là một đối tượng cụ thể được nhận biết rõ ràng, nó có các đặc tính gọi là các thuộc tính, nhóm các thực thể gọi là tập thực thể, mỗi tập thực thể được đặt một tên, tên của nó phảm ánh nội dung của tập thực thể

+ Bảng: chứa một nhóm các thực thể có liên quan với nhau hay gọi là một tập các thực thể Một bảng còn được gọi

là một quan hệ (Relation), các dòng được gọi là các bộ (Tuples), các cột được gọi là các thuộc tính (Attributes) Thành viên của quan hệ là số bộ trong một quan hệ, bậc của quan hệ là số thuộc tính trong một quan hệ

- Người dùng của hệ quản trị CSDL:

+ Quản trị viên CSDL

+ Thiết kế viên CSDL

+ Chuyên viên phân tích hệ thống và lập trình viên ứng dụng

+ Chuyên viên cài đặt và thiết kế viên quản trị CSDL

+ Người dùng cuối

- Phân biệt giữa hệ quản trị CSDL và hệ quản trị CSDL quan hệ:

- Không cần có dữ liệu theo cấu trúc dạng bảng và không ép buộc các mối quan hệ dạng bảng giữa các mục

dữ liệu

- Lượng nhỏ dữ liệu được lưu trữ và truy xuất

- Bảo mật kém hơn RDBMS

- Là hệ thống đơn người dùng

- Hầu hết không hỗ trợ kiến trúc client/server

- Thực thể là quan trọng hơn và không có quan hệ được thiết lập giữa các thực thể này

- Phải là cấu trúc dạng bảng và các mối quan hệ bảng được đảm bảo bởi hệ thống

- Có thể lưu và truy xuất lượng lớn dữ liệu

- Bảo mật mạnh hơn so với DBMS

- Là hệ thống đa người dùng

- Hỗ trợ kiến trúc client/server

- Người dùng có thể thiết lập nhiều ràng buộc toàn vẹn cho các bảng để dữ liệu sau cùng được sử dụng bởi người dùng vẫn giữ đúng đắn do quan hệ quan trọng nhất

ĐẠI CƯƠNG SQL SERVER – Mai Đức Thạch 0165.859.7998 – nadipage.com, webnadi.com, vneverestweb.com

Trang 2

MÔ HÌNH DỮ LIỆU

1 Mô hình hóa dữ liệu (Data Modeling) là tiến trình áp dụng mô hình thích hợp cho dữ liệu thô Nó trải qua ba

bước chính

2 Mô hình quan hệ thực thể (Entity- Relationship): xem toàn bộ thế giới thực như một tập hợp các đối tượng cơ

bản và các mối quan hệ giữa chúng

- Năm thành phần chính của mô hình quan hệ thực thể:

+ Thực thể (Entity): là một đối tượng tồn tại trong thế giới thực và được phân biệt với các đối tượng khác

+ Mối quan hệ (Relationship): là sự kết hợp hay gắn kết giữa một hay nhiều thực thể

+ Thuộc tính (Attributes): là các đặc tính hay đặc trưng của một thực thể, nó phân biệt thực thể này với thực thể

khác

+ Tập thực thể (Entity Set): là một tập các thực thể tương tự nhau

- Các loại quan hệ:

- Một số khái niệm khác:

+ Khóa chính (primary key): là một thuộc tính có thể định rõ duy nhất một thực thể trong tập thực thể

+ Tập thực thể yếu (Weak entity sets): khi nhiều tập thực thể không đủ các thuộc tính để thiết lập khóa chính

+ Tập thực thể mạnh (Strong entity sets): là các tập thực thể có đủ các thuộc tính để thiết lập khóa chính

- Lược đồ quan hệ thực thể:

+ Các ký hiệu biểu diễn:

Đa trị (Multi-valued) Phức hợp (Composite) Dẫn xuất (Derived)

Có nhiều hơn một giá trị với ít nhất một thể hiện của thực thể chứa nó Có thể chứa hai hay nhiều thuộc tính, nhiều biểu diễn hơn các thuộc

tính cơ bản

Các thuộc tính có giá trị phụ thuộc hoàn toàn vào thuộc tính khác

3 Chuẩn hóa: là tiến trình gỡ bỏ các dữ liệu dư thừa từ các bảng của CSDL quan hệ

Địa chỉ

Bảng ban đầu BẢNG CHI TIẾT DỰ ÁN CỦANHÂN VIÊN manv maduan tenduan tennv loai luong

142 113, 124 Sach, Xay Thach A 20000

Dạng chuẩn 1: First Normal Form

- Tạo ra các bảng riêng biệt cho mỗi nhóm dữ liệu liên quan

- Các cột của bảng phải có các giá trị nguyên tố

- Tất cả các thuộc tính khóa phải được nhận dạng

BẢNG CHI TIẾT DỰ ÁN maduan tenduan

113 Sach

BẢNG CHI TIẾT NHÂN VIÊN manv tennv loai luong

142 Thach A 20000

Dạng chuẩn 2: Second Normal Form

- Chúng đã thỏa mãn các yêu cầu ở dạng chuẩn một

- Chúng không phụ thuộc một phần trong bảng

- Các bảng quan hệ thông qua các khóa ngoại

BẢNG CHI TIẾT DỰ ÁN maduan tenduan

113 Sach

BẢNG CHI TIẾT DỰ ÁN CỦA NHÂN VIÊN manv maduan

142 113

142 124

168 113

263 113

109 124

BẢNG CHI TIẾT NHÂN VIÊN manv tennv loai luong

142 Thach A 20000

Dạng chuẩn 2: Third Normal Form

- Chúng đã thỏa mãn các yêu cầu ở dạng chuẩn hai

- Không tồn tại phụ thuộc bắc cầu trong bảng

BẢNG CT DỰ ÁN maduan tenduan

113 Sach

124 Xay

BẢNG CT DỰ ÁN CỦA NHÂN VIÊN manv maduan

142 113

142 124

168 113

263 113

109 124

BẢNG CT LƯƠNG loai luong

A 20000

B 15000

C 10000 BẢNG CHI TIẾT

NHÂN VIÊN manv tennv loai

142 Thach A

263 Ngoc C

4 Các loại toán tử: mô hình quan hệ được xâu dựng dựa trên

cơ sở đại số quan hệ (gồm tập hợp các phép toán hoạt động trên các quan hệ Mỗi toán tử giữ một hoặc 2 quan hệ như đầu vào của nó và kết quả quan hệ mới là đầu ra)

- Phép chọn (SELECT δ)

- Phép chiếu (PROJECT π)

- Phép nhân (PRODUCT x)

- Phép kết hợp (UNION U)

- Phép giao (INTERSECT )

- Phép hiệu (DIFFERENCE)

- Phép nối (JOIN)

- Phép chia (DIVIDE)

ĐẠI CƯƠNG SQL SERVER – Mai Đức Thạch 0165.859.7998 – nadipage.com, webnadi.com, vneverestweb.com

Trang 3

Cơ sở dữ liệu: là một tập các dữ liệu được lưu trữ trong các

tập tin dữ liệu trên một đĩa hoặc các thiết bị lưu trữ có thể di chuyển được Một cơ sở dữ liệu để giữ các thiết bị thật

CƠ SỞ DỮ LIỆU HỆ THỐNG

(System Databases)

Adventure Works

- Các loại CSDL hệ thống

● master: lưu trữ tất cả các thông tin hệ thống của

một phiên bản cải đặt SQL Server

● msdb: được sử dụng bởi SQL Server Agent để nhắc

nhở các thao tác thực hiện theo lịch biểu và các công

việc khác

● model: được sử dụng như CSDL mẫu cho tất cả các

CSDL được tạo ra trong phiên bản cài đặt cụ thể

● resource: CSDL chỉ đọc, nó gồm các đối tượng hệ

thống

● tempdb: lưu trữ các đối tượng tạm thời và các tập

kết quả trung gian

- Thay đổi dữ liệu của CSDL hệ thống:

Người dùng không được phép cập nhật thông tin trực

tiếp vào các đối tượng CSDL hệ thống: các bảng, thủ

tục, khung nhìn; nhưng có thể sử dụng một tập đầy đủ

các công cụ quản trị cho phép họ quản trị đầy đủ hệ

thống và quản lý tất cả người sử dụng và các đối

tượng CSDL:

+ Các tiện ích quản trị SQL Server Management

Studio

+ Giao diện lập trình ứng dụng với các đối tượng

quản lý SQL Server

+ Kịch bản Transact-SQL và thủ tục lưu trữ

- Xem dữ liệu của CSDL hệ thống:

+ Khung nhìn danh mục hệ thống

+ Các đối tượng quản lý SQL Server

+ Các hàm danh mục, các phương thức, các thuộc

tính, các tính chất của giao diện lập trình ứng dụng

CSDL

● Đối tượng dữ liệu ActiveX (ADO)

● CSDL liên kết và nhúng đối tượng (OLEDB)

● Các thủ tục lưu trữ và các hàm

- Gồm các phần + AdventureWorks: xử lý giao dịch trực tuyến (Online Transaction Processing - OLTP)

+ AdventureWorksDW: kho (Data warehouse)

+ AdventureWorksAS: dịch vụ phân tích (Analysis Services)

- Tạo cơ sở dữ liệu:

CREATE DATABASE tên_CSDL

ON PRIMARY

(NAME = N’tên_luận_lý’, FILENAME = N’tên_vật_lý’, SIZE = ‘kích_thước_ban_đầu’, MAXSIZE = ‘kích_thước_lớn_nhất’, FILEGROWTH = ‘kích_thước_tăng_trưởng’

)

LOG ON

(

NAME = N’tên_luận_lý’, FILENAME = N’tên_vật_lý’, SIZE = ‘kích_thước_ban_đầu’, MAXSIZE = ‘kích_thước_lớn_nhất’, FILEGROWTH = ‘kích_thước_tăng_trưởng’

) Lệnh mở CSDL:

USE tên_CSDL

- Thay đổi cơ sở dữ liệu:

ALTER DATABASE tên_CSDL

Đổi tên Cơ sở dữ liệu

MODIFY NAME = tên_CSDL_mới

Thêm file vào CSDL

ADD FILE ( NAME = N’tên_luận_lý’, FILENAME = N’tên_vật_lý’, SIZE = ‘kích_thước_ban_đầu’, MAXSIZE = ‘kích_thước_lớn_nhất’, FILEGROWTH = ‘kích_thước_tăng_trưởng’

) Chọn kiểu sắp xếp

COLLATE tên_kiểu_sắp_xếp

- Quyền sở hữu của CSDL

EXEC sp_changedbowner ‘tên_tài_khoản’

- Hủy bỏ CSDL

DROP DATABASE tên_CSDL

tên file luận lý: các file vật lý trong các câu lệnh Transact-SQL được tham chiếu bởi tên file luận lý Tên file logic phải tuân theo các luật cho các định danh SQL Server và sẽ

là duy nhất nằm trong số các tên file luận lý trong CSDL

tên file vật lý: là đường dẫn thư mục Nó phải tuân theo các luật cho các tên file hệ điều hành Các file CSDL gồm:

*.MDF

File dữ liệu

sơ cấp: là điểm bắt đầu của CSDL và trỏ đến các file khác của CSDL

*.NDF

File dữ liệu thứ cấp: chứa đựng tất cả các file dữ liệu, trừ các file dữ liệu chính Có thể không cần

*.LDF

File chứa đựng tất cả các thông tin nhật ký được sử dụng

để phục hồi CSDL Mỗi CSDL có ít nhất một

- Bản chụp CSDL là một khung nhìn tĩnh, chỉ đọc của một CSDL

CREATE DATABASE tên_bản_chụp ON (NAME = tên_luận_lý, FILENAME =’tên_vật_lý’,)

[,……… ]

AS SNAPSHOT OF tên_CSDL_cần_chụp

Lưu ý: việc tạo một bản chụp yêu cầu chỉ ra tên luận lý của mọi tập tin CSDL của CSDL gốc

- Sao lưu dữ liệu ra tập tin

BACKUP DATABASE Tên_CSDL

TO DISK = 'Tên_tập_tin_bak'

[ WITH INIT , NOUNLOAD ,

NAME = ‘đặt tên cho bản backup’, SKIP ,

STATS = 10, NOFORMAT ]

- Khôi phục CSDL:

RESTORE DATABASE

Đặt_tên_cho_csdl_sau_khi_khôi_phục

FROM DISK = 'Ten_tap_tin_bak'

[ WITH FILE = 1, UNLOAD , STATS = 10, RECOVERY , REPLACE ]

ĐẠI CƯƠNG SQL SERVER – Mai Đức Thạch 0165.859.7998 – nadipage.com, webnadi.com, vneverestweb.com

Trang 4

Ngôn ngữ định nghĩa dữ liệu DDL – Data definition language

là ngôn ngữ dùng để tạo, thay đổi

và xóa cấu trúc đối tượng

Ngôn ngữ thao tác dữ liệu DML – Data manipulation language

là ngôn ngữ dùng để thao tác với dữ liệu trong bảng

Ngôn ngữ điều khiển dữ liệu DCL – Data control language

là ngôn ngữ dùng để gán hay xóa quyền trên các đối tượng

- Thao tác với Cơ sở dữ liệu: (xem ở trên phần tạo cơ sở dữ liệu)

- Thao tác với bảng:

+ Tạo bảng

CREATE TABLE tên_bảng

( tên_cột_1 kiểu_dữ_liệu(độ_rộng) ràng_buộc,

tên_cột_2 kiểu_dữ_liệu(độ_rộng) ràng_buộc,

)

Các ràng buộc trong dữ liệu cột:

● NULL | NOT NULL: giá trị null có được phép sử dụng trong cột hay không

● DEFAULT (<giá_trị>): gán giá trị mặc định ban đầu cho các dữ liệu Thông

thường nếu không đặt đối với kiểu số là 0 và kiểu chuỗi là N/A hoặc Unknown

Nó không được sử dụng khi cột có kiểu dữ liệu timestamp ; có thuộc tính

IDENTITY, ROWGUIDCOL hay các đối tượng mặc định

● IDENTITY([<giá_trị_khởi_đầu>,<giá_trị_mức_tăng>]): dùng để tạo ra các

cột có giá trị tự động phát sinh tuần tự để định danh duy nhất mỗi hàng trong

một bảng

● DEFAUT NEWID(): tạo ra cột định danh duy nhất tổng thể

● Các ràng buộc Constraint gồm các kiểu sau:

► PRIMARY KEY([,cột_thứ_2, ]): được sử dụng để tạo ra một khóa chính,

đảm bảo tính toàn vẹn thực thể bảng, mỗi bảng chỉ có một khóa chính và cột

khóa chính không được chứa giá trị NULL Trong trường hợp hai cột giữ vai

trò khóa chính ta dùng thêm dấu phẩy ở sau

► UNIQUE([,cột_thứ_2, ]): để tạo ra ràng buộc khóa duy nhất, đảm bảo các

giá trị duy nhất được nhập trên cột hay tập hợp các cột Một bảng có thể có

nhiều hơn một ràng buộc UNIQUE

► FOREIGN KEY REFERENCES <bảng_pk>.<cột_pk>: là một cột trong

bảng này để chỉ đến một khóa chính trong một bảng khác nhằm đảm bảo toàn

vẹn tham chiếu

► CHECK điều_kiện : dùng để kiểm tra giới hạn giá trị có thể được nhập vào

thỏa mãn điều kiện quy định

+ Thay đổi cấu trúc của bảng: ALTER TABLE tên_bảng

ALTER COLUMN tên_cột kiểu_dữ_liệu_mới - - Đổi kiểu dữ liệu của cột

ADD tên_cột kiểu_dữ_liệu - - Thêm cột mới

DROP COLUMN tên_cột, - - Xóa cột

EXEC sp_rename ‘tên_bảng.tên_cột’, ‘tên_mới’,’COLUMN’ –Đổi tên cột

EXEC sp_rename ‘tên_bảng’, ‘tên_mới’ Đổi tên bảng

ADD CONSTRAINT <tên_constraint> <kiểu_ constraint> [<điều_kiện>]

- - Thêm constraint

DROP CONSTRAINT <tên_constraint> - - Xóa constraint

+ Xóa bảng khỏi cơ sở dữ liệu:

DROP TABLE tên_bảng

- Rút trích dữ liệu từ cơ sở dữ liệu:

SELECT cột_hiển_thị FROM bảng_truy_xuất WHERE điều_kiện_lọc CÁC_LỆNH_KHÁC

+ Một số lệnh định dạng trong cột_hiển_thị:

● Để hiển thị nhiều cột trong bảng, ta liệt kê tên các cột được phân cách bởi dấu phẩy; để liệt kê tất cả các

cột trong bảng ta dùng ký tự * hoặc ALL <tên_cột>; để hiển thị các cột trong nhiều bảng khác nhau, đối với các cột có trong nhiều bảng ta phải dùng <tên_bảng>.<tên_cột> để tránh lỗi không tường minh

● Để đổi tên cột trong hiển thị ta dùng <tên_cột_tự_đặt> = <định_dạng_cột_hiển_thị> hoặc

<định_dạng_cột_hiển_thị> AS <tên_cột_tự_đặt>

● Lệnh DISTNCT <tên_cột> dùng để ngăn chặn hiển thị các bản ghi trùng nhau

● Lệnh TOP <biểu_thức> [PERCENT] [WITH TIES] <tên_cột> :hiển thị một tập các dòng đầu tiên của

kết quả Trong đó:

► <biểu_thức>: là số hàng hay phần trăm số hàng trong bảng được trả về trong tập kết quả

► PERCENT: trả về số hàng bị giới hạn bởi tỷ số phần trăm

► WITH TIES: nếu bản ghi cuối trong TOP có cùng giá trị thì kết quả bản ghi đó cũng được trả về

+ Một số lệnh trong bảng_truy_xuất

● Khi truy xuất từ một bảng, ta chỉ ra tên bảng cần truy xuất đến

● Khi truy xuất từ nhiều bảng , ta có thể sử dụng lệnh:

<tên_bảng_1> TỪ_KHÓA_NỐI <tên_bảng_2> ON <điều_kiện_nối>

Trong đó TỪ_KHÓA_NỐI có thể là:

► INNER JOIN : để nối các bảng vào, không phân biệt bảng bên trái với bảng bên phải

► LEFT JOIN : để nối các bảng vào, lấy tất cả các giá trị bảng bên trái nối với bảng bên phải

► RIGHT JOIN : để nối các bảng vào, lấy tất cả các giá trị bảng bên phải nối với bảng bên trái

+ Một số lệnh trong điều_kiện_lọc: có thể sử dụng các toán tử >; <; >=; <=; <>; !; OR; AND; NOT;

BETWEEN a TO b (để lấy từ a đên b); LIKE (tìm các ký tự đại diện: _ ký tự bất kỳ; % bất kỳ ký tự nào;

[ ] có ký tự đơn trong ngoặc; [^ ] không có ký tự đơn trong ngoặc); IN[a-b] (bên trong một khoảng)

+ Một số câu lệnh xắp xếp và tổng hợp:

● Mệnh đề ORDER BY [ASC | DESC]: xác định trật tự các cột được sắp xếp trong tập kết quả là tăng dần ASC hay giảm dần DESC Khi có nhiều trường cần xắp xếp, nó sẽ thực hiện từ trái sang phải

● Mệnh đề GROUP BY để chia tập kết quả thành một hoặc nhiều tập con, mỗi tập con có giá trị và biểu

thức chung

GROUP BY <tên_cột_chung>

HAVING <điều_kiện>

tìm kiếm nhóm theo một điều kiện quy định Mỗi nhóm chỉ trả

về một bản ghi duy nhất

GROUP BY <tên_cột_chung>

WITH CUBE

CUBE kết hợp với GROUP BY vừa trả về thông tin chi tiết, vừa trả về thông tin thống kê Nó cho phép nhóm các trường được chỉ ra trong danh sách ngoài trừ trường chứa dữ liệu thống kê

GROUP BY <tên_cột_chung>

WITH ROLLUP

nó sinh ra tập kết quả hiển thị theo nhóm được sắp xép theo một thứ tự phân cấp từ thấp đến cao, trật tự nhóm trong kết quả phụ thuộc vào trật tự các cột được nhóm đã chỉ định

- Chèn dữ liệu vào bảng:

+ Chèn vào một hàng: INSERT INTO tên_bảng VALUES các_giá_trị_tương_ứng_cột_của_bảng + Chèn nhiều hàng từ một bảng khác: INSERT INTO <tên_bảng>(Danh_sách_cột)

SELECT Danh_sách_cột FROM Bảng_dữ_liệu_nguồnWHERE Điều_kiện_lọc

- Thay đổi dữ liệu trong bảng: UPDATE tên_bảng SET tên_cột = giá_trị WHERE điều_kiện_thay_đổi

- Xóa các hàng dữ liệu trong bảng: DELETE FROM tên_bảng WHERE điều_kiện_xóa

Tài khoản có thể là một trong 4 loại sau:

+ Người dùng SQL Server + Người dùng có quyền với SQL Server + Tài khoản Windows

+ Nhóm tài khoản Windows

- Gán quyền các đối tượng cơ sở dữ liệu cho người dùng:

GRANT

[ALL | các_câu_lệnh]

ON tên_bảng

TO các_tài_khoản

- Xóa quyền đã gán trên các đối tượng của người dùng:

REVOKE

[ALL | các_câu_lệnh]

ON tên_bảng FROM các_tài_khoản

- Ngăn quyền của người dùng:

DENY

[ALL | các_câu_lệnh]

ON tên_bảng

TO các_tài_khoản

Ngôn ngữ Transact-SQL là ngôn ngữ mở rộng

của 2 ngôn ngữ ANSI-SQL và ISO-SQL

ĐẠI CƯƠNG SQL SERVER – Mai Đức Thạch 0165.859.7998 – nadipage.com, webnadi.com, vneverestweb.com

Trang 5

KIỂU DỮ LIỆU: là một thuộc tính

- xác định kiểu dữ liệu

- xác định dung lượng lưu trữ dữ liệu

KIỂU DỮ LIỆU

HỆ THỐNG

(System-defined data types)

KIỂU DỮ LIỆU NGƯỜI DÙNG

(Alias data types)

KIỂU DỮ LIỆU ĐƯỢC ĐỊNH NGHĨA

SỐ NGUYÊN

- bit: giá trị 1 hoặc 0

- tinyint: từ 0 đến 255

- smallint: từ (-215) đến (215-1)

- int: từ (-231) đến (231-1)

- bigint: từ (-263) đến (263-1)

- numeric: từ (-1038+1) đến (1038-1)*

- decimal: từ (-1038+1) đến (1038-1)*

- smallmoney: từ (-231-1) đến (231-1) chia cho

10000 dạng tiền tệ

- money: từ (-263-1) đến (263-1) chia cho 10000 dạng tiền tệ

SỐ THỰC

- float: sử dụng 8 byte bộ nhớ

- real: sử dụng 4 byte bộ nhớ

NGÀY VÀ GIỜ

- datetime: 1/1/1753 - 31/12/9999,

đúng đến phần nghìn của miligiây

- smalldatetime: 1/1/1900 - 6/6/2079, đúng đến

phút

- time: thời gian trong 1 ngày

- date: ngày trong một năm

- datetimeoffset: ngày UTC, múi giờ

- datetime2: giờ hiện tại

CHUỖI

+ Không hỗ trợ Unicode:

- char: kích thước cố định, tối đa 8000 ký tự

- varchar: kích thước thay đổi, tối đa 8000 ký tự

- text: kích thước thay đổi, tối đa 231 - 1 ký tự

+ Hỗ trợ Unicode: gồm nchar, nvarchar, ntext

tương tự trên nhưng số ký tự tối đa giảm một nửa

CÁC KIỂU KHÁC

+ Chuỗi nhị phân:

- binary

- varbinary

- image

+ Các kiểu khác:

- sql_variant

- timestamp

- uniqueisentifier

- xml

+ Kiểu dữ liệu CLR

- hierarchyid

+ Kiểu dữ liệu không gian

- geometry

- geography

Cú pháp: CREATE TYPE [tên_giản_đồ]

tên_kiểu { FROM kiểu_hệ_thống

[(độ_chính_xác [,độ_co_giãn_với_số])]

[NULL|NOT NULL]} [,]

Ví dụ:

CREATE TYPE ten FROM varchar(20)

- Tạo kiểu dữ liệu mới:

EXEC sp_addtype tên_kiểu, ‘kiểu_hệ_thống

[(độ_chính_xác [,độ_co_giãn_với_số])]’,

[NULL|NOT NULL]} [,]

- Xóa kiểu dữ liệu:

EXEC sp_droptype tên_kiểu

Lưu ý: chỉ xóa được khi không có cột nào trong bảng CSDL dùng nó

LÀM VIỆC VỚI XML – EXTENSIBLE MARKUP LANGUAGE

Thuận lợi khi làm việc với cơ sở dữ liệu XML tự nhiên trong SQL Server là:

- Dễ dàng quản lý và tìm kiếm dữ liệu: tất cả các dữ liệu XML được lưu trữ cục bộ ở một nơi, vì thế dễ dàng tìm kiếm

và quản lý

- Sự thực thi tốt hơn: Các truy vấn từ một cơ sở dữ liệu XML được thi hành tốt sẽ nhanh hơn các truy vấn bằng tài liệu

đã lưu trữ trong hệ thống tập tin Ngoài ra, về bản chất, cơ sở dữ liệu sẽ phân tách mỗi tài liệu khi lưu trữ chúng

- Dễ dàng xử lý dữ liệu: các tài liệu lớn có thể được xử lý dễ dàng

Tạo bảng với cột kiểu XML: CREATE TABLE <tên_bảng> ( [ column_list,] <tên_cột> xml [, column_list])

Ví dụ:

Tạo bảng

CREATE TABLE Person.PhoneBilling (Bill_ID int PRIMARY KEY, MobileNumber bigint UNIQUE, CallDetails xml) Chèn dữ liệu vào bảng:

INSERT INTO Person.PhoneBilling VALUES (100,9833276605,

‘<Info><Call>Local</Call><Time>45 minutes</Time><Charges>200</Charges></Info>’) SELECT CallDetails FROM Person.PhoneBilling –truy vấn dữ liệu

XML định kiểu và không định kiểu

- Có hai cách lưu trữ dữ liệu XML trong các cột kiểu dữ liệu XML và các biến: được phân loại; không phân

- Một thể hiện XML mà nó được kết hợp với một lược đồ được gọi là thể hiện XML được phân loại (Typed XML) Ở

đây, dữ liệu có thể được xác định tính hợp lệ trong khi nó được lưu trữ vào trong cột dữ liệu XML Một thể hiện XML

không được phân loại (Untyped XML) không có sự kết hợp với một lược đồ XML SQL Server không thực hiện việc

kiểm tra tính hợp lệ của dữ liệu nhập vào trong cột

- Ví dụ giản đồ XML:

CREATE XML SCHEMA COLLECTION CricketSchemaCollection

AS N’<xsd:schema xmlns:xsd=”http://www.w3.org/2001/XMLSchema”>

<xsd:element name=”MatchDetails”> <xsd:complexType> <xsd:complexContent>

<xsd:restriction base=”xsd:anyType”><xsd:sequence>

<xsd:element name=”Team” minOccurs=”0” maxOccurs=”unbounded”><xsd:complexType>

<xsd:complexContent><xsd:restriction base=”xsd:anyType”><xsd:sequence />

<xsd:attribute name=”country” type=”xsd:string” /><xsd:attribute name=”score” type=”xsd:string” />

</xsd:restriction></xsd:complexContent></xsd:complexType></xsd:element></xsd:sequence>

</xsd:restriction></xsd:complexContent></xsd:complexType></xsd:element></xsd:schema>’

- Vi dụ sử dụng XML đã định kiểu:

CREATE TABLE CricketTeam (TeamID int IDENTITY NOT NULL, TeamInfo xml(CricketSchemaCollection) )

INSERT INTO CricketTeam (TeamInfo) VALUES

(‘<MatchDetails>

<Team country=”Australia” score=”355”></Team>

<Team country=”Zimbabwe” score=”200”></Team>

<Team country=”England” score=”475”></Team>

</MatchDetails>’)

DECLARE @team xml(CricketSchemaCollection)

SET @team = ‘<MatchDetails><Team country=”Australia”></Team></MatchDetails>’

SELECT @team

XQUERY:

- Cho phép truy vấn và khôi phục dữ liệu XML bằng cách sử dụng một ngôn ngữ có tên là XQuery

- Kết hợp các cú pháp quen thuộc với người lập trình, người làm việc việc với cơ sở dữ liệu quan hệ, và ngôn ngữ

Xpath, để chọn các đoạn hoặc các tập hợp riêng lẻ của các phần tử từ tài liệu XML

- Để truy vấn một thể hiện XML được lưư trong một biến hoặc cột kiểu xml, các phương thức kiểu xml được sử dụng

- Các phương thức:

+ EXIST(): được sử dụng để xác định nếu một hoặc nhiều nút được chỉ định xuất hiện trong tài liệu XML

+ QUERY(): được sử dụng để truy lục hoặc toàn bộ nội dung của tài liệu XML hoặc các đoạn có chọn lựa trong

tài liệu

+ VALUE():rút ra các giá trị vô hướng từ một kiểu dữ liệu

ĐẠI CƯƠNG SQL SERVER – Mai Đức Thạch 0165.859.7998 – nadipage.com, webnadi.com, vneverestweb.com

Trang 6

TỔNG QUAN VỀ SQL SERVER

Đầu những năm 1970, hãng IBM đã sáng tạo ra phần mềm SEQUEL (Structure English Query Language) Sau

đó, nó được rút ngắn lại thành SQL (Structure Query Language)

SQL Server là một hệ quản trị CSDL quan hệ được phát triển bởi Microsoft Nó cung cấp nền tảng quản trị dữ

liệu ở mức xí nghiệp Ngoài ra nó còn hỗ trợ cho việc phát triển mạnh mẽ các ứng dụng phía Server Nó không đơn

thuần là một RDBMS mà còn cung cấp các khả năng báo cáo, phân tích dữ liệu và khai phá dữ liệu và các chức

năng cho xử lý dữ liệu trong khi đợi dữ liệu đồng bộ hóa với ứng dụng đầu cuối (front-end)

1 Khái quát chung về SQL Server:

- Chức năng:

+ Dễ dàng cài đặt

+ Tích hợp với Interrnet

+ Tính trải rộng và tính sẵn sàng

+ Hỗ trợ cho mô hình client/server

+ Tương thích hệ điều hành

+ Kho dữ liệu + Thực thi theo ANSI/ISO SQL-92 + Hỗ trợ nhân bản dữ liệu + Tìm kiếm full-text + Sách hướng dẫn trực tuyến

+ Dịch vụ thông báo + Dịch vụ báo cáo + Môi giới dịch vụ + Sự cải tiến máy SQL

- Các công cụ SQL Server:

- Công dụng:

+ Quản trị dữ liệu xí nghiệp mở rộng

+ Tính hiệu quả cho người phát triển

+ Tăng tính thông minh trong giao dịch + Tính năng cạnh tranh cao

- Các thành phần

+ Máy CSDL quan hệ

+ Dịch vụ phân tích

+ Dịch vụ chuyển đổi dữ liệu

+ Dịch vụ thông báo

+ Hỗ trợ HTTP thuần + Sự tích hợp NET CLR + Các dịch vụ báo cáo + Người môi giới dịch vụ

+ SQL Server Agent + Bản sao

+ Tìm kiếm toàn văn bản

2 Kiến trúc ứng dụng xí nghiệp:

SQL Server đóng vai trò chính trong việc kiến trúc ứng dụng phân tán Việc thiết kế SQL Server cho một giải

pháp xí nghiệp dựa vào kiểu của kiến trúc và xử lý logic được phân tán qua các ứng dụng

Kiến trúc ứng dụng xí nghiệp chứa nhiều tầng logic khác nhau Các tầng này mô tả sự trình bày dữ liệu, ứng dụng

logic và các dịch vụ dữ liệu

Tầng dữ liệu trình bày Tầng logic ứng dụng Tầng dịch vụ dữ liệu

3 Kiến trúc CSDL:

- Thành phần CSDL logic:

+ Các đối tượng của CSDL

Bảng - TABLE Một đối tượng trong một CSDL để lưu trữ dữ liệu như một tập hợp của các dòng và các cột

Kiểu dữ liệu

DATA TYPE

Một thuộc tính để chỉ ra kiểu của dữ liệu mà nó có thể lưu trữ được lưu trữ trong một cột, tham

số, hoặc biến SQL Server hỗ trợ cả dữ liệu được hệ thồng cung cấp cũng như là kiểu dữ liệu

hệ thống

Khung nhìn

VIEW

Một đối tượng CSDL có thể được tham chiếu theo cách tương tự như một bảng trong các câu lệnh SQL Các khung nhìn được tạo ra bởi việc sử dụng câu lệnh SELECT và có thể so sánh với một đối tượng chứa đựng tập kết quả của cùng câu lệnh SELECT

Thủ tục lưu trữ

STORED

PROCEDURE

là một tập hợp của các câu lệnh đã viết và đã được biên dịch được lưu trữ dưới một tên và được

xử lý như là một đơn vị trong CSDL Nếu có cùng một truy vấn được tìm thấy được sử dụng lại nhiều lần, ta nên đặt nó thành một thủ tục được lưu trữ SQL Server cung cấp các thủ tục lưu trữ cho việc quản lý SQL Server và cho việc hiển thị thông tin về các CSDL và những người dùng SQL Server đã cung cấp các thủ tục lưu trữ được biết đến như là các thủ tục lưu trữ hệ thống

Hàm

FUNCTION

là một đoạn mã nguồn mà hoạt động như một đơn vị logic Mỗi hàm có một tên và được định nghĩa để chấp nhận các tham số đầu vào và trả về một trạng thái hoặc tùy chọn các tham số đầu

ra

Chỉ mục

INDEX

Một đối tượng CSDL cung cấp sự truy cập nhanh đến dữ liệu của một bảng dựa vào giá trị khóa của nó

Ràng buộc

CONSTRAINT

là một thuộc tính mà có thể được gán vào một cột hoặc gán vào các cột trong một bảng để tăng tính toàn vẹn dữ liệu Các ràng buộc được thêm vào để ngăn chặn các dữ liệu không phù hợp nhập vào cho một bảng

Bẫy lỗi TRIGGER

là các thủ tục được lưu trữ đặc biệt mà được thực hiện để phúc đáp cho bất kỳ sự thay đổi đã được thực hiện cho một bảng

+ Đăng nhập, người dùng, vai trò và nhóm:

Đăng nhập LOGIN

Một người dùng phải được gán với một nhận dạng đăng nhập để kết nối vào SQL Server SQL Server nhận dạng hai kỹ thuật chứng thực đăng nhập (Authentication): chứng thực dựa trên Windows (Windows Authentication) và chứng thực dựa trên SQL Server (SQL Server Authentication) Cả hai kỹ thuật có các kiểu tài khoản đăng nhập khác nhau

Người dùng USER

Các tài khoản người dùng nhận dạng một người dùng trong phạm vi một CSDL Sau khi một người dùng đã được chứng thực bởi Windows hoặc SQL Server và đã được cho phép đăng nhập vào SQL Server, thì người dùng đó phải có một tài khoản trong CSDL Tất cả sự cho phép và quyền sở hữu của các đối tượng trong CSDL được điều khiển bởi tài khoản người dùng

Vai trò ROLE

Các vai trò được sử dụng để nhúng các người dùng vào một hoặc vài nhóm, một vài hoặc nhóm tương ứng vơi tập hợp các quyền được cung cấp Các quyền được cung cấp tự động khi những người dùng trở thành thành viên của vai trò

Nhóm GROUP

Các nhóm SQL Servet cung cấp một cách thuận lợi để tổ chức một lượng lớn Server váo các nhóm có thể quản lý được Một nhóm Server có thể được đăt tên và được mô tả để cho phép người sử dụng dễ dàng tìm kiếm các Server

+ Thứ tự sắp xếp: chỉ ra các quy luật việc sắp xếp và so sánh các chuỗi dữ liệu ký tự, dựa vào các quy tắc của ngôn ngữ và địa phương cụ thể Thứ tự sắp xếp điều khiển cách thức các chuỗi ký tự trong SQL Server được lưu trữ bên trong nó

- Kiến trúc vật lý của CSDL:

+ Trang (PAGE) và phạm vi (EXTENTS):

Trang là đơn vị nhỏ nhất của việc lưu trữ dữ liệu trong SQL Server SQL Server cung cấp 8KB cho mỗi trang Mỗi trang được bắt đầu với phần đầu trang chứa các thông tin về loại trang, không gian trống của trang và định danh (identifier - ID) của người dùng sở hữu trang Dữ liệu trong mỗi hàng được chứa tuần tự trên các trang và chứa dữ liệu thực

Phạm vi là đơn vị gốc trong các không gian được cấp phát đến các bảng, tất cả các trang được lưu trữ và quản lý hiệu quả trong các phạm vi Một phạm vi là tập hợp của 8 trang liên tiếp nhau và có kích thước 64KB

+ Nhóm tập tin (FILEGROUP) và các tập tin CSDL (DATABASE FILES) + Sự cấp phát vùng trống và tái sử dụng

+ Kiến trúc bảng và chỉ mục (TABLE AND INDEX ARCHITECTURE): trong mỗi bảng và chỉ mục, các hàng dữ liệu được lưu trữ trong các trang Phần đầu trang chứa các nhận dạng là bảng chủ sở hữu của trang

Bảng Clustered: là các bảng có một chỉ mục Clustered

Heaps: là bảng không có chỉ mục Clustered

+ Kiến trúc nhật ký giao dịch: hỗ trợ:

Phục hồi các giao dịch riêng lẻ

Phục hồi tất cả các giao dịch chưa hoàn tất khi SQL Server đã được bắt đầu

Hoàn trả lại trạng thái CSDL ban đầu nếu lỗi xảy ra

- Kiến trúc bộ máy CSDL quan hệ: có hai phần chính phần quan hệ và phần lưu trữ

+ Cấu trúc xử lý truy vấn:

Xử lý từng câu lệnh SQL đơn

Xử lý lô

Thực thi các thủ tục lưu trữ và bẫy lỗi

Thực thi kế hoạch lưu trữ tạm và tái sử dụng

Xử lý truy vấn song song

+ Cấu trúc bộ nhớ

+ Cấu trúc luồng và thao tác

+ Cấu trúc vào/ra

+ Cấu trúc truy vấn phân tán

ĐẠI CƯƠNG SQL SERVER – Mai Đức Thạch 0165.859.7998 – nadipage.com, webnadi.com, vneverestweb.com

Trang 7

BIẾN – HÀM – BIỂU THỨC VÀ CHÚ THÍCH

TRONG SQL SERVER

- Khai báo biến: biến là vùng nhớ trong bộ nhớ được đặt tên để chứa giá trị dữ liệu

+ là biến được khai báo và sử dụng tạm thời khi thực

hiện câu lệnh SQL

DECLARE @tên_biến [AS] kiểu_dữ_liệu

+ Câu lệnh SET hoặc SELECT dùng để gán giá trị cho

biến

SET @tên_biến = giá_trị SELECT @tên_biến = giá_trị

+ là biến có sẵn và hệ thống quản lý, chúng được đặt tên bắt đầu bởi hai ký tự @

- Kiểu dữ liệu: là thuộc tính định nghĩa loại dữ liệu mà đối tượng có thể chứa Các đối tượng sử dụng kiểu dữ liệu

gồm: cột trong bảng, tham số trong thủ tục lưu trữ, biến, hàm trả về giá trị, thủ tục lưu trữ trả về dữ liệu

- Chú thích: là các văn bản diễn giải trong chương trình (hay đoạn lệnh) mà trình biên dịch sẽ bỏ qua

toàn bộ dòng lệnh hoặc một phần của dòng lệnh được

chú thích Nếu – được đặt ở đầu dòng thì toàn bộ dòng

lệnh là chú thích

toàn bộ các dòng lệnh và văn bản ở giữa cặp dấu /* */

được xem là chú thích

- Hàm: là tập lệnh Transact-SQL để thực hiện công việc nào đó

+ Các hàm tập hợp dùng để thống kê dữ liệu:

SUM(tên_cột) trả về tổng giá trị của cột COUNT(*) đếm số bản ghi trong bảng

AVG(tên_cột) trả về giá trị trung bình của cột MAX(tên_cột) trả về giá trị lớn nhất của bản ghi

COUNT(tên_cột) đếm số bản ghi trong bảng MIN(tên_cột) trả về giá trị nhỏ nhất của bản ghi

+ Hàm chuyển đổi kiểu dữ liệu: dùng để chuyển đổi kiểu dữ liệu, ngoài ra nó còn được dùng để hiển thị giá trị ngày

tháng theo định dạng nào đó

CONVERT(datatype[(length)], expression[,style])

trong đó:

datatype: kiểu dữ liệu cần chuyển sang

length: độ dài của dữ liệu

expression: chỉ ra tên cột, hằng số, hàm, biến, hoặc câu lệnh truy vấn con

style: chỉ ra kiểu hiển thị ngày tháng (dd/mm/yyyy hoặc mm/dd/yyyy)

+ Hàm ngày tháng:

DATEADD(datepart, number, date) cộng vào thêm number giá trị vào date

DATEDIFF(datepart, date1, date2) so sánh giữa hai giá trị ngày tháng

DATENAME(datepart, date) trả về giá trị ngày tháng dưới dạng chuỗi

DATEPART(datepart, date) trả về một phần giá trị ngày tháng Trong các hàm ở trên dateparrt là một phần giá trị ngày tháng được kết hợp sử dụng trong hàm ngày tháng để lấy một phần nào đó giá trị ngày tháng

Ý nghĩa Giờ Phút Giây Miligiây của năm Ngày

Ngày của tháng

Tuần của năm của tuần Ngày Tháng Quý Năm

Giá trị 0-23 0-59 0-59 0-999 1-366 1-31 1-53 1-7 1-12 1-7

1753-9999

+ Hàm toán học

ABS(num) trả về giá trị tuyệt đối của num ROUND(num,length) hàm làm tròn

CEILING(num) trả về giá trị nhỏ nhất >=num SIGN(num) xác định dấu của num

FLOOR(num) trả về giá trị lớn nhất >=num SQRT(num) hàm căn bậc hai

POWER(num,y) hàm lũy thừa + Các hàm hệ thống

DB_ID([‘tên_CSDL’]) trả về số định danh của

CSDL

OBJECT_ID

(‘tên_đối_tượng’) trả về số định danh đối tượng

DB_NAME

([‘id_CSDL’]) trả về tên CSDL OBJECT_NAME (‘id_đối_tượng’) trả về tên đối tượng

HOST_ID() trả số định danh của máy

trạm USER_ID(‘user’) Số định danh người dùng

HOST_NAME() trả về tên của máy trạm USER_NAME(‘user’) trả về tên người dùng

ISNULL(expr,value) nếu expr là Null thì thay thế

bằng value + Hàm xếp hạng:

ROW_NUMBER() hàm đánh số hàng, bắt đầu với 1 với hàng đấu tiên rồi sau đó tăng dần

DENSE_RANK() hàm trả về xếp hạng giữa các hàng mà không có khoảng cách giữa các hàng

- Biểu thức: là kết hợp của nhiều phần tử toán tử, giá trị, định danh có thể ước tính và trả về kết quả Trước khi thực hiện cần kiểm tra xem trường COUNTRY có nhập dữ liệu hay không bằng toán tử NULL

+ Biểu thức cơ bản:

So sánh so sánh các giá trị dữ liệu Logic trả về đúng sai với AND, OR, NOT, LIKE, ANY, ALL hoặc IN

Số học thực hiện phép tính số học +, -, *, /,

Toán tử một ngôi toàn tử thực hiện trên một toàn hạng Toán tử nhị phân toán tử thực hiện trên các bit dữ liệu Hàm ghép chuỗi ghép các chuỗi thành một chuỗi Gán giá trị gán giá trị cho biến

+ Biểu thức CASE:

Biểu thức CASE so sánh: so sánh các biểu thức với giá trị và trả về kết quả tương ứng

CASE Biểu_thức WHEN Giá_trị_1 THEN Biểu_thức_kết_quả_1 [WHEN Giá_trị_2 THEN Biểu_thức_kết_quả_2 .]

[ ELSE Biểu_thức_kết_quả_N]

END

Biểu thức CASE tìm kiếm: tìm kiếm theo điều kiện, thỏa mãn để trả về kết quả tương ứng

CASE

WHEN bt_1 THEN kết_quả_bt_1 [WHEN bt _2 THEN kết_quả_bt_2 ]

[ ELSE biểu_thức_kết_quả_N]

END

THỰC THI LỆNH TRANSACT-SQL

Xử lý từng câu lệnh

+ Câu lệnh SELECT là một

câu lệnh phi thủ tục, nó không

chỉ rõ các bước chính xác mà

CSDL thực thi rút trích dữ

liệu

+ Server phải phân tích câu

lệnh để xác định cách lấy dữ

liệu hiệu quả nhất Quá trình

này gọi là tối ưu câu lệnh

SELECT và đối tượng thực

hiện tối ưu này gọi là bộ tối ưu

truy vấn

Xử lý lô

Là một hoặc nhiều câu lệnh Transact-SQL phân

cách bởi từ GO được gửi cùng một lần để yêu

cầu SQL Server xử lý Các câu lệnh này được biên dịch thành một đơn vị thực thi (execution plan) và được thực thi cùng một lúc Việc xử lý

lô có ưu điểm:

+ Quản lý CSDL dễ dàng hơn;

+Thủ tục lưu trữ (stored procedures) là nhóm các câu lệnh Transact-SQL được biên dịch thành một execution plan, vì thế tạo ra việc nhất quán trong việc lập trình ứng dụng như: những câu lệnh nào thực hiện lặp đi lặp lại thì ta xây dựng trong thủ tục lưu trữ để tăng hiệu quả thực thi, và các ứng dụng chỉ cần gọi tên thủ tục để thực thi

Thực thi dưới dạng kịch bản

Các câu lệnh SQL có thể được thực thi dưới dạng tập tin được lưu trữ trong file với phẩn

mở rộng của file thường được lưu dưới dạng *.sql Thực thi sẽ được đọc khi được yêu cầu để thực thi

ĐẠI CƯƠNG SQL SERVER – Mai Đức Thạch 0165.859.7998 – nadipage.com, webnadi.com, vneverestweb.com

Trang 8

TOÀN VẸN DỮ LIỆU (DATA INTEGRITY)

ĐỊNH NGHĨA

TOÀN VẸN DỮ LIỆU

► Trong CSDL, khi dữ liệu được lưu trữ

hoặc cập nhật các giá trị nhập vào cần phải

được kiểm tra tính hợp lệ và tính đúng

đắn

► Nếu có thao tác bất kỳ như sửa hay xóa

nào trên dữ liệu, thì sự thay đổi đó cần

phải được phản ánh đến tất cả các nơi

khác trong CSDL có liên quan đến dữ liệu

đó.tính hợp lệ và tính đúng đắn

► Tính toàn vẹn của dữ liệu có thể được

bảo quản (maintained) bằng cách đưa ra

một số các kiểm tra nào đó tại thời điểm

tạo bảng hoặc thời điểm chỉnh sửa bảng,

sau đó các kiểm tra này được áp dụng khi

quản lý dữ liệu

QUY TẮC TOÀN VẸN DỮ LIỆU

Có một số các qui tắc(rule) cho toàn vẹn

dữ liệu giúp đảm bảo tính đúng đắn và nhất quán của dữ liệu Các qui tắc đó là:

► Trong một bảng không thể có hai bản ghi (record) mà giá trị ở tất cả các cột là như nhau

► Chỉ có các giá trị dữ liệu hợp lệ mới

có thể được thêm vào

► Tính hợp lệ của dữ liệu vẫn phải được duy trì (đảm bảo) khi dữ liệu được chỉnh sửa

► Với các bảng có quan hệ với nhau qua một cột chung, khi thay đổi dữ liệu trong cột chung ở bảng này nên được phản ánh phù hợp tới các bảng có liên quan

CÁC LOẠI TOÀN VẸN DỮ LIỆU

CƠ CHẾ THỰC THI TOÀN VẸN DỮ LIỆU

► Constraints: là các thuộc tính, bạn có thể gắn cho các cột trong bảng để ngăn các

dữ liệu không hợp lệ được nhập vào cột

► Default values: Bạn có thể định nghĩa các giá trị cho các cột không chấp nhận giá trị null Khi thực hiện thêm hoặc sửa giá trị mặc định sẽ được chèn vào bản ghi tại các cột bị bỏ trống

► Rules: là các constraint có thể được áp dụng để điều khiển các giá trị dữ liệu được nhập vào bảng Các rule độc lập với việc định nghĩa bảng và có thể áp dụng cho nhiều bảng

► Triggers: có chứa các đoạn code tạo thành các câu lệnh T-SQL được thi tự động khi có một sự kiện xác định xảy ra

TOÀN VẸN THỰC THỂ (Entity Integrity)

Mỗi bảng trong CSDL biểu diễn cho một thực thể, trong đó mỗi record (dòng) bên trong bảng biểu diễn cho một thể hiện của thực thể Toàn vẹn thực thể được đảm bảo bởi:

- PRIMARY KEY:

không cho phép chèn vào giá trị null hoặc giá trị trùng với các giá trị đã có

- UNIQUE: không

cho phép nhập vào giá trị trùng nhau và cho phép nhập vào một giá trị null một lần

- INDEXES: có thể

được dùng để ngăn cản nhập giá trị trùng nhau vào một cột để đảm bảo tính duy nhất của các giá trị

- IDENTITY: được

định nghĩa cho một cột định danh trong bảng

Cột định danh là cột có chứa các giá trị tuần tự

do hệ thống phát sinh mỗi khi một record được thêm vào Tất các giá trị trong cột này là duy nhất

TOÀN VẸN MIỀN GIÁ TRỊ (Domain Integrity)

Một miền là một tập hợp các giá trị tạo ra những giá trị hợp lệ trong một cột Để đảm bảo sự toàn vẹn về miền, tất cả các giá trị

dữ liệu trong bảng nên thuộc về miền đã xác định

- FOREIGN KEY:

Giá trị cho cột này có thể là null hoặc một giá trị tồn tại trong cột UNIQUE hoặc cột PRIMARY KEY mà cột có tham chiếu đến

- CHECK: chỉ ra một miền giá trị hợp lệ có thể được nhập vào cho cột

- DEFAULT: chỉ ra

các giá trị cho những cột không chấp nhận giá trị null Giá trị mặc định được tự động gán cho cột khi cột đó bị

bỏ trống

- NOT NULL: chỉ ra

rằng cột đó không chấp nhận giá trị NULL (không được để trống)

- DATA TYPES:

Kiểu dữ liệu hợp lệ đã được xác định cho nhiều cột khác nhau

Ví dụ: Khi cột được định nghĩa có kiểu dữ liệu là date thì chỉ chấp nhận các giá trị kiểu date

- RULES: là các ràng

buộc xác định miền hoặc dạng giá trị hợp

lệ cho một cột Rule có thể định nghĩa độc lập sau đó áp dụng cho nhiều bảng

TOÀN VẸN THAM CHIẾU (Referential Integrity)

- Toàn vẹn tham chiếu đảm bảo tính nhất quán dữ liệu giữa các bảng có liên quan với nhau thông qua cột chung (trường chung)

- Sử dụng khóa ngoại

để thực hiện toàn vẹn tham chiếu

- Tính toàn vẹn tham chiếu được đảm bảo bởi các qui tắc sau:

+ Các giá trị chèn vào cột khóa ngoại là những giá trị bắt buộc phải có tồn tại cột UNIQUE hoặc khóa chính ở bảng tham chiếu

+ Nếu giá trị trong cột UNIQUE hoặc khóa chính được sửa đổi, thì

sự thay đổi tương tự cũng được thực hiện trên cột khóa ngoại

+ Nếu một giá trị trong cột UNIQUE hoặc PRIMARY KEY bị xóa bỏ, sự xóa bỏ cũng nên được thực hiện trong các cột khóa ngoại

TOÀN VẸN DO NGƯỜI DÙNG ĐỊNH NGHĨA (User-defined Integrity)

- Các ràng buộc toàn vẹn có sẵn trong SQL Server 2005 vẫn chưa

đủ để đảm bảo các giá trị dữ liệu là đúng theo dạng (format) hoặc miền theo mong muốn

Do đó các ràng buộc

do người dùng định nghĩa có thể được áp dụng cho các cột để duy trì tính toàn vẹn

dữ liệu

- Ví dụ: Số điện thoại yêu cầu phải có dạng như (123) 456-789

- Như vậy có thể tạo kiểu dữ liệu do người dùng định nghĩa để nhận vào giá trị theo dạng này

RÀNG BUỘC TOÀN VẸN

Các ràng buộc được sử dụng để đảm bảo tính hợp lệ của dữ liệu trong một bảng và đảm bảo tính nhất quán dữ liệu giữa các bảng liên

quan Bạn có thể định nghĩa các ràng buộc cho cột hoặc cho bảng

RÀNG BUỘC PRIMARY KEY

- Mục đích của cột khóa chính (PRIMARY KEY) là để xác định

tính duy nhất của mỗi record có trong bảng

- Ràng buộc PRIMARY KEY kiểm tra sự duy nhất của dữ liệu

trong cột khóa chính, không cho đưa vào các giá trị trùng nhau

- Một PRIMARY KEY có thể là một cột hoặc là sự kết hợp của

nhiều cột

- Ràng buộc PRIMARY KEY có thể được chỉ ra bên trong câu

lệnh CREATE TABLE hoặc ALTER TABLE

CREATE TABLE <tên_bảng>

({<tên_cột> <kiểu_dữ_liệu> [CONSTRAINT tên_constraint]

[PRIMARY KEY] } [, n] )

RÀNG BUỘC UNIQUE

- Ràng buộc UNIQUE có thể áp dụng cho một cột hoặc cho kết hợp nhiều cột để đảm bảo tính duy nhất của dữ liệu trong những cột này Ràng buộc UNIQUE đảm bảo tính toàn vẹn thực thể trong bảng Trong một bảng có thể có nhiều ràng buộc UNIQUE cho nhiều cột Với cột áp dụng ràng buộc UNIQUE, Giá trị null chỉ được phép nhập vào một lần

- Ràng buộc UNIQUE có thể được định nghĩa bên trong câu lệnh CREATE TABLE hoặc ALTER TABLE

ALTER TABLE <tên_bảng>

ADD CONSTRAINT tên_constraint UNIQUE (tên_cột)

RÀNG BUỘC FOREIGN KEY

- Ràng buộc khóa ngoại (FOREIGN KEY) được dùng khi bạn muốn kiểm tra tính tồn tại của dữ liệu Nghĩa là giá trị nhập vào cho cột khóa ngoại bắt buộc phải có trong cột PRIMAY KEY hoặc UNIQUE của bảng tham chiếu Cột FOREIGN KEY, PRIMARY KEY hoặc UNIQUE phải có cùng kiểu dữ liệu

- Các tùy chọn cascading được định nghĩa cùng với việc tạo ràng

buộc khóa ngoại để đảm bảo tính nhất quán dữ liệu giữa các bảng liên khi thực hiện thay đổi trên cột PRIMARY KEY hoặc UNIQUE

+ ON UPDATE [NO ACTION | CASCADE]: Chỉ cho SQL

SERVER cách thi hành khi có hành động cập nhật xảy ra trên cột PRIMARY KEY hoặc UNIQUE của bảng tham chiếu

+ NO ACTION: Báo lỗi khi bên cột khóa ngoại có các giá trị có

liên quan tới giá trị bị sửa trong cột PRIMARY KEY hoặc UNIQUE

 CASCADE: Khi cập nhật giá

trị ở cột PRIMARY KEY hoặc UNIQUE, các giá trị trong cột

RÀNG BUỘC CHECK

- Ràng buộc CHECK xác định một miền giá trị nhập vào cho cột

- Ràng buộc CHECK được tạo với biểu thức logic (là biểu thức

có giá trị trả về True hay False) để kiểm tra giá trị nhập vào

- Bạn có thể áp dụng một ràng buộc CHECK tới một nhóm các

cột

- Cú pháp:

CREATE TABLE <tên_bảng>

({ <Tên_cột> <Kiểu_dữ_liệu>

[CONSTRAINT <tên_constraint>] [CHECK(bt_logic)}

[,…n ] )

RÀNG BUỘC DỮ LIỆU TRONG SQL SERVER – Mai Đức Thạch 0165.859.7998 – nadipage.com, webnadi.com, vneverestweb.com

Trang 9

-

CƠ SỞ

DỮ LIỆU

.ndf

.ndf

.ndf

Tập tin sơ cấp (Primary Data Files)

Tập tin thứ cấp (Secondary Data Files)

Tập tin ghi vết (Transaction Log Files)

- Các dòng dữ liệu của bảng được lưu trong các trang dữ liệu (data page) Ngoài ra, còn có các trang index để lưu trữ index của bảng,

- Kích thước của mỗi trang là 8KB, và được bắt đầu bằng

96 byte header lưu các thông tin của trang như:

+ số trang (page number), + kiểu trang (page type), + không gian còn trống trên trang, + con trỏ trỏ đến các trang trước hoặc kế tiếp

- Các trang index giúp truy cập trực tiếp dòng bất kỳ trong bảng Có 2 phương pháp được sử dụng để tổ chức các trang của bảng

+ Các bảng có một clustered index (bảng clustered) + Các bảng không có clustered index (heap)

tổ chức dữ liệu

HEAP

SQL Server truy xuất dữ liệu bằng cách quét toàn bộ bảng (table scan)

Một bảng được quét như sau:

+ Bắt đầu từ trang dữ liệu đầu tiên của bảng

+ Quét từ trang này tới trang khác lần lượt tất cả các dòng có trong

bảng Index Allocation Maps (IAMs)

được sử dụng để di chuyển từ trang này tới trang khác trong một heap

Với bảng có clustered index, các liên kết trang được sử dụng để di chuyển

từ trang này tới trang khác + Đọc từng dòng trong bảng và rút(extract) ra các dòng thỏa mãn điều kiện của truy vấn

+ Là cách tốt nhất cho việc truy xuất các bảng nhỏ

CLUSTERED

SQL Server sử dụng truy xuất index

(indexed access) để

truy xuất dữ liệu

Truy xuất index được thực hiện như sau:

- Duyệt cấu trúc cây index để tìm các dòng mà truy vấn yêu cầu

- Đọc và lấy(extract)

ra các dòng thỏa mãn điều kiện của truy vấn

- Là cách tốt nhất để truy xuất các dòng

và dãy các dòng từ một bảng lớn

Mục đích của việc sử dụng index: nhắm

được tạo trên các bảng để sắp xếp dữ liệu; từ

đó, các record được lấy dễ dàng hơn khi dữ

liệu được sắp xếp SQL Server sử dụng index

tương tự như mục lục của quyển sách Index

có chứa thông tin cho phép bạn tìm dữ liệu

được chỉ ra mà không phải quét toàn bộ bảng

Các truy vấn trên bảng index được thực thi

nhanh hơn và chiếm ít tài nguyên hơn

TẠO FILE INDEX

- Tăng tốc độ truy xuất dữ liệu

- Đảm bảo tính duy nhất của các dòng

►Nên tạo file index:

+ Cho khóa chính, khóa ngoại

+ Thường xuyên tìm kiếm theo một miền

+ Thường xuyên truy cập theo thứ tự

KHÔNG TẠO FILE INDEX

- Tiêu tốn không gian đĩa

- Incurs overhead

►Không nên tạo file index:

+ Trên các cột hiếm khi được tham chiếu đến trong các câu truy vấn

+ Cột có ít giá trị duy nhất

+ Các cột có kiểu dữ liệu là bit, text, hoặc images

- Trong SQL Server, các chỉ mục được tổ chức giống như các cây nhị phân (B-tree) Mỗi trang trong cây chỉ mục index B-tree được gọi là nút chỉ mục (index node)

+ Nút lá có thể là một trang dữ liệu (data page) hoặc cũng có thể là trang chỉ mục (index page) chứa các chỉ mục trỏ tới các dòng dữ liệu

+ Nút gốc và nút trung gian có chứa một trang chỉ mục (index page) nắm giữ các chỉ mục dòng (index row) + Mỗi Chỉ mục dòng có chứa một giá trị khóa và một con trỏ trỏ tới một nút trung gian khác, hoặc trỏ tới một dòng

dữ liệu trong nút lá

- Phân vùng bảng(Table Partitionning) + Phân vùng là kỹ thuật phân chia logic bảng hoặc index thành một hoặc nhiều phân vùng(partition) nhằm quản lý hiệu quả cơ sở dữ liệu với dung lượng lớn

+ Mỗi phân vùng chứa các dòng dữ liệu được tổ chức theo cấu trúc heap hoặc cấu trúc clustered index

+ Phân vùng cho phép truy xuất dữ liệu nhanh chóng và hiệu quả, do thao tác quản lý chỉ thực hiện trên tập con dữ liệu thay vì trên toàn bộ bảng

Table partitioning là kỹ thuật phân chia bảng thành từng đoạn nhằm quản lý hiệu quả cơ sở dữ liệu với dung lượng lớn Đối với các ứng dụng truy cập từ bên ngoài, bảng (table) vẫn là một bảng duy nhất, chỉ có cấu trúc vật lý của

nó là khác so với các bảng không phân đoạn Bảng được phân đoạn dựa vào giá trị một trường của nó (trường được chọn gọi là partition key) Ví dụ bạn có dữ liệu về các giao dịch bán hàng chứa trong bảng BanHang, bạn có thể phân đoạn theo năm của trường NgayGiaoDich (ngày giao dịch): các giao dịch xảy ra trong năm 2009 được nằm trong một đoạn riêng, tương tự với các giao dịch của năm 2010… Kỹ thuật này làm tăng khả năng mở rộng của SQL Server lên rất nhiều, và giúp cho việc quản trị các cơ sở dữ liệu lớn trở nên dễ dàng hơn Thử hình dung với một bảng dữ liệu chứa vài trăm triệu bản ghi thường xuyên được cập nhật, các tác vụ như backup/restore, hoặc create/rebuild index đều rất tốn kém thời gian Việc truy vấn hoặc sửa đổi dữ liệu cũng rất vất vả Table partitioning nhằm giải quyết các trở ngại đó, nó có các ưu điểm chính sau:

1 Tiện lợi về quản trị

- Bạn có thể backup/restore một đoạn mà không ảnh hưởng đến các đoạn còn lại: ví dụ tại thời điểm năm 2010 thì các đoạn chứa dữ liệu của 2009 và các năm trước không còn tiếp nhận dữ liệu mới nữa, bạn không cần phải thường xuyên backup các đoạn này và chỉ cần backup đoạn 2010

- Bạn cũng có thể REBUILD lại index trên từng đoạn (những đoạn cần phải REBUILD do có nhiều thao tác xóa, sửa) thay vì trên toàn bộ bảng

- Nó cũng cho phép nhanh chóng loại bỏ dữ liệu nguyên một đoạn ra khỏi bảng thay vì phải dùng lệnh DELETE (thao tác này gọi là SWITCH-OUT) Tương tự nó cũng cho phép “nạp” dữ liệu từ một bảng khác vào thành một đoạn mới (SWITCH-IN) Tính năng này rất có giá trị đối với các ứng dụng ETL và Datawarehouse

Ví dụ bạn cần import dữ liệu của năm 2008, bạn có thể import vào một bảng riêng và sau đó switch-in bảng này vào bảng chính một cách tức thì Trước khi có partitioning, bạn phải dùng lệnh INSERT để chuyển dữ liệu từ bảng riêng vào bảng chính Quá trình này mất nhiều thời gian hơn và trong suốt quá trình đó bảng bị khóa và không thể

truy cập được

2 Cải tiến về hiệu năng

- Khi một câu lệnh chỉ cần lấy dữ liệu ở một đoạn nào đó thì hệ thống chỉ cần truy nhập vào đoạn đó và bỏ qua các đoạn còn lại (tính năng này gọi là partition elimination)

- Khi các đoạn dữ liệu được lưu trữ ở các ổ cứng khác nhau sẽ làm giảm tranh chấp vào/ra giữa các câu lệnh Ví dụ hai câu lệnh SELECT và UPDATE hoạt động trên cùng một bảng nhưng ở hai đoạn khác nhau có thể thực hiện hoàn toàn song song với nhau

Việc phân đoạn bảng dựa trên hai khái niệm mới sau đây:

· Partition function: qui định giá trị biên cho các đoạn Hệ thống dựa vào hàm này để xác định đoạn mà mỗi bản

ghi thuộc vào

· Partition scheme: ánh xạ các đoạn khai báo trong partition function vào các filegroup (mỗi đoạn được lưu trữ tại

một filegroup)

Nút cao nhất của cây

gọi là nút gốc (root node)

Nút bất kỳ nằm giữa nút lá và nút gốc

gọi là nút mức trung gian (intermediate node)

Nút ở mức thấp nhất

gọi là nút lá (leaf node)

CẤU TRÚC HEAP (HEAP STRUCTURES)

- Trong cấu trúc heap, các trang dữ liệu và các dòng dữ liệu không được sắp xếp theo thứ tự cụ thể nào Các dòng

và các trang dữ liệu không liên kết(link) với nhau mà chỉ được kết nối(connenction) luận lý (logical) qua thông tin

được ghi trong các trang IAM (Index Allocation Map - Bản đồ cấp phát chỉ mục) SQL Server 2005 sử dụng các

trang IAM để duyệt một cấu trúc heap Bạn có thể đọc một heap bằng cách duyệt các trang IAM để tìm các extent

có chứa những trang cho heap đó

- Sự phân vùng của cấu trúc heap: mặc định, mỗi heap chỉ có một phân vùng; khi các phân vùng được tạo cho một

bảng có cấu trúc heap, mỗi phân vùng sẽ chứa dữ liệu trong một cấu trúc heap riêng biệt

RÀNG BUỘC DỮ LIỆU TRONG SQL SERVER – Mai Đức Thạch 0165.859.7998 – nadipage.com, webnadi.com, vneverestweb.com

Trang 10

CÁC LOẠI INDEX

Clustered index lưu trữ dữ liệu theo kiểu sắp xếp Nó thực thi như một cấu index

B-tree Một bảng chỉ có thể có một clustered index vì clustered index xác định thứ tự lưu trữ vật lý của dữ liệu

Nonclustered index không sắp xếp lại thứ tự vật lý của dữ liệu Chúng chỉ tạo các

con trỏ trỏ vị trí vật lý của các dòng dữ liệu SQL Server 2005 hỗ trợ tới 249 nonclustered cho một bảng

Unique index có thể được định nghĩa trên một cột có chứa giá trị không trùng nhau

- Nếu bảng có một PRIMARY KEY, một unique clustered index được định nghĩa tự động trên cột đó

- Nếu bảng có một cột với ràng buộc UNIQUE, một unique nonclustered index được

tự động tạo trên cột đó

Composite index (index kết hợp) là một index được tạo trên hai hay nhiều cột Cả

clustered index và nonclustered index đều có thể là composite index

Full-Text index cho phép thực hiện các truy vấn phức tạp trên dữ liệu kí tự Sử

dụng tính năng Full-Text index, việc tìm kiếm có thể thực hiện trên từng từ riêng biệt, cụm từ, đoạn văn, một phần của từ, hoặc biến thể của từ (drunk biến thể của drink)

DỰA THEO CẤU TRÚC

DỰA THEO ĐẶC ĐIỂM

XML Index được xem như là một index XML Clusered index và nonclustered

index đều có thể tạo trên cột dữ liệu XML

TẠO INDEX Các quy tắc khi tạo Index:

- Một index có thể có tối đa 16 cột

- Quá nhiều index làm giảm hiệu suất thực thi của các câu lệnh INSERT, UPDATE và DELETE

- Các index nên sử dụng cho các bảng có khối lượng dữ liệu lớn nhưng có yêu cầu về cập nhật thấp

để cải thiện hiệu suất truy vấn

- Ngay cả bảng có dữ liệu nhỏ vẫn nên duy trì các index, vì sau này dữ liệu vẫn còn được thêm vào bảng

Xem thông tin index: SQL Server

2005 cho phép bạn xem các thuộc tính, không gian được sử dụng bởi index của các tất cả index đã được định nghĩa trên bảng Có thể xem thông tin bằng hai cách sau:

- Dùng thủ tục nội tại sp_helpindex

sp_helpindex “<tên_bảng>”

- Dùng SQL Server Management Studio

CREATE CLUSTERED INDEX <tên_index>

ON <tên_bảng>(tên_cột)

CLUSTERED INDEX INDEX NON CLUSTERED

UNIQUE INDEX

CREATE NONCLUSTERED INDEX <tên_index>

ON <tên_bảng>(tên_cột)

CREATE UNIQUE INDEX <tên_index>

ON <tên_bảng>(tên_cột)

SQL Server 2005 không cho phép tạo unique index trên các cột có chứa các giá trị trùng nhau

COMPOSITE INDEX

CREATE INDEX <tên_index>

ON <tên_bảng>(tên_cột [ASC | DESC], [,….n])

COMPUTED INDEX

Cột Computed là một cột ảo trong bảng, giá trị của nó được tính toán dựa trên biểu thức khi thực thi

- Cú pháp tạo bảng có cột computed

CREATE TABLE <tên_bảng>

( [<tên_cột> AS <biểu_thức>])

- Cú pháp tạo index trên cột computed

CREATE INDEX <tên_index>

ON <tên_bảng>(tên_cột_computed)

CẤU TRÚC CLUSTERED INDEX

- Clustered index sắp xếp dữ liệu trong một bảng theo

thứ tự của khóa index Toàn bộ bảng trở thành cây

index Các node lá chứa khóa index và đồng thời chứa

tất cả các trường còn lại

Kích thước của một clustered index khoảng 5% kich

thước của bảng Trước khi tạo clustered index, bạn cần

phải đảm bảo hệ thống của mình còn không gian trống

tối thiểu gấp 1, 2 lần so với dữ liệu trong bảng

- Nguyên tắc (Guidelines) tạo clustered chỉ mục

+ Chỉ có thể tối đa một clustered index cho mỗi bảng

+ Clustered index có thể chứa một hoặc nhiều trường

+ Khi tạo khóa chính(Primary Key) cho bảng, mặc định

một clustered index được tự động tạo cùng với nó cho

bảng đó

+ Nếu bảng không có khóa chính, thì clustered index

nên được định nghĩa trên:

● Các cột khóa mở rộng thường được dùng cho việc

tìm kiếm

●Cột được sử dụng trong các truy vấn trả về kết quả tập

hợp lớn

● Các cột mà dữ liệu ít trùng nhau

● Các cột được dùng để nối hai bảng

Không đánh chỉ mục các cột trong các trường hợp sau:

- Cột chỉ chứa chỉ một số ít các giá trị duy nhất Bảng

chỉ chứa một số ít hàng Việc đánh chỉ mục trên các

bảng nhỏ có thể không là tối ưu vì nó khiến cho SQL

Server mất nhiều thời gian để duyệt chỉ mục để tìm kiếm

dữ liệu hơn là thực hiện việc tìm kiếm tuần tự từng hàng

trong bảng

Trường tĩnh: Trường clustered index không nên bị cập

nhật thường xuyên, một khi đã có mặt trong bảng thì giá

trị của nó cần được giữ nguyên Khi nó bị cập nhật, bản

thân clustered index cũng cần được cập nhật để sắp xếp

bản ghi vào vị trí mới cho đúng thứ tự, và đồng thời các

nonclustered index khác cũng phải cập nhật theo để cho

con trỏ giờ phải chứa giá trị mới Thao tác cập nhật

trường clustered index do vậy rất tốn kém và nếu diễn ra

thường xuyên, cũng làm cho clustered index bị phân

mảnh

CẤU TRÚC NONCLUSTERED INDEX

- Một chỉ mục non-clustered xác định cách sắp xếp logic của bảng Vì vậy, một bảng có thể có rất nhiều chỉ mục non-clustered (có thể lên tới 249) Một chỉ mục non-non-clustered giống như một chỉ mục trong một cuốn sách giáo khoa Dữ liệu được lưu trữ trong một nơi, chỉ mục ở một nơi khác cùng với các con trỏ trỏ tới vị trí lưu trữ của dữ liệu

+ Các nhãn trong chỉ mục được lưu trữ theo thứ tự các giá trị khoá của chỉ mục, nhưng thông tin trong bảng không hề thay đổi Nếu không có chỉ mục clustered nào được tạo ra trên bảng, các hàng không có một trật tự nhất định nào Một chỉ mục non-clustered là một chỉ mục trong đó thứ tự logic của chỉ mục không trùng khớp với thứ tự vật lý, thứ tự lưu trữ của các hàng trên ổ đĩa

+ SQL tìm kiếm một giá trị dữ liệu bằng cách tìm theo chỉ mục non-clustered để xác định được vị trí của dữ liệu trong bảng và sau đó nhận về trực tiếp dữ liệu từ vị trí đó Qúa trình này giống như việc sử dụng chỉ mục trong một quyển sách

Nếu bảng dữ liệu phía dưới được sắp xếp sử dụng một chỉ mục clustered, vị trí là giá trị của khoá; Ngược lại, vị trí là ID của hàng bao gồm số hiệu file, số trang, và số hiệu của hàng

- Nonclustered index có cấu trúc B-tree giống như clustered index, nhưng có một số sự khác biệt sau:

+ Thứ tự vật lý các dòng dữ liệu trong bảng không lưu trữ theo thứ tự được qui định trong khóa nonclustered

+ Trong cấu trúc nonclustered index, mỗi node lá chứa khóa index và con trỏ trỏ đến trang

● Nếu bảng có clustered index, con trỏ này chính là khóa clustered index

● Nếu bảng không có clustered index, con trỏ này là RowID, một dạng định danh bản ghi kết hợp fileID + pageID+ offset

- Nonlustered index được sử dụng khi bạn muốn mở rộng thêm nhiều cách tìm kiếm dữ liệu khác nhau Trước khi tạo, cần xem xét một số các nguyên tắc sau:

+ Khi một clustered index được tạo lại hoặc sử dụng tùy chọn DROP_EXISTING, SQL Server xây dựng lại các nonclustered index

+ Tạo clustered index trước khi tạo nonclustered index, làm như vậy để không phải xây dựng lại nonclustered index khi tạo một clustered index

Tìm kiếm các dòng với Nonclustered index

- Nonclustered index tương tự như một mục lục quyển sách

- Các con trỏ trong nút mức lá của index trỏ tới vị trí lưu trữ dữ liệu của bảng

- Khi thực hiện tìm kiếm các dòng bằng các nonclustered index, câu lệnh SELECT được dùng cùng với các cột nonclustered index trong mệnh đề WHERE

Tìm kiếm các dòng với clustered index

- Các clustered index lưu trữ các dòng dữ liệu dựa trên các giá trị khóa của chúng

- Khi thực hiện tìm kiếm các dòng bằng các clustered index, câu lệnh SELECT được dùng cùng với các cột clustered index được chỉ

ra trong mệnh đề WHERE

Tìm kiếm các dòng khi không có các index

- Khi không có index tạo cho bảng, SQL Server sử

dụng các view catalog để tìm các dòng

- SQL Server sử dụng sys.indexes để tìm ra trang

IAM Trang IAM có chứa danh sách tất cả các

trang của một bảng, qua đó SQL Server có thể đọc

tất cả các trang dữ liệu

- Khi view sys.indexes được sử dụng, query

optimizer kiểm tra tất cả các dòng trong một bảng

và chỉ rút ra các dòng được tham chiếu trong truy

vấn Điều đó làm phát sinh nhiều thao tác

nhập/xuất và sử dụng nhiều tài nguyên

TÌM KIẾM CÁC DÒNG DỮ LIỆU

Đơn vị cấp phát (Allocation Unit): là một tập hợp các trang nằm trong một heap hoặc B-tree, được sử dụng để

quản lý dữ liệu dựa trên kiểu trang của chúng Các kiểu đơn vị cấp phát được sử dụng để quản lý dữ liệu trong các bảng và index:

- IN_ROW_DATA: được dùng để quản lý dữ liệu hoặc các dòng chỉ mục mà có chứa tất cả các loại dữ liệu ngoại trừ đối tượng dữ liệu lớn (LOB)

- LOB_DATA: được dùng để quản lý các đối tượng dữ liệu lớn (LOB) như varbinary(max), varchar(max) , và xml

- ROW_OVERFLOW_DATA: được dùng để quản lý dữ liệu có độ dài biến đổi như dữ liệu có kiểu varchar,

nvarchar, varbinary, hoặc sql_variant

RÀNG BUỘC DỮ LIỆU TRONG SQL SERVER – Mai Đức Thạch 0165.859.7998 – nadipage.com, webnadi.com, vneverestweb.com

Ngày đăng: 09/04/2016, 16:55

TỪ KHÓA LIÊN QUAN

w