






Preview text:
  lOMoARcPSD| 36625228 CHƯƠNG 2 
1. Ràng buộc toàn vẹn là gì?  · 
Ràng buộc toàn vẹn là một điều kiện bất biến không được vi phạm trong một CSDL. 
Trong một CSDL, luôn luôn tồn tại rất nhiều mối liên hệ ảnh hưởng qua lại lẫn nhau 
giữa các thuộc tính của mối quan hệ, giữa các bộ giá trị trong một quan hệ và giữa các 
thuộc tính của các bộ giá trị trong các quan hệ với nhau. Các mối quan hệ phụ thuộc lẫn 
nhau này chính là những điều kiện bất biến mà tất cả các bộ của những quan hệ có liên 
quan trong cơ sở dữ liệu đều phải thỏa mãn ở bất kỳ thời điểm nào. Ràng buộc toàn vẹn 
được gọi là các quy tắc quản lý (Rules) được áp đặt lên trên các đối tượng của thế giới  thực. 
2. Tại sao các quan hệ phải có ràng buộc toàn vẹn? 
Trong một CSDL, ràng buộc toàn vẹn được xem như một công cụ để diễn đạt ngữ nghĩa 
của cơ sở dữ liệu đó. Trong suốt quá trình khai thác cơ sở dữ liệu, các RBTV đều phải được 
thỏa mãn ở bất kỳ thời điểm nào nhằm đảm bảo cho CSDL luôn luôn ở trạng thái an toàn 
và nhất quán về dữ liệu  • 
Bảo đảm tính kết dính của các thành phần cấu tạo nên CSDL  • 
Bảo đảm tính nhất quán của dữ liệu  • 
Bảo đảm CSDL luôn biểu diễn đúng ngữ nghĩa thực tế 
3. Khóa chính (primary key) của một quan hệ Q 
Khóa chính (primary key): Một trong các khóa ứng viên sẽ được chọn làm khóa chính  cho quan hệ. 
4. Khóa ngoại (foreign key) của một quan hệ Q 
Các table trong một database không tồn tại độc lập mà còn có mối quan hệ mật thiết với  nhau về mặt dữ liệu. 
Mối quan hệ này được thể hiện thông qua ràng buộc giá trị dữ liệu xuất hiện ở bảng này 
phải có xuất hiện trước trong một bảng khác. 
Mối quan hệ giữa các table trong database nhằm đảm bảo được tính đúng đắn và hợp lệ 
của dữ liệu trong database. 
=> Một hay nhiều thuộc tính (khóa chính hay thuộc tính thuộc ràng buộc unique) trong một 
mối quan hệ A xuất hiện trong một quan hệ B khác được gọi là khóa ngoại trong quan hệ  B. 
5. Ràng buộc về miền giá trị của 1 thuộc tính      lOMoARcPSD| 36625228
- Miền giá trị (Domain) của một thuộc tính: một tập giá trị mà một thuộctính  có thể nhận.  Ví dụ: 
Dom(Phai) = |Phai| = {‘Nam’, ‘Nu’}  Dom(Diem) = |Diem| = [0..10] 
- Ràng buộc về miền giá trị: các giá trị trong cột phải nằm trong miền giátrị  của cột.  6. 
Một thuộc tính có ràng buộc Unique? 
Ràng buộc unique (duy nhất): mỗi giá trị trong cột có ràng buộc này phải là duy  nhất trong cột đó.  7. 
Một thuộc tính có ràng buộc not null nghĩa là? 
Ràng buộc not null sẽ không cho phép một cột chứa các giá trị NULL. Điều này sex 
buộc một trường luôn chứa ít nhất một giá trị, có nghĩa là bạn không thể chèn bản 
ghi mới hay cập nhật một bảng ghi mà không thêm một giá trị vào trường này (để  trống).  8. 
Một thuộc tính có ràng buộc Check (điều kiện) nghĩa là? 
- Một thuộc tính có ràng buộc Check (điều kiện) nghĩa là thuộc tính đó 
chỉcho phép giá trị nhập vào nằm trong một phạm vi nhất định. 
- Ràng buộc Check là một loại ràng buộc miền giá trị trong SQL Server.- 
Ví dụ: thuộc tính DIEMTHI chỉ cho phép giá trị nằm trong khoảng từ 0  đến 10. 
9. Câu lệnh khai báo, thêm và xóa các ràng buộc của quan hệ Q.   
 Câu lệnh khai báo ràng buộc: 
CONSTRAINT (Tên ràng buộc) RÀNG BUỘC Tên thuộc tính  Ví dụ: 
CONSTRAINT UC_Person UNIQUE (ID, LastName) 
CONSTRAINT PK_Person PRIMARY KEY (ID, LastName)      lOMoARcPSD| 36625228
CONSTRAINT CHK_Person CHECK (Age >=18 AND City=’Sandness’) 
 Câu lệnh thêm ràng buộc: 
ALTER TABLE [Tên bảng ADD CONSTRAINT Tên ràng buộc] Kiểu ràng  buộc (Tên thuộc tính); 
*Phần màu đỏ là phần không bắt buộc. Có thể lượt bỏ nhưng thầy 
khuyến khích là nên đặt tên cho constraints. Ví dụ:  ALTER TABLE Persons 
ALTER COLUMN Age int NOT NULL;  ALTER TABLE Persons 
ADD CONSTRAINT UC_Person UNIQUE (ID,LastName);  -> ALTER TABLE Persons  -> ALTER TABLE Persons ADD  UNIQUE (ID);  ALTER TABLE Persons 
ADD CONSTRAINT PK_Person PRIMARY KEY (ID,LastName);  -> ALTER TABLE Persons  -> ALTER TABLE Persons ADD  PRIMARY KEY(ID);  ALTER TABLE Orders 
ADD CONSTRAINT FK_Person Order 
FOREIGN KEY (PersonID) REFERENCES Persons (PersonID);  -> ALTER TABLE Orders  ->ALTER TABLE Orders 
ADD FOREIGN KEY (PersonID) REFERENCES Persons (PersonID);  ALTER TABLE Persons    ADD CONSTRAINT  CHK_PersonAge   CHECK  (Age>=18   AND  City='Sandn  es');  -> ALTER TABLE Persons  -> ALTER TABLE Persons  ADD CHECK (Age>=18); 
- Câu lệnh xóa ràng buộc:      lOMoARcPSD| 36625228
ALTER TABLE Tên bảng DROP CONSTRAINT Tên ràng buộc Kiểu ràng  buộc (Tên thuộc tính);  Ví dụ:  ALTER TABLE Persons  DROP CONSTRAINT UC_Person; 
10. Cho Q1(A int, B int), Q2(A int, C int). A trong Q2 là khóa ngoại tham chiếu qua A của 
Q1. Thao tác nào dưới đây không thực hiện được 
(1) Thêm 1 dòng có A = 1 vào Q2, nhưng trong Q1 chưa có dòng nào có A = 1. 
(2) Sửa 1 dòng trong Q2 có A = 1 thành A=0, nhưng trong Q1 chưa có dòng nào có A = 0. 
(3) Cả (1) và (2) đều đúng 
(4) Cả (1) và (2) đều sai  11. Trigger là gì?  • 
Là một chương trình con tự động kích hoạt và thực thi  • 
Là một chuỗi các lệnh được kết hợp với một biến cố, khi biến cố xảy ra thì trigger  tự động thực thi 
12. Ý nghĩa của biến cố, điều kiện và hành động trong trigger  • 
biến cố: trigger chỉ được thực thi khi biến cố xảy ra (insert, delete, update)  • 
điều kiện: điều đầu tiên khi trigger được thực thi đó là kiểm tra điều kiện  • 
hành động: nếu hành động đúng thì các hành động trong trigger được thực thi 
13. Ý nghĩa của For và After trong câu lệnh tạo trigger  • 
For: ngay khi biến cố xảy ra thì thực hiện Trigger  • 
After: sau khi biến cố xảy ra mới thực hiện Trigger 
14. Ý nghĩa của câu lệnh dưới 
Create trigger AA on Q after delete as declare @new int, @old int select @old=ol.B from 
deleted ol if (@old >2) print ('Notify Customer Relations'); 
-> Sau khi người dùng xóa, mà giá trị ol.B>2 thì nó sẽ in ra thông báo 'Notify Customer  Relations' 
15. Instead of trigger là gì?      lOMoARcPSD| 36625228
Instead of trigger là một loại trigger đặc biệt, nó cho phép bạn bỏ qua câu lệnh INSERT, 
UPDATE hoặc DELETE trên một table hoặc view. Ví dụ bạn muốn khi có hành 
động delete trên table product thì bạn không xóa sản phẩm mà sẽ chạy một câu lệnh 
UPDATE status của product đó sang chế độ ẩn 
16. Ý nghĩa của câu lệnh dưới 
Create trigger AA on Q after delete as declare @old int select @old=ol.B from deleted 
ol if (@old >2) Begin print ('Notify Customer Relations'); Rollback; end Tạo một trigger 
tên là AA sau khi người dùng thực hiện một câu lệnh xóa trên bảng nếu giá trị xóa lớn hơn 
2 thì in ra câu 'Notify Customer Relations' và phục hồi lại bảng ban đầu trước khi xóa  Rollback  17. Cho 
Create trigger AA on Q after delete as declare @old int select @old=ol.B from deleted 
ol if (@old >2) Begin print ('Notify Customer Relations'); Rollback; end Từ khóa 
“after” trong câu lệnh trên có nghĩa là gì? 
Từ khóa “after” trong câu lệnh trên có nghĩa là gì? 
Tức sau khi thực thi câu lệnh trigger sẽ được thực hiện và kiểm tra giá trị đã xóa 
có lớn hơn 2 không nếu lớn hơn thì in ra dòng Notify Customer Relations và 
phục hồi lại dữ liệu cũ bằng ROLLBACK.  18. Cho 
Create trigger AA on Q for delete as declare @old int select @old=ol.B from deleted 
ol if (@old >2) Begin print ('Notify Customer Relations'); Từ khóa “for” trong câu lệnh  trên có nghĩa là gì? 
FOR hoặc AFTER chỉ định rằng trình kích hoạt DML chỉ kích hoạt khi tất cả các 
hoạt động được chỉ định trong câu lệnh SQL kích hoạt đã khởi chạy thành công. Tất 
cả các hành động phân tầng tham chiếu và kiểm tra ràng buộc cũng phải thành công 
trước khi trình kích hoạt này kích hoạt. 
19. Ý nghĩa của câu lệnh dưới 
Create trigger BB on Q1 instead of insert as Declare @newA int, @newB int Select 
@newA = n.A, @newB = n.B From Inserted n Insert into Q2 values(@newA, @newB) 
Câu lệnh trigger trên có ý nghĩa sau: 
- Trigger có tên là "BB" được tạo trên bảng "Q1".      lOMoARcPSD| 36625228
- Trigger này được kích hoạt khi một hoạt động chèn (insert) dữ liệu vào bảng "Q1"  đượcthực hiện. 
- Thay vì chèn dữ liệu trực tiếp vào bảng "Q1", trigger này thay đổi hành vi mặc định 
vàthực hiện các bước sau: 
Đầu tiên, nó khai báo hai biến @newA và @newB để lưu giá trị mới 
Đầu tiên, nó khai báo hai biến @newA và @newB để lưu giá trị mới của các cột A và  B. 
Sau đó, nó thực hiện một truy vấn SELECT để lấy giá trị của cột A và 
B từ bảng "Inserted". Bảng "Inserted" chứa các dòng dữ liệu mới mà 
người dùng đã cố gắng chèn vào bảng "Q1". 
Cuối cùng, trigger thực hiện một lệnh INSERT để chèn giá trị của @newA  và @newB vào bảng "Q2". 
- Tóm lại, trigger "BB" sẽ thay đổi cách dữ liệu mới được chèn vào bảng"Q1" bằng cách 
chèn dữ liệu này vào bảng "Q2" sau khi đã thực hiện một số xử lý hoặc biến đổi trên dữ  liệu mới.  20. View là gì?  • 
View giúp ta tạo ra các bảng Ảo (Virtual Table) chứa các thông tin, dữ liệu đã được 
lưu trữ sẵn cho người dùng sử dụng. Tuy nhiên, View không tồn tại như một cấu 
trúc lưu trữ dữ liệu trong csdl. 
21. Mục đích của sử dụng view  • 
Các View thường được sử dụng với các mục đích sau đây: 
- Sử dụng View để tập trung trên dữ liệu được xác định. 
- Sử dụng View để đơn giản hóa thao tác dữ liệu- Sử dụng View để tùy biến dữ liệu. 
- Sử dụng View để trích xuất dữ liệu tạo báo cáo. 
 Sử dụng View để bảo mật dữ liệu, che giấu thông tin 
22. Trong SQL server, cú pháp câu lệnh tạo, xóa, sửa view? 
CREATE VIEW as , UPDATE, DROP VIEW  23. Phân loại View?  • 
Standard View: view được tạo bao gồm các cột của các bảng hoặc các view khác  • 
Indexed View: view được tạo và được đặt chỉ mục Unique Clustered Index      lOMoARcPSD| 36625228 • 
Partitiioned view: view được tạo bao gồm các dữ liệu được phân cụm ngang từ một  hoặc nhiều bảng 
24. Ý nghĩa của câu lệnh 
Create view cc as Select A, max(B) as ln from Q1 group by A; 
Tạo ra view có tên cc từ việc chọn A và max của B bằng tên ln từ bảng Q1 với max được  gọp theo A 
25. Cho PBan(MaPB int, TenPB char(20), MaNQL int). Viết câu lệnh thêm ràng 
buộcđảm bảo mỗi phòng ban có 1 người quản lý 
-ALTER TABLE PBan ADD CONSTRAINT FK_PBan_NQL FOREIGNKEY 
(MaNQL) REFERENCES NhanVien(MaNhanVien), 
-ADD CONSTRAINT UQ_PBan_MaNQL UNIQUE (MaNQL); 
26. Cho NV(MaNV int, Hoten char(30), Luong int) và câu lệnh alter table Emp add 
constraint chk_luong_min check (salary > 10000). Giải thích ý nghĩa của câu lệnh  này.  - 
Sửa cấu trúc bảng NV bằng cách thêm một ràng buộc có tên là chk_luong_min 
kiểmtra lương có >10000 hay không.  - 
Đảm bảo rằng mọi dòng dữ liệu mới hoặc dữ liệu đã tồn tại trong bảng "Emp" 
phảituân theo điều kiện kiểm tra "salary > 10000". Nếu có bất kỳ dòng nào không tuân 
theo điều kiện này, việc thêm hoặc cập nhật dữ liệu trong bảng "Emp" sẽ bị từ chối (không 
thể có các bản ghi với mức lương nhỏ hơn hoặc bằng 10,000 trong bảng này). 
27. Cho NV(MaNV int, Hoten char(30), Luong int, MaPB int) và view được định nghĩa 
như sau Create view V_NV(MaPB, SoNV, TongLg, LgTB) as Select MaPB, Count(*), 
Sum(Luong), Avg(Luong) From NV Group by MaPB;     
Các câu SQL nào thực hiện được trên view V_NV  (1) Select * From V_NV 
(2) Delete from V_NV Where MaPB = 1 
(3) Cả (1) và (2) đều đúng 
(4) Cả (1) và (2) đều sai    
