Ràng buộc dữ liệu là gì
A. Các định nghĩa, tiên đề, định lý Show
B. Quy tắc biểu diễn cấu trúc dữ liệu. C. Mối quan hệ giữa các thực thể dữ liệu. D. Các quy tắc, quy định. Hãy suy nghĩ và trả lời câu hỏi trước khi xem đáp án ADSENSE / 1 Câu hỏi này thuộc ngân hàng trắc nghiệm dưới đây, bấm vào Xem chi tiết để làm toàn bài Các ràng buộc - ConstraintCác ràng buộc là những quy tắc mà dữ liệu lưu trữ trong một bảng bắt buộc phải đảm bảo nó. SQL Sever có các ràng buộc như:
Để tạo ra các ràng buộc khi
tạo bảng, hãy thêm cú pháp tạo ràng buộc CREATE TABLE ten_bang ( cot1 datatype ràng_buộc, cot2 datatype ràng_buộc, .... ); Sau đây tìm hiểu một số ràng buộc Ràng buộc NOT NULLVí dụ sau tạo ra bảng -- Xóa bảng Sinhvien IF OBJECT_ID('dbo.Sinhvien', 'U') IS NOT NULL DROP TABLE dbo.Sinhvien; -- Tạo bảng Sinhvien CREATE TABLE Sinhvien ( Ten VARCHAR(255), Namsinh INT NOT NULL, ); Thực hiện chèn dòng dữ liệu INSERT INTO [dbo].[Sinhvien] ([Ten] ,[Namsinh]) VALUES ('TEN1', 2000) INSERT INTO [dbo].[Sinhvien] ([Ten] ,[Namsinh]) VALUES (NULL, 2000) SELECT * FROM Sinhvien Kết quả chèn thành công, tiếp tục chèn dòng mới nhưng thiết lập Namsinh một giá trị NULL INSERT INTO [dbo].[Sinhvien] ([Ten] ,[Namsinh]) VALUES ('TEN2', NULL) Kết quả là thông báo lỗi, vì Namsinh không thể gán bằng NULL Cannot insert the value NULL into column 'Namsinh', table 'dbo.Sinhvien'; column does not allow nulls. INSERT fails. Ràng buộc UNIQUERàng buộc này nhằm đảm bảo giá trị cột trong bảng là duy nhất. Ví dụ tạo lại bảng -- Xóa bảng Sinhvien IF OBJECT_ID('dbo.Sinhvien', 'U') IS NOT NULL DROP TABLE dbo.Sinhvien; -- Tạo bảng Sinhvien CREATE TABLE Sinhvien ( ID INT UNIQUE, Ten VARCHAR(255), Namsinh INT NOT NULL, ); Chèn dữ liệu vào bảng INSERT INTO Sinhvien (ID, Ten, Namsinh) VALUES (1, 'TEN1', 2000) INSERT INTO Sinhvien (ID, Ten, Namsinh) VALUES (2, 'TEN2', 2000) INSERT INTO Sinhvien (ID, Ten, Namsinh) VALUES (3, 'TEN3', 2000) SELECT * FROM Sinhvien Như vậy đã chèn thành công 3 hàng, cột ID là các giá trị khác nhau. Giờ tiến hành thêm một hàng mới với ID = 3 (trong bảng đang có một dòng với cột ID có giá trị 3) INSERT INTO Sinhvien (ID, Ten, Namsinh) VALUES (3, 'TEN4', 2000) Kết quả là thông báo lỗi, vì ID = 3 đã có trong bảng. Như vậy với Cannot insert duplicate key in object 'dbo.Sinhvien'. The duplicate key value is (3). Các ràng buộc - DEFAULTRàng buộc này chỉ ra một giá trị mặc định sẽ
gán vào cột nếu khi INSERT dữ liệu vào bảng mà giá trị này không được truyền vào. Ví dụ sau cột -- Xóa bảng Sinhvien IF OBJECT_ID('dbo.Sinhvien', 'U') IS NOT NULL DROP TABLE dbo.Sinhvien; -- Tạo bảng Sinhvien CREATE TABLE Sinhvien ( Ten VARCHAR(255) DEFAULT 'NO NAME', Namsinh INT, ); Chèn thử dữ liệu INSERT INTO Sinhvien (Ten, Namsinh) VALUES ('TEN1', 2000) INSERT INTO Sinhvien (Namsinh) VALUES (2000) --Giá trị Ten mặc định sử dụng INSERT INTO Sinhvien (Namsinh) VALUES (1999) --Giá trị Ten mặc định sử dụng SELECT * FROM Sinhvien Các ràng buộc - CHECKRàng buộc này để kiểm tra dữ liệu chèn vào thỏa mã điều kiện cầm kiểm tra. Bạn có thể thêm ràng buộc này ngay sau định nghĩa
cột với từ khóa -- Xóa bảng Sinhvien IF OBJECT_ID('dbo.Sinhvien', 'U') IS NOT NULL DROP TABLE dbo.Sinhvien; -- Tạo bảng Sinhvien CREATE TABLE Sinhvien ( Ten VARCHAR(255), Namsinh INT CHECK (Namsinh >= 2000 AND Namsinh <=2005) ); Với ràng buộc như vậy, nếu chèn dữ liệu mà Namsinh ngoài khoảng 2000 - 2005 sẽ phát sinh lỗi. Ngoài ra có thể thêm ràng buộc với tên cụ thể mà không phải sau các định nghĩa cột với cú pháp CONSTRAINT TEN_CONSTRAINT CHECK (Logic) Ví dụ: -- Xóa bảng Sinhvien IF OBJECT_ID('dbo.Sinhvien', 'U') IS NOT NULL DROP TABLE dbo.Sinhvien; -- Tạo bảng Sinhvien CREATE TABLE Sinhvien ( Ten VARCHAR(255), Namsinh INT, CONSTRAINT CHK_CH CHECK (Namsinh > 2000 AND ...) ); Ràng buộc PRIMARY KEYCột thiết lập có ràng buộc -- Xóa bảng Sinhvien IF OBJECT_ID('dbo.Sinhvien', 'U') IS NOT NULL DROP TABLE dbo.Sinhvien; -- Tạo bảng Sinhvien CREATE TABLE Sinhvien ( ID INT PRIMARY KEY, Ten VARCHAR(255), Namsinh INT NOT NULL, ); Việc chèn dữ liệu, cột Việc thiết lập một cột là Ví dụ sau tạo ra cột -- Xóa bảng Sinhvien IF OBJECT_ID('dbo.Sinhvien', 'U') IS NOT NULL DROP TABLE dbo.Sinhvien; -- Tạo bảng Sinhvien CREATE TABLE Sinhvien ( ID INT IDENTITY(1,1) PRIMARY KEY, Ten VARCHAR(255), Namsinh INT NOT NULL, ); Thực hiện chèn dữ liệu vào bảng INSERT INTO Sinhvien (Ten, Namsinh) VALUES ('TEN1', 2000) INSERT INTO Sinhvien (Ten, Namsinh) VALUES ('TEN2', 2000) Như vậy mỗi khi chèn dữ liệu, bạn không cần chỉ ra ID, mà ID này sẽ tự động sinh ra cho bạn. Ngoài ra mỗi khi cần lấy giá trị Ràng buộc FOREIGN KEYRàng buộc Tạo ràng buộc 1 - 1 : One-One RelationshipỞ bảng IF OBJECT_ID('dbo.Thesinhvien', 'U') IS NOT NULL DROP TABLE dbo.Thesinhvien; IF OBJECT_ID('dbo.Sinhvien', 'U') IS NOT NULL DROP TABLE dbo.Sinhvien; -- Tạo bảng Sinhvien CREATE TABLE Sinhvien ( ID INT IDENTITY(1,1) PRIMARY KEY, Ten VARCHAR(255) DEFAULT 'NO NAME', Namsinh INT NOT NULL CHECK (Namsinh >=2000), ); --Tao bang Thesinhvien CREATE TABLE Thesinhvien ( ID INT IDENTITY PRIMARY KEY, Sothe VARCHAR(255), FK_SinhvienID INT UNIQUE FOREIGN KEY REFERENCES Sinhvien(ID) ); Ở bảng Chèn dữ liệu INSERT INTO Sinhvien (Ten, Namsinh) VALUES ('TEN1', 2000) INSERT INTO Sinhvien (Ten, Namsinh) VALUES ('TEN2', 2001) INSERT INTO Sinhvien (Ten, Namsinh) VALUES ('TEN3', 2002) INSERT INTO Thesinhvien(Sothe, FK_SinhvienID) VALUES('TSV0001', 1) INSERT INTO Thesinhvien(Sothe, FK_SinhvienID) VALUES('TSV0002', 2) INSERT INTO Thesinhvien(Sothe, FK_SinhvienID) VALUES('TSV0003', 3) SELECT * FROM Thesinhvien SELECT * FROM Sinhvien Như vậy, mỗi dòng trong Giờ tiến hành thử xóa một dòng trong DELETE FROM Sinhvien WHERE ID = 1 Có thông báo lỗi không xóa được. Nguyên nhân là dòng này (ID) đang được một dòng của DELETE FROM Thesinhvien WHERE FK_SinhvienID = 1 DELETE FROM Sinhvien WHERE ID = 1 Đã xóa thành công. Trong trường hợp nếu muốn tự động khi xóa một dòng trong --Tao bang Thesinhvien CREATE TABLE Thesinhvien ( ID INT IDENTITY PRIMARY KEY, Sothe VARCHAR(255), FK_SinhvienID INT UNIQUE FOREIGN KEY REFERENCES Sinhvien(ID) ON DELETE CASCADE ); Tạo ràng buộc 1 - M : One-Many Relationship (Một - Nhiều)Ví dụ mỗi sinh viên có một bảng điểm cá môn học, có thể tạo bảng có tên -- Xóa bảng Thesinhvien, SinhVien IF OBJECT_ID('dbo.Thesinhvien', 'U') IS NOT NULL DROP TABLE dbo.Thesinhvien; IF OBJECT_ID('dbo.Diem', 'U') IS NOT NULL DROP TABLE dbo.Diem; IF OBJECT_ID('dbo.Sinhvien', 'U') IS NOT NULL DROP TABLE dbo.Sinhvien; -- Tạo bảng Sinhvien CREATE TABLE Sinhvien ( ID INT IDENTITY(1,1) PRIMARY KEY, Ten VARCHAR(255) DEFAULT 'NO NAME', Namsinh INT NOT NULL CHECK (Namsinh >=2000), ); --Tao bang Thesinhvien CREATE TABLE Diem ( ID INT IDENTITY PRIMARY KEY, Monhoc VARCHAR(255), Diem int, FK_SinhvienID INT FOREIGN KEY REFERENCES Sinhvien(ID) ON DELETE CASCADE --Cho phep xoa theo Sinhvien ); INSERT INTO Sinhvien (Ten, Namsinh) VALUES ('TEN1', 2000) INSERT INTO Sinhvien (Ten, Namsinh) VALUES ('TEN2', 2001) INSERT INTO Sinhvien (Ten, Namsinh) VALUES ('TEN3', 2002) INSERT INTO Diem (Monhoc, Diem, FK_SinhvienID) VALUES('A',5,2) INSERT INTO Diem (Monhoc, Diem, FK_SinhvienID) VALUES('B',6,2) INSERT INTO Diem (Monhoc, Diem, FK_SinhvienID) VALUES('C',7,2) INSERT INTO Diem (Monhoc, Diem, FK_SinhvienID) VALUES('D',8,2) SELECT * FROM Diem Tạo INDEX trong SQL ServerTạo một chỉ mục cho bảng nào đó nhằm tăng tốc độ truy vấn, để tạo chỉ mục thực hiện theo cú pháp CREATE UNIQUE INDEX ten_chi_muc ON ten_bang (cot1, cot2, ...) Nếu cho phép trùng giá trị thì bỏ Để xóa bỏ một DROP INDEX ten_bang.ten_chi_muc Tại sao ràng buộc dữ liệu là quan trong?Các ràng buộc dùng để giới hạn loại dữ liệu có thể đưa vào một bảng. Điều này giúp đảm bảo độ tin cậy và chính xác của dữ liệu trong bảng. Nếu có bất kỳ vi phạm nào giữa các ràng buộc và hành động dữ liệu, hành động đó sẽ bị hủy ngay lập tức.
Ràng buộc để làm gì?Ràng buộc là yếu tố hạn chế ngăn cản tổ chức nhận được nhiều thông lượng hơn (thông thường, doanh thu thông qua bán hàng) ngay cả khi không có gì sai.
Số ràng buộc là gì?Ràng buộc là những giới hạn mà dự án phải chịu đựng, khác với Assumption là có thể xảy ra hay không, Constraints là đã xảy ra và bắt buộc mọi yếu tố khác xoay quanh nó. Một số ràng buộc phổ biến là thời gian, chi phí, nguồn lực và PM phải làm việc trong phạm vi giới hạn đó.
Ràng buộc mềm là gì?Ràng buộc ngân sách mềm có nghĩa là Nhà nước thông qua trợ cấp, miễn giảm thuế, ấn định giá đầu vào, ấn định giá đầu ra, tín dụng ưu đãi hoặc tín chấp...
|