Giáo trình Cơ sở dữ liệu - Huỳnh Văn Đức (Phần 1)

Tóm tắt Giáo trình Cơ sở dữ liệu - Huỳnh Văn Đức (Phần 1): ...Chính xác hơn, lược đồ quan hệ là loại lược đồ thường dùng để mô hình theo hướng vật lý. Tuy nhiên, chúng ta sẽ không đi vào chi tiết các mô tả mức vật lý (ngƣời đọc có thể đọc thêm trong các tài liệu về hệ quản trị cơ sở dữ liệu) mà chỉ dừng lại ở các lƣợc đồ logic. Trong tài liệu này, chúng ...Với biểu diễn dạng bảng, ta có mỗi dòng là một điểm của quan hệ trong tập tích, tên bảng là tên quan hệ, tên của mỗi tập thành phần là thuộc tính. Như vậy, không gian tích biểu diễn lược đồ, điểm trong không gian tích biểu diễn bộ và tập các điểm cho ta một quan hệ. Số các thuộc tính (cột) đ...c Mục tiêu cuối cùng của chúng ta là đƣa ra một biểu thức đại số quan hệ. Đây là một tiếp cận rất khác so với các tính toán trên số thông thƣờng30 và chúng ta cần một số chiến lƣợc giải quyết vấn đề thuộc loại này31. 1. Phân rã thành các câu hỏi con; 2. Nhìn lƣợc đồ cơ sở dữ liệu dƣới cấu ...

pdf134 trang | Chia sẻ: havih72 | Lượt xem: 438 | Lượt tải: 0download
Nội dung tài liệu Giáo trình Cơ sở dữ liệu - Huỳnh Văn Đức (Phần 1), để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
 ngữ con truy vấn ở đây, ngoài phép kết INNER JOIN chúng ta 
còn có hai phép kết ngoài LEFT JOIN và RIGHT JOIN 
Tính toán giá trị của nhóm (truy vấn tổng) 
Dữ liệu sau khi đƣợc tập hợp lại sẽ đƣợc phân nhóm39 theo các bộ giá trị 
của tập thuộc tính đặt sau GROUP BY. 
39 Một câu truy vấn tổng chỉ làm việc với một phân hoạch. 
Chƣơng 3: Ngôn ngữ cơ sở dữ liệu SQL 101 
Ví dụ 3.14 
Xét quan hệ chi tiết bán 
CT_BAN HD_SO MA_HANG L_BAN 
 HD01 H01 15 
 HD01 H02 22 
 HD02 H01 14 
 HD02 H03 7 
 HD02 H05 13 
 HD03 H04 11 
 HD03 H05 8 
Câu truy vấn SELECT HD_SO, L_BAN FROM CT_BAN tập hợp dữ liệu 
vào một bảng có hai cột. Thêm GROUP BY HD_SO, các dòng của bảng 
này đƣợc chia làm 3 nhóm: 
CT_BAN HD_SO L_BAN 
nhóm 1 HD01 15 
 HD01 22 
nhóm 2 HD02 14 
 HD02 7 
 HD02 13 
nhóm 3 HD03 11 
 HD03 8 
Lúc này mỗi nhóm có nhiều dòng. Giá trị thuộc tính của nhóm là một giá 
trị đại diện. Các hàm tính tổng, còn đƣợc gọi là các hàm kết tập 40 
(AGGREGATE), sẽ xác định một giá trị đại diện cụ thể cho mỗi nhóm: 
40 Việc tính toán đƣợc thực hiện trên tập các giá trị của một cột đƣợc nhóm lại theo một 
tiêu chuẩn nào đó. Kết quả cho ta một quan hệ mới, mỗi dòng lƣu dữ liệu tổng hợp của 
mỗi nhóm. Chẳng hạn, giả sử chúng ta lƣu tuổi của các nhân viên trên cột TUOI, tuổi của 
ai ứng với dòng nấy. Bây giờ nếu nhóm họ lại theo giới tính, chúng ta sẽ có 2 nhóm với 2 
tập dữ liệu về tuổi của mỗi nhóm và chúng ta có thể tính tuổi trung bình của mỗi nhóm. 
102 Giáo trình cơ sở dữ liệu 
SUM 
MAX 
MIN 
LAST 
FIRST 
COUNT 
AVG 
Sau khi tính toán, nếu muốn chọn theo các giá trị đại diện của nhóm, chúng 
ta sẽ đặt điều kiện chọn sau HAVING. 
Chúng ta có quy trình 3 bƣớc: 
1. Tập hợp dữ liệu; 
2. Gom nhóm và dùng các hàm tổng; 
3. Chọn sau tính toán41. 
Cú pháp 
SELECT [DISTINCT] 
FROM 
WHERE 
GROUP BY 
HAVING 
Ví dụ 3.15 
Dùng dữ liệu ở ví dụ trên, ta có kết quả thực hiện câu truy vấn 
SELECT HD_SO, MAX(L_BAN) AS SL_MAX, COUNT(*) AS CNT 
FROM CT_BAN 
WHERE L_BAN > 10 
GROUP BY HD_SO 
HAVING CNT > 1 
là quan hệ sau (chƣa có tên) 
HD_SO SL_MAX CNT 
HD01 22 2 
HD02 14 2 
41
 Nhƣ vậy WHERE dùng để lọc trước khi tính toán tổng, với mục đích tập hợp dữ liệu, 
còn HAVING dùng để lọc sau khi tính toán tổng. 
Chƣơng 3: Ngôn ngữ cơ sở dữ liệu SQL 103 
3.3. Truy vấn con 
Khi làm việc với các biểu thức phức tạp, chúng ta có thể trích ra các biểu 
thức con. Với các biểu thức con, ngữ nghĩa của biểu thức ban đầu sẽ dễ 
hiểu hơn. Ngoài ra các biểu thức con có thể tách riêng để sử dụng lại. Cũng 
vậy, khi truy vấn chúng ta có thể có các truy vấn con42. Các câu truy vấn 
con thƣờng đƣợc sử dụng ở phép kết (FROM) và phép chọn (WHERE). Vì 
truy vấn con là một quan hệ dẫn xuất nên dùng ở phép kết hoàn toàn đơn 
giản. Chúng ta chi tiết cách dùng truy vấn con ở phép chọn bởi 2 lý do. 
So sánh trong điều kiện chọn 
Ở phép chọn chúng ta cần mệnh đề. Với mệnh đề đƣợc tạo thành từ các 
biến, thƣờng là các phép so sánh các giá trị của các biến với nhau nên đơn 
giản. Khi làm việc với truy vấn con là các quan hệ dẫn xuất, chúng ta đối 
diện với các mệnh đề dạng: 
𝑟 = ∅ 
𝑟 ≠ ∅ 
𝑥 ∈ 𝑟 
𝑥 ∉ 𝑟 
Với SQL ta có 
 𝑟 ≠ ∅ ⇔ 𝐸𝑋𝐼𝑆𝑇𝑆(𝑟) 
 𝑥 ∈ 𝑟 ⇔ 𝑥 𝐼𝑁 𝑟 
Phép toán thành viên có thể mở rộng thành phép so sánh bằng 
 𝑥 ∈ 𝑟 ⇔ 𝑥 =𝐴𝑁𝑌 𝑟 
 𝑥 ∉ 𝑟 ⇔ 𝑥 ≠𝐴𝐿𝐿 𝑟 
Giờ đây chúng ta có thể đặt các biểu thức so sánh ở phép chọn: 
𝑥 𝜃𝐴𝑁𝑌 𝑟 
𝑥 𝜃𝐴𝐿𝐿 𝑟 
Trong đó 𝜃 ∈ >,≥, <,≤, =,≠ 
42 Thông thƣờng các truy vấn con đƣợc thực hiện trƣớc. Khi ấy toàn bộ câu truy vấn sẽ trở 
nên dễ hiểu. Tuy ngôn ngữ SQL cho phép các truy vấn con tƣơng tác với câu truy vấn 
chính, chúng tôi vẫn khuyến cáo tránh thực hiện điều này để toàn bộ câu truy vấn đƣợc dễ 
hiểu. 
104 Giáo trình cơ sở dữ liệu 
Ví dụ 3.16 
Tìm những hàng hoá chƣa bán lần nào. 
Giải: 
Ta có câu truy vấn: 
SELECT * 
FROM HANG_HOA 
WHERE MA_HANG NOT IN (SELECT MA_HANG FROM 
CT_BAN) 
Điều kiện chọn không cố định 
Khi truy vấn chúng ta xét một dòng, quyết định chọn hay không. Với truy 
vấn con đặt ở WHERE, trong nhiều trƣờng hợp, phụ thuộc vào dòng đang 
xét. 
Ví dụ 3.17 
Tìm những hàng hoá, mà những ngày có bán mặt hàng này không có ngày 
nào nằm giữa ngày 1 và 5 của tháng. 
Giải: 
Với mỗi mặt hàng, có một tập mà sự tồn tại của nó quyết định việc chọn. 
Tập này phụ thuộc vào chính mặt hàng đang chọn. Ta có: 
SELECT * 
FROM HANG_HOA 
WHERE NOT EXISTS ( 
 SELECT * 
 FROM CT_BAN INNER JOIN HOA_DON 
 ON (CT_BAN.HD_SO = HOA_DON. 
HD_SO) 
 WHERE (DAY(NGAY_LAP) BETWEEN 1 AND 5) 
 AND (HANG_HOA.MA_HANG = 
CT_BAN.MA_HANG) ) 
3.4. Cài đặt đại số quan hệ 
Nhƣ đã đƣợc đề cập, bản thân cú pháp SELECT  FROM  WHERE đã 
cài đặt các phép toán quan hệ cơ bản là phép chọn, phép kết (dĩ nhiên cả 
tích Descartes) và phép chiếu. Trong mục này chúng ta quan tâm đến cài 
đặt phép chia và các phép toán tập hợp con nhƣ phép hợp, phép giao và 
phép hiệu. 
Chƣơng 3: Ngôn ngữ cơ sở dữ liệu SQL 105 
Phép Hợp 
SELECT  UNION [ALL] 
SELECT  
Ví dụ 3.18 
Tạo sổ cái từ sổ nhật ký 
SELECT Chung_Tu, TK_No AS TK, TK_Co AS DU, Tien AS T_No, 0 
AS T_Co 
FROM Nhat_Ky 
UNION 
SELECT Chung_Tu, TK_Co AS TK, TK_No AS DU, 0 AS T_No, Tien 
AS T_Co 
FROM Nhat_Ky 
Phép giao 
SELECT  
WHERE IN (SELECT <thuộc tính 
định danh> ) 
Ví dụ 3.19 
Cho quan hệ 
r = Trình độ ngoại ngữ (MaNV NNgu) 
 01 Anh 
 01 Nga 
 02 Anh 
 02 Hoa 
 02 Pháp 
 03 Anh 
 04 Hoa 
Tìm ra những nhân viên biết 2 ngoại ngữ Anh và Hoa. 
Giải: 
Ta có câu truy vấn: 
SELECT MaNV 
FROM r 
106 Giáo trình cơ sở dữ liệu 
WHERE NNgu = ‘Anh’ 
 AND MaNV IN (SELECT MaNV FROM r WHERE 
NNgu = ‘Hoa’) 
Phép hiệu 
SELECT  
WHERE NOT IN (SELECT <thuộc tính 
định danh> ) 
Ví dụ 3.20 
Tìm những hoá đơn có bán những mặt hàng không đƣợc lƣu trong cơ sở dữ 
liệu 
SELECT H_DON.* 
FROM H_DON INNER JOIN BAN ON ( H_DON.HD_SO = 
BAN.HD_SO ) 
WHERE 
 MA_HANG NOT IN (SELECT MA_HANG FROM 
HANG_HOA) 
Phép chia 
Với phép chia r(AB) ÷ s(B), bằng cách biểu diễn qua một số phép toán 
khác chúng ta có thể cài đặt phép chia bằng ngôn ngữ SQL(xem chƣơng 2, 
các chiến lƣợc): 
1. Xét biểu thức đại số quan hệ của phép chia (xem bài tập): 
r[A] – (r[A]s – r)[A] 
Viết lại 
q0 = r[A] 
q1 = q0s 
q2 = (q1 – r)[A] 
q3 = q0 – q2 
Ta có thể cài đặt phép chia bởi một dãy các câu truy vấn liên tiếp 
q0: SELECT DISTINCT A FROM r 
q1: SELECT q0.A, s.B FROM q0, s 
Chƣơng 3: Ngôn ngữ cơ sở dữ liệu SQL 107 
q2: SELECT DISTINCT q1.A 
FROM q1 
WHERE q1.A&q1.B NOT IN (SELECT r.A&r.B FROM r) 
q3: SELECT q0.A 
FROM q0 
WHERE q0.A NOT IN (SELECT q2.A FROM q2) 
Nếu cần có thể tích hợp thành một câu truy vấn duy nhất 
SELECT q0.A 
FROM (SELECT DISTINCT A FROM r) AS q0 
WHERE q0.A NOT IN ( 
 SELECT q2.A 
 FROM ( 
 SELECT DISTINCT q1.A 
 FROM (SELECT q0.A, s.B FROM q0, s) AS q1 
 WHERE q1.A&q1.B 
 NOT IN (SELECT r.A&r.B FROM r)) AS q2 ) 
2. Bản chất của phép chia là chọn, bộ t của r đƣợc chọn nếu 
𝜍𝐴=𝑡 .𝐴 𝑟 𝐵 ⊃ 𝑠. Nhƣ vậy với mỗi x thuộc s, thực hiện 
𝑟𝑥 = 𝜍𝐵=𝑥 𝑟 𝐴 
Cuối cùng 
r ÷ s = 𝑟𝑥
𝑥∈𝑠
= 𝜍𝐵=𝑥 𝑟 𝐴 
𝑥∈𝑠
3. Dùng kỹ thuật truy vấn con làm điều kiện chọn. Với t thuộc r, chọn r 
với giá trị của A bằng với t.A rồi chiếu lên B, đƣợc quan hệ. Quan hệ 
này so sánh với s làm điều kiện chọn. Ta có câu đại số quan hệ 
 𝜍𝑠⊂ 𝜍𝐴=𝑢 .𝐴 𝑟 𝐵 𝜌𝑢 𝑟 𝐴 
Trong đó ρ là phép đổi tên. Biểu thức điều kiện ở đây có dạng so sánh 
giữa 2 tập con không có trong ngôn ngữ con truy vấn. Nhƣ vậy cho 
đến khi cài đặt đƣợc điều kiện chọn loại này, chúng ta vẫn phải sử 
dụng một trong hai cách ở trên. Tuy nhiên, lƣu ý mệnh đề A ⊂ B 
tƣơng đƣơng với A – B = ∅, ta có: 
108 Giáo trình cơ sở dữ liệu 
SELECT A 
FROM r AS u 
WHERE NOT EXISTS ( 
 SELECT * 
 FROM (SELECT B FROM r WHERE A = u.A) 
 WHERE B NOT IN (SELECT B FROM s) 
 ) 
Ví dụ 3.21 
Trở lại ví dụ 19, giả sử s (NNgu) = {Anh, Hoa}. Bài toán tìm những nhân 
viên biết 2 ngoại ngữ Anh và Hoa chính là phép chia r cho s. Cách giải thứ 
2 chúng ta đã thực hiện ở ví dụ 19. Ở đây chúng ta dùng cách thứ 3. 
SELECT MaNV 
FROM r AS u 
WHERE NOT EXISTS ( 
 SELECT * 
 FROM (SELECT NNgu FROM r WHERE MaNV = u. MaNV) 
 WHERE NNgu NOT IN (SELECT NNgu FROM s) 
 ) 
3.5. Dùng truy vấn kiểm tra ràng buộc toàn vẹn 
Ngôn ngữ hỏi là một công cụ tốt cho việc giải quyết vấn đề này. Một số 
ràng buộc toàn vẹn có thể định nghĩa ngay lúc khởi tạo cơ sở dữ liệu nhờ 
đó nó đƣợc kiểm tra một cách tự động, một số khác đƣợc thực hiện trực 
tiếp hoặc gián tiếp thông qua lời gọi hàm với các hàm kiểm tra đƣợc cài đặt 
sẵn hoặc bởi ngƣời dùng. 
Trong thực tế việc để hệ quản trị kiểm tra các ràng buộc toàn vẹn có thể 
không là một giải pháp tối ƣu; đặc biệt với các ràng buộc phức tạp. Có một 
số chiến lƣợc giải quyết vấn đề này. 
1. Chúng ta có thể bổ sung các thuộc tính dẫn xuất và kiểm soát chúng 
một cách hiệu quả. Bây giờ, khi cần thiết, hệ quản trị chỉ cần kiểm tra 
các ràng buộc đơn giản trên các thuộc tính này. 
2. Với các ràng buộc phức tạp nên đƣợc kiểm tra ở mức ứng dụng hoặc ở 
một lớp trung gian nào đó. Ở mức ứng dụng, nếu chúng ta có thể thiết 
Chƣơng 3: Ngôn ngữ cơ sở dữ liệu SQL 109 
kế sao cho ngƣời sử dụng khó lòng vi phạm các ràng buộc toàn vẹn thì 
sẽ giảm bớt gánh nặng kiểm tra. 
3. Trong trƣờng hợp còn lại, ngôn ngữ con truy vấn dữ liệu cho phép 
chúng ta dễ dàng cài đặt các thủ tục kiểm tra. Ý tƣởng ở đây là tìm ra 
những vi phạm. Nếu kết quả tìm bằng rỗng thì cơ sở dữ liệu là thỏa 
ràng buộc toàn vẹn. Hàm EXISTS(.), kiểm tra một quan hệ là khác 
rỗng, cho phép chúng ta kết luận cơ sở dữ liệu có vi phạm ràng buộc 
hay không. 
Chúng ta có thể tiếp cận đại số quan hệ trƣớc khi viết ra các câu truy vấn 
cụ thể. 
Ví dụ 3.22 
Cài đặt thuật toán kiểm tra khoá43 của quan hệ r(AB). 
Giải: 
Ta có ràng buộc 
Count(r) = Count(r[A]) 
Bằng cách viết lại 
q1 = r[c = Count(A)] 
q2 = (r[A])[c = Count(A)] 
q = q1.c = q2.c(q1q2) 
4. Ngôn ngữ con điều khiển truy cập (DCL) 
Ngôn ngữ con điều khiển truy cập cho phép cấp (GRANT) hoặc hủy bỏ 
(REVOKE) quyền (PRIVILEGE) của ngƣời dùng trên các đối tượng cơ sở 
dữ liệu. 
Các quyền bao gồm: 
 SELECT: lấy các dòng dữ liệu từ một bảng; 
 INSERT: thêm các dòng dữ liệu, trong các cột cụ thể, trong một 
bảng; 
 UPDATE: sửa các dòng dữ liệu, trong các cột cụ thể, trong một 
bảng; 
 DELETE: xoá các dòng dữ liệu trong một bảng; 
43 dùng trực tiếp từ định nghĩa cũng đƣợc nhƣng sẽ phức tạp hơn. 
110 Giáo trình cơ sở dữ liệu 
 REFERENCES: tham chiếu đến các cột cụ thể trong bảng chứa 
khoá ngoại. 
Đối tƣợng cơ sở dữ liệu ở đây là bảng 
Trong môi trƣờng cơ sở dữ liệu có một vai trò quản trị cơ sở dữ liệu 
(DBA). Ngƣời dùng có vai trò này sẽ quản lý toàn bộ ngƣời dùng và có 
thẩm quyền cấp và thu hồi giấy phép của ngƣời dùng bất kỳ. Ngƣời dùng 
cụ thể có toàn quyền trên các đối tƣợng cơ sở dữ liệu do mình tạo ra. 
4.1. Cấp quyền cho ngƣời dùng khác 
Cú pháp 
GRANT | ALL PRIVILEGES 
ON 
TO | PUBLIC 
[WITH GRANT OPTION] 
Ví dụ 3.23 
 Cấp quyền SELECT và UPDATE (studentName) trên bảng student 
cho admin 
GRANT SELECT, UPDATE(studentName) 
ON student 
TO admin 
 Cấp quyền SELECT trên bảng student cho 2 ngƣời dùng personnel 
và deputy 
GRANT SELECT 
ON student 
TO personnel, deputy 
 Cấp quyền SELECT trên bảng class cho tất cả ngƣời dùng 
GRANT SELECT 
ON class 
TO PUBLIC 
Chƣơng 3: Ngôn ngữ cơ sở dữ liệu SQL 111 
4.2. Hủy quyền của ngƣời dùng khác 
Cú pháp 
REVOKE [GRANT OPTION FOR] | ALL 
PRIVILEGES 
ON 
FROM { | PUBLIC} [RESTRICT | 
CASCADE] 
[WITH GRANT OPTION] 
Ví dụ 3.24 
Xét tình huống có 5 ngƣời dùng A, B, C, D và E. Trong đó A, E có quyền 
INSERT trên bảng student và có quyền cấp quyền này cho ngƣời dùng 
khác. 
1. A cấp quyền cho B 
GRANT INSERT 
ON student TO B 
WITH GRANT OPTON 
B có quyền INSERT nhƣ A 
2. B cấp quyền cho C 
GRANT INSERT 
ON student TO C 
WITH GRANT OPTON 
B có quyền INSERT nhƣ B 
3. E cấp quyền cho C 
GRANT INSERT 
ON student 
TO C 
WITH GRANT OPTON 
C có quyền INSERT nhƣ A và E (hai giấy phép) 
4. C cấp quyền cho D 
GRANT INSERT 
ON student TO D 
112 Giáo trình cơ sở dữ liệu 
D có quyền INSERT do C cấp 
5. A hủy quyền của B 
REVOKE INSERT 
ON student CASCADE 
Các giấy phép do A cấp và uỷ quyền cấp đều bị thu hồi. Theo đó B 
không còn giấy phép INSERT nào, C vẫn còn một giấy phép do E 
cấp do đó D vẫn còn quyền INSERT do C cấp. 
4.3. View 
View, hay khung nhìn, là một bảng ảo đƣợc tạo thành từ câu truy vấn để 
nhìn vào cơ sở dữ liệu từ quan điểm ngƣời dùng nhằm thực hiện độc lập dữ 
liệu. Với view chúng ta có một cơ chế an toàn dữ liệu khi kiểm soát đƣợc 
việc cập nhật lên cơ sở dữ liệu. 
Cú pháp 
CREATE VIEW [([, ])] 
AS SELECT  
Qua view hạn chế truy xuất để tăng cƣờng bảo mật cơ sở dữ liệu. 
Cú pháp 
CREATE VIEW [([, ])] 
AS SELECT  
[WITH [CASCADE | LOCAL] CHECK OPTION] 
Cập nhật trên view 
Để cho phép cập nhật cơ sở dữ liệu qua view, các view phải thoả: 
1. Không có DISTINCT 
2. Lƣợc đồ quan hệ phải lấy từ tên thuộc tính gốc và xuất hiện một 
lần 
3. Câu SELECT chỉ là các phép chọn và chiếu trên bảng duy nhất; 
4. Điều kiện chọn không có các truy vấn con liên quan đến bảng 
đang xét 
5. Không có tính toán, do đó không có GROUP BY cũng nhƣ 
HAVING 
Chƣơng 3: Ngôn ngữ cơ sở dữ liệu SQL 113 
Ví dụ 3.25 
CREATE VIEW siSo (classID, className, siSo) 
AS SELECT class. classID, className, COUNT(*) 
 FROM student, class 
 WHERE student.classID, class.classID 
 GROUP BY classID, className 
View này không thể cập nhật vì có tính toán 
CREATE VIEW siSo (classID, className, siSo) 
AS SELECT class. classID, className, COUNT(*) 
 FROM student, class 
 WHERE student.classID, class.classID 
 GROUP BY classID, className 
View này không thể cập nhật vì có tính toán 
Với các view cho phép cập nhật, view có khả năng kiểm tra dữ liệu mới có 
thỏa điều kiện của phép chọn không. 
Ví dụ 3.26 
Với view sau: 
 CREATE VIEW class3 
AS SELECT * 
 FROM student 
 WHERE classID = ‘C3’ 
WITH CHECK OPTION 
Thì các câu lệnh sau sẽ không đƣợc thực hiện 
UPDATE class3 
SET classID = ‘C5’ 
 WHERE studentID = ‘S036’ 
INSERT INTO class3(studentID, classID) 
VALUES (‘S121’, ‘C2’) 
114 Giáo trình cơ sở dữ liệu 
TÓM TẮT 
 Hệ quản trị cơ sở dữ liệu cung cấp một ngôn ngữ cơ sở dữ liệu cho 
phép làm việc với mô hình cơ sở dữ liệu mà nó hỗ trợ; 
 Hệ quản trị cơ sở dữ liệu quan hệ cung cấp một ngôn ngữ cơ sở dữ 
liệu gọi là Structured Query Language (SQL); 
 SQL có 4 bộ ngôn ngữ con: ngôn ngữ con định nghĩa dữ liệu, ngôn 
ngữ con thao tác dữ liệu, ngôn ngữ hỏi và ngôn ngữ con điều khiển 
truy cập; 
 Ngôn ngữ con định nghĩa dữ liệu cho phép cài đặt các lƣợc đồ vật 
lý; 
 Ngôn ngữ con định nghĩa dữ liệu cho phép khai báo một số loại 
ràng buộc toàn vẹn; 
 Ngôn ngữ con thao tác dữ liệu làm việc với dữ liệu dựa trên các 
lƣợc đồ logic; 
 Ngôn ngữ hỏi có cấu trúc dễ hiểu; 
 Ngôn ngữ hỏi dựa trên đại số quan hệ nên dễ dàng cài đặt các biểu 
thức đại số quan hệ, cho phép sử dụng các chiếc lƣợc giải bài toán 
của đại số quan hệ; 
 Ngôn ngữ hỏi cho phép truy vấn vẫn dữ liệu cũng nhƣ cài đặt kiểm 
tra các ràng buộc toàn vẹn; 
 Ngôn ngữ con kiểm soát truy xuất cho phép thực hiện an toàn dữ 
liệu; 
 Khung nhìn là một cơ chế cho phép thực hiện an toàn và toàn vẹn 
dữ liệu. 
Chƣơng 3: Ngôn ngữ cơ sở dữ liệu SQL 115 
BÀI TẬP 
Cơ sở dữ liệu sau dùng cho các câu từ 1 đến 3. 
Khách hàng Mã KH Tên KH Địa chỉ 
 KH01 Nguyễn A 134 NTT 
 KH02 Trần B 242/4 TBT 
 KH03 Phạm C 33 PH 
Định mức Mã DM Từ Đến Giá 
 D1 1 100 80 
 D2 101 150 100 
 D3 151 200 150 
 D4 201 400 200 
Tiêu thụ Kỳ Mã KH Tiêu thụ 
 0804 KH01 150 
 0804 KH02 240 
 0804 KH03 110 
 0805 KH01 120 
 0805 KH02 250 
 0805 KH03 80 
Ký hiệu M, T, C, A, U, D, G, K và I là tên tắt của các thuộc tính Mã 
KH, Tên KH, Địa chỉ KH, Mã DM, Từ, Đến, Giá, Kỳ và Tiêu thụ. 
Ký hiệu r, s và u là tên tắt của các bảng Khách hàng, Định mức và 
Tiêu thụ. Bạn đọc có thể dùng lƣợc đồ cơ sở dữ liệu đƣợc viết tắt 
nhƣ sau: 
r (MTC), s (AUDG) và u (KMI) 
116 Giáo trình cơ sở dữ liệu 
1. Đặc tả thêm các yếu tố vật lý, dùng ngôn ngữ DDL định nghĩa lƣợc đồ 
cơ sở dữ liệu. 
2. Dùng ngôn ngữ DML đƣa dữ liệu vào cơ sở dữ liệu. 
3. Dùng ngôn ngữ QL trả lời các câu hỏi: 
a. Tìm những khách hàng có mức tiêu thụ lớn nhất không vƣợt quá 
200; 
b. Tính tiền điện kỳ 0806 cho tất cả khách hàng. 
Lƣợc đồ cơ sở dữ liệu sau dùng cho các câu từ 4 đến 10. 
Khách-Sạn (Mã-KS, Tên-KS, Địa-Chỉ-KS, Tỉnh-Thành-
phố) 
Phòng (Số-Phòng, Mã-KS, Loại-Phòng, Giá) 
Khách-Hàng (Mã-KH, Tên-KH, Địa-Chỉ-KH) 
Đặt-Phòng (Mã-KS, Mã-KH, Ngày-Đến, Ngày-Đi, Số-
Phòng) 
Bạn đọc có thể dùng lƣợc đồ cơ sở dữ liệu đƣợc viết tắt nhƣ sau: 
r (STsDsT), s (PSLG), u (KTkDk) và v (SKBEP) 
4. Tìm tất cả khách sạn ở thành phố Nha Trang. 
5. Tìm tất cả khách sạn ở thành phố Nha Trang có loại phòng đơn có giá 
dƣới 200. 
6. Ở Nha Trang có bao nhiêu khách sạn. 
7. Năng suất sử dụng phòng theo từng loại phòng của tất cả các khách sạn 
ở Nha Trang trong năm 2007. 
8. Ở Nha Trang, trong ngày hôm nay có bao nhiêu phòng trống theo từng 
loại phòng. 
9. Danh sách tất cả hoá đơn trong ngày hôm nay, thông tin gồm Tỉnh-
Thành-phố, Mã-KS, Ngày-hoá-đơn, Số-Phòng, Loại-phòng, Giá, Số-
Tiền. 
10. Làm báo cáo về tổng số ngày đến ở, trong 2 năm 2006 và 2007, theo 
từng khách hàng của tất cả các khách hàng. 
Chƣơng 3: Ngôn ngữ cơ sở dữ liệu SQL 117 
Lƣợc đồ cơ sở dữ liệu (Thể Thao Đội) sau dùng cho các câu từ 11 đến 18. 
CLB : CLB_MA INT(3) KEY Mã số câu lạc bộ 
CLB_DC TEXT Địa chỉ câu lạc bộ 
DOI : CLB_MA INT(3) KEY Mã số câu lạc bộ 
DOI_MA INT(2) KEY Mã số đội 
LT CHAR(2) Lứa tuổi của đội 
PHAI CHAR(3) Phái tính 
TD : TD_MA INT(3) KEY Mã số trận đấu 
PHG_MA INT(3) Mã số phòng 
TD_GIO CHAR(6) Giờ thi đấu 
TD_NGAY DATE Ngày thi đấu 
DOI_TD : 
TD_MA INT(3) Mã số trận đấu 
DOI_MA INT(2) Mã số đội 
CLB_MA INT(3) Mã số câu lạc bộ 
Mỗi trận đấu là một cuộc gặp giữa hai đội cùng LT và PHAI 
 PHONG : 
PHG_MA INT(3) KEY Mã số phòng 
PHG_DC CHAR(50) Địa chỉ phòng 
PHG_TSS INT(2) Tổng số sân của phòng 
LUA_TUOI : 
LT CHAR(2) KEY Lứa tuổi 
LT_TGTD) INT(2) Thời gian thi đấu 
VDV : 
VDV_MA INT(3) KEY Mã số vận động viên 
VDV_TEN CHAR(25) Tên vận động viên 
VDV_DC CHAR(50) Địa chỉ vận động viên 
CLB_MA INT(3) Mã số câu lạc bộ 
LT CHAR(2) Lứa tuổi vận động viên 
PHAI CHAR(3) Phái tính 
VDV_DOI : 
VDV_MA INT(3) Mã số vận động viên 
DOI_MA INT(2) Mã số đội 
Một vận động viên có thể đăng ký vào nhiều đội 
118 Giáo trình cơ sở dữ liệu 
11. Danh sách tên các vận động viên của câu lạc bộ mã số 45. 
12. Tên các vận động viên của đội số 3 của câu lạc bộ mã số 27. 
13. Số lƣợng các trận đấu lứa tuổi LT1 diễn ra ngày 16/06/90. 
14. Mã số các câu lạc bộ và mã số các đội trong đó có quy tụ những vận 
động viên thuộc một lứa tuổi nhỏ hơn lứa tuổi của đội. 
15. Địa chỉ và mã số của các câu lạc bộ có một hoặc nhiều đội tham dự trận 
đấu diễn ra trong phòng mã số 17 ngày 06/12/90. 
16. Danh sách các trận đấu bắt đầu hoặc kết thúc trong khoảng thời gian từ 
13 giờ và 16 giờ tại phòng mã số 49 vào ngày 05/08/90. 
17. Địa chỉ và tên các vận động viên đã chơi hoặc sẽ chơi đối lại đội mã số 
1 của các câu lạc bộ mã số 50. 
18. Số tối đa các trận đấu bắt đầu đồng thời trong ngày 06/12/90. 
19. Chứng minh các biểu thức đại số quan hệ dùng để cài đặt phép chia. 
20. Với hệ thống quản lý tồn kho đã cho trong chƣơng này, dùng Power 
Designer: 
a. Thiết kế cơ sở dữ liệu mức quan niệm; 
b. Phát sinh cơ sở dữ liệu mức vật lý; 
c. Đặc tả đầy đủ các yếu tố vật lý (xem mục 1 của chƣơng) 
d. Dùng ngôn ngữ con định nghĩa dữ liệu cài đặt cơ sở dữ liệu này; 
e. Đặc tả ít nhất 2 vai trò ngƣời dùng, dùng DCL cấp quyền cho vài 
ngƣời dùng; 
f. Đƣa ra một ràng buộc, tạo một khung nhìn cho phép làm việc bảo 
đảm tính toàn vẹn dữ liệu đối với ràng buộc này. 

File đính kèm:

  • pdfgiao_trinh_co_so_du_lieu_huynh_van_duc_phan_1.pdf