Professional Documents
Culture Documents
Chương 2-HQTCSDL
Chương 2-HQTCSDL
Chương 2-HQTCSDL
=> 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ạo một trigger tên BB trên bảng Q1 có tác dụng khi người dùng thực hiện
chèn một dữ liệu vào bảng Q2 thì nó sẽ chèn vào bảng Q1.
20.View là gì?
- View giúp tạo ra các bảng ảo chứa các thông tin, dữ liệu đã được lưu trữ sẵn
cho người dùng sử dụng. Nhưng view không tồn tại như một cấu trúc lưu trữ
dữu liệu trong CSDL.
21.Mục đích của sử dụng view
- 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?
- Cú pháp tạo view:
CREATE VIEW [tên của view] AS
SELECT [tên cột]
FROM [tên bảng]
WHERE [điều kiện];
- Cú pháp xóa view:
DROP VIEW [tên view]
- Cú pháp sửa view:
ALTER VIEW [tên view] AS
SELECT [tên cột]
FROM [tên bảng]
WHERE [điều kiện];
23.Phân loại View?
- Standard View => được tạo bao gồm các cột là các cột của các bảng hoặc các
view khác.
- Indexed View => được tạo và đặt chỉ mục Unique Clustered.
- Partitioned 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 view có tên là cc gồm cột A từ bảng Q1 và cột ln chứa giá trị lớn nhất của
cột B trong bảng Q1 khi gộp bởi cột 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 QL
CHECK(MaNQL = 1)
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ểm tra lương có >10000 hay không.
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
Assignment
Exercise 1. What is a foreign key constraint? Why are such constraints important?
What is referential integrity? (Ràng buộc khóa ngoại là gì? Tại sao các ràng buôc
như vậy là quan trọng? Tính toàn vẹn tham chiếu là gì?)
Ràng buộc khóa ngoại ( ràng buộc tham chiếu ) là quy tắt, quy luật của DBMS về
việc INSERT, DELETE, UPDATE dữ liệu giữa hai bảng có mối quan hệ ràng
buộc khóa ngoại với nhau, để đảm bảo tính đúng đắn của dữ liệu. Các thuộc tính
được tham chiếu của quan hệ thứ hai phải được khai báo DUY NHẤT hoặc KHÓA
CHÍNH cho quan hệ của chúng.
Ràng buộc khóa ngoại trong bảng cơ sở dữ liệu quan trọng là vì giúp ngăn cản
chèn thêm bất kỳ dữ liệu không hợp lệ trong trường khóa ngoại vì trường khóa
ngoại chỉ chấp nhận những giá trị đã có trong trường khóa chính.
Tính toàn vẹn tham chiếu là đảm bảo tính đúng đắn của dữ liệu trong quá trình
insert, delete, update của các bảng có ràng buộc khóa ngoại
Exercise 2. Answer each of the following questions briefly. The questions are
based on the following relational schema:
Emp(eid: integer, ename: string, age: integer, salary: real)
Works(eid: integer, did: integer, pct_time: integer)
Dept(did: integer, dname: string, budget: real, managerid: integer)
1. Give an example of a foreign key constraint that involves the Dept relation. What are the
options for enforcing this constraint when a user attempts to delete a Dept tuple?
Một ví dụ về ràng buộc khóa ngoại liên quan đến bảng Dept có thể là ràng buộc
khóa ngoại managerid trong bảng Dept, tham chiếu đến trường eid trong bảng
Emp, đại diện cho ID của quản lý của mỗi phòng ban. Khi người dùng cố gắng xóa
một bản ghi từ bảng Dept, các tùy chọn để thực hiện ràng buộc này bao gồm:
- Từ chối xóa: Nếu có bản ghi con trong bảng Emp đang tham chiếu đến bản ghi
mục tiêu trong bảng Dept, hệ thống có thể từ chối việc xóa bản ghi đó.
- Xóa các bản ghi con: Nếu có tùy chọn, hệ thống có thể xóa các bản ghi con trong
bảng Emp mà có khóa ngoại tham chiếu đến bản ghi mục tiêu trong bảng Dept
trước khi xóa bản ghi mục tiêu đó.
2. Write the SQL statements required to create the preceding relations,
including appropriate versions of all primary and foreign key integrity
constraints.
CREATE TABLE Emp (
eid INTEGER PRIMARY KEY,
ename VARCHAR(255),
age INTEGER,
salary REAL
);
4. Write an SQL statement to add John Doe as an employee with eid = 101, age
= 32 and salary = 15, 000
INSERT INTO Emp (eid, ename, age, salary)
VALUES (101, 'John Doe', 32, 15000);
5. Write an SQL statement to give every employee a 10 percent raise
UPDATE Emp
SET salary = salary * 1.1;
6. Write an SQL statement to delete the Toy department. Given the referential integrity
constraints you chose for this schema, explain what happens when this statement is
executed.
Exercise 5. Discuss the strengths and weaknesses of the trigger mechanism. Contrast triggers
with other integrity constraints supported by SQL.
Exercise 6. Consider the following relational schema. An employee can work in more than one
department; the pct_time field of the Works relation shows the percentage of time that a given
employee works in a given department.
Emp(eid: integer, ename: string, age: integer, salary: real)
Works(eid: integer, did: integer, pct_time: integer)
Dept(did: integer, budget: real, managerid: integer)
Write integrity constraints (domain, key, foreign key, or CHECK constraints; or triggers to
ensure each of the following requirements, considered independently.
1. Employees must make a minimum salary of $1000.
ALTER TABLE Emp
ADD CONSTRAINT MinSalaryCheck CHECK (salary >= 1000);
2. Every manager must be also be an employee.
ALTER TABLE Dept
ADD CONSTRAINT ManagerEmpFK FOREIGN KEY (managerid) REFERENCES
Emp(eid);
3. The total percentage of all appointments for an employee must be under 100%.
ALTER TABLE Works
ADD CONSTRAINT TotalTimeCheck CHECK (SELECT SUM(pct_time) FROM
Works WHERE eid = Emp.eid) <= 100);
4. A manager must always have a higher salary than any employee that he or she
manages.
CREATE TRIGGER ManagerSalaryCheck
ON Emp
AFTER INSERT, UPDATE
AS
BEGIN
UPDATE Emp
SET salary = (SELECT MAX(salary) FROM Emp e INNER JOIN Works w ON e.eid =
w.eid WHERE w.did = Emp.eid)
WHERE Emp.eid IN (SELECT did FROM Dept);
END;
5. Whenever an employee is given a raise, the manager’s salary must be increased to
be at least as much.
CREATE TRIGGER ManagerSalaryIncrease
ON Emp
AFTER UPDATE
AS
BEGIN
UPDATE Emp
SET salary = (SELECT MAX(salary) FROM Emp e INNER JOIN Works w ON e.eid
= w.eid WHERE w.did = Emp.eid)
WHERE Emp.eid IN (SELECT did FROM Dept)
AND EXISTS (SELECT * FROM inserted WHERE inserted.eid = Emp.eid);
END;
6. Whenever an employee is given a raise, the manager’s salary must be increased
to be at least as much. Further, whenever an employee is given a raise, the department’s
budget must be increased to be greater than the sum of salaries of all employees in the
department.
CREATE TRIGGER BudgetIncrease
ON Emp
AFTER UPDATE
AS
BEGIN
UPDATE Dept
SET budget = (SELECT SUM(salary) FROM Emp WHERE eid IN (SELECT did
FROM Works WHERE did = Dept.did))
WHERE Dept.did IN (SELECT did FROM Works WHERE eid IN (SELECT eid
FROM inserted));
END;
Hệ thống sẽ truy cập vào view SeniorEmp và áp dụng điều kiện WHERE để
lọc ra các nhân viên có tuổi lớn hơn 50 và mức lương lớn hơn 100.000 đô la.
Sau đó, hệ thống sẽ trả về các tên của những nhân viên thỏa mãn điều kiện
từ view SeniorEmp.
2. Give an example of a view on Emp that could be automatically updated by updating Emp.
CREATE VIEW HighPaidEmp AS
SELECT eid, ename, age, salary
FROM Emp
WHERE salary > 50000;
3. Give an example of a view on Emp that would be impossible to update (automatically)
and explain why your example presents the update problem that it does.
CREATE VIEW EmpSummary AS
SELECT ename, COUNT(*) AS NumWorks
FROM Emp INNER JOIN Works ON Emp.eid = Works.eid
GROUP BY ename;