Tìm hiểu các vấn đề liên quan đến: Kiểm soát kích thước tập tin , Kiểm tra tính toàn vẹn của CSDL , Đặt ra giới hạn tiêu thụ tài nguyên. Tìm hiểu các vấn đề liên quan đến: Kiểm soát kích thước tập tin , Kiểm tra tính toàn vẹn của CSDL , Đặt ra giới hạn tiêu thụ tài nguyên. Tìm hiểu các vấn đề liên quan đến: Kiểm soát kích thước tập tin , Kiểm tra tính toàn vẹn của CSDL , Đặt ra giới hạn tiêu thụ tài nguyên.
Trang 1ĐỀ TÀI :Tìm hiểu các vấn đề liên quan đến: Kiểm soát kích thước tập tin ,
Kiểm tra tính toàn vẹn của CSDL , Đặt ra giới hạn tiêu thụ tài nguyên
Mục Lục LỜI NÓI ĐẦU 1
I.KIỂM SOÁT KÍCH THƯỚC TẬP TIN CỦA CSDL 2
1.Shrink đăng nhập kích thước tập tin 2
2.Kiểm soát tăng trưởng giao dịch tập tin đăng nhập 3
3.Các phương pháp kiểm soát kích thước tập tin: 4
3.1.Thông tin Tempdb 4
Trang 23.2.Phương pháp 1 để Thu hẹp Tempdb 5
3.3 Phương pháp 2 để Thu hẹp Tempdb 6
3.4.Phương pháp 3 để Thu hẹp Tempdb 7
3.5.Ảnh hưởng của việc thực thi DBCC SHRINKDATABASE hoặc DBCCSHRINKFILE trong khi Tempdb Đang được sử dụng 8
II.KIỂM TRA TÍNH TOÀN VẸN TRONG CSDL 8
1.Toàn vẹn dữ liệu 8
2.Các loại quy tắc kiểm tra tính toàn vẹn dữ liệu 9
2.1.Kiểm tra duy nhất dữ liệu 9
2.2.Kiểm tra tồn tại dữ liệu 12
2.3.Kiếm tra miền giá trị 14
2.4.Thêm vào constraint mới trong bảng 16
2.5.Hủy bỏ constraint đã có trong bảng 21
III ĐẶT RA GIỚI HẠN TIÊU THỤ TÀI NGUYÊN 22
1.Khái niệm giới hạn tài nguyên 22
2.Tại sao sử dụng giới hạn tài nguyên 22
3.Tài nguyên server 23
4.Việc sử dụng Resource Governor 24
5.Hạn chế của phiên bản Resource Governor 24
6.Resource Governor cung cấp gì……… 25
Trang 3LỜI NÓI ĐẦU
Gần đây vấn đề bảo mật cơ sở dữ liệu diễn ra lan tràn trên các phương tiện thông tin đại chúng và mạng lưới tin tức Internet Đầu tiên là sâu Slammer và gần đây nhất là vụ truy cập bất hợp pháp hơn 8 triệu mã số thẻ tín dụng
Nhiều người đặt ra câu hỏi: “Các admin quản trị hệ thống ngủ sau bánh xe cho chúng hoạt động hay sao?” Giống như mạng Internet bị đánh bom vậy Hiện người ta thường hay sử dụng các tiện ích rẻ tiền hơn của các hệ thống thông tin sử dụng web, do đó họ trở nên lười áp dụng các biện pháp bảo mật cơ sở
Vấn đề ở đây là phải cấp bách áp dụng các biện pháp an toàn với người quản trị hệ thống sáng suốt Câu hỏi đầu tiên cho các admin hiện nay thường là “Sửa chữa nhanh như thế nào” chứ không phải “Có bao nhiêu mối nguy hiểm” như trước kia Muốn giải quyết được vấn đề hiện tại, trước hết chúng ta phải điều chỉnh lại ý thức và suy nghĩ trong mỗi người
Bây giờ chúng tôi xin cung cấp một vài phương pháp bảo mật cơ bản sau đây Hy vọng chúng sẽ giúp bạn ít nhiều bảo vệ được các cơ sở dữ liệu quan trọng Trong bài thả luận này , nhóm 06 xin trình bày về một số vấn đề bảo mật cơ sở dữ liệu quan trọng cơ bản nhất Do kiến thức và thời gian còn hạn hẹp , bài thảo luận còn nhiều sai sót Mong cô
và các bạn góp ý để bài thảo luận được hoản thành hơn Cảm ơn cô Hàn Minh Phương
đã giúp đỡ nhóm trong quá trình giảng dạy và thảo luận !
Trang 4I.KIỂM SOÁT KÍCH THƯỚC TẬP TIN CỦA CSDL
Chủ đề này chứa thông tin về làm thế nào để theo dõi kích thước của một nhật ký giao dịch SQL Server, co lại nhật ký giao dịch, thêm hoặc mở rộng một tập tin nhật ký giao dịch, tối ưu hóa các tempdb tốc độ tăng trưởng của file log thi thực thi giao dịch, và kiểm soát sự phát triển của một tập tin nhật ký giao dịch
Màn hình sử dụng không gian đăng nhập
Giám sát sử dụng không gian đăng nhập bằng cách sử dụng DBCC SQLPERF
(LOGSPACE) Lệnh này trả về thông tin về số lượng của không gian đăng nhập hiện đang sử dụng, và chỉ khi các bản ghi giao dịch cần cắt ngắn Để biết thêm thông tin, xem DBCC SQLPERF (Transact-SQL) Để biết thông tin về kích thước hiện tại của một tập tin đăng nhập, kích thước tối đa của nó, và các tùy chọn autogrow cho tập tin, bạn cũng
có thể sử dụng các kích thước , MAX_SIZE , và tăng trưởng các cột cho file đó trong sys.database_files Để biết thêm thông tin, xem sys.database_files (Transact-SQL)
1.Shrink đăng nhập kích thước tập tin
Để giảm kích thước vật lý của file bản ghi vật lý, bạn phải thu nhỏ các tập tin đăng nhập Điều này rất hữu ích khi bạn biết rằng một tập tin nhật ký giao dịch có chứa không gian chưa sử dụng bạn sẽ không need.You có thể thu nhỏ một file log có thể chỉ xảy ra trong khi cơ sở dữ liệu trực tuyến và ít nhất một tập tin nhật ký ảo là miễn phí Trong một số trường hợp, thu hẹp các bản ghi có thể không thể cho đến khi sau khi đăng nhập cắt ngắn tới
Các yếu tố, chẳng hạn như một giao dịch dài chạy, mà giữ các tập tin ghi ảo hoạt động một thời gian dài có thể hạn chế log co rút hoặc thậm chí ngăn ngừa các bản ghi từ co lại ở tất cả Để biết thông tin về các yếu tố có thể trì hoãn log cắt ngắn, xem The TransactionLog (SQL Server)
Thu hẹp lại một tập tin log loại bỏ một hoặc nhiều tập tin ghi ảo mà giữ không có một phần của bản ghi logic (có nghĩa là, không hoạt động tập tin ghi ảo ) Khi một tập tin nhật
ký giao dịch đang bị thu hẹp, đủ không hoạt động tập tin ghi ảo được loại bỏ từ cuối của file bản ghi để giảm nhật ký để kích thước xấp xỉ mục tiêu
Shrink một tập tin đăng nhập (không thu hẹp các file cơ sở dữ liệu)
DBCC SHRINKFILE (Transact-SQL)
DBCC SQLPERF (Transact-SQL)
Trang 5sys.database_files (Transact-SQL) (Xem kích thước , MAX_SIZE , và tăng trưởng các cột cho các file log hoặc các tập tin.)
Thu hẹp cơ sở dữ liệu và các file log có thể được thiết lập để tự động xuất hiện Tuy nhiên, chúng tôi khuyên bạn nên chống co tự động, và autoshrink sở hữu cơ sở dữ liệu được thiết lập để sai theo mặc định Nếu autoshrink được đặt là TRUE, tự động co lại làmgiảm kích thước của một tập tin duy nhất khi có nhiều hơn 25 phần trăm của không gian của nó là không sử dụng Các tập tin được thu nhỏ hoặc kích thước mà tại đó chỉ có 25 phần trăm của tập tin là không gian không sử dụng hoặc kích thước ban đầu của các tập tin, tùy theo cái nào lớn hơn Để biết thông tin về việc thay đổi các thiết lập của
autoshrink tài sản, xem Xem hoặc thay đổi các thuộc tính của một cơ sở dữ liệu -sử dụng Auto Shrink tài sản trên các tùy chọn trang hoặc ALTER DATABASE chọn SET
(Transact-SQL) -sử dụng tùy chọn AUTO_SHRINK
-Thêm hoặc phóng to một tập tin đăng nhập
Ngoài ra, bạn có thể đạt được không gian bằng cách mở rộng các tập tin đăng nhập hiện tại (nếu giấy phép không gian đĩa) hoặc bằng cách thêm một file bản ghi cơ sở dữ liệu, thường là trên một đĩa khác nhau
Để thêm một file bản ghi cơ sở dữ liệu, sử dụng các khoản Thanh LOG FILE của tuyên
bố DATABASE ALTER Thêm một tập tin log cho phép đăng nhập để phát triển
Để mở rộng các tập tin đăng nhập, sử dụng FILE khoản sửa đổi của bản tuyên bố
DATABASE ALTER, xác định SIZE và cú pháp MAXSIZE Để biết thêm thông tin, xem ALTER DATABASE (Transact-SQL)
-Tối ưu hóa kích thước tempdb nhật ký giao dịch
Khởi động lại một trường hợp máy chủ thay đổi kích thước các bản ghi giao dịch của tempdb cơ sở dữ liệu ban đầu, kích thước trước autogrow của nó Điều này có thể làm giảm hiệu suất của tempdb nhật ký giao dịch Bạn có thể tránh chi phí này bằng cách tăngkích thước của tempdb nhật ký giao dịch sau khi bắt đầu hoặc khởi động lại các ví dụ máy chủ Để biết thêm thông tin, xem cơ sở dữ liệu tempdb
2.Kiểm soát tăng trưởng giao dịch tập tin đăng nhập
Bạn có thể sử dụng các DATABASE ALTER (Transact-SQL) tuyên bố để quản lý sự phát triển của một tập tin nhật ký giao dịch Lưu ý những điều sau đây:
Để thay đổi kích thước tập tin hiện tại KB, MB, GB, và các đơn vị lao, sử dụng tùy chọn SIZE
Trang 6Để thay đổi tăng trưởng, sử dụng tùy chọn FILEGROWTH Giá trị 0 chỉ ra rằng sự tăng trưởng tự động được thiết lập để tắt và không có thêm không gian được cho phép Một sốgia autogrowth nhỏ vào một file log có thể làm giảm hiệu suất Mức tăng trưởng tập tin vào một tập tin log cần đủ lớn để tránh việc mở rộng thường xuyên Mức tăng trưởng mặc định là 10 phần trăm nói chung phù hợp.
Để biết thông tin về việc thay đổi các thuộc tính tập tin, tăng trưởng trên một file bản ghi,xem ALTER DATABASE (Transact-SQL)
Để kiểm soát tối đa kích thước của một tập tin log trong KB, MB, GB, và các đơn vị lao hoặc để thiết lập tăng trưởng để UNLIMITED, sử dụng tùy chọn MAXSIZE
3.Các phương pháp kiểm soát kích thước tập tin:
3.1.Thông tin Tempdb
Tempdb là không gian làm việc tạm thời Cùng với các ứng dụng khác, SQL Server sử dụng tempdb cho:
-Lưu trữ các bảng tạm thời được tạo rõ ràng.
- Các bảng làm việc lưu gữ kết quả trung gian được tạo ra trong quá trình xử lý và sắp xếp truy vấn.
- Con trỏ tĩnh được cụ thể hoá.
SQL Server ghi lại đủ thông tin trong nhật ký giao dịch tempdb để quay lại một giao dịchnhưng không thực hiện lại giao dịch trong quá trình truy vấn cơ sở dữ liệu Tính năng nàylàm tăng hiệu suất của câu lệnh INSERT trong tempdb Ngoài ra, không cần ghi nhật ký thông tin để thực hiện lại bất kỳ giao dịch nào vì tempdb được tạo lại mỗi lần bạn khởi động lại SQL Server; do đó, không có bất kỳ giao dịch nào để chuyển đến hoặc quay lại Khi SQL Server khởi động, tempdb được tạo lại bằng cách sử dụng bản sao của cơ sở dữ liệu mẫu và được thiết lập lại về kích thước được cấu hình sau cùng
Theo mặc định, cơ sở dữ liệu tempdb được cấu hình để tự phát triển khi cần; do đó, cơ sở
dữ liệu này có thể phát triển theo thời gian đến kích thước lớn hơn mong muốn Việc khởi động đơn giản SQL Server thiết lập lại kích thước của tempdb về kích thước được cấu hình sau cùng Kích thước được cấu hình là kích thước rõ ràng sau cùng được thiết lập bằng hoạt động thay đổi kích thước tệp như ALTER DATABASE với tuỳ chọn MODIFY FILE hoặc câu lệnh DBCC SHRINKFILE Bài viết này trình bày ba phương pháp mà bạn có thể sử dụng để thu hẹp tempdb đến kích thước nhỏ hơn kích thước được cấu hình
Trang 73.2.Phương pháp 1 để Thu hẹp Tempdb
Phương pháp này yêu cầu bạn khởi động lại SQL Server
a Dừng SQL Server Mở dấu nhắc lệnh, rồi khởi động SQL Server bằng cách nhập lệnh
sau:
sqlservr -c -f
Tham số -c và -f khiến SQL Server khởi động trong chế độ cấu hình tối thiểu với kích thước tempdb bằng 1 MB cho tệp dữ liệu và 0,5 MB cho tệp nhật ký
Chú ý: Nếu bạn sử dụng SQL Server có tên như ví dụ, bạn phải thay đổi thành thư mục
phù hợp (Program Files\Microsoft SQL Server\MSSQL$instance name\Binn) và sử dụng khoá chuyển đổi -s (-s%instance_name%)
b Kết nối đến SQL Server bằng Query Analyzer, rồi chạy lệnh Transact-SQL sau:
ALTER DATABASE tempdb MODIFY FILE
(NAME = 'tempdev', SIZE = target_size_in_MB)
Kích thước mục tiêu mong muốn cho tệp dữ liệu
ALTER DATABASE tempdb MODIFY FILE
(NAME = 'templog', SIZE = target_size_in_MB)
Kích thước mục tiêu mong muốn cho tệp nhật ký
c.Dừng SQL Server bằng cách nhấn Ctrl-C tại cửa sổ dấu nhắc lệnh, khởi động lại SQL
Server như một dịch vụ, rồi xác thực kích thước của các tệp Tempdb.mdf và Templog.ldf.
Một hạn chế của phương pháp này là chỉ hoạt động trên các tệp logic tempdb mặc định, tempdev và templog Nếu các tệp bổ sung được thêm vào tempdb, bạn có thể thu hẹp chúng sau khi khởi động lại SQL Server như một dịch vụ Tất cả các tệp tempdb đều được tạo lại trong khi khởi động; do đó, các tệp đều trống và có thể xoá được Để xoá cáctệp bổ sung trong tempdb, hãy sử dụng lệnh ALTER DATABASE với tuỳ chọn
REMOVE FILE
3.3 Phương pháp 2 để Thu hẹp Tempdb
Trang 8Sử dụng lệnh DBCC SHRINKDATABASE để thu hẹp toàn bộ cơ sở dữ liệu tempdb DBCC SHRINKDATABASE nhận được tham số target_percent, là phần trăm không gian trống mong muốn còn lại trong tệp cơ sở dữ liệu sau khi cơ sở dữ liệu được thu hẹp Nếu bạn sử dụng DBCC SHRINKDATABASE, bạn có thể phải khởi động lại SQL Server
Quan trọng: Nếu bạn chạy DBCC SHRINKDATABASE, không có hoạt động nào khác
có thể xảy ra với cơ sở dữ liệu tempdb Để đảm bảo rằng các quá trình khác không thể sử dụng tempdb trong khi chạy DBCC SHRINKDATABASE, bạn phải khởi động SQL Server trong chế độ một người dùng Để biết thêm thông tin, hãy tham khảo phần Ảnh hưởng của việc Thực thi DBCC SHRINKDATABASE hoặc DBCCSHRINKFILE Trong khi Tempdb Đang được Sử dụng trong bài viết này
a.Xác định không gian đang được sử dụng trong tempdb bằng cách sử dụng quy trình
được lưu trữ sp_spaceused Sau đó, tính toán phần trăm không gian trống còn lại để sử
dụng làm tham số cho DBCC SHRINKDATABASE; việc tính toán này dựa trên kích thước cơ sở dữ liệu mong muốn
Chú ý: Trong một số trường hợp, bạn có thể phải thực thi sp_spaceused
@updateusage=true để tính toán lại không gian được sử dụng và để có được báo cáo cập nhật Tham khảo Sách Trực tuyến về SQL Server để biết thêm thông tin về quy trình được lưu trữ sp_spaceused
Xem xét ví dụ này:Giả sử rằng tempdb có hai tệp, tệp dữ liệu chính (Tempdb.mdf), có kích thước 100 MB và tệp nhật ký (Tempdb.ldf), có kích thước 30 MB Giả sử rằng sp_spaceused báo cáo rằng tệp dữ liệu chính chứa 60 MB dữ liệu Đồng thời, giả sử rằng bạn muốn thu hẹp tệp dữ liệu chính xuống còn 80 MB Tính toán phần trăm không gian trống mong muốn còn lại sau khi thu hẹp, 80 MB - 60 MB = 20 MB Bây giờ, chia 20
MB cho 80 MB = 25% và đây là target_percent của bạn Tệp nhật ký giao dịch được thu hẹp tương ứng, để lại 25% hoặc 20 MB không gian trống sau khi cơ sở dữ liệu được thu hẹp
b.Kết nối đến SQL Server bằng Query Analyzer, rồi chạy lệnh Transact-SQL sau:
dbcc shrinkdatabase (tempdb, 'target percent')
Lệnh này thu hẹp toàn bộ cơ sở dữ liệu tempdb
Có các hạn chế đối với việc sử dụng lệnh DBCC SHRINKDATABASE trên cơ sở dữ liệutempdb Kích thước mục tiêu cho tệp dữ liệu và tệp nhật ký không thể nhỏ hơn kích
Trang 9thước được chỉ định khi cơ sở dữ liệu được tạo ra hoặc kích thước sau cùng được thiết lập
rõ ràng bằng hoạt động thay đổi kích thước tệp, chẳng hạn như ALTER DATABASE với tuỳ chọn MODIFY FILE hoặc lệnh DBCC SHRINKFILE Một hạn chế khác của DBCC SHRINKDATABASE là việc tính toán tham số target_percentage và sự phụ thuộc vào không gian hiện tại được sử dụng
3.4.Phương pháp 3 để Thu hẹp Tempdb
Sử dụng lệnh DBCC SHRINKFILE để thu hẹp các tệp tempdb riêng lẻ DBCC
SHRINKFILE cung cấp tính linh hoạt cao hơn DBCC SHRINKDATABASE vì bạn có thể sử dụng trên một tệp cơ sở dữ liệu duy nhất mà không ảnh hưởng đến các tệp khác thuộc cùng cơ sở dữ liệu đó DBCC SHRINKFILE nhận được tham số kích thước mục tiêu, là kích thước cuối cùng mong muốn cho tệp cơ sở dữ liệu
Quan trọng: Bạn phải chạy lệnh DBCC SHRINKFILE trong khi không có hoạt động nào
xảy ra trong cơ sở dữ liệu tempdb Để đảm bảo rằng các quá trình khác không thể sử dụng tempdb trong khi DBCC SHRINKFILE thực thi, bạn phải khởi động lại SQL Servertrong chế độ một người dùng Để biết thêm thông tin về DBCC SHRINKFILE, hãy xem phần Ảnh hưởng của việc Thực thi DBCC SHRINKDATABASE hoặc
DBCCSHRINKFILE Trong khi Tempdb Đang được Sử dụng trong bài viết này
a Xác định kích thước mong muốn cho tệp dữ liệu chính (tempdb.mdf), tệp nhật ký
(templog.ldf), và/hoặc các tệp bổ sung được thêm vào tempdb Đảm bảo rằng không gian
được sử dụng trong các tệp nhỏ hơn hoặc bằng kích thước mục tiêu mong muốn
b Kết nối với SQL Server bằng Query Analyzer, rồi chạy lệnh Transact-SQL sau cho các
tệp cơ sở dữ liệu cụ thể mà bạn cần thu hẹp:
use tempdb
go
dbcc shrinkfile (tempdev, 'target size in MB')
go
lệnh này thu hẹp tệp dữ liệu cơ bản
dbcc shrinkfile (templog, 'target size in MB')
go
Trang 10lệnh này thu hẹp tệp nhật ký, xem đoạn cuối cùng.
Một lợi thế của DBCC SHRINKFILE là nó có thể giảm kích thước của tệp đến kích thước nhỏ hơn kích thước ban đầu Bạn có thể đưa ra DBCC SHRINKFILE trên bất kỳ tệp dữ liệu hoặc nhật ký nào Một hạn chế của DBCC SHRINKFILE là bạn không thể làm cho cơ sở dữ liệu nhỏ hơn kích thước của cơ sở dữ liệu mẫu
3.5.Ảnh hưởng của việc thực thi DBCC SHRINKDATABASE hoặc
DBCCSHRINKFILE trong khi Tempdb Đang được sử dụng
Nếu tempdb đang được sử dụng và bạn cố gắng thu hẹp bằng cách sử dụng lệnh DBCC SHRINKDATABASE hoặc DBCC SHRINKFILE, bạn có thể nhận được nhiều lỗi khôngnhất quán tương tự với loại sau và hoạt động thu hẹp có thể thất bại:
Máy chủ: Thông báo 2501, Mức 16, Trạng thái 1, Dòng 1 Không thể tìm thấy bảng có tên'1525580473' Kiểm tra sysobjects
hoặc
Máy chủ: Thông báo 8909, Mức 16, Trạng thái 1, Dòng 0 Bảng bị hỏng: ID đối tượng 1,
ID chỉ mục 0, ID trang %S_PGID PageId trong tiêu đề trang = %S_PGID
Mặc dù lỗi 2501 có thể không phải là dấu hiệu của bất kỳ hỏng hóc nào trong tempdb, nó khiến hoạt động thu hẹp thất bại Mặt khác, lỗi 8909 không thể biểu thị hỏng hóc trong cơsở dữ liệu tempdb Khởi động lại SQL Server để tạo lại tempdb và xoá các lỗi không nhấtquán Tuy nhiên, hãy nhớ rằng có thể có các lý do khác cho các lỗi hỏng hóc dữ liệu vật
lý như lỗi 8909 và những lỗi bao gồm sự cố hệ thống đầu vào/đầu ra phụ
II.KIỂM TRA TÍNH TOÀN VẸN TRONG CSDL
1.Toàn vẹn dữ liệu :là việc đặt ra các quy tắc trong một cơ sở dữ liệu nhằm kiểm tra các
giá trị của dữ liệu trước khi được lưu trữ phải đảm bảo tính chính xác và hợp lý bên trongmột cơ sở dữ liệu
Nếu các giá trị dữ liệu nào vi phạm các quy tắc đặt ra thì các dữ liệu đó sẽ không đượclưu vào bảng Các quy tắc này phần lớn được xây dựng dựa vào các quy tắc hiện hữuđang tồn tại trong công việc kinh doanh
Ví dụ :
Trang 11Trong cơ sở dữ liệu Business (Cơ sở dữ liệu doanh nghiệp) bạn có thể đưa ra một số quytắc như sau :
• ID của tài khoản phải là số nguyên không có sai số (miền giá trị)
• Ngày đóng tài khoản phải sau ngày mở tài khoản
• ID của mỗi tài khoản không được trùng nhau (khóa chính)
• Truy vấn tên , ngày sinh khách hàng phải có trong bảng danh sách khách hàng (khóangoại)
• Sản phẩm hay dịch vụ của doanh nghiệp phải có sẵn trong danh mục lưu trữ
Điều gì xảy ra nếu dữ liệu bên trong các bảng có vi phạm các quy tắc ở trên mà vẫn đượclưu trữ vào bên trong cơ sở dữ liệu ? Do đó, trong các hệ cơ sở dữ liệu quan hệ lớn ngàynay, hệ thống sẽ giúp cho người sử dụng có thể định nghĩa ra các quy tắc thông qua các
từ khóa hoặc thuộc tính có liên quan đến cơ sở dữ liệu nhằm đảm bảo dữ liệu khi lưu trữvào cơ sở dữ liệu phải chính xác và hợp lý
Bên trong cơ sở dữ liệu của Microsoft SQL Server việc kiểm tra tính toàn vẹn dữ liệu sẽ
thông qua hai đối tượng quản lý, đó là các constraint và trigger Cả hai đối tượng này
đều được liên kết trực tiếp vào bảng dữ liệu
2.Các loại quy tắc kiểm tra tính toàn vẹn dữ liệu
2.1.Kiểm tra duy nhất dữ liệu
Loại ràng buộc toàn vẹn này cho phép bạn có thể kiểm tra tính duy nhất của dữ liệu bêntrong bảng Điều này ngăn cản việc người sử dụng tình cờ nhập trùng lại các giá trị dữ
liệu bên trong bảng Bạn có thể sử dụng hai thành phần PRIMARY KEY hoặc UNIQUE trong câu lệnh CREATE TABLE để thực hiện việc kiểm tra tính duy nhất của dữ liệu Điểm khác biệt chính giữa PRIMARY KEY và UNIQUE là sự xuất hiện của các thành phần trong câu lệnh CREATE TABLE Thành phần PRIMARY KEY cho phép bạn tạo
ra cấu trúc bảng có chứa khóa chính Do một bảng chỉ có một khóa chính, tuy nhiên khóa
chính được phép định nghĩa có nhiều cột tham gia Vì thế thành phần PRIMARY KEY
chỉ xuất hiện một lần duy nhất khi tạo cấu trúc bảng
Thành phần UNIQUE cho phép bạn kiểm tra tính duy nhất của các cột không tham gia làm khóa chính của bảng Thành phần UNIQUE được phép xuất hiện nhiều lần khi tạo
cấu trúc bảng nếu cần kiểm tra tính duy nhất của các cột không làm khóa chính
Cú pháp :
Trang 12Trong đó :
• Tên constraint : phải là duy nhất trong cơ sở dữ liệu Thông thường quy định tên
constraint gồm có 3 phần Bắt đầu bằng các chữ PRK, kế tiếp là tên bảng và cuối cùng làtên cột áp dụng quy tắc kiểm tra duy nhất dữ liệu của các cột khóa chính
• Danh sách cột khóa chính : là danh sách tên các cột tham gia làm khóa chính, tên các
cột được ngăn cách nhau bởi dấu phẩy (,)
Cú pháp :
Trong đó :
• Tên constraint : phải là duy nhất trong cơ sở dữ liệu Thông thường quy định tên
constraint gồm có 3 phần Bắt đầu bằng các chữ UNQ, kế tiếp là tên bảng và cuối cùng làtên cột áp dụng quy tắc kiểm tra duy nhất dữ liệu của các cột không tham gia làm khóachính
• Danh sách cột : là danh sách tên các cột cần kiểm tra duy nhất, tên các cột được ngăn
cách nhau bởi dấu phẩy (,)
Lưu ý :
Mặc định tên các constraint sẽ do hệ thống Microsoft SQL Server tạo ra nhằm đảm bảotính duy nhất bên trong cơ sở dữ liệu Tuy nhiên bạn có thể chủ động đặt tên cho các
constraint khi tạo ra chúng bằng cách đưa thêm từ khóa CONSTRAINT trong các thành
phần định nghĩa các kiểm tra ràng buộc toàn vẹn dữ liệu
Ví dụ :
Tạo bảng SINHVIEN kiểm tra dữ liệu của cột mã sinh viên phải là duy nhất Trường hợp
chỉ định cột mã sinh viên làm khóa chính của bảng Bạn thực hiện câu lệnh CREATE TABLE như sau :
Trang 13Với cú pháp như trên bảng SINHVIEN có sử dụng một constraint loại PRIMARY KEY
dùng định nghĩa khóa chính của bảng là cột “MaSV” Tuy nhiên tên của constraint sẽ dohệ thống Microsoft SQL Server tạo ra
Trong trường hợp nếu bạn muốn chỉ định tên của constraint do bạn định nghĩa thì bạn
thực hiện câu lệnh CREATE TABLE có sử dụng từ khóa CONSTRAINT như sau :
Khi mà các thành phần của đối tượng constraint xuất hiện ngay phía sau tên cột như hai
ví dụ ở trên thì ràng buộc toàn vẹn dữ liệu sẽ được kiểm tra trên cột dữ liệu Bạn nênchọn cách này khi thực hiện việc kiểm tra các ràng buộc toàn vẹn dữ liệu chỉ trên một cộtbên trong bảng dữ liệu
Trong trường hợp nếu bạn đặt các thành phần của đối tượng constraint bên dưới tất cả cáccột dữ liệu bên trong bảng thì ràng buộc toàn vẹn dữ liệu sẽ được kiểm tra trên bảng Bạnnên chọn cách này khi thực hiện việc kiểm tra các ràng buộc toàn vẹn dữ liệu trên nhiềucột có liên quan bên trong bảng dữ liệu
Ví dụ :
Để tạo bảng có tên HOCPHAN (các môn học phần) gồm có những cột như : Mã LHP cókiểu dữ liệu là chuỗi và chiều dài 14 ký tự, Tên HP có kiểu chuỗi ký tự thay đổi với chiềudài 50 , Số tín chỉ là số nguyên dương Dữ liệu tại các cột không được phép trống Khóa
chính là Mã LHP Bạn thực hiện câu lệnh CREATE TABLE như sau :
Trang 14Hoặc muốn đặt tên của constraint là PRK_HOCPHAN_MALHP
Lưu ý :
Khi sử dụng các loại ràng buộc toàn vẹn dữ liệu được kiểm tra trên cột dữ liệu thì cầnnhớ rằng dấu phẩy (,) luôn được đặt ở vị trí sau cùng của thành phần constraint chứkhông được đặt ở vị trí phía sau tên kiểu dữ liệu của cột
Ngược lại khi sử dụng các loại ràng buộc toàn vẹn dữ liệu được kiểm tra trên bảng thìkhông cần có thêm dấu phẩy (,) ở vị trí phía sau của cột dữ liệu cuối cùng bên trong bảng
Đôi khi những điều lưu ý này sẽ làm cho bạn cảm thấy khó nhớ Do vậy để đơn giản khitạo cấu trúc bảng, bạn thực hiện hai bước :
Bước 1 : Tạo cấu trúc bảng đơn giản bằng lệnh CREATE TABLE gồm có tên bảng, tên
các cột và các kiểu dữ liệu mong muốn
Bước 2 : Thêm các loại constraint tương ứng bằng lệnh ALTER TABLE ADD CONSTRAINT để áp dụng các kiểm tra ràng buộc toàn vẹn dữ liệu cho bảng dữ liệu 2.2.Kiểm tra tồn tại dữ liệu
Loại ràng buộc toàn vẹn này cho phép bạn có thể kiểm tra tính tồn tại của dữ liệu (khóangoại), bắt buộc phải có bên một bảng khác, còn gọi là bảng tham chiếu Điều này ngăncản việc người sử dụng nhập một giá trị dữ liệu không có trong một bảng dữ liệu khác
Bạn có thể sử dụng thành phần FOREIGN KEY trong câu lệnh CREATE TABLE để
thực hiện việc kiểm tra tính tồn tại của dữ liệu