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 ...
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 = q0s
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(q1q2)
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:
giao_trinh_co_so_du_lieu_huynh_van_duc_phan_1.pdf



