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