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 1HỆ 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 2MÔ 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 3Cơ 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 4Ngô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 5KIỂ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 6TỔ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 7BIẾ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 8TOÀ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 10CÁ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