1 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU LỜI NÓI ĐẦU Ngày nay, cơ sở dữ liệu đã có nhiều ứng dụng trong mọi hoạt động của xã hội. Muốn thiết kế và sử dụng cơ sở dữ liệu chúng ta phải nắm được các kỹ thuật cơ bản của cơ sở dữ liệu. Tài liệu học tập này nhằm trình bày các kỹ thuật cơ sở của cơ sở dữ liệu truyền thống, đó là mô hình liên kết thực thể, mô hình cơ sở dữ liệu quan hệ. Tài liệu cũng trình bày cách thiết kế một cơ sở dữ liệu quan hệ, cách sử dụng các phép toán đại số quan hệ để tạo, cập nhật và truy vấn cơ sở dữ liệu và khái niệm phụ thuộc hàm ứng dụng trong lí thuyết thiết kế và chuẩn hóa cơ sở dữ liệu quan hệ. Tài liệu học tập “Cơ sở dữ liệu” là sách hướng dẫn học tập dùng cho sinh viên ngành công nghệ thông tin và ngành mạng máy máy tính & truyền thông dữ liệu. Nội dung của tài liệu bao gồm: Chương I: Cơ sở dữ liệu quan hệ Chương II: Ngôn ngữ truy vấn dữ liệu Chương III: Lý thuyết thiết kế cơ sở dữ liệu Chương IV: Bảo mật và toàn vẹn dữ liệu Tài liệu ”Cơ sở dữ liệu” không chỉ đề cập đến những vấn đề cơ sở lý thuyết mà còn trình bày một số kỹ năng cần thiết để thiết kế và cài đặt các hệ cơ sở dữ liệu cụ thể. Hy vọng sẽ có ích cho sinh viên và những người muốn xây dựng các hệ thống tin học ứng dụng phục vụ cho sản xuất, quản lý trong các doanh nghiệp. Có thể còn nhiều thiếu sót trong biên soạn, chúng tôi vẫn mạnh dạn giới thiệu tài liệu này và mong nhận được sự góp ý của bạn đọc. Nhóm biên soạn KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 2 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU MỤC LỤC LỜI NÓI ĐẦU ................................................................................................................1 MỤC LỤC ......................................................................................................................2 CHƯƠNG I ....................................................................................................................7 CƠ SỞ DỮ LIỆU QUAN HỆ .......................................................................................7 1.1. Tổng quan về lý thuyết cơ sở dữ liệu ....................................................................7 1.1.1. Mở đầu ..................................................................................................................7 1.1.2. Một số khái niệm cơ bản .....................................................................................8 1.1.2.1. Cơ sở dữ liệu (CSDL) .......................................................................................8 1.1.2.2. Hệ quản trị CSDL ........................................................................................... 10 1.1.2.3. Ngôn ngữ dữ liệu............................................................................................. 11 1.1.3. Kiến trúc của một CSDL ..................................................................................12 1.1.4. Mô hình CSDL dạng quan hệ ...........................................................................13 1.1.4.1. Các khái niệm cơ bản .....................................................................................13 1.1.4.2. Khóa .................................................................................................................15 1.1.4.3. Các phép tính trên CSDL ..............................................................................17 BÀI TẬP CHƯƠNG I .................................................................................................20 CHƯƠNG II .................................................................................................................33 NGÔN NGỮ THAO TÁC DỮ LIỆU .........................................................................33 2.1. Đại số quan hệ .......................................................................................................33 2.1.1. Phép hợp .............................................................................................................33 2.1.2. Phép giao ............................................................................................................34 2.1.3. Phép trừ ..............................................................................................................35 2.1.4. Tích Đề các .........................................................................................................35 KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 3 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU 2.1.5. Phép chiếu ..........................................................................................................36 2.1.6. Phép chọn ...........................................................................................................37 2.1.7. Phép kết nối ........................................................................................................38 2.1.8. Phép chia ............................................................................................................40 2.2. Hệ quản trị CSDL SQL Server và ngôn ngữ SQL ............................................40 2.2.1. Giới thiệu về Hệ quản trị CSDL SQL Server .................................................40 2.2.2. Cấu trúc Cơ sở dữ liệu ......................................................................................43 2.2.3 Tạo CSDL bằng công cụ SQL Server ............................................................... 44 2.2.4 Tạo CSDL bằng lệnh ..........................................................................................47 2.2.5 Quản trị CSDL trên SQL Server ......................................................................49 2.2.5.1 Chế độ bảo mật ................................................................................................ 49 2.2.5.2 Quản trị người dùng ........................................................................................51 2.2.5.3 Quản trị xuất, nhập, sao lưu, phục hồi dữ liệu. ............................................53 2.2.6 Ngôn ngữ SQL ....................................................................................................60 2.2.6.1 Các phép toán định nghĩa CSDL ...................................................................60 2.2.6.2 Truy vấn đơn giản ........................................................................................... 66 a. Khối lệnh SELECT ............................................................................................. 66 b. Tìm kiếm không điều kiện ..................................................................................67 c. Tìm kiếm với điều kiện đơn giản .......................................................................68 d. Tìm kiếm có xử lý xâu ký tự...............................................................................69 e. Tìm kiếm nhờ sử dụng IN và BETWEEN ........................................................70 f. Tìm kiếm có sắp xếp ............................................................................................ 72 g. Tìm kiếm có chứa phép tính tập hợp ................................................................ 74 2.2.6.3 Truy vấn lồng nhau .........................................................................................75 2.2.6.4 Truy vấn sử dụng hàm tính toán và gom nhóm ...........................................78 KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 4 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU a. Tìm kiếm nhờ mệnh đề GROUP BY .................................................................78 b. Các hàm thư viện ................................................................................................ 81 2.2.6.5. Khung nhìn (View) ........................................................................................83 2.2.7 Giới thiệu về ngôn ngữ lập trình T-SQL trong SQL Server ..........................85 2.2.7.1 Biến cục bộ (Local variable) ............................................................................85 2.2.7.2 Biến hệ thống. ...................................................................................................87 2.2.7.3 Các toán tử. ......................................................................................................88 2.2.8.Các lệnh cơ bản của T-SQL ...............................................................................92 2.2.9 Thủ tục .................................................................................................................98 2.2.9.1 Thủ tục hệ thống .............................................................................................. 99 2.2.9.2 Thủ tục người dùng .......................................................................................100 2.2.10. Hàm .................................................................................................................102 2.2.10.1. Các hàm hệ thống .......................................................................................103 2.2.10.2. Hàm do người dùng định nghĩa ................................................................106 BÀI TẬP CHƯƠNG II ..............................................................................................108 CHƯƠNG 3 ................................................................................................................121 LÝ THUYẾT THIẾT KẾ CƠ SỞ DỮ LIỆU ..........................................................121 3.1. Phụ thuộc hàm ....................................................................................................121 3.1.1 Định nghĩa phụ thuộc hàm ..............................................................................121 3.1.2 Phụ thuộc hàm đầy đủ và không đầy đủ ........................................................122 3.1.3 Hệ tiên đề Amstrong .........................................................................................122 3.1.4. Bao đóng ...........................................................................................................124 3.1.4.1 Bao đóng của tập các phụ thuộc hàm ..........................................................124 3.1.4.2. Bao đóng của tập các thuộc tính .................................................................125 3.1.4.3. Thuật toán tìm bao đóng ..............................................................................125 KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 5 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU 3.1.5. Phủ tối thiểu .....................................................................................................126 3.1.6. Khóa ..................................................................................................................129 3.2. Phép tách - kết nối ..............................................................................................130 3.2.1 Khái niệm ..........................................................................................................130 3.2.2. Phép tách-kết nối tự nhiên ..............................................................................131 3.2.3 Phép tách - kết nối không mất mát thông tin.................................................131 3.3. Chuẩn hóa lược đồ quan hệ ...............................................................................135 3.3.1. Các dạng chuẩn ................................................................................................135 3.3.1.1. Dạng chuẩn thứ nhất (1NF – First Normal Form) ....................................135 3.3.1.2. Dạng chuẩn thứ 2 (2NF) ...............................................................................136 3.3.1.3. Dạng chuẩn thứ 3 (3NF) ...............................................................................136 3.3.1.4. Dạng chuẩn Boye- Codd (BCNF) ................................................................137 3.3.2. Chuẩn hóa qua phép tách không làm mất mát thông tin ............................138 a. Phép tách lược đồ quan hệ thành BCNF ........................................................138 b. Phép tách lược đồ quan hệ thành 3NF ............................................................140 3.3.3. Chuẩn hóa nhờ phép tổng hợp ...................................................................141 BÀI TẬP CHƯƠNG III ............................................................................................146 CHƯƠNG IV .............................................................................................................156 TỐI ƯU HÓA CÂU HỎI TRUY VẤN ....................................................................156 4.1. Mở đầu .................................................................................................................156 4.2. Tổng quan về tối ưu hóa câu hỏi .......................................................................157 4.3. Nguyên tắc tối ưu hoá .........................................................................................159 4.4. Kỹ thuật tối ưu hoá các biểu thức đại số quan hệ. ..........................................161 4.4..1 Biểu thức quan hệ ............................................................................................161 4.4.2. Biến đổi biểu thức quan hệ ............................................................................162 KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 6 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU 4.4.3. Một số nhận xé khi thực hiện tối ưu hoá câu hỏi ........................................162 4.5. Tối ưu hóa bằng khung nhìn (Materialized Views)........................................164 4.5.1 Phép kết nối ......................................................................................................164 4.5.2 Phép chọn và phép chiếu .................................................................................165 4.5.3 Các phép toán khối ..........................................................................................166 4.5.4 Các phép toán khác .........................................................................................166 4.5.5 Tối ưu hóa các câu hỏi và các khung nhìn cụ thể hóa .................................166 4.5.6 Bài tập tối ưu hoá các câu hỏi..........................................................................167 BÀI TẬP CHƯƠNG 4 ...............................................................................................174 CHƯƠNG 5 ................................................................................................................179 BẢO MẬT VÀ TOÀN VẸN DỮ LIỆU ...................................................................179 5.1. Sự cần thiết phải bảo vệ an toàn CSDL ............................................................179 5.2. Tính toàn vẹn dữ liệu..........................................................................................180 5.2.1 Các ràng buộc toàn vẹn ....................................................................................180 5.2.2 Các yếu tố của rằng buộc toàn vẹn (RBTV) ..................................................182 5.2.3 Phân loại các ràng buộc toàn vẹn ....................................................................182 5.3. Vấn đề an toàn và quyền truy nhập cơ sở dữ liệu ...........................................186 5.3.1. Sự vi phạm an toàn cơ sở dữ liệu ...................................................................187 5.3.2. Các mức độ an toàn cơ sở dữ liệu ..................................................................187 5.3.3 Những quyền hạn khi sử dụng cơ sở dữ liệu..................................................189 5.3.4 Cấp phép các quyền truy nhập (bảo vệ tính riêng tư) ..................................193 5.3.5 Kiểm tra dấu vết ...............................................................................................194 BÀI TẬP CHƯƠNG V ..............................................................................................195 TÀI LIỆU THAM KHẢO ..........................................................................................200 KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 7 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU CHƯƠNG I CƠ SỞ DỮ LIỆU QUAN HỆ Mục tiêu: Giới thiệu sự cần thiết tổ chức dữ liệu theo mô hình hệ cơ sở dữ liệu, mục tiêu và tính độc lập của dữ liệu. Kiến trúc mô hình tổng quát 3 lớp và tính ổn định trong mô hình quan niệm. Các mô hình truy xuất thông dụng hiện nay. Trong chương này trình bày những khái niệm cơ bản về các hệ cơ sở dữ liệu. Những khái niệm này bao gồm mục tiêu của một hệ cơ sở dữ liệu. Sự cần thiết phải tổ chức dữ liệu dưới dạng cơ sở dữ liệu. Tính độc lập của dữ liệu thể hiện mô hình kiến trúc 3 mức. Vì vậy có thể nói cơ sở dữ liệu phản ảnh tính trung thực, khách quan của thế giới dữ liệu. Không dư thừa thông tin và cũng không thiếu thông tin. Nội dung của chương bao gồm các phần: Tổng quan về lý thuyết cơ sở dữ liệu Các khái niệm cơ bản Kiến trúc của một cơ sở dữ liệu Mô hình cơ sở dữ liệu 1.1. Tổng quan về lý thuyết cơ sở dữ liệu 1.1.1. Mở đầu Nhu cÇu cña nh÷ng hÖ thèng lín: Ng©n hµng, hµng kh«ng ®ßi hái ph¶i tæ chøc l-u tr÷ th«ng tin víi kÝch cì lín mét c¸ch hiÖu qu¶ vµ khoa häc sao cho cã thÓ khai th¸c sö dông hiÖu qu¶, an toµn dÔ cËp nhËt. Khèi l-îng d÷ liÖu ë d¹ng phi sè vµ bµi to¸n xö lý d¹ng d÷ liÖu nµy rÊt lín chiÕm tû träng chñ yÕu trong sö dông m¸y tÝnh. §Æc ®iÓm ph¸t triÓn m¹ng m¹ch, d÷ liÖu cã thÓ ph©n t¸n ®ßi hái khai th¸c d÷ liÖu nhanh, an toµn cã c¬ chÕ b¶o mËt. §ßi hái ra ®êi lý thuyÕt x©y dùng c¸c ch-¬ng tr×nh øng dông. KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 8 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU LÞch sö ra ®êi vµ ph¸t triÓn: Khoa häc c¬ së d÷ liÖu ph¸t triÓn qua 3 giai ®o¹n: Giai ®o¹n nh÷ng n¨m 1960: ra ®êi 2 m« h×nh lý thuyÕt lµ m« h×nh m¹ng vµ m« h×nh ph©n cÊp. Giai ®o¹n nh÷ng n¨m 1970: ra ®êi m« h×nh lý thuyÕt míi lµ m« h×nh quan hÖ (do tiÕn SÜ F.F . Codd ®-a ra) Giai ®o¹n nh÷ng n¨m 1980 ®Õn nay: §¸nh dÊu sù ph¸t triÓn m¹ng cña m« h×nh quan hÖ ph¸t triÓn lý thuyÕt. M« h×nh quan hÖ thùc thÓ (Entity Relationship model) M« h×nh d÷ liÖu h-íng ®èi t-îng (Objest oriented Model) C¬ së d÷ liÖu tri thøc. PhÇn mÒm: ra ®êi c¸c ng«n ng÷ xö lý dù liÖu m¹nh ngoµi nh÷ng d÷ liÖu nh- sè, v¨n b¶n cßn xö lý c¸c d÷ liÖu ©m thanh, h×nh ¶nh, siªu liªn kÕt. 1.1.2. Một số khái niệm cơ bản 1.1.2.1. Cơ sở dữ liệu (CSDL) Dữ liệu (Data): Là các thông tin được cấu trúc hóa để lưu trữ trong máy tính. CSDL (Database): là tập hợp dữ liệu có liên quan logic với nhau, có thể dễ dàng chia sẻ và được thiết kế nhằm đáp ứng các nhu cầu sử dụng của một tổ chức, cá nhân nào đó. Cơ sở dữ liệu là một bộ sưu tập rất lớn về các loại dữ liệu tác nghiệp, bao gồm các loại dữ liệu âm thanh, tiếng nói, chữ viết, văn bản, đồ hoạ, hình ảnh tĩnh hay hình ảnh động....được mã hoá dưới dạng các chuỗi bit và được lưu trữ dưới dạng File dữ liệu trong các bộ nhớ của máy tính. Cấu trúc lưu trữ dữ liệu tuân theo các quy tắc dựa trên lý thuyết toán học. Cơ sở dữ liệu phản ảnh trung thực thế giới dữ liệu hiện thực khách quan. KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 9 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Cơ sở dữ liệu là tài nguyên thông tin dùng chung cho nhiều người: Cơ sở dữ liệu (CSDL) là tài nguyên thông tin chung cho nhiều người cùng sử dụng. Bất kỳ người sử dụng nào trên mạng máy tính, tại các thiết bị đầu cuối, về nguyên tắc có quyền truy nhập khai thác toàn bộ hay một phần dữ liệu theo chế độ trực tuyến hay tương tác mà không phụ thuộc vào vị trí địa lý của người sử dụng với các tài nguyên đó. Cơ sở dữ liệu được các hệ ứng dụng khai thác bằng ngôn ngữ con dữ liệu hoặc bằng các chương trình ứng dụng để xử lý, tìm kiếm, tra cưú, sửa đổi, bổ sung hay loại bỏ dữ liệu. Tìm kiếm và tra cứu thông tin là một trong những chức năng qua trọng và phổ biến nhất của các dịch vụ cơ sở dữ liệu. Hệ quản trị CSDL – HQTCSDL (DataBase Management System - DBMS) là phần mềm điều khiển các chiến lược truy nhập CSDL. Khi người sử dụng đưa ra yêu cầu truy nhập bằng một ngôn ngữ con dữ liệu nào đó, HQTCSDL tiếp nhận và thực hiện các thao tác trên CSDL lưu trữ. Đối tượng nghiên cứu của CSDL là các thực thể và mối quan hệ giữa các thực thể. Thực thể và mối quan hệ giữa các thực thể là hai đối tượng khác nhau về căn bản. Mối quan hệ giữa các thực thể cũng là một loại thực thể đặc biệt. Trong cách tiếp cận CSDL quan hệ, người ta dựa trên cơ sở lý thuyết đại số quan hệ để xây dựng các quan hệ chuẩn, khi kết nối không tổn thất thông tin và khi biểu diễn dữ liệu là duy nhất. Dữ liệu được lưu trữ trong bộ nhớ của máy tính không những phải tính đến yếu tố về tối ưu không gian lưu trữ, mà phải đảm bảo tính khách quan, trung thực của dữ liệu hiện thực. Nghĩa là phải đẩm bảo tính nhất quán của dữ liệu và giữ được sự toàn vẹn của dữ liệu. Tính chất của CSDL: Một CSDL biểu thị một khía cạnh nào đó của thế giới thực, những thay đổi của thế giới thực phải được phản ánh một cách trung thực vào trong CSDL. KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 10 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Một CSDL là một tập hợp dữ liệu liên kết với nhau một cách lôgic và mang một ý nghĩa nào đó. Một CSDL được thiết kế và tổ chức cho một mục đích riêng, nó có một nhóm người sử dụng có chủ định và có một số ứng dụng được xác định phù hợp với mối quan tâm của người sử dụng. Một cơ sở dữ liệu phải thỏa mãn các yêu cầu sau: - Không dư thừa dữ liệu - Bảo đảm tính nhất quán dữ liệu khi cập nhật. - Bảo đảm không có dị thường xảy ra khi thêm hoặc xóa DL. - Bảo đảm tính toàn vẹn dữ liệu. - Bảo đảm tính dùng chung. 1.1.2.2. Hệ quản trị CSDL Hệ quản trị cơ sở dữ liệu (Database Management System - DBMS), là phần mềm hay hệ thống được thiết kế để quản trị một cơ sở dữ liệu. Cụ thể, các chương trình thuộc loại này hỗ trợ khả năng lưu trữ, sửa chữa, xóa và tìm kiếm thông tin trong một cơ sở dữ liệu (CSDL). Có rất nhiều loại hệ quản trị CSDL khác nhau: từ phần mềm nhỏ chạy trên máy tính cá nhân cho đến những hệ quản trị phức tạp chạy trên một hoặc nhiều siêu máy tính. Chức năng của hệ QTCSDL: Lưu trữ các định nghĩa, các mối liên kết dữ liệu vào một từ điển dữ liệu. Các chương trình truy cập đến CSDL thông qua hệ QTCSDL, Hệ QTCSDL sử dụng dữ liệu trong từ điển DL để tìm kiếm các cấu trúc thành phần DL và các mối liên kết được yêu cầu. Mọi sự thay đổi trong CSDL sẽ tự động ghi lại vào từ điển dữ liệu. KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 11 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Tạo ra các cấu trúc phức tạp theo yêu cầu để lưu trữ DL, giúp người sử dụng định nghĩa và lập trình cho các đặc trưng vật lý của dữ liệu. Biến đổi các DL nhập vào để phù hợp với các cấu trúc DL; tạo khuôn dạng cho các DL được lấy ra, làm cho nó phù hợp với mong muốn của người sử dụng. Tạo hệ thống bảo mật và áp đặt tính bảo mật trong CSDL. Tạo cấu trúc phức tạp cho phép người sử dụng truy cập đến dữ liệu. Cung cấp các thủ tục sao lưu và phục hồi DL để đảm bảo sự an toàn và toàn vẹn DL. Áp đặt các quy tắc an toàn, cho phép tối thiểu sự dư thừa DL và làm tối đa tính nhất quán dữ liệu. Cung cấp việc truy cập DL thông qua một ngôn ngữ truy vấn. 1.1.2.3. Ngôn ngữ dữ liệu Ng«n ng÷ d÷ liÖu cã 3 chøc n¨ng: - §Þnh nghÜa vµ m« t¶ d÷ liÖu. - CËp nhËt d÷ liÖu - Hái d÷ liÖu (an toµn vµ toµn vÑn d÷ liÖu) Descrition Data Update Language Query KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 12 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Ng«n ng÷ (language) Ng«n ng÷ tù nhiªn (Natural language)) Ng«n ng÷ h×nh thøc (Forrmat language) Ng«n ng÷ ng-êi Ng«n ng÷ sinh vËt D©n téc Format language Môc tiªu tæng qu¸t Giao tiÕp ng-êi vµ m¸y - M· ho¸, an toµn d÷ liÖu - C¸c ng«n ng÷ lËp tr×nh - V¨n ph¹m h×nh thøc - Ng«n ng÷ d÷ liÖu 1.1.3. Kiến trúc của một CSDL Mét CSDL ®-îc ph©n thµnh c¸c møc kh¸c nhau. CSDL vËt lý (møc vËt lý) lµ c¸c tÖp d÷ liÖu theo mét cÊu tróc nµo ®ã ®-îc l-u trªn c¸c thiÕt bÞ nhí thø cÊp (nh- ®Üa tõ, b¨ng tõ...). CSDL møc kh¸i niÖm lµ mét sù biÓu diÔn trõu t-îng cña CSDL vËt lý. Tøc lµ CSDL møc vËt lý lµ sù cµi ®Æt cô thÓ cña CSDL møc kh¸i niÖm. C¸c khung nh×n lµ c¸ch nh×n, lµ quan niÖm cña cña tõng ng-êi sö dông ®èi víi CSDL møc kh¸i niÖm. Khung nh×n bao gåm tËp tÊt c¶ d÷ liÖu mµ ng-êi sö dông ®-îc phÐp nh×n thÊy, ®-îc phÐp truy nhËp vµo. V× vËy, ®èi víi ng-êi sö dông khung nh×n chÝnh lµ CSDL. KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 13 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU USER 1 Khung nh×n 1 USER 1 Khung nh×n 1 CSDL møc kh¸i niÖm (Logic) USER 1 CSDL møc VËt lý Khung nh×n 1 Sơ đồ kiến trúc của một cơ sở dữ liệu 1.1.4. Mô hình CSDL dạng quan hệ 1.1.4.1. Các khái niệm cơ bản M« h×nh ph©n cÊp (hierachical model): M« h×nh d÷ liÖu lµ 1 c©y (c¸c nót biÓu diÔn c¸c tËp thÓ, nót con vµ nót cha ®-îc liªn hÖ theo 1 mèi quan hÖ x¸c ®Þnh). M« h×nh m¹ng (network model): M« h×nh ®-îc biÓu diÔn lµ 1 ®å thÞ cã h-íng. M« h×nh quan hÖ (Relational Model): Dùa trªn c¬ së kh¸i niÖm lý thuyÕt tËp hîp. C¸c ®èi t-îng thÓ hiÖn d-íi d¹ng b¶ng (quan hÖ). C¸c lo¹i m« h×nh d÷ liÖu trªn cã -u ®iÓm: • TÝnh trùc quan cao phï hîp víi thãi quen ®a sè cña ng-êi dïng. • Hç trî bëi lý thuyÕt to¸n häc chÆt chÏ (tiªn ®Ò ho¸) tiªn ®Ò Armstrong (1977), ph¸t triÓn phÇn mÒm øng dông vµ tù ®éng ho¸ thiÕt kÕ. KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 14 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU • TÝnh ®éc lËp d÷ liÖu cao. Một số khái niệm cơ bản : CSDL quan hệ: • Được xây dựng từ một hay nhiều bảng quan hệ • Mỗi bảng (quan hệ) gồm 2 phần: • • - Lược đồ: Tên quan hệ, Tên các cột - Thể hiện: Các dòng dữ liệu Trong mỗi bảng: - Các cột gọi là các trường hoặc các thuộc tính - Các hàng dữ liệu gọi là các bản ghi hoặc các bộ Yêu cầu: - Không có bộ trùng nhau - Mỗi thuộc tính phải có một tên riêng Thuộc tính: Thuộc tính là một đặc trưng của quan hệ. Mỗi thuộc tính bao giờ cũng có tên và một miền giá trị gọi là miền xác định của thuộc tính. - Ký hiệu: dom(A) Trong đó: A là tên thuộc tính - Ví dụ: dom(giới tính) = {nam, nữ} KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 15 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Ví dụ: Quan hệ ĐIỂM Lược đồ gồm 5 thuộc tính MãSV TênSV Email Tuổi Điểm TI01 Jones jo@vnu.edu 18 6 TI02 Smith mit@vnu.edu 18 8 TI03 Smith sm@vnu.edu 19 7 Thể hiện gồm 3 bộ Quan hệ: Là một tập con của tích Đề-các của một hoặc nhiều miền thuộc tính. Hay: Quan hệ r(R) là một quan hệ toán học cấp n trên các miền giá trị: dom(A1), dom(A2) ... dom(An ) là tập con của tích Đề-các của các miền giá trị xác định trên R. r (R) dom(A1) x dom(A2) x ... x dom(An) Lược đồ quan hệ: Trên một quan hệ mà chỉ đề cập đến các thuộc tính thì người ta gọi là một lược đồ quan hệ. - Ký hiệu: R={A1, A2,...,An} hoặc R(A1, A2,...,An) 1.1.4.2. Khóa a. Siêu khóa: - Gọi R={A1, A2,...,An} là tập hữu hạn các thuộc tính; K R KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 16 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU - K được gọi là siêu khóa trên R khi các giá trị của K là đủ để xác định duy nhất bộ dữ liệu của bảng b. Khóa - Nếu K là siêu khóa và K là tối thiểu thì K được gọi là khóa của quan hệ Ví dụ: Quan hệ ĐIỂM Tuổi Điểm MãSV TênSV Email TI01 Jones jo@vnu.edu 18 6 TI02 Smith mit@vnu.edu 18 8 TI03 Smith sm@vnu.edu 19 7 Câu hỏi: Tìm các siêu khóa và khóa của quan hệ trên? Giải: - - Siêu khóa: • Mã SV, Tên SV, Email, Tuổi, Điểm • Mã SV, Tên SV, Email, Tuổi • Mã SV, Tên SV, Email • Mã SV, Tên SV • Mã SV • Tên SV, Email, Tuổi, Điểm • Mã SV, Email • Email, Tuổi, Điểm • Email, Tuổi • Email Khóa: • Mã SV • Email KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 17 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU c. Khóa chính: Một siêu khóa được chọn đại diện cho một quan hệ được gọi là khóa chính của quan hệ đó. d. Khóa ngoài: Một tập các thuộc tính K được gọi là khóa ngoài của quan hệ r nếu nó không là khóa chính của quan hệ r nhưng là khóa chính của quan hệ khác. • Ví dụ: SV(MaSV, tenSV, ngsinh, quequan) MH(MaMH, tenMH, HSMH, Khoa) BĐ(MaBĐ, MaMH, MaSV, tenSV, diem, ky) 1.1.4.3. Các phép tính trên CSDL a. Phép chèn • Định nghĩa : Phép chèn dùng để chèn một hoặc nhiều bộ giá trị vào một quan hệ. - Phép chèn cung cấp một danh sách các giá trị cho một bộ mới t được chèn vào trong một quan hệ R. Phép chèn có thể vi phạm các kiểu ràng buộc được mô tả ở trên. Các ràng buộc miền có thể bị vi phạm nếu một giá trị thuộc tính được cho không thuộc vào miền tương ứng. Các ràng buộc khóa có thể bị vi phạm nếu một giá trị khóa trong bộ mới t đã tồn tại trong một bộ khác ở trong quan hệ r(R). Sự toàn vẹn thực thể có thể bị vi phạm nếu khóa chính của bộ mới t là null. Sự toàn vẹn tham chiếu có thể bị vi phạm nếu một giá trị của một khóa ngoài trong t tham chiếu đến một bộ không tồn tại trong một quan hệ được tham chiếu. - Nếu một phép chèn vi phạm một hoặc nhiều ràng buộc, tùy chọn mặc định là loại bỏ phép chèn. Trong trường hợp này, thường là các hệ quản trị cơ sở dữ liệu sẽ thông báo cho người sử dụng nguyên nhân của việc loại bỏ phép chèn. KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 18 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU • Cú pháp: 1. INSERT(r; A1 = d1, A2 = d2, …, An = dn); 2. INSERT(r; d1, d2, …, dn); b. Phép loại bỏ • Định nghĩa: Phép loại bỏ dùng để loại bỏ 1 hoặc nhiều bộ giá trị của một quan hệ. - Phép xóa được sử dụng để xóa một hoặc nhiều bộ giá trị của một quan hệ. Phép xóa chỉ có thể vi phạm ràng buộc tham chiếu trong trường hợp bộ bị xóa được tham chiếu bởi một khóa ngoài từ các bộ khác nhau trong cơ sở dữ liệu. Để chỉ rõ một phép xóa, cần phải đưa ra một điều kiện trên các thuộc tính của quan hệ để chọn các bộ sẽ bị xóa. - Ba tùy chọn sẵn sàng được sử dụng nếu một phép xóa gây ra sự vi phạm. Tùy chọn thứ nhất là loại bỏ phép xóa. Tùy chọn thứ hai là cố gắng lan truyền phép xóa (cascade the deletion) bằng cách xóa đồng thời các bộ tham chiếu đến bộ bị xóa. Tùy chọn thứ ba là sửa đổi các giá trị của các thuộc tính tham chiếu gây ra sự vi phạm. Mỗi giá trị như vậy hoặc là làm cho bằng null hoặc được thay đổi thành bộ có hiệu lực tham chiếu khác. Chú ý rằng, nếu một thuộc tính tham chiếu gây ra sự vi phạm là một phần của khóa chính thì không thể làm thành null, bởi vì nếu làm vậy thì sẽ vi phạm ràng buộc toàn vẹn thực thể. Có thể kết hợp cả ba tùy chọn ở trên. • Cú pháp: 1. DEL(r; A1 = d1, A2 = d2, …, An = dn) 2. DEL(r; d1, d2, …, dn) c. Phép thay thế • Định nghĩa : Là phép thay đổi giá trị một bộ trong quan hệ. KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 19 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU - Phép toán sửa đổi được dùng để thay đổi các giá trị của một hoặc nhiều thuộc tính trong một (hoặc nhiều) bộ của một quan hệ R nào đấy. Để lựa chọn các bộ cần thay đổi, người sử dụng phải chỉ ra một điều kiện trên các thuộc tính. - Phép sửa đổi một thuộc tính không phải là một khóa chính hoặc một khóa ngoài thường không gây ra các vi phạm ràng buộc. Hệ quản trị cơ sở dữ liệu chỉ cần kiểm tra để khẳng định rằng, giá trị mới là thuộc tính miền và kiểu giá trị đúng đắn. Việc sửa đổi giá trị một khóa chính tương tự như việc xóa một bộ và chèn các bộ khác vào chỗ của nó. Như vậy, chúng ta trở về trường hợp đã thảo luận với phép chèn và phép xóa. Nếu một thuộc tính khóa ngoài bị sửa đổi thì hệ quản trị cơ sở dữ liệu phải đảm bảo rằng, giá trị mới tham chiếu đến một bộ có tồn tại trong quan hệ được tham chiếu (hoặc là null). • Cú pháp: Cho quan hệ r (A1, A2, …, An) tại bộ t ta cần thay đổi giá trị ở các thuộc tính {Ai, …, Ap} CH(r; A1 = d1,…, An = dn ; Ai = ei, …, Ap = ep ) KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 20 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU BÀI TẬP CHƯƠNG I CÂU HỎI TRẮC NGHIỆM Câu 1: Chọn đáp án đúng cho khái niệm “Cơ sở dữ liệu” a. Cơ sở dữ liệu là một tập hợp các dữ liệu có liên quan với nhau được lưu trữ trên máy tính, có nhiều người sử dụng và được tổ chức theo một mô hình. b. Cơ sở dữ liệu là một tập hợp các dữ liệu không liên quan đến nhau được lưu trữ trên máy tính, có nhiều người sử dụng và được tổ chức theo một mô hình. c. Cơ sở dữ liệu là một tập hợp các dữ liệu có liên quan với nhau được lưu trữ trên máy tính, do một người sử dụng và được tổ chức theo một mô hình. d. Cơ sở dữ liệu là một tập hợp các dữ liệu không liên quan đến nhau được lưu trữ trên máy tính, do một người sử dụng và được tổ chức theo một mô hình. Câu 2. Điền từ còn thiếu vào dấu … : “… là một tập hợp các dữ liệu có liên quan với nhau được lưu trữ trên máy tính, có nhiều người sử dụng và được tổ chức theo một mô hình.” a. Dữ liệu b. Cơ sở dữ liệu c. Cơ sở dữ liệu quan hệ d. Hệ quản trị cơ sở dữ liệu Câu 3: Đâu không là bất thường trong CSDL: a. Dư thừa dữ liệu b. Dữ liệu không nhất quán c. Dị thường khi thêm bộ d. Đưa ra danh sách dữ liệu KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 21 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Câu 4. “Một CSDL biểu thị một khía cạnh nào đó của thế giới thực, những thay đổi của thế giới thực phải được phản ánh một cách trung thực vào trong CSDL.” Phát biểu trên đúng với khái niệm nào? a. Dữ liệu b. Tính chất của cơ sở dữ liệu c. Chức năng của hệ quản trị cơ sở dữ liệu d. Kiến trúc một cơ sở dữ liệu Câu 5. “Một CSDL là một tập hợp dữ liệu liên kết với nhau một cách lôgic và mang một ý nghĩa nào đó.” Phát biểu trên đúng với khái niệm nào? a. Dữ liệu b. Chức năng của hệ quản trị cơ sở dữ liệu c. Tính chất của cơ sở dữ liệu d. Kiến trúc một cơ sở dữ liệu Câu 6. “Một CSDL là một tập hợp dữ liệu liên kết với nhau một cách lôgic và mang một ý nghĩa nào đó.” Phát biểu trên đúng với khái niệm nào? a. Cơ sở dữ liệu b. Tính chất của cơ sở dữ liệu c. Chức năng của hệ quản trị cơ sở dữ liệu d. Kiến trúc một cơ sở dữ liệu Câu 7: Sơ đồ “Kiến trúc của một hệ cơ sở dữ liệu” gồm: a. Người sử dụng, khung nhìn, cơ sở dữ liệu mức vật lý b. Người sử dụng, cơ sở dữ liệu mức vật lý, cơ sở dữ liệu mức khái niệm c. Người sử dụng, khung nhìn, cơ sở dữ liệu mức khái niệm, cơ sở dữ liệu mức vật lý d. Khung nhìn, cơ sở dữ liệu mức khái niệm, cơ sở dữ liệu mức vật lý KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 22 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Câu 8: Phát biểu nào sau đây ứng với: “Cơ sở dữ liệu mức vật lý’’ a. Các file dữ liệu được lưu trữ theo một cấu trúc nào đó trên các thiết bị nhớ. b. Là sự biểu diễn trừu tượng của “Cơ sở dữ liệu mức vật lý” c. Là quan niệm của từng người sử dụng với “Cơ sở dữ liệu mức khái niệm”. d. Tất cả các đáp án trên. Câu 9: Phát biểu nào sau đây ứng với: “Cơ sở dữ liệu mức khái niệm’’ a. Các file dữ liệu được lưu trữ theo một cấu trúc nào đó trên các thiết bị nhớ. b. Là sự biểu diễn trừu tượng của “Cơ sở dữ liệu mức vật lý” c. Là quan niệm của từng người sử dụng với “Cơ sở dữ liệu mức khái niệm”. d. Tất cả các đáp án trên. Câu 10: Phát biểu nào sau đây ứng: “Khung nhìn - View’’ a. Các file dữ liệu được lưu trữ theo một cấu trúc nào đó trên các thiết bị nhớ. b. Là sự biểu diễn trừu tượng của “Cơ sở dữ liệu mức vật lý” c. Là quan niệm của từng người sử dụng với “Cơ sở dữ liệu mức khái niệm”. d. Tất cả các đáp án trên. Câu 11: Theo ANSI-SPARC, kiến trúc của một hệ CSDL gồm có bao nhiêu mức: a. 2 mức b. 4 mức c. 3 mức d. 1 mức Câu 12: Đâu KHÔNG phải là mức biểu diễn một CSDL? a. Mức trong b. Mức khái niệm c. Mức liên kết d. Mức ngoài Câu 13: Mức vật lý còn được gọi là: a. Mức khái niệm b. Mức trong KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 23 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU c. Mức ngoài d. Mức logic Câu 14: Mức khung nhìn còn được gọi là: a. Mức trong b. Mức khái niệm c. Mức ngoài d. Mức logic Câu 15: Đâu KHÔNG phải là một hệ quản trị CSDL? a. Access b. Sql Server c. Oracle d. Word Câu 16: Thuật ngữ nào chỉ mô hình quan hệ? a. Network data model b. Relational data model c. Relationship data model d. E-R model Câu 17: Phát biểu nào sau đây KHÔNG đúng với một CSDL? a. Tất cả người dùng sử dụng một khung nhìn chung b. Mỗi người dùng có một khung nhìn riêng của mình c. Người dùng có thể thay đổi khung nhìn của họ d. Sự thay đổi khung nhìn của người này không làm ảnh hưởng đến khung nhìn của người khác Câu 18: Một bảng (quan hệ) gồm có những thông tin gì? a. Lược đồ quan hệ, thể hiện b. Tên quan hệ, tên các thuộc tính KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 24 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU c. Lược đồ quan hệ, các dòng dữ liệu d. Tên quan hệ, các dòng dữ liệu Câu 19: Đâu không phải là một quan hệ? a. Lược đồ, thể hiện b. Lược đồ, các dòng dữ liệu c. Tên quan hệ, tên thuộc tính, các dòng dữ liệu d. Tên quan hệ, tên thuộc tính Câu 20: Lược đồ quan hệ chỉ đề cập đến những thông tin gì? a. Tên các thuộc tính và các dòng dữ liệu b. Tên quan hệ và tên các thuộc tính c. Tên quan hệ và các dòng dữ liệu d. Tên thuộc tính và các bộ giá trị Câu 21: Chọn phát biểu đúng với thuật ngữ “Thuộc tính”: a. Thuộc tính là một đặc trưng của quan hệ. Mỗi thuộc tính bao giờ cũng có tên và một miền giá trị gọi là miền xác định của thuộc tính. b. Thuộc tính là một đặc trưng của quan hệ. c. Mỗi thuộc tính bao giờ cũng có tên và một miền giá trị gọi là miền xác định của thuộc tính. d. Thuộc tính là một tập con của tích Đề-các của một hoặc nhiều miền thuộc tính. Câu 22: Miền giá trị để chỉ? a. Tên của một cột b. Một hàng trong bảng c. Một bảng d. Kiểu dữ liệu của một cột KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 25 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Câu 23: Miền giá trị của thuộc tính A ký hiệu là gì? a. Dim(A) b. Dom(A) c. Dam(A) d. Dem(A) Câu 24: Một tập con của tích Descartes của một hay nhiều miền thuộc tính là: a. Một quan hệ trên một tập các thuộc tính b. Một miền c. Một CSDL d. Một lược đồ quan hệ Câu 25: Để chỉ một quan hệ r xác định trên tập thuộc tính R dùng ký hiệu nào? a. r(R) b. r*R c. r x R d. R(r) Câu 26: Trong lý thuyết mô hình cơ sở dữ liệu quan hệ, thuật ngữ quan hệ chỉ: a. Bảng b. Thuộc tính c. Miền d. Lược đồ quan hệ Câu 27: Nêu những lỗi có thể xảy ra khi thực hiện lệnh chèn? a. Không tương thích với miền giá trị, không tương thích với lược đồ dữ liệu. b. Trùng khóa, không tương thích với miền giá trị, không tương thích với lược đồ dữ liệu. c. Trùng khóa, không tương thích với miền giá trị d. Trùng khóa, không tương thích với lược đồ dữ liệu. KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 26 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Câu 28: Trong lý thuyết mô hình CSDL quan hệ, thuật ngữ thuộc tính để chỉ tên của một: a. Bảng b. Cột c. Miền d. Quan hệ Câu 29: Trong lý thuyết mô hình CSDL quan hệ, thuật ngữ bộ giá trị để chỉ: a. Quan hệ b. Cột c. Hàng d. Cơ sở dữ liệu Câu 30: Một tập hợp các thực thể cùng kiểu được gọi là: a. Một thực thể b. Một thuộc tính c. Tập thực thể d. Tập thuộc tính Câu 31: Một sự kết hợp của một số thực thể được gọi là: a. Một liên kết b. Tập liên kết c. Thuộc tính đa trị d. Thuộc tính đơn trị KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 27 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Câu 32: Thứ tự đúng các mức trong mô hình kiến trúc cơ sở dữ liệu: a. Các khung nhìn, Các User, CSDL mức khái niệm, CSDL vật lý. b. Các User, CSDL mức khái niệm, các khung nhìn, CSDL vật lý. c. Các User, các khung nhìn, CSDL mức khái niệm, CSDL vật lý. d. Các User, các khung nhìn, CSDL vật lý, CSDL mức khái niệm. Câu 33: Đây là những lỗi có thể xảy ra khi thực hiện lệnh gì trên cơ sở dữ liệu quan hệ: “Trùng khóa, không tương thích với miền giá trị, không tương thích với lược đồ dữ liệu.”? a. Chèn (Insert) b. Loại bỏ (Del) c. Thay thế (Ch) d. Cả 3 đáp án trên Câu 34: Các phần mềm sau đây, phần mềm nào không phải là hệ quản trị CSDL quan hệ? a. Microsoft Excel b. Microsoft Access c. Microsoft SQL server d. Oracle Câu 35: Trên cơ sở dữ liệu quan hệ phép chèn (Insert) dùng để làm gì? a. Dùng để xóa một hoặc nhiều bộ giá trị của một quan hệ. b. Dùng để chèn một bộ giá trị vào một quan hệ. c. Dùng để chèn nhiều bộ giá trị vào một quan hệ. d. Dùng để chèn một hoặc nhiều bộ giá trị vào một quan hệ. KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 28 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Câu 36: Trên cơ sở dữ liệu quan hệ phép loại bỏ (Del) dùng để làm gì? a. Dùng để xóa một bộ giá trị của một quan hệ. b. Dùng để xóa nhiều bộ giá trị của một quan hệ. c. Dùng để xóa một hoặc nhiều bộ giá trị của một quan hệ. d. Dùng để chèn một hoặc nhiều bộ giá trị vào một quan hệ. Câu 37: Trên cơ sở dữ liệu quan hệ phép thay thế (CH) dùng để làm gì? a. Là phép thay đổi một quan hệ. b. Là phép thay đổi giá trị một bộ trong quan hệ. c. Là phép thay đổi giá trị tất cả các bộ trong quan hệ. d. Dùng để xóa một hoặc nhiều bộ giá trị của một quan hệ. Câu 38: Trên cơ sở dữ liệu quan hệ, để chèn một bộ giá trị vào một quan hệ thì sử dụng cú pháp nào? a. INSERT(r; A1 = d1, A2 = d2, …, An = dn); b. INSERT(r; A1, A2, …, A); c. INSERT(r; d1, d2, …, dn); d. Cả đáp án a và c Câu 39: Trên cơ sở dữ liệu quan hệ, để loại bỏ một bộ giá trị khỏi một quan hệ thì sử dụng cú pháp nào? a. INSERT (r; A1 = d1, A2 = d2, …, An = dn) b. DEL(r; A1 = d1, A2 = d2, …, An = dn) c. DELETE(r; A1 = d1, A2 = d2, …, An = dn) d. DEL(r; A1, A2, …, An) KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 29 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Câu 40: Trên cơ sở dữ liệu quan hệ, để thay đổi một bộ giá trị trong quan hệ thì sử dụng cú pháp nào? a. CH(r; A1 = d1,…, An = dn ; A, …, Ap ) b. CH(r; A1 = d1,…, An = dn ; Ai = ei, …, Ap = ep ) c. CHANGE(r; A1 = d1,…, An = dn ; Ai = ei, …, Ap = ep ) d. CH(r; d1,…,dn ; Ai = ei, …, Ap = ep ) Câu 41: Trên cơ sở dữ liệu quan hệ cú pháp sau dùng để làm gì? Del(r; d1, d2, …, dn); a. Chèn một bộ giá trị vào một quan hệ b. Xóa một bộ giá trị khỏi một quan hệ c. Thay đổi giá trị của một bộ trong một quan hệ d. Cả đáp án b và c. Câu 42: Gọi R={A1, A2,...,An} là tập hữu hạn các thuộc tính; K R; K được gọi là siêu khóa trên R khi nào? a. Khi các giá trị của K là đủ để xác định duy nhất bộ dữ liệu của bảng b. Khi các giá trị của K là đủ để xác định nhiều hơn một bộ dữ liệu của bảng. c. Khi K là tối thiểu. d. Tất cả các đáp án trên. Câu 43: Gọi R={A1, A2,...,An} là tập hữu hạn các thuộc tính; K R; K được gọi là khóa của R khi nào? a. Khi K là siêu khóa b. Khi K là tối thiểu. KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 30 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU c. Khi các giá trị của K là đủ để xác định nhiều hơn một bộ dữ liệu của bảng. d. Cả đáp án a và b. Câu 44: Phát biểu nào sau đây đúng với thuật ngữ “Khóa chính” a. Khóa chính của một quan hệ là khi dựa vào nó xác định được một bộ giá trị của một quan hệ b. Một siêu khóa được chọn đại diện cho một quan hệ được gọi là khóa chính của quan hệ đó c. Khóa chính của một quan hệ là khi dựa vào nó xác định được nhiều bộ giá trị của một quan hệ d. Cả đáp án a và c Câu 45: Phát biểu nào sau đây đúng với thuật ngữ “Khóa ngoài” a. Một tập các thuộc tính K được gọi là khóa ngoài của quan hệ r nếu nó là khóa chính của quan hệ r. b. Một tập các thuộc tính K được gọi là khóa ngoài của quan hệ r nếu nó là khóa chính của quan hệ khác. c. Một tập các thuộc tính K được gọi là khóa ngoài của quan hệ r nếu nó không là khóa chính của quan hệ r nhưng là khóa chính của quan hệ khác. d. Tất cả các đáp án trên. Câu 46: Khóa ngoài là một tập hợp gồm một hay nhiều thuộc tính là: a. Siêu khóa của lược đồ quan hệ đó b. Siêu khóa của lược đồ quan hệ khác c. Khóa của lược đồ quan hệ đó d. Khóa của lược đồ quan hệ khác KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 31 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Câu 47: Giá trị của các bộ ở các thuộc tính thuộc khóa chính phải khác giá trị a. Xâu rỗng b. 0 c. null d. cả xâu rỗng và 0 Câu 48: Cho Cơ sở dữ liệu Quản lý điểm gồm 3 quan hệ sau: SV(MaSV, tenSV, ngsinh, quequan) MH(MaMH, tenMH, HSMH, Khoa) BĐ(MaBĐ, MaMH, MaSV, tenSV, diem, ky) Thuộc tính MaBĐ là khóa gì? a. Siêu khóa b. Khóa c. Khóa ngoài d. Khóa chính Câu 49: Cho Cơ sở dữ liệu Quản lý điểm gồm 3 quan hệ sau: SV(MaSV, tenSV, ngsinh, quequan) MH(MaMH, tenMH, HSMH, Khoa) BĐ(MaBĐ, MaMH, MaSV, tenSV, diem, ky) Các thuộc tính MaMH, MaSV trên quan hệ BĐ là khóa gì? a. Siêu khóa b. Khóa c. Khóa ngoài d. Khóa chính KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 32 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Câu 50: Phát biểu nào sau đây KHÔNG đúng? a. Mọi tập con của tập thuộc tính chứa một siêu khóa cũng là siêu khóa b. Mỗi quan hệ có ít nhất một siêu khóa c. Một khóa là siêu khóa tổi thiểu d. Siêu khóa không thể chỉ là một thuộc tính của lược đồ KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 33 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU CHƯƠNG II NGÔN NGỮ THAO TÁC DỮ LIỆU Mục tiêu: Chương II sẽ giới thiệu một số ngôn ngữ thao tác dữ liệu, như ngôn ngữ dữ liệu dựa trên đại số quan hệ, ngôn ngữ SQL .... Ngôn ngữ xử lý dữ liệu được chia thành hai loại khác nhau dựa trên hai chức năng khác nhau. Đó là các chức năng khai báo và chức năng tính toán. Với các trình ứng dụng, dữ liệu thường được mô tả và tính toán khi chương trình thực hiện, còn trong các hệ thống CSDL, dữ liệu được định nghĩa một lần duy nhất. Vì vậy cần có một phương tiện đề định nghĩa ngôn ngữ dữ liệu có khả năng mô phỏng các phép tính quan hệ có tính đầy đủ hơn. Nội dung của chương bao gồm: Đại số quan hệ Hệ quản trị CSDL SQL Ngôn ngữ SQL 2.1. Đại số quan hệ 2.1.1. Phép hợp a. Định nghĩa: Giả sử r, s là 2 file dữ liệu có cùng số cột n khi đó file dữ liệu là hợp 2 file r và s ký hiệu là rs, gồm n cột bao gồm các bản ghi, các dòng thuộc cả file r và file s. Những dòng giống nhau chỉ lấy một lần. Nếu r và s là các file có tên các cột khác nhau thì cột của quan hệ hợp không có tên. b. Cú pháp: r s = [t / t r hoặc t s hoặc t s và r}. KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 34 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Ví dụ: 2.1.2. Phép giao a. Định nghĩa: Giả sử r và s là 2 file dữ liệu cùng n cột. Giao của hai file dữ liệu, ký hiệu là rs là tập hợp các bộ t thuộc cả r và s. Nếu file dữ liệu có các cột khác nhau thì file dữ liệu giao không có tên các cột. b. Cú pháp: r s = { t / t r và t s}. Ví dụ: KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 35 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU 2.1.3. Phép trừ a. Định nghĩa : Giả sử r và s là 2 file dữ liệu có cùng n cột. File dữ liệu gọi là hiệu 2 file r và s, ký hiệu r-s là một file dữ liệu n cột bao gồm các bản ghi của r nhưng không có mặt trong s. Nếu r và s có tên các cột khác nhau thi file dữ liệu hiệu không có tên các cột. b. Cú pháp: r - s = { t / t r và t s}. Ví dụ: 2.1.4. Tích Đề các a. Định nghĩa: - Gọi: r là quan hệ xác định trên tập R1 = {a1,a2,... , an} s là quan hệ xác định trên tập R2 = {b1,b2, ..., bm}. - Tích đề - Các r x s của r và s là tập (n+m) cột với: n số cột của r m số cột của r số lượng dòng bằng số lượng dòng của r nhân với số lượng dòng của s KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 36 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU b. Cú pháp: r x s = { t / t có dạng (a1 ... , an, b1, ... , bm)} trong đó: (a1 ... , an r và b1, ... , bm s). Ví dụ: 2.1.5. Phép chiếu a. Định nghĩa: Để trích rút các cột ứng với các thuộc tính nào đó của một quan hệ. b. Cú pháp: Giả sử r là file dữ liệu có tập cột là R={a1,a2,...,an} Khi đó phép chiếu ký hiệu là lên tập r là i1,i2,...,ip(r) KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 37 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Trong đó: i là số thứ tự lấy trong tập từ 1 đến n. j =1,2,...,p (chỉ số p <= n) Khi đó ta thực hiện phép chiếu như sau: - Giữ lại p cột có số hiệu là i1,i2,...,ip - Và loại bỏ các dòng trùng nhau. Ví dụ: 2.1.6. Phép chọn a. Định nghĩa : Để trích rút các bộ giá trị thỏa mãn điều kiện chọn từ một quan hệ. b. Cú pháp: Giả sử r là file dữ liệu trên R={a1,a2,...,an} phép chọn hình thành file dữ liệu ký hiệu F(r) đó là file dữ liệu có cùng số cột như r nhưng số dòng chỉ bao gồm các dòng của r thoả mãn điều kiện F. F(r) = {t r | F(t) = đúng} Biểu thức có điều kiện F gồm: - Các toán hạng (tên cột và hằng) - Các phép toán quan hệ số học (<,=,=,>,=,?) KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 38 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU - Các phép toán logic (,, là phép và, hoặc, phủ định) - Hằng được đặt trong dấu nháy. Ví dụ: r đã cho trước F là điều kiện A=B D>5 Khi đó F(r) là phép chọn được thực hiện bằng cách rút ra các bản ghi thoả mãn F từ r và loại bỏ các bản ghi dòng trùng nhau. 2.1.7. Phép kết nối a. Định nghĩa: là phép ghép các bộ giá trị của hai quan hệ theo điều kiện nào đó. b. Cú pháp: Cho hai quan hệ r (có n thuộc tính) và s (có m thuộc tính), khi đó r và s được kết nối theo điều kiện được biểu diễn như sau: 𝑹 ⋈ 𝒔 = {tu,v / u r , v s, bt (A B) đúng} 𝑨𝜽𝑩 Trong đó: tu,v có (n +m) thuộc tính KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 39 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Ví dụ: Lưu ý : Chúng ta cần giả thiết rằng giá trị của thuộc tinh B, C có thể so sánh được với nhau. Phép kết nối tự nhiên: Là phép kết nối bằng tại thuộc tính cùng tên của hai quan hệ. Ký hiệu: r * s - Trong trường hợp phép so sánh 𝜽 là dấu ’=’ thì phép nối được gọi là kết nối bằng . Trường hợp kết nối bằng tại thuộc tính cùng tên của hai quan hệ và một trong hai thuộc tính đó được loại bỏ qua phép chiếu thì phép kết nối đó được gọi là phép nối tự nhiên và sử dụng ký hiệu ‘*’. Khi đó phép kết nối tự nhiên của hai quan hệ r(ABC) và s(CDE) được biểu diễn qua : r(ABC)*s(CDE) = {t[ABCDE]/t[ABC] ∈ r và t[CDE] ∈ s}. Ví dụ: KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 40 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU 2.1.8. Phép chia Định nghĩa: Cho R là quan hệ trên tập thuộc tính U S là quan hệ trên tập thuộc tính V Với V U. Ta định nghĩa phép chia R cho S như sau: R S = { t (trên U – V)/ t’ S : t^t’ R} Ví dụ: 2.2. Hệ quản trị CSDL SQL Server và ngôn ngữ SQL 2.2.1. Giới thiệu về Hệ quản trị CSDL SQL Server SQL được phát triển từ ngôn ngữ SEQUEL – 2. Đây là ngôn ngữ con dữ liệu quan hệ mạnh, phổ dụng và dễ sử dụng. SQL đã xem như ngôn ngữ xử lý dữ liệu chuẩn cho các CSDL theo hướng mô hình quan hệ một ngôn ngữ phi thủ tục, chuẩn mực, điển hình. Các hệ thống cài đặt SQL làm tăng rất mạnh và mặt xử lý dữ liệu. KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 41 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Phép toán cơ bản trong SQL là phép ánh xạ được miêu tả như một khối Select – From – Where. Các thuật ngữ trong CSDL quan hệ như quan hệ thuộc, bộ… được thay bằng các thuật ngữ như bảng, cột, bản ghi hoặc hàng. * Kiểu dữ liệu: Số, xâu, ngày tháng, tiền tệ: - Integer: từ -2147483648 2147483647 - Smallinteger: - 32768 32767 - Decimal (5,2) 16856.01 - Decimal (x,y): với x : số chữ số ( phần nguyên) y: số chữ số sau dấu phẩy thập phân • Float: số dấu phẩy động. • Char (n): xâu ký tự có độ dài n ( n 235) • Var char (n): xâu ký tự có độ dài biến đổi 0 n. - Date: dữ liệu dạng ngày tháng * Các hàm hỗ trợ: - Đếm số hàng Count ( ) - Tính tổng theo cột Sum ( ) - Tính trung bình theo cột Avg ( ) - Tính cực đại, cực tiểu theo cột Max ( ), min ( ) * Chức năng: - ĐN dữ liệu - Cập nhật dữ liệu - Hỏi dữ liệu - Kiểm soát dữ liệu, an toàn dữ liệu. * SQL gồm: KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 42 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU - Data Definition Language (DDL): Các lệnh mô tả CSDL, gồm tạo, sửa, xóa các bảng và ràng buộc - Data Manipulation Language (DML): Các lệnh thao tác truy vấn dữ liệu - Data Control Language (DCL): Các lệnh điều khiển CSDL, gồm việc cấp quyền hạn của user. * SQL sử dụng thuật ngữ - Bảng ~ quan hệ - Cột ~ thuộc tính - Dòng ~ bộ Trong tài liệu này sử dụng các bảng dưới đây làm ví dụ minh họa : Bảng Employees Bảng Jobs KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 43 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Bảng Job_history 2.2.2. Cấu trúc Cơ sở dữ liệu Một CSDL của SQL Server là tập hợp các bảng (Table) dùng để chứa các dữ liệu và những đối tượng khác, chẳng hạn Views, indexes, store procedures, và triggers… Chúng được ấn định để hỗ trợ các hoạt động được thực hiện với dữ liệu. Dữ liệu được chứa trong một CSDL thường liên quan đến một chủ đề hay tiến trình đặc biệt. SQL Server cú thể hỗ trợ nhiều CSDL. Mỗi một CSDL cú thể liờn quan hay khụng liờn quan đến các CSDL khác. Ví dụ một SQL Server có thể có CSDL chứa dữ liệu về nhõn sự, và một CSDL khác chứa các đơn hàng. Khi bạn tạo một CSDL, bạn phải xây dựng cấu trúc lưu trữ dữ liệu. Các trúc này bao gồm ít nhất một tập tin dữ liệu (data file) và một tập tin vết giao tác (transaction log file). Bạn nờn hiểu cách thức Microsoft SQL Server 2000 lưu trữ dữ liệu, cũng như chức năng của transaction log trước khi bạn làm việc với CSDL của SQL Server. Cách dữ liệu được lưu trữ trong CSDL của SQL Server: KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 44 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Các tập tin CSDL SQL Server: Một CSDL được lưu chứa trong các tập tin vật lý trờn đĩa cứng, một CSDL trói dài trờn ớt nhất là hai tập tin. Một vài tập tin dữ liệu (data file), và một tập tin vết (transaction log file). Những tập tin này được chỉ định khi CSDL được tạo hay hiệu chỉnh. SQL Server 2000 cho phộp ba loại tập tin CSDL: Primary data files: Một CSDL có một primary data file dùng để ghi nhận lại tất cả những tập tin khác trong CSDL, và lưu trữ dữ liệu. Theo ngầm định, tên của primary data file cú phần mở rộng là .MDF. Secondary data files: Một CSDL có thể không có hoặc có nhiều secondary data files, dùng để lưu các đối tượng của CSDL. Theo ngầm định, tên của secondary data file có phần mở rộng là .NDF. Log files: một CSDL có ít nhất một log file dựng chứa những thụng tin cần thiết cho việc phục hồi tất cả những giao tác (transaction) trong CSDL. Theo ngầm định, log file có phần mở rộng là .LDF. Mỗi tập tin CSDL có năm thuộc tính: Tên tập tin logic, một tên tập tin vật lý, một kích thuớc (size) ban đầu, một kích thước tối đa (maximum size), và gia số tăng kích thước (growth increment). Các thuộc tính của mỗi tập tin, theo cùng với những thông tin khỏác được ghi chú trong bảng hệ thống sysfiles, một dòng ứng với mỗi tập tin đuợc dùng trong một CSDL. 2.2.3 Tạo CSDL bằng công cụ SQL Server Để tạo một CSDL, trước hết bạn phải định nghĩa một tên cho CSDL, kích cỡ của nó, và các tập tin primary data file, secondary data file và file group dùng để lưu trữ nó. Bạn nên xem xét vài nhân tố sau trước khi bạn tạo CSDL: - Quyền để tạo một CSDL mặc nhiên phải là thành viên của sysadmin và DBCreator fixed server role, mặc dự quyền này có thể gán cho bất kỳ user nào. - User - người tạo ra CSDL trở thành chủ (owner) của CSDL. KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 45 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU - Có thể có tối đa 32767 CSDL có thể tạo trong một server. - Tên của CSDL phải đặt theo qui tắc định danh. Khi tạo CSDL bạn nên chỉ định dung lượng lớn nhất có thể có của một CSDL, điều này sẽ ngăn chặn sự gia tăng không kiểm soát kích thước của CSDL. SQL Server tạo CSDL thông qua 2 bước: - SQL Server sử dụng một bản sao của CSDL Model để khởi tạo CSDL mới và biến đổi nó. - Sau đó SQL Server nhồi đầy phần còn lại của CSDL bởi các trang trống. Các phương pháp tạo, hiệu chỉnh một CSDL của SQL Server. Cách 1: Dựng SQL Enterprise Manager Cách 2: Dựng Create Database Wizard. Cách 3: Dựng câu lệnh CREATE DATABASE. Tạo bằng Database Wizard (Ở tại cửa sổ Enterprise Manager) 1. Mở rộng server group, sau đó nới rộng server nơi mà sẽ tạo CSDL. 2. Chọn thực đơn Tools --> Wizards. 3. Mở rộng Database. 4. Nhấp phải chuột tại Create Database Wizard. 5. Hoàn tất các bước trong Wizard. Tạo bằng Enterprise Manager (ở tại cửa sổ Enterprise Manager) 1. Mở rộng server group, sau đó nới rộng server nơi mà sẽ tạo CSDL. 2. Nhắp nút phải chuột tại nút Database, chọn New DataBase. 3. Khai báo các thông tin cần thiết, sau đó chọn OK: KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 46 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Trang General + Name: <Tờn logic của CSDL> Trang Data Files + Location : <Tên của tập tin Datafile, vị trí lưu tập tin trên đĩa> + Initial size: <Kích cở khởi tạo CSDL> + File Group : <Tờn của File Group> + File properties: Khai báo một số thuộc tính khác như tỉ lệ gia tăng (File Growth), kích cỡ tối đa (maximun size) Trang Transaction log: Tương tự như trang Data files nhưng khai báo cho tập tin log. Hộp thoại xem thuộc tính của SQL Server KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 47 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU 2.2.4 Tạo CSDL bằng lệnh Cú pháp: CREATE DATABASE database_name [ ON [ < filespec > [,...n ] ] [, < filegroup > [,...n ] ] ] [ LOG ON { < filespec > [,...n ] } ] [ COLLATE collation_name ] [ FOR LOAD | FOR ATTACH ] < filespec > ::= [ PRIMARY ] ([ NAME = logical_file_name, ] FILENAME = 'os_file_name' [, SIZE = size ] [, MAXSIZE = { max_size | UNLIMITED } ] [, FILEGROWTH = growth_increment ]) [,...n ] < filegroup > ::= FILEGROUP filegroup_name < filespec > [,...n ] Thực hiện: (1) Gõ lệnh trong cửa sổ Query Analyzer (2) Gọi thực thi câu lệnh Ví dụ: Tạo CSDL có tên là SalesDB, tập tin dữ liệu tên là SalesDB_dat.mdf đặt trong C:\Data, kích cỡ khởi tạo là 10MB, kích thước tối đa là 50MB, tỉ lệ gia tăng là 5MB, và tập tin vết tên là SalesDB_log.ldf đặt trong C:\Data, kích thước khởi tạo là 5MB, kích thước tối đa là 25MB, tỉ lệ gia tăng là 10%. KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 48 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU CREATE DATABASE SalesDb ON (NAME = SalesDb_dat, FILENAME = 'c:\data\salesDB_dat.mdf', SIZE = 10, MAXSIZE = 50, FILEGROWTH = 5) LOG ON (NAME = 'SalesDb_log', FILENAME = 'c:\data\salesDB_log.ldf', SIZE = 5MB, MAXSIZE = 25MB, FILEGROWTH = 10%) GO Lưu ý: - Thư mục Data phải hiện hữu trong C:\ - Sao khi gõ câu lệnh, đánh dấu chọn khối lệnh và nhấn F5 để thực thi. KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 49 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU 2.2.5 Quản trị CSDL trên SQL Server 2.2.5.1 Chế độ bảo mật Mô hình truy cập bảo mật của SQL Server: Các lớp kiểm tra bảo mật chứng thực của SQL Server Việc kết nối đến SQL Server thật đơn giản. Sự bảo mật được kiểm tra ở ba nơi khác nhau: có thể bị kiểm hợp lệ bởi Windows 2000, bản thân SQL Server, mức CSDL riêng lẽ. Ngay sau khi bạn kết nối vào SQL Server bạn chưa thật sự truy cập được bất kỳ một đối tượng CSDL nào, bạn cần phải được cấp quyền (permissions) truy cập đến đối tượng. Các chế độ bảo mật. SQL Server cung cấp hai chế độ bảo mật: Hai loại chứng thực Windows Authentication KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 50 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU SQL Server kiểm tra nhận dạng của user và sau đó cho phép hay từ chối đăng nhập truy xuất dựa trên cơ sở tên của User mà không cần tên đăng nhập và password riêng biệt. Điều này gọi là kết nối tin tưởng. Khi bạn kết nối đến SQL Server theo cách này thì có nghĩa là bạn trình bày với SQL Server một ủy nhiệm bảo mật của Windows (như là một thẻ bài truy cập của bạn). Bạn xây dựng các ủy nhiệm này trong quá trình đăng nhập vào mạng windows. Các ủy nhiệm bảo mật này được truyền âm thầm cho bạn, vì thế bạn không cần làm bất cứ điều gì đặc biệt để vượt qua việc kiểm tra bảo mật. SQL Server Authentication Người quản trị CSDL có thể tạo ra các tài khoản và password đăng nhập SQL Serevr. Các tài khoản này hoàn toàn không tuỳ thuộc vào các tài khoản hay nhóm người dùng hệ điều hành. Nếu có một kết nối chỉ định chứng thực SQL Server thì SQL Server thực thi chứng thực chính nó bằng cách kiểm tra xem tài khoản đang nhập có tồn tại hay không và mật khẩu chỉ định có khớp với một ghi nhận trước đây trong SQL Server không. Chế độ chứng thực: Windows Authentication mode: Người sử dụng chỉ có thể kết nối với SQL Server bằng Windows Authentication (Kết nối tin tưởng) Mixed mode: Người dùng có thể kết nối với SQL Server bằng cách dùng cả Windows Authentication và SQL Server Authentication Chuyển đổi chế độ chứng thực: Sau khi cài đặt, bạn có thể sử dụng Enterprise Manager để chuyển đổi qua lại giữa các chế độ. Tại cửa sổ Enterprise Manager, nhắp nút phải chuột tại instance và chọn Properties KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 51 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU 2.2.5.2 Quản trị người dùng Người dùng trong SQL Server được chia thành 2 mức: Người truy nhập vào SQL Server gọi là Login, người khai thác CSDL gọi là User. Login. Là đối tượng được quyền truy nhập vào SQL Server, tùy theo chế độ bảo mật của SQL Server mà những login là account của Windows NT hay của SQL Server, login do Server quản lý trực tiếp. Tạo bằng công cụ. - Chọn chức năng Security của Server -> Logins - Nhấn phải chuột -> New Login... - Nhập các tham số: Nếu chọn Account của Windows NT thì bạn có thể chọn trong danh sách. Nếu tạo login của SQL Server thì bạn nhập tên mới, mật khẩu, chọn login thuộc server role nào, có thể gán quyền truy nhập khai thác CSDL nào. Tạo bằng câu lệnh. Sử dụng câu lệnh KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 52 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU sp_addlogin [ @loginame = ] 'login' [ , [ @passwd = ] 'password' ] [ , [ @defdb = ] 'database' ] [ , [ @deflanguage = ] 'language' ] [ , [ @sid = ] sid ] [ , [ @encryptopt = ] 'encryption_option' ] Ví dụ: Tạo login có tên ‘Albert’, mật khẩu ‘corporate’ EXEC sp_addlogin 'Albert', 'food', 'corporate' Mọi thao tác sửa, xóa được thực hiện như các đối tượng khác. User. User là đối tượng khai thác CSDL, nếu login chỉ xác định truy nhập vào SQL Server thì User là login ID tham gia khai thác CSDL, user do CSDL quản lý trực tiếp. - Chọn CSDL -> users - Nhấn phải chuột -> new user... - Chọn Login, nhập user name, chọn role mà user thuộc ->Ok Các thao tác xóa, sửa thực hiện như các đối tượng khác, để gán quyền cho user bạn có thể chọn lại user vừa tạo cho CSDL sau đó vào nhấn vào Permissions. KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 53 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU 2.2.5.3 Quản trị xuất, nhập, sao lưu, phục hồi dữ liệu. a. Import – Nhập dữ liệu. Dùng nhập dữ liệu từ ngoài vaof CSDL từ hệ quản trị CSDL khác hoặc CSDL khác của SQL Server. - Chọn Databases -> All tasks -> Import Data... - Next -> Chọn Data Source (Có thể là SQL Server, Oracle, Access,...), trong ví dụ minh họa chọn Access. KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 54 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU - Chọn tập tin (file name) -> Next - Chọn Instance cần chuyển dữ liệu vào, user name., tên CSDL (có trước hoặc tạo tại thời điểm này bằng cách chọn New) -> Next - Chọn cách chuyển toàn bộ bảng dữ liệu hay thông qua câu lệnh truyên vấn (trong ví dụ minh họa chọn bảng dữ liệu) -> Next KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 55 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU - Chọn các bảng, khung nhìn cần Import (có thể lựa chọn một số chức năng khác cụ thể hơn, bạn đọc tự tìm hiểu), tên các bảng, khung nhìn của SQL Server nhận dữ liệu -> Next. - Chọn chức năng thực hiện ngày hay theo lịch –> Next -> Finish KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 56 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU - Xem thông báo sau khi chuyển -> Done b. Export – Xuất dữ liệu. Phần này giới thiệu kỹ thuật xuất dữ liệu từ một CSDL của SQL Server ra một hệ quản trị CSDL khác hoặc một CSDL khác của SQL Server. Tương tự như Import nhưng Export thực hiện Data Source là SQL Server, còn Destination là hệ quản trị CSDL khác hoặc CSDL khác của SQL Server (phần này bạn đọc tự xem xét). KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 57 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU c. Các mô hình phục hồi dữ liệu + Full Recovery model: Là mô hình phục hồi toàn bộ hoạt động giao dịch của dữ liệu (Insert, Update, Delete, hoạt động bởi lệnh bcp, bulk insert). Với mô hình này ta có thể phục hồi dữ liệu tại một thời điểm trong quá khứ đã được lưu trong transaction log file. + Bulk-Logged Recovery Model: Mô hình này được thực thi cho các thao tác bcp, bulk insert, create index, writetext, updatetext, các hoạt động này chỉ nhật ký sự kiện vào log để biết mà không sao lưu toàn bộ dữ liệu, chi tiết như trong full recover. Các sự kiện Insert, Update, Delete vẫn được nhật ký và khôi phục bình thường. + Simple Recovery Model: Với mô hình này bạn chỉ phục hồi lại thời điểm backup gần nhất mà không theo thời điểm khác trong quá khứ. Cách đặt mô hình khôi phục: - Chọn CSDL. - Nhấn nút phải chuột -> Properties -> Options -> Recovery KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 58 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Xét ví dụ sau: Giả sử ta có một CSDL được backup theo chiến lược như hình vẽ: Nhìn hình trên ta thấy CSDL được lập lịch Full Database Backup vào ngày chủ nhật, Differential Database Backup vào ngày thứ ba và thứ năm, còn Log Database Backup vào 5 ngày trong tuần, ngày thứ sáu có sự cố với CSDL data file bị hỏng, vấn đề đặt ra là phải phục hồi dữ liệu và CSDL hoạt động bình thường. Ta phải làm các bước sau: + Thực hiện Backup log file (giả sử log file không bị hỏng). + Khôi phục Full Database của ngày chủ nhật. + Phục hồi Differential Database của ngày thứ năm. + Khôi phục Transaction log backup ngày thứ năm. d. Sao lưu cơ sở dữ liệu Trước khi xem xét kỹ thuật sao lưu CSDL, ta thống nhất một số thuật ngữ bằng tiếng Anh như sau: + Backup: Là quá trình copy toàn bộ hoặc một phần database, transaction log, file, file group thành lập một backup set được chứa trong backup media (disk hoặc tape) bằng cách sử dụng một backup device (tape drive name hoặc physical filename). + Backup Device: Một file vật lý hoặc một drive tape. KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 59 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU + Backup file: Một file chứa Backup set. + Backup media: LÀ Disk hoặc tape. + Backup set: Một bộ backup một lần backup đơn chứa trên backup media. Các bước thực hiện backup như sau: - Chọn CSDL cần backup. - Nhấn phải chuột -> All Tasks -> Backup Database… - Nhập các tham số, lựa chọn kiểu. e. Phục hồi cơ sở dữ liệu Là chức năng thực hiện khôi phục dữ liệu đã sao lưu, tùy theo chiến lược backup mà bạn có thể phục hồi đến thời điểm nào, thu được bộ dữ liệu trong quá khứ như thế nào. Khôi phục dữ liệu được thực hiện theo thứ tự backup, thông tin này được lưu trữ trong msdb. KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 60 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Các bước thực hiện như sau: - Chọn mục Databases -> Nhấn nút phải chuột -> All Tasks -> Restore Database… - Nhập tham số, chọn mô hình khôi phục. 2.2.6 Ngôn ngữ SQL 2.2.6.1 Các phép toán định nghĩa CSDL o Lệnh tạo và xóa CSDL: - Tạo CSDL: Create Database <tên CSDL> - Xóa CSDL Drop Database <tên CSDL> - Ví dụ: Tạo CSDL QuanLyNhanSu Create Database QuanLyNhanSu KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 61 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU o Lệnh tạo bảng: CREATE TABLE o Để định nghĩa một bảng - Tên bảng - Các thuộc tính • Tên thuộc tính • Kiểu dữ liệu • Các ràng buộc toàn vẹn trên thuộc tính (RBTV) o Cú pháp CREATE TABLE <Tên_bảng> ( <Tên_cột> <Kiểu_dữ_liệu1>, <Tên_cột> <Kiểu_dữ_liệu2>, … ) o Kiểu dữ liệu Char(w): Kiểu dữ liệu ký tự có kích thước cố định. Varchar(w): Kiểu dữ liệu ký tự có thay đổi từ 0 đến giá trị max là 2000 Number: Kiểu dữ liệu số Int: Kiểu số nguyên Datetime: Kiểu dữ liệu ngày tháng Logical: Kiểu dữ liệu logic (True/Flase) … o Ví dụ: Tạo bảng Nhân Viên với các thuộc tính: Mã nhân viên, tên nhân viên, Ngày sinh, địa chỉ, giới tính, lương, mã người quản lý, phòng ban. KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 62 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU CREATE TABLE NHANVIEN ( MANV CHAR(9), TENNV VARCHAR(50), NS DATETIME, DCHI VARCHAR(50), GT CHAR(3), LUONG INT, MA_NQL CHAR(9), PHG INT ) o Lệnh sửa bảng (ALTER TABLE ): Được dùng để thay đổi cấu trúc bảng hoặc thay đổi RBTV. - Thêm cột ALTER TABLE <Tên_bảng> ADD COLUMN <Tên_cột> <Kiểu_dữ_liệu> [<RBTV>] Ví dụ: ALTER TABLE NHANVIEN ADD COLUMN NGHENGHIEP CHAR(20) - Xóa cột ALTER TABLE <Tên_bảng> DROP COLUMN <Tên_cột> Ví dụ: ALTER TABLE NHANVIEN DROP COLUMN NGHENGHIEP - Mở rộng cột ALTER TABLE <Tên_bảng> ALTER COLUMN <Tên_cột> <Kiểu_dữ_liệu_mới> KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 63 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Ví dụ: ALTER TABLE NHANVIEN ALTER COLUMN NGHENGHIEP CHAR(50) o Lệnh xóa bảng (DROP TABLE): Được dùng để xóa cấu trúc bảng (Tất cả dữ liệu của bảng cũng bị xóa) Cú pháp: DROP TABLE <Tên_bảng> Ví dụ: DROP TABLE NHANVIEN o Thêm một bộ (Insert Into) Câu lệnh INSERT INTO nhằm mục đích chèn một bản ghi vào một bảng theo yêu cầu của người dùng. Cú pháp: INSERT INTO tên_bảng(Danh_sách_tên_cột) VALUES (các_giá_trị)[câu_hỏi_con] Ví dụ: Lưu ý: Khi thêm các bộ vào tất cả các thuộc tính trong bảng, ta có thể bỏ qua việc liệt kê danh sách tên cột (xem ví dụ dưới). KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 64 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU o Xóa bản ghi ( Delete) Mệnh đề xóa bản ghi có thể được thực hiện cho một hoặc nhiều bản ghi thỏa mãn một điều kiện nào đó. Cú pháp: DELETE tên_bảng [FROM {tên_bảng| view}] [WHERE biểu_thức_điều_kiện] Ví dụ: o Sửa đổi dữ liệu ( Update) Mệnh đề Update dùng để cập nhật (sửa đổi) lại dữ liệu đã tồn tại trong bảng. Khi UPDATE được sử dụng, nó thường đi với mệnh về Where. Cú pháp: UPDATE tên_bảng SET tên_cột = biểu_thức [FROM tên_bảng] [WHERE biểu_thức_điều_kiện] KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 65 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Ví dụ: Lưu ý: Khi sử dụng lệnh Update mà không có mệnh đề Where đi kèm thì mệnh đề Update sẽ ảnh hưởng đến toàn bộ các thuộc tính nằm sau mệnh đề SET trên tất cả các bản ghi. Ví dụ : KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 66 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU 2.2.6.2 Truy vấn đơn giản a. Khối lệnh SELECT Cấu trúc đơn giản nhất trong SQL là khối SELECT, được miêu tả về cú pháp như là một khối select – from- where. Một cách tổng quát khối select gồm ba mệnh đề chính: - Select : Xác định nội dung các cột cần đưa ra kết quả - From : Xác định các bảng ( quan hệ) cần lấy thông tin ra - Where : Xác định điều kiện các bản ghi được chọn để đưa ra. Ngoài ra, để mở rộng khả năng của ngôn ngữ, khối select- from- where còn được bổ sung thêm các mệnh đề group by, order by, having, các hàm mẫu và một số phần mềm còn có thêm cả mệnh đề compute, for browse. Trong các phần sau sẽ trình bày chi tiết từng mệnh đề. Dạng tổng quát của khối select được biểu diễn như sau : SELECT [*| DISTINCT] danh_sách_chiếu FROM danh_sách_tên_bảng| tên_các_view [WHERE biểu_thức_điều_kiện] [GROUP BY danh_sách_tên_cột] [HAVING biểu_thức_điều_kiện] [ORDER BY danh_sách_côt [ASC|DESC]] Ví dụ: KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 67 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU b. Tìm kiếm không điều kiện Trước hết làm quen với các câu hỏi chỉ liên quan đến một bảng. Trong mệnh đề select có danh sách chiếu. Danh sách này xác định tên các cột cần có trong bảng kết quả. Nếu xuất hiện giá trị ’* ‘ (Select * from….) có nghĩa là chọn toàn bộ các cột của bảng. Ví dụ : Select * From Employees KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 68 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU * Lưu ý: Sau khi thực hiện câu lệnh SQL, để bảng đúng là một quan hệ (có nghĩa là không có bộ giá trị nào trùng nhau) thì trong mệnh đề select ta dùng từ khóa DISTINCT. Ví dụ: Cho bảng Nhanvien (MaNV, TenNV, Ngaysinh, Dchi, Luong, GT, MaPB) Hiển thị bảng lương của nhân viên trong công ty? SELECT LUONG SELECT DISTINCT LUONG FROM NHANVIEN FROM NHANVIEN Kết quả: LUONG 3.000.000 2.500.000 4.000.000 c. Tìm kiếm với điều kiện đơn giản Thông thường, việc tìm kiếm đoan giản chỉ cần thêm điều kiện vào sau từ khóa where. Trong SQL, các phép so sánh được sử dụng bao gồm >, < , >=, <=,<>. Các phép toán logic: AND, OR, và NOT Các từ khóa: BETWEEN … AND, IN,… Ví dụ : Tìm kiếm trong bảng Employees những người có lương (salary) lơn hơn 10000. KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 69 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU d. Tìm kiếm có xử lý xâu ký tự Xử lý xâu ký tự gần đúng còn được gọi là phép tính ‘thông minh’. Trong trường hợp người sử dụng không nhớ rõ tên người hoặc địa danh… thì việc tìm kiếm gần đúng này mang lại rất nhiều lợi ích. Để thực hiện việc tìm kiếm dần đúng xâu ký tự, SQL sử dụng toán tử LIKE. Cú pháp: Select …..From….Where …..LIKE ‘[ _ ][%]Xâu_ký_tự[%][ _ ]’ Khi sử dụng ký hiệu phần trăm (%) ví dụ như : ‘Alex%’ thì điều này có nghĩa là chúng ta đang thực hiện việc tìm kiếm với điều kiện xâu ký tự bao gồm {Alex[xâu ký tự bất kỳ]}. Lúc này điều kiện chỉ đúng khi xâu đang xét phải có chuỗi ký tự ‘Alex’ và KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 70 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU theo sau nó là bất kỳ ký tự nào. Tương tự như % , khi sử dụng ký hiệu dấu gạch dưới ( _ ) thì mỗi dấu gạch này thể hiện cho một ký tự. Ví dụ 1: Ví dụ 2: SELECT MANV, TENNV FROM NHANVIEN WHERE TenNV LIKE ‘Nguyen _ _ _ _’ Ví dụ 3: SELECT MANV, TENNV FROM NHANVIEN WHERE TenNV LIKE ‘Nguyen %’ e. Tìm kiếm nhờ sử dụng IN và BETWEEN Ngoài việc sử dụng các con số, xâu ký tự cụ thể thì SQL cung cấp một số toán tử giúp việc diễn giải điều kiện đơn giản và ngắn gọn hơn cho người dùng, ở đây sử dụng toán tử IN và BETWEEN. Toán tử In và Between có cú pháp như sau: Select…..From….Where …. IN (Tập hợp) Select…..From….Where …..BETWEEN number1 AND number2 KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 71 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Ví dụ 1: Cho bảng Nhanvien (MaNV, TenNV, Ngaysinh, GT, Luong, MaPB) Tìm những nhân viên nào có lương từ 2 triệu đến 3 triệu đồng? SELECT MANV, TENNV FROM NHANVIEN WHERE Luong> 2.000.000 AND Luong< 3.000.000 SELECT MANV, TENNV FROM NHANVIEN WHERE Luong BETWEEN 2.000.000 AND 3.000.000 Ví dụ 2: Tìm những nhân viên nào có lương một trong 3 mức sau: 2 triệu, 3 triệu, 4 triệu đồng. SELECT MANV, TENNV FROM NHANVIEN WHERE Luong= 2.000.000 OR Luong= 3.000.000 OR Luong=4.000.000 SELECT MANV, TENNV FROM NHANVIEN WHERE Luong IN ( 2.000.000 , 3.000.000, 4.000.000) Ví dụ 3: KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 72 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU f. Tìm kiếm có sắp xếp Vấn đề đặt ra khi chúng ta cần sắp xếp dữ liệu truy vấn theo một cách nào đó. SQL cung cấp mệnh đề ORDER BY giúp chúng ta thực hiên việc này. Từ khoá ORDER BY được sử dụng để sắp xếp kết quả trả về. Mệnh đề ORDER BY được dùng để sắp xếp các dòng. Cú pháp: Select …..From….Where…..ORDER BY (Danh_sách_cột) [ASC|DESC] Trong đó: - ASC: Sắp xếp tăng dần (Mặc định khi không có chỉ thị) - DESC: Sắp xếp giảm dần Ví dụ: Bảng Orders: Company OrderNumber Sega 3412 ABC Shop 5678 W3Schools 2312 W3Schools 6798 KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 73 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Để lấy danh sách các công ty theo thứ tự chữ cái (tăng dần): SELECT Company, OrderNumber FROM Orders ORDER BY Company Kết quả trả về: Company OrderNumber ABC Shop 5678 Sega 3412 W3Schools 6798 W3Schools 2312 Lấy danh sách các công ty theo thứ tự chữ cái (tăng dần) và hoá đơn đặt hàng theo thứ tự số tăng dần: SELECT Company, OrderNumber FROM Orders ORDER BY Company, OrderNumber Kết quả trả về: Company OrderNumber ABC Shop 5678 Sega 3412 W3Schools 2312 W3Schools 6798 KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 74 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Lấy danh sách các công ty theo thứ tự giảm dần: SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC Kết quả trả về: Company OrderNumber W3Schools 6798 W3Schools 2312 Sega 3412 g. Tìm kiếm có chứa phép tính tập hợp Trong khi truy vấn dữ liệu, việc truy vấn có thể thực hiện các phép tính trên tập hợp bao gồm cả việc tìm kiếm. SQL cung cấp toán tử MINUS nhằm phục vụ truy vấn, tìm kiếm có chưa các tập hợp. Toán tử MINUS có tác dụng gần giống như một toán tử trừ ‘-‘ hai tập hợp. Ví dụ: Bảng Jobs có trường Job_ID chứa tất cả các mã công việc (Job) của một công ty A. Bảng Job_history có trường Job_ID chứa các mã công việc mã nhân viên đó đã làm trong tháng. Để tìm ra mã công việc chưa được làm trong tháng ta sử dụng câu lệnh truy vấn SQL như sau: KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 75 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Ngoài ra, câu lệnh dưới đây cũng là tương đương 2.2.6.3 Truy vấn lồng nhau Trong phần này trình bày việc tìm kiếm với nhiều bảng qua việc sử dụng ánh xạ lồng nhau hoặc qua phép kết nối. Phép kết nối Trong phép kết nối, các cột tham gia kết nối phải có miền giá trị có thể so sánh được với nhau. Tên cột của các bảng khác nhau có thể được viết tường minh qua tên bảng hoặc bí danh. KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 76 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Cú pháp: Select …. From Table1, Table2 Where Table1.ColName = Table2.ColName Ví dụ 1: Cho cơ sở dữ liệu quản lý thông tin bán hàng của các đại lý gồm các quan hệ sau: S(S#, Sname, City, Status) P(P#, Pname, Color, Weight, Price) SP(S#, P#, Sdate, QTY) Tìm tên các đại lý đã cung cấp ít nhất một mặt hàng? Select S.SName From S, SP Where S.S# = SP.S# Ví dụ 2: KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 77 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Ánh xạ lồng Ngoài cách sử dụng phép nối ta có thể sử dụng ánh xạ lồng để thực hiện công việc tương tự. Phép lồng nhau có thể được lồng nhiều mức hoặc sử dụng ánh xạ lồng với sự dẫn trỏ giữa các khối tới các bảng khác nhau. Về mặt cú pháp cũng tương tự như khi sử dụng phép nối, tuy nhiên thay vì sử dụng nhiều bảng trong mỗi mệnh đề select- from- where thì ánh xạ chỉ dùng một bảng. Ví dụ 1: Cho cơ sở dữ liệu quản lý thông tin bán hàng của các đại lý gồm các quan hệ sau: S(S#, Sname, City, Status) P(P#, Pname, Color, Weight, Price) SP(S#, P#, Sdate, QTY) Tìm tên các đại lý đã cung cấp ít nhất một mặt hàng? Select SName From S Where S# IN (Select S# from SP) Ví dụ 2: Cho cơ sở dữ liệu gồm các bảng: Job (Job_id, Job_title, Min_Salary, Max_Salary) Employees (Employee_id, First_name, Last_name, email, phone_number, hire_date, Job_id, salary) KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 78 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU 2.2.6.4 Truy vấn sử dụng hàm tính toán và gom nhóm a. Tìm kiếm nhờ mệnh đề GROUP BY Khi truy vấn mẩu tin trên một hay nhiều bảng dữ liệu, thông thường có những bản ghi nào đó cùng giá trị. Mệnh đề GROUP BY…được thêm vào SQL bởi vì các hàm tập hợp (như SUM) trả về một tập hợp của các giá trị trong cột mỗi khi chúng được gọi, và nếu không có GROUP BY ta không thể nào tính được tổng của các giá trị theo từng nhóm riêng lẻ trong cột. Cú pháp của GROUP BY như sau: SELECT tên_cột, SUM (tên_cột) FROM tên_bảng GROUP BY tên_cột Ví dụ 1: Giả sử ta có bảng Sales như sau: Company Amount W3Schools 5500 IBM 4500 W3Schools 7100 KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 79 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Câu lệnh SQL sau: SELECT Company, SUM (Amount) FROM Sales sẽ trả về kết quả: Company SUM(Amount) W3Schools 17100 IBM 17100 W3Schools 17100 Kết quả trả về ở trên đôi khi không phải là cái mà ta mong đợi. Ta thêm mệnh đề GROUP BY vào trong câu lệnh SQL: SELECT Company, SUM (Amount) FROM Sales GROUP BY Company và kết quả trả về lần này sẽ là: Company SUM(Amount) W3Schools 12600 IBM 4500 Kết quả này đúng là cái mà ta mong muốn. Ví dụ 2: Cho cơ sở dữ liệu quản lý thông tin bán hàng của các đại lý gồm các quan hệ sau: S(S#, Sname, City, Status) P(P#, Pname, Color, Weight, Price) SP(S#, P#, Sdate, QTY) Tìm số lượng cung cấp lớn nhất của từng mặt hàng? Select P#, max (QTY) From SP Group by P# KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 80 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Bảng SP Kết quả: Khi sử dụng Group by ta thường sử dụng mệnh đề HAVING đi kèm. Having được thêm vào SQL vì mệnh đề WHERE không áp dụng được đối với các hàm tập hợp (như SUM). Nếu không có HAVING, ta không thể nào kiểm tra được điều kiện với các hàm tập hợp. Cú pháp của HAVING như sau: SELECT tên_cột, SUM (tên_cột) FROM tên_bảng GROUP BY tên_cột HAVING SUM (tên_cột) điều_kiện giá_trị Ta sử dụng lại bảng Sales ở trên. Câu lệnh SQL sau: SELECT Company, SUM (Amount) FROM Sales GROUP BY Company HAVING SUM (Amount) > 10000 sẽ trả về kết quả: KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 81 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Company SUM(Amount) W3Schools 12600 Chú ý: Mệnh đề GROUP BY Các thuộc tính trong mệnh đề GROUP BY phải được xuất hiện trong mệnh đề SELECT. Mệnh đề HAVING: Chỉ kiểm tra điều kiện trên nhóm, mệnh đề Having không lọc trên từng bản ghi. (Điều kiện trong mệnh đề Having tác động trên các bản ghi của một nhóm) Điều kiện trên nhóm (ở mệnh đề HAVING) được thực hiện sau khi gom nhóm. Điều kiện trong mệnh đề Where tác động trên toàn bộ các bản ghi của bảng b. Các hàm thư viện o Hàm Count() Hàm Count() trả về số lượng mẩu tin trong câu truy vấn trên bảng. Cú pháp: Select Count(tên_cột) From tên_bảng…. Ví dụ : KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 82 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Lưu ý: - Khi sử dụng Count(*) sẽ trả về số bản ghi của bảng - Cần phân biệt Cout( tên_cột) với Count(*) : Về cơ bản chúng giống nhau tuy nhiên hàm Count(*) đếm cả những bản ghi có giá trị NULL, Count(tên_cột) thì không. Ví dụ: Trong bảng Employees có 107 bản ghi, thuộc tính Commission_PCT có vị trí chứa giá trị NULL. Khi sử dụng hàm Count(*) và hàm Count(Commisson_pct) ta có : Để tránh đếm những giá trị trùng lặp ta có thể dùng thêm từ khóa DISTINCT. Ví dụ: o Hàm Sum() Hàm trả về tổng các giá trị của trường, cột trong câu truy vấn Ví dụ: KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 83 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU o Hàm Min, Max Hàm min, max trả về giá trị nhở nhất, giá trị lớn nhất của cột hay trường trong câu truy vấn. Cú pháp : Select Min [Max] (tên_cột) From tên_bảng [Where điều_kiện] Ví dụ: o Hàm tính trung bình cộng Trả về giá trị bình quân của cột hay trường trong câu truy vấn. Cú pháp : Select AVG (tên_cột) From tên_bảng [Where điều_kiện] Ví dụ: 2.2.6.5. Khung nhìn (View) Trong SQL, View là một bảng ảo được tạo ra dựa trên kết quả của một câu lệnh truy vấn SQL. Một view chứa các dòng và các cột, nó chỉ giống như một bảng, mỗi trường của view là một thuộc tính từ một hoặc nhiều bảng thực ( real table) trong cơ sở KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 84 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU dữ liệu. Với view có thể sử dụng các hàm truy vấn SQL, mệnh đề Where và các câu lệnh Join để xem và hiển thì dữ liệu giống như truy vấn từ một bảng đơn bình thường. Cú pháp: CREATE VIEW tên_view (danh_sách_tên_cột) AS mệnh_đề_select Khi tạo View cần chú ý một số điểm sau: • Tên view phải tuân theo quy tắc về định danh và phải duy nhất đối với người sử dụng. • Không thể ràng buộc các mặc định, các quy tắc cho view. • Trong câu lệnh Create view không nhất thiết phải chỉ định tên cột. Tên của các cột cũng như kiểu dữ liệu của chúng sẽ tương ứng với các cột trong danh sách chọn của câu lệnh Select. • Bạn phải xác định tên cột trong câu lệnh Create view trong các trường hợp sau: Mỗi cột của view được phát sinh từ một biểu thức số học, một hàm cài sẵn hay một hằng. Hay nhiều cột của view có trùng tên. Bạn muốn thay đổi tên cột trong view khác với tên cột của bảng cơ sở. Ví dụ 1: Cho database Quanlysinhvien Y/c: Tạo view Thongtin_sv (masv, hoten, tuoi, tenlop) Create view thongtin_sv (masv, hoten, tuoi, tenlop) As Select masv, hoten, datediff(year, ngaysinh, getdate()), tenlop From sinhvien, lop Where sinhvien.malop = lop.malop KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 85 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Ví dụ 2: 2.2.7 Giới thiệu về ngôn ngữ lập trình T-SQL trong SQL Server 2.2.7.1 Biến cục bộ (Local variable) - Được khai báo trong phần thân của một bó lệnh hoặc một thủ tục. - Phạm vi hoạt động của biến bắt đầu từ điểm mà nó được khai báo cho đến khi kết thúc một lô (batch) hoặc stored procedure hoặc Function mà nó được khai báo. - Tên của biến bắt đầu @ Khai báo: DECLARE @var_name var_type trong đó: @var_name: Tên của biến được đặt theo qui tắc định danh. var_type: Kiểu dữ liệu của biến. string_expr: Một biểu thức trả về giá trị chuỗi. Ví dụ: DECLARE @mMaSP Nchar(3), @mSL int KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 86 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU DECLARE @mNHD DATETIME Gán giá trị cho biến: Nếu biến vừa khai báo xong thì biến mặc nhiên được gán giá trị là NULL. Để gán biến ta dùng lệnh SET hoặc dùng câu lệnh SELECT SET @var_name = expression SELECT { @var_name = expression } [,...n ] Ví dụ: gán giá trị là ngày 25/03/2014 vào biến mNHD DECLARE @mNHD DATETIME SET @mNHD='2014-03-25' In giá trị của biến cục bộ: PRINT msg_str | @local_variable | string_expr Trong đó: msg_str: Hằng chuỗi; @local_variable: Biến cục bộ; Ví dụ : Tìm số lượng bán được lớn nhất của sản phẩm mã S1 DECLARE @mSL INT SELECT @mSL=MAX(SL) FROM CTHD WHERE MaSP='S1' PRINT @mSL Chú ý: Khi có kết hợp với chuỗi, phải đổi kiểu dữ liệu sang kiểu chuỗi bằng hàm CAST hay CONVERT CAST(Tên_biến as Kiểu_DL) KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 87 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU CONVERT(kiểu_DL,Tên_biến) Ví dụ : Tìm số lượng bán được lớn nhất của sản phẩm mã S1 declare @msl int select @msl=max(sl) from cthd where masp='s1' print 'max s1 = '+cast(@msl as char(10)) Hoặc declare @msl int select @msl=max(sl) from cthd where masp='s1' print 'max s1 = '+convert(char(10), @msl) 2.2.7.2 Biến hệ thống. Global variable trong SQL Server gọi là System Function: Từ SQL Server 7.0 biến Global được định nghĩa như là hàm hệ thống. Mỗi kết nối sẽ tạo ra một session, SQL Server tạo ra sẳn một số biến có sẳn rất tiện ích trong việc lập trình và quản trị hệ thống. Các biến này không có kiểu, tên bắt đầu @@. Các biến Ý nghĩa @@VERSION Phiên bản của SQL Server và hệ điều hành @@TRANCOUNT Xem coi có bao nhiêu transaction đang mơ @@ROWCOUNT Trả về số dòng bị ảnh hưởng đối với lệnh thực thi gần nhất @@IDENTITY Trả về số Identity phát sinh sau cùng KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 88 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU @@ERROR Trả về lỗi số (STT lỗi) của lệnh sau cùng mà SQL thực thi, là 0 có nghĩa là câu lệnh thực thi hoàn thành. @@FETCH_STATUS Trả về trạng thái của lệnh Fetch của biến con trỏ có thành công hay không (0: Thành công, -1: bị lỗi hoặc vượt quá phạm vi; -2: Thất bại) @@LANGUAGE Tên của ngôn ngữ đang được sử dụng @@MAX_CONNECTIONS Số kết nối tối đã có thể @@SERVERNAME Tên của máy chủ @@SERVICENAME Tên của dịch vụ SQL trên máy chủ @@TIMETICKS Số milliseconds trong một tick trên máy chủ 2.2.7.3 Các toán tử. Toán tử số học : Toán tử số học được phép sử dụng trong việc tính toán các phép tính : cộng, trừ, nhân, chia và chia lấy phần dư. Các biểu thức, giá trị tính toán phải có kiểu dữ liệu là số khi thực hiện các toán tử này. Thứ tự ưu tiên của các toán tử số học là : nhân, chia và chia lấy phần dư trước sau đó đến cộng và trừ. Tuy nhiên bạn nên chỉ định tường minh thứ tự thực hiện các toán tử số học bằng cách đưa vào các dấu ngoặc đơn trong một biểu thức tính toán. Ví dụ : Hai câu lệnh bên dưới sẽ trả về kết quả như nhau : SELECT 10 +15*70/100 Và SELECT 10 +((15*70)/100) KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 89 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Tuy nhiên với câu lệnh thứ hai, bạn thấy rõ ràng hơn bởi vì phép nhân bên trong cùng của dấu ngoặc đơn sẽ thực hiện trước sau đó là tới phép chia và cuối cùng mới là phép cộng. Toán tử số học được phép sử dụng cho các kiểu dữ liệu số như : int, bigint, smallint, tinyint, numeric, decimal, float, real, money và smallmoney. Tuy nhiên đối với phép tính chia lấy phần dư chỉ được sử dụng cho các kiểu dữ liệu số nguyên như : int, bigint, smallint và tinyint. Ví dụ : Thể hiện phép chia lấy phần dư của hai số nguyên 15 và 6. Bạn sử dụng câu lệnh như sau : SELECT 15%6 Kết quả trả về là 3. Toán tử nối chuỗi : Toán tử nối chuỗi được phép sử dụng trong việc kết nối các chuỗi rời rạc thành một chuỗi liên tục. Các biểu thức, giá trị khi nối chuỗi phải có kiểu dữ liệu là chuỗi hoặc KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 90 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU phải được chuyển đổi thành kiểu dữ liệu chuỗi trước khi thực hiện toán tử này. Ký hiệu của toán tử nối các chuỗi lại với nhau là dấu cộng (+). Ví dụ : Để nối hai chuỗi "Hello" và "The World !" lại thành chuỗi "Hello The World !", bạn sử dụng câu lệnh sau : SELECT “Hello”+ “ ” + “The World” Ví dụ : Cho biết ngày đặt hàng của đơn đặt hàng số D007 là bao nhiêu, bạn sử dụng câu lệnh sau : SELECT “Ngày đặt hàng D007 là: “ +CASE(NGAYDH AS CHAR(11)) FROM DONDH WHERE SODH = “D007” Trong ví dụ trên bắt buộc phải chuyển đổi giá trị dữ liệu của cột ngày đặt hàng trong bảng DONDH từ kiểu dữ liệu ngày sang kiểu dữ liệu chuỗi trước khi thực hiện toán tử nối chuỗi. Toán tử so sánh : Toán tử so sánh được phép sử dụng để thực hiện các phép so sánh như : bằng, khác, lớn hơn, nhỏ hơn, … cho các biểu thức cần được so sánh. Giá trị trả về của việc so sánh sẽ là đúng hoặc sai tùy thuộc vào biểu thức điều kiện mà bạn đưa ra để so sánh. Các toán tử so sánh có thể được sử dụng trên nhiều kiểu dữ liệu khác nhau như : kiểu số, kiểu chuỗi hoặc kiểu ngày. Thông thường các biểu thức so sánh sẽ được lồng vào các mệnh đề WHERE hoặc HAVING của các câu lệnh truy vấn. KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 91 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Ví dụ : Sử dụng toán tử so sánh bằng để lọc ra các vật tư hiện đang có trong bảng VATTU với đơn vị tính là "Bộ", bạn sử dụng câu lệnh sau : SELECT * FROM VATTU WHERE DVTINH = “Bộ” Trong ví dụ trên, toán tử so sánh bằng được thực hiện trên kiểu dữ liệu chuỗi và kết hợp trong mệnh đề WHERE. Ví dụ : Sử dụng toán tử so sánh lớn hơn để lọc ra các phiếu xuất hàng có tổng trị giá lớn hơn 3,000,000 vnđ. Bạn sử dụng câu lệnh sau : SELECT SOPX, SUM(SLXUAT*DONGIA) AS TONGTG FROM CTXUAT GROUP BY SOPX HAVING SUM(SLXUAT*DGXUAT)>3000000 KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 92 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Trong ví dụ trên, toán tử so sánh lớn hơn được thực hiện trên kiểu dữ liệu số và kết hợp trong mệnh đề HAVING. Toán tử luận lý : Toán tử luận lý được phép sử dụng để thực hiện việc kết hợp nhiều biểu thức so sánh đơn lẻ thành một biểu thức so sánh chung. Có ba toán tử luận lý rất quan trọng thường dùng : AND, OR và NOT. Khi sử dụng toán tử luận lý bạn nên thêm vào các dấu ngoặc đơn cần thiết để giúp cho người đọc dễ hiểu bởi vì nó làm cho câu lệnh rõ ràng hơn. Ví dụ : Hiển thị danh sách các vật tư trong bảng VATTU thỏa điều kiện như sau : - Đơn vị tính là "Bộ" và phần trăm lớn hơn 10. - Hoặc đơn vị tính là "Cái" và phần trăm lớn hơn 20. Bạn sử dụng câu lệnh như sau: SELECT * FROM VATTU WHERE (DVTINH=”Bộ” AND PHANTRAM>10) OR (DVTINH=”Cái” AND PHANTRAM>20) Trong ví dụ trên, cả hai toán tử AND và OR được sử dụng kết hợp trong các biểu thức so sánh. 2.2.8.Các lệnh cơ bản của T-SQL a. Các lệnh truy vấn SELECT [*| DISTINCT] danh_sách_chiếu KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 93 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU FROM danh_sách_tên_bảng| tên_các_view [WHERE biểu_thức_điều_kiện] [GROUP BY danh_sách_tên_cột] [HAVING biểu_thức_điều_kiện] [ORDER BY danh_sách_côt [ASC|DESC]] b. Các lệnh điều khiển Cũng giống như một số ngôn ngữ lập trình khác, T-SQL cung cấp một số cấu trúc điều khiển cơ bản cho phép thực thi một khối lệnh dựa trên kết quả của một phép so sánh. BEGIN … END BEGIN .. END được dùng để nhóm các lệnh đơn thành một khối lệnh. BEGIN .. END được sử dụng trong bất kỳ một cấu trúc điều khiển nào khi cần thực thi một khối lệnh hoặc nhiều hơn hai lệnh SQL. Cú pháp: BEGIN { sql_statement | statement_block } END PRINT Dùng để in thông tin ra màn hình kết quả của câu lệnh SQL. Cú pháp: PRINT 'any ASCII text' | @local_variable | @@FUNCTION | string_expr Ví dụ: PRINT 'Hello!' KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 94 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU PRINT N'Chào bạn' PRINT @@VERSION IF … ELSE Là một cấu trúc điều khiển cho phép thực thi một hoặc nhiều phát biểu tùy thuộc vào một điều kiện nào đó. Cú pháp: IF condition {statements} [ ELSE [Condition 1] {statements}] Trong đó: Statements: Một lệnh đơn hoặc một khối lệnh SQL Condition: là một biểu thức logic, có giá trị True hoặc False. Tùy thuộc vào condition, một trong hai khối lệnh sẽ được thực thi. Ví dụ: Kiểm tra xem trong bảng SP có thông tin bán hàng của S1 hay không. Nếu có thì in ra các dòng thông tin chi tiết. if (select count(*) from sp where s#='S1')>0 begin print N'Thống kê các lần bán hàng của S1' select * from sp where s#='S1' end else print N'Không tìm thấy thông tin bán hàng của S1' KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 95 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Biểu thức CASE. Biểu thức CASE là một biểu thức điều kiện được áp dụng bên trong một phát biểu khác. Case trả về các giá trị khác nhau tuỳ thuộc vào điều kiện hoặc một điều khiển nào đó. Dạng 1: CASE input_expression WHEN when_expression THEN result_expression [ ...n ] [ELSE else_result_expression] END Dạng 2: CASE WHEN Boolean_expression THEN result_expression [ ...n ] [ELSE else_result_expression] END Ví dụ 1: Cho 2 số a và b, so sánh 2 số đó, số nào lớn hơn số nào? DECLARE @a As int, @b As int, @ketqua as nvarchar(30) SET @a=3 SET @b=5 SET @ketqua = CASE WHEN @a<@b THEN N'A nhỏ hơn B' -- When chỉ dùng trong case KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 96 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU WHEN @a<@b THEN N'A lớn hơn B' ELSE N'A bằng B' END -- END của CASE PRINT @ketqua Ví dụ 2: So sánh giá trung bình các mặt hàng của HTC với các mặt hàng của HP. declare @gia_htc as int, @gia_hp as int, @ketqua as nvarchar(30) select @gia_htc=avg(price) from p where pname like 'HTC%' select @gia_hp = avg(price) from p where pname like 'HP%' set @ketqua = case when @gia_htc < @gia_hp then N'Giá của HTC nhỏ hơn HP' when @gia_htc > @gia_hp then N'Giá của HTC lớn hơn HP' when @gia_htc = @gia_hp then N'Giá của HTC bằng HP' end print @ketqua Ví dụ 3: Đưa ra mã mặt hàng, tổng số lượng đã bán và đánh giá trong đó nếu tổng số lượng đã bán lớn hơn 10 thì đánh giá là Bán tốt, nếu không thì bỏ trống. select p#, TổngSL=sum(qty), Ghichú = case when sum(qty)>10 then N'Bán tốt' KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 97 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU else N' ' end from sp group by p# Cấu trúc WHILE Là phát biểu điều khiển vòng lặp. Vòng lặp sẽ thực hiện cho đến khi biểu thức điều kiện (Boolean_expression) trong While mang giá trị False. Biểu thức điều kiện có thể là một câu SELECT. Cú pháp: WHILE Boolean_expression { sql_statement | statement_block } [ BREAK ] { sql_statement | statement_block } [ CONTINUE ] Trong đó: [ BREAK ] : Dùng để kết thúc vòng lặp khi gặp một trường hợp cụ thể nào đó. [ CONTINUE ] : Quay lại đầu vòng lặp. Ví dụ: Giảm giá liên tục các mặt hàng của HTC-VAIO xuống 5% cho đến khi giá trung bình của các mặt hàng này không vượt quá 16 triệu. while (select avg(price) from p where pname like 'HTC-VAIO%')>16000000 update p set price = 0.95*price where pname like 'HTC-VAIO%' KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 98 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU RETURN RETURN [ integer_expression ] Phát biểu Return dùng để thoát ra khỏi một đoạn lệnh hay thủ tục. Các phát biểu sau Return sẽ không được biên dịch. WAITFOR Là một chỉ thị cho SQL Server tạm dừng một thời gian trước khi xử lý tiếp các phát biểu sau đó. WAITFOR { DELAY 'time' | TIME 'time' } Trong đó: DEPLAY ‘Time’: Hệ thống tạm dừng trong khoảng thời gian ‘Time’. TIME ‘Time’: Hệ thống được tạm dừng đến thời gian ‘Time’ chỉ ra. ‘Time’: được viết theo dạng hh:mm:ss, tối đa là 24 giờ. Ví dụ: WAITFOR ’02:10’ 2.2.9 Thủ tục Tập hợp biên dịch các câu lệnh T-SQL được lưu trữ với một tên xác định Sử dụng để thực hiện các nhiệm vụ quản trị, hoặc áp dụng các luật giao dịch phức tạp Có hai loại thủ tục lưu trữ: KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 99 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Thủ tục lưu hệ thống đề cập đến phương pháp quản trị dữ liệu và cập nhật thông tin vào các bảng (thường bắt đầu bằng sp_). Thủ tục lưu trữ do người dùng định nghĩa. 2.2.9.1 Thủ tục hệ thống KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 100 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Ví dụ về hệ thống thủ tục lưu trữ hệ thống: 2.2.9.2 Thủ tục người dùng - Tạo thủ tục bằng lệnh Create proceduce CREATE PROC[EDURE] <tên thủ tục> (<DSách tham số>) [ WITH RECOMPILE|ENCRYPTION |RECOMPILE, ENCRYPTION] AS DECLARE <biến cục bộ> <Các câu lệnh của thủ tục> KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 101 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Ví dụ: Create Proc test (@MaSV nchar(3)) As Begin Select * From SinhVien Where MaSV=@MaSV End - Thực thi một Stored procedures EXEC[UTE] <tên_thủ_tục> [DS_các_đối_số>] Thứ tự của các đối số được truyền cho thủ tục có thể không cần phải tuân theo thứ tự của các tham số như khi định nghĩa thủ tục nếu tất cả các đối số được viết dưới dạng @<tên_tham_số> = <giá_trị> Ví dụ: - Exec test '0989999999' Hiệu chỉnh một stored procedures ALTER PROCEDURE tên_thủ_tục (DS_tham_số)] [WITH RECOMPILE|ENCRYPTION| RECOMPILE,ENCRYPTION] AS <Các_câu_lệnh_của_thủ_tục> Xóa một stored procedures DROP PROCEDURE <tên_thủ_tục > Ví dụ: Tạo thủ tục in ra tổng trị giá của một mã hóa đơn KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 102 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Create proc in_trigia(@msohd nchar(3)) As Declare @mtongtg decimal Begin Select @mtongtg=sum(SP.gia * CTHD.sl) From SP,CTHD Where SP.masp=CTHD.masp and CTHD.sohd = @msohd Print 'Tong tri gia cua hoa don ' + @msohd + 'la: '+ cast(@mtongtg as nvarchar(15)) End 2.2.10. Hàm Khái niệm: Cũng giống như thủ tục, hàm gồm một tập hợp các phát biểu T-SQL được lưu trữ dưới một tên và được gọi thực thi như một đơn vị độc lập. SQL Server hỗ trợ hai dạng hàm: built-in function và user-defined funtion. Buil-in functions là những hàm được định nghĩa sẵn trong T-SQL và không thể hiệu chỉnh. User-defined function (UDF) là những hàm do người dùng tự định nghĩa để đáp ứng một mục tiêu nào đó. Các hàm built-in được chia thành 3 nhóm KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 103 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Hàm Mô tả Rowset Function Trả lại một đối tượng có thể sử dụng như bảng SQL Aggregate Function Hàm thao tác trên một tập giá trị và trả về một giá trị đơn (hàm gộp) Ranking Function Trả lại một tập hợp các dòng được sắp xếp Scalar Function Trả lại một giá trị vô hướng. Hàm Scalar Function được sử dụng trong biểu thức SQL Các hàm user-defined cũng được chia thành 3 nhóm là Scalar-Value function là hàm trả về một giá trị vô hướng; Inline Table- Value function là hàm trả về một table dựa trên một câu lệnh SQL duy nhất và Multistatement Table - Value function là hàm trả về một table dựa trên nhiều câu lệnh SQL. 2.2.10.1. Các hàm hệ thống Nhóm hàm làm việc với dữ liệu kiểu số Hàm ABS ( m ) Đối số m = biểu thức số POWER ( m, n ) m = biểu thức số, n = số mũ ROUND (m, n) m = biểu thức số, n = số chữ số thập phân, ngầm định là 0 SQRT ( n ) n = biểu thức dương EXP ( n ) n = biểu thức số LN ( n ) n>0 LOG ( n2, n1 ) n1,n2>0 CEILING ( n ) n = biểu thức số FLOOR ( n ) n = biểu thức số SIGN ( n ) n = biểu thức số Giá trị trả về Giá trị tuyệt đối của m m mũ n làm tròn m với n chữ số thập phân căn bậc hai của n e raised to the power n logarit tự nhiên của n logarit cơ số n2 của n1 Số nguyên nhỏ nhất lớn hơn hoặc bằng n Số nguyên lớn nhất không vượt quá n -1 nếu n < 0, 0 nếu n = 0, bằng 1 nếu n > 0 KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 104 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Nhóm hàm làm việc với chuỗi ký tự Đối số Hàm LOWER ( s ) s = chuỗi Giá trị trả về Tất cả các ký tự chuyển thành chữ thường UPPER ( s ) s = chuỗi Viết hoa chuỗi CONCAT ( s1, s2 ) s1, s2 = chuỗi Nối chuỗi s2 vào chuỗi s1 LTRIM ( s ) s = chuỗi Trả lại chuỗi s sau khi xóa các dấu cách thừa ở đầu chuỗi RTRIM (s) s = chuỗi Trả lại chuỗi s sau khi xóa các dấu cách thừa ở cuối chuỗi s = chuỗi Trích từ s ra một chuỗi con n=số ký tự gồm n ký tự đầu chuỗi s s = chuỗi Trích từ s ra một chuỗi con n=số ký tự gồm n ký tự cuối chuỗi s REPLACE ( s, s = chuỗi Thay tất cả các chuỗi search_s , replace_s] ) search_s = chuỗi tìm kiếm search_s tìm được trong s replace_s = chuỗi thay thế bằng chuỗi replace_s s1,s2=chuỗi Xóa n ký tự khỏi chuỗi s1, bắt m=vị trí bắt đầu đầu từ vị trí m và chèn chuỗi n=số ký tự s2 vào đó s = chuỗi Trả về một chuỗi con của s có m = vị trí bắt đầu độ dài n ký tự, bắt đầu từ ký n = số ký tự tự ở vị trí m LEN ( s ) s = chuỗi Trả về số ký tự của chuỗi s REPLICATE(s,n) s=chuỗi, n: biểu thức Lặp lại chuỗi s n lần LEFT(s,n) RIGHT(s,n) STUFF ( s1, m, n, s2 ) SUBSTRING (s,m,n) nguyên REVERSE(s) s = chuỗi Đảo ngược chuỗi s KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 105 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Nhóm hàm làm việc với kiểu dữ liệu ngày tháng, thời gian Đối số Hàm Giá trị trả về Ngày giờ hiện tại của hệ thống GETDATE() d= biểu thức ngày DAY(d) Trả về một giá trị từ 1-31 tương ứng với ngày của d d= biểu thức ngày MONTH(d) Trả về một giá trị từ 1-12 tương ứng với tháng của d d= biểu thức ngày YEAR(d) Trả về một số có bốn chữ số tương ứng với năm của d DATEPART(dp, d) d=biểu thức ngày Hàm trả về một thành phần dp= tham số xác định phần trong biểu thức ngày trả về trong biểu thức ngày DATEADD(dp,n,d) d=biểu thức ngày, n= biểu Trả về một thời điểm mới bằng thức nguyên, dp= tham số cách cộng thêm n vào phần xác định phần trả về trong được chỉ định (dp) trong biểu biểu thức ngày thức ngày DATEDIFF(dp,d1, d1,d2=biểu thức ngày Trả về khoảng cách giữa hai d2) dp= tham số xác định phần thời điểm d1 và d2 (tính theo trả về trong biểu thức ngày tham số dp) Trong đó tham số xác định phần trả về của biểu thức ngày được biểu diễn như sau: Viết tắt Giá trị Viết tắt Giá trị Hour hh 0-23 Week wk 1-53 Minute Mi 0-59 Weekday dw 1-7 Second Ss 0-59 Month mm 1-12 Millisecond Ms 0-999 Quarter qq 1-4 Day of year Dy 1-366 Year yy 1753-9999 Day Dd 1-31 dp dp KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 106 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU 2.2.10.2. Hàm do người dùng định nghĩa Hàm trả về 1 giá trị đơn ( Scalar-Value Function) - Cú pháp: Create Function <Tên hàm>(<Danh sách tham số>) Returns <Kiểu dữ liệu> As Begin Return <Kiểu dữ liệu> End - Ví dụ: Create Function test(@MaSV nchar(20)) Returns int As Begin Declare @soSV int Select @soSV=Count(*) from SinhVien Where MaSV=@MaSV Return @soSV End Hàm trả về 1 bảng đơn giản dựa trên câu lệnh Select (Inline Table Value Function): - Cú pháp: Create Function <Tên hàm> (<Danh sách tham số>) Returns table as return (<Câu lệnh select>) - Ví dụ: KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 107 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Create Function test3(@MaSV nchar(20)) Returns Table As Return Select * from SinhVien Where MaSV=@MaSV Hàm trả về 1 bảng phức tạp (Multistatement Table Value Function) - Cú pháp: Create Function <Tên hàm>(<Danh sách tham số>) Returns @<Tên bảng trả về> Table (<Định nghĩa bảng>) As Begin Return End - Ví dụ: Create Function test3(@MaSV nchar(20)) Returns @table table(id int, password nvarchar(20)) As Begin Insert into @table select id from SinhVien Where MaSV=@MaSV Return End -LỜI GỌI HÀM: 1. PRINT dbo.<tên hàm> (danh sách tham số) 2. select * from dbo.<tên hàm> (danh sách tham số) KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 108 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU BÀI TẬP CHƯƠNG II CÂU HỎI TRẮC NGHIỆM Câu 1: SQL là tên viết tắt của: a. Structured Query Language b. Structure Query Language c. Stored Queation Language d. Standard Question Layer Câu 2: Phát biểu nào sau đây đúng với Phép chọn? a. Phép chọn dùng để trích rút các bộ giá trị thỏa mãn điều kiện chọn từ một quan hệ. b. Phép chọn dùng để trích rút các cột ứng với các thuộc tính nào đó của một quan hệ. c. Phép chọn là phép kết nối bằng tại thuộc tính cùng tên của 2 quan hệ. d. Phép chọn là phép nối các bộ giá trị của hai quan hệ đã cho. Câu 3: Phát biểu nào sau đây đúng với Phép chiếu? a. Phép chiếu dùng để trích rút các bộ giá trị thỏa mãn điều kiện chọn từ một quan hệ. b. Phép chiếu dùng để trích rút các cột ứng với các thuộc tính nào đó của một quan hệ. c. Phép chiếu là phép kết nối bằng tại thuộc tính cùng tên của 2 quan hệ. d. Phép chiếu là phép nối các bộ giá trị của hai quan hệ đã cho. Câu 4: Phép chiếu còn được gọi là phép gì? a. Phép tìm kiếm b. Phép tìm kiếm theo chiều ngang c. Phép tìm kiếm theo chiều dọc d. Tất cả các đáp án trên KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 109 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Câu 5: Phép chọn còn được gọi là phép gì? a. Phép tìm kiếm b. Phép tìm kiếm theo chiều ngang c. Phép tìm kiếm theo chiều dọc d. Tất cả các đáp án trên Câu 6: Điều kiện trong mệnh đề Having tác động trên…? a. Toàn bộ các bản ghi của bảng b. Các bản ghi của một nhóm c. Một bản ghi d. Cả đáp án a và b Câu 7: Các thuộc tính trong mệnh đề Group by phải được xuất hiện trong mệnh đề… ? a. Select b. From c. Where d. Having Câu 8: Chọn cú pháp đúng cho lệnh tạo View trong SQL? a. Create view [(DS cột)] AS mệnh_đề Select b. Create view Tên_View [(DS cột)] mệnh_đề Select c. Create view Tên_View [(DS cột)] AS mệnh_đề Select d. Create view Tên_View [(DS cột)] AS mệnh_đề Where KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 110 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Câu 9: Chọn cú pháp đúng cho lệnh INSERT trong SQL? a. INSERT INTO (<danh sách các thuộc tính>) VALUES (<danh sách các giá trị>) b. INSERT INTO <tên bảng>(<danh sách các thuộc tính>) c. INSERT INTO <tên bảng>(<danh sách các thuộc tính>) VALUE (<danh sách các giá trị>) d. INSERT INTO <tên bảng>(<danh sách các thuộc tính>) VALUES (<danh sách các giá trị>) Câu 10: Chọn cú pháp đúng cho lệnh DELETE trong SQL? a. DELETE FROM [WHERE <điều kiện>] b. DELETE FROM <tên bảng> [WHERE <điều kiện>] c. DELETE <tên bảng> [WHERE <điều kiện>] d. Cả đáp án a và c Câu 11: Khi thực hiện lệnh DELETE trong SQL thì số lượng dòng bị xóa phụ thuộc vào điều kiện ở mệnh đề nào? a. DELETE b. FROM c. WHERE d. Cả đáp án a và c Câu 12: Khi thực hiện lệnh DELETE trong SQL nếu không chỉ định điều kiện ở mệnh đề WHERE thì… ? a. Tất cả các bản ghi trong bảng sẽ bị xóa b. Một số bản ghi trong bảng sẽ bị xóa c. Một bản ghi trong bảng sẽ bị xóa d. Không bản ghi nào trong bảng bị xóa KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 111 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Câu 13: Chọn cú pháp đúng cho lệnh UPDATE trong SQL? a. UPDATE SET <tên thuộc tính>=<giá trị mới>, <tên thuộc tính>=<giá trị mới>, … [WHERE <điều kiện>] b. UPDATE <tên bảng> <tên thuộc tính>=<giá trị mới>, <tên thuộc tính>=<giá trị mới>, … [WHERE <điều kiện>] c. UPDATE <tên bảng> [WHERE <điều kiện>] d. UPDATE <tên bảng> SET <tên thuộc tính>=<giá trị mới>, <tên thuộc tính>=<giá trị mới>, … [WHERE <điều kiện>] Câu 14: Cho CSDL sau: NCC (MaNCC, TenNCC, Tinhtrang, NoiSX) MH (MaMH, TenMH, Mau, Khoiluong, NoiSx) NM (MaNCC, MaMH, Soluong) Cho danh sách các mặt hàng được sản xuất tại Nam Định? A. δNoiSX = ‘Nam Định’(MH) B. δNoiSX = ‘NĐ’(MH) C. δNơi sản xuất = ‘Nam Định’(MH) D. δ (MH) NoiSX = ‘Nam Định’ KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 112 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Câu 15: Cho CSDL sau: NCC (MaNCC, TenNCC, Tinhtrang, NoiSX) MH (MaMH, TenMH, Mau, Khoiluong, NoiSx) NM (MaNCC, MaMH, Soluong) Cho biết tên các NCC đã cung cấp ít nhất 1 mặt hàng? A.ΠTenNCC (NCC * NM) B. ΠTenNCC (NCC ^ NM) C. ΠTenNCC (NCC) D. ΠTenNCC (NCC * MH) Câu 16: Cho CSDL sau: NCC (MaNCC, TenNCC, Tinhtrang, NoiSX) MH (MaMH, TenMH, Mau, Khoiluong, NoiSx) NM (MaNCC, MaMH, Soluong) Cho biết tổng số các NCC đã bán được hàng? A. Count(NM, MaNCC) B. Count(MaNCC) C. Sum(NM, MaNCC) D. Count(MH, MaNCC) Câu 17: Cho CSDL sau: NCC (MaNCC, TenNCC, Tinhtrang, NoiSX) MH (MaMH, TenMH, Mau, Khoiluong, NoiSx) NM (MaNCC, MaMH, Soluong) Tìm số lượng cung cấp lớn nhất của mặt hàng P1? A. Max(δMaMH = ‘P1’(NM), Soluong) B. Max(δMaMH = ‘P1’(NM)) C. Max(δMaMH = ‘P1’(Soluong)) D. Max(δMaMH = ‘P1’(MH), Soluong) KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 113 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Câu 18: Cho CSDL sau: NCC (MaNCC, TenNCC, Tinhtrang, NoiSX) MH (MaMH, TenMH, Mau, Khoiluong, NoiSx) NM (MaNCC, MaMH, Soluong) Cho thông tin về các mặt hàng màu đỏ được sản xuất ở Hà Nội? A. δ(Mau = ‘Đỏ’)^(NoiSX = ‘HN’)(MH) B. δ(Màu = ‘Đỏ’)^(NoiSX = ‘HN’)(MH) C. δ(Màu = ‘Đỏ’)^(Nơi sản xuất = ‘HN’)(MH) D. δ(Mau = ‘Đỏ’)(NoiSX = ‘HN’)(MH) Câu 19: Cho CSDL sau: NCC (MaNCC, TenNCC, Tinhtrang, NoiSX) MH (MaMH, TenMH, Mau, Khoiluong, NoiSx) NM (MaNCC, MaMH, Soluong) Cho biết tên các mặt hàng đã được bán với số lượng lớn hơn 10? A. ΠTenMH(δsoluong > 10(MH*NM)) B. ΠTenMH(δsoluong > 10(MH^NM)) C. ΠTenMH(δsoluong > 10(NM)) D. ΠTenMH(δsoluong > 10(MH)) Câu 20: Cho CSDL sau: NCC (MaNCC, TenNCC, Tinhtrang, NoiSX) MH (MaMH, TenMH, Mau, Khoiluong, NoiSx) NM (MaNCC, MaMH, Soluong) Cho danh sách các nhà cung cấp tại TP Hồ Chí Minh? A. δNoisx = ‘TPHCM’(NCC) B. δNơi sản xuất = ‘TPHCM’(NCC) C. δNoisx = TPHCM(NCC) D. δNoisx = ‘TPHCM’(MH) KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 114 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Câu 21: Cho cơ sở dữ liệu sau:NCC(MaNCC, TenNCC,Tinhtrang, NoiSX); MH(MaMH, TenMH, Mau, Khoiluong, NoiSX); NM(MaNCC, MaMH, Soluong). Đưa ra mã những nhà cung cấp đã cung cấp mặt hàng có mã SM02 với số lượng >2? A. Select MaNCC from NM where MaMH=’SM02’ and Soluong>2 B. Select * from NM where MaMH=’SM02’ and Soluong>2 C. Select MaNCC from MH where MaMH=’SM02’ and Soluong>2 D. Select MaMH from NM where MaMH=02 and Soluong>2 Câu 22: Cho cơ sở dữ liệu sau:NCC(MaNCC, TenNCC,Tinhtrang, NoiSX); MH(MaMH, TenMH, Mau, Khoiluong, NoiSX); NM(MaNCC, MaMH, Soluong). Đưa ra tên các nhà cung cấp đã cung cấp mặt hàng có mã SM02? A. Select TenNCC from NCC, NM Where ( NCC.MaNCC= NM.NCC) B. Select NCC.TenNCC from NCC, NM Where ( NCC.MaNCC= NM.MaNCC) and (NM.MaMH=’SM02’) C. Select TenNCC from NCC, NM Where ( NCC.MaNCC= MH.MaNCC) D. Select TenNCC from NCC, MH Where ( NCC.MaNCC= MH.MaNCC) and (MH.MaMH=’SM02’) Câu 23: Cho cơ sở dữ liệu sau:NCC(MaNCC, TenNCC,Tinhtrang, NoiSX); MH(MaMH, TenMH, Mau, Khoiluong, NoiSX); NM(MaNCC, MaMH, Soluong). Đưa ra tên các mặt hàng bắt đầu bằng chữ “S” sản xuất tại Hà Nội? A. Select * from MH B. Select * from MH where TenMH=’S C. Select TenMH from MH where TenMH like ‘S%’ and NoiSX=’Hà Nội’ D. Select TenMH from MH where TenMH like ‘S_’ and NoiSX = ‘Hà Nội’ Câu 24: Cho cơ sở dữ liệu sau:NCC(MaNCC, TenNCC,Tinhtrang, NoiSX); MH(MaMH, TenMH, Mau, Khoiluong, NoiSX); NM(MaNCC, MaMH, Soluong). Cho biết tổng số các nhà cung cấp đã cung cấp mặt hàng SM02? A. Select count(*) from NM where MaMH=’MS 02’ KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 115 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU B. Select count(*) from NM where MaMH=’SM02’ C. Select count(*) from NM where MaNCC like ‘SM02’ D. Select Sum(MaNCC) from NM where MaMH = ‘SM02’ Câu 25: Cho cơ sở dữ liệu sau:NCC(MaNCC, TenNCC,Tinhtrang, NoiSX); MH(MaMH, TenMH, Mau, Khoiluong, NoiSX); NM(MaNCC, MaMH, Soluong). Đưa ra mã những nhà cung cấp đã cung cấp mặt hàng có mã SM02 và sắp xếp theo thứ tự giảm dần của mã NCC? A. Select MaNCC from NCC where MaMH=’SM02%’ B. Select MaNCC from NM where MaMH= ‘SM02’ order by MaNCC C. Select MaNCC from NCC where MaMH=’SM02_’ D. Select MaNCC from NM Where MaMH=’SM02’ order by MaNCC DESC BÀI TẬP - THỰC HÀNH BÀI TẬP 1: Cho cơ sở dữ liệu quản lý thông tin bán hàng của các đại lý gồm các quan hệ sau: S(S#, Sname, City, Status) - quan hệ cho biết thông tin về các đại lý gồm mã đại lý, tên đại lý, địa chỉ đại lý, tình trạng vốn của đại lý (đvt: 1.000.000 VND). P(P#, Pname, Color, Weight, Price) - quan hệ cho biết thông tin về các mặt hàng bao gồm mã mặt hàng, tên mặt hàng, màu sắc, trọng lượng, đơn giá. SP(S#, P#, Sdate, QTY) - quan hệ cho biết thông tin về các lần bán hàng của đại lý bao gồm mã đại lý bán hàng, mã mặt hàng được bán, ngày bán, số lượng. Câu 1: Hãy tạo các bảng dữ liệu trên Dùng ĐSQH và SQL thực hiện các yêu cầu ở câu 2; Dùng SQL thực hiện các yêu cầu ở câu 3,4,5,6,7: Câu 2 - Hiển thị thông tin về các đại lý KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 116 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU - Hiển thị thông tin về các mặt hàng - Đưa ra mã các đại lý đã bán ít nhất một mặt hàng - Đưa ra mã các mặt hàng đã được bán ít nhất một lần Câu 3: - Xem thông tin các đại lý ở Nam Định - Xem thông tin các đại lý có số vốn trên 5 tỷ - Xem thông tin về các lần bán mặt hàng mã P1 - Xem thông tin về các lần bán hàng của đại lý mã S1 - Xem thông tin về các lần bán hàng của S1 trong ngày hôm nay - Xem thông tin bán hàng của mặt hàng P1 trong quý 4 năm 2011 - Tìm tên và địa chỉ của các đại lý có mã gồm 3 ký tự và bắt đầu bằng S1 Câu 4: - Cho biết số lần bán và tổng số lượng bán của mặt hàng mã P1 - Tìm số lượng bán lớn nhất của mặt hàng mã P2 - Cho biết có bao nhiêu đại lý đã bán được ít nhất một mặt hàng - Cho biết có bao nhiêu mặt hàng đã được bán ít nhất một lần Câu 5: - Cho biết mã các đại lý đã bán ít nhất 2 mặt hàng - Cho biết mã các mặt hàng đã được bán ít nhất bởi hai đại lý - Đưa ra tên đại lý và số các mặt hàng đại lý này đã bán được - Đưa ra tên từng mặt hàng và tổng số lượng bán của mặt hàng này - Thống kê số lần bán hàng theo từng ngày - Tìm mã các đại lý đã bán mặt hàng P1 và đưa ra theo thứ tự tăng dần Câu 6: - Đưa ra màn hình thông tin chi tiết về các lần bán hàng bao gồm mã đại lý bán hàng, mã mặt hàng được bán, tên mặt hàng, đơn giá, số lượng, thành tiền (với thành tiền bằng đơn giá nhân số lượng) KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 117 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU - Tìm tên những mặt hàng đã được bán ít nhất một lần - Tìm tên những đại lý đã bán hàng ít nhất một lần - Đưa ra thông tin về mặt hàng có giá lớn nhất - Đưa ra thông tin về đại lý có số vốn lớn nhất - Tìm thông tin về những đại lý bán mặt hàng P1 và không bán mặt hàng P2 - Tìm thông tin về những đại lý đã bán cả hai mặt hàng P1 và P2 - Tìm thông tin về những lần bán mặt hàng có màu đỏ Câu 7: - Giảm giá 1% cho những mặt hàng có đơn giá trên 5 triệu - Xóa thông tin bán hàng của mặt hàng P1 - Tạo View có tên CT chứa thông tin bán hàng chi tiết gồm mã đại lý, tên đại lý, ngày bán, mã mặt hàng, tên mặt hàng, đơn giá, số lượng, thành tiền - Thống kê số tiền bán hàng theo từng ngày - Thống kê số tiền bán hàng của từng đại lý - Tìm mã đại lý có số tiền bán hàng lớn nhất BÀI TẬP 2: Cho cơ sở dữ liệu gồm các bảng sau: SV (MSV, HOTEN, GT, NS, QUE) MH (MAMON, TENMON, DVHT) HT (MSV, MAMON, DIEM) Trong đó: MSV: Mã sinh viên HOTEN: Tên sinh viên GT: Giới tính NS: Ngày sinh QUE: Quê quán MAMON: Mã số môn học DIEM: Điểm thi DVHT: Đơn vị học trình TENMON: Tên môn học Câu 1: Tạo các bảng trên Câu 2: Dùng ngôn ngữ SQL biểu diễn các câu hỏi sau: 1) Cho biết mã số, họ tên và ngày sinh của những sinh viên lớp K9A KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 118 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU 2) Cho biết danh sách gồm mã số, tên môn và điểm thi tất cả các môn của sinh viên mã số ‘BK10000’. Sắp xếp theo chiều tăng của mã môn. 3) Cho biết mã số, tên môn và điểm thi ở những môn mà sinh viên ‘BK10000’ phải thi lại (DIEM<5) 4) Cho biết mã số và họ tên của những sinh viên đã thi ít nhất là một trong 3 môn Cơ sở dữ liệu, Cấu trúc dữ liệu, Mạng máy tính. 5) Cho biết số lượng sinh viên nữ của lớp K9A 6) Cho biết số lượng sinh viên phải thi lại môn Cơ sở dữ liệu 7) Cho biết tổng số đơn vị học trình của những môn mà sinh viên ‘BK1000’ phải thi lại 8) Cho biết điểm cao nhất môn m1 mà các sinh viên đạt được 9) Cho biết mã số, tên và lớp của sinh viên đạt điểm cao nhất môn Cơ sở dữ liệu 10)Đối với mỗi môn, cho biết tên môn và số sinh viên phải thi lại môn đó 11) Đối với mỗi sinh viên, cho biết tổng số đơn vị học trình của những môn mà sinh viên này phải thi lại 12)Hãy tổng kết số môn phải thi lại, tổng số đơn vị học trình của những môn phải thi lại của mỗi sinh viên. Cần đưa ra kết quả là danh sách sinh viên có tổng số đơn vị học trình của những môn thi lại lớn hơn 10. BÀI TẬP 3: Câu 1: - Tạo cơ sở dữ liệu có tên QL_Diem với các bảng có tên và cấu trúc như sau: (các khóa chính được in đậm và gạch chân) SinhVien (MaSV int, TenSV nvarchar(50), NamSinh smallint, GioiTinh nvarchar (5)) DiemThi (MaSV int ràng buộc khóa ngoại tham chiếu đến MaSV trong bảng SinhVien, TenMT nvarchar (50), SoTC int, NgayThi datetime, Diem decimal ràng buộc check điều kiện điểm thi lớn hơn 0 và nhỏ hơn 10) KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 119 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU - Xây dựng thủ tục có tên BangDiem với tham số truyền vào là tên môn thi (@mt). Thủ tục hiển thị bảng điểm chi tiết của môn đó bao gồm mã sinh viên, tên sinh viên, năm sinh, giới tính, điểm thi. (Sử dụng CSDL QL_Diem) Câu 2: - Tạo cơ sở dữ liệu có tên QL_NV với các bảng có tên và cấu trúc như sau: (các khóa chính được in đậm và gạch chân) NhanVien (MaNV int, TenNV nvarchar(50), NamSinh smallint, GioiTinh nvarchar (5)) KetQua (MaNV int ràng buộc khóa ngoại tham chiếu đến MaNV trong bảng NhanVien, TenSP nvarchar (50), DonGia decimal, SoLuong int, ThanhTien decimal) - Xây dựng thủ tục có tên ThongKeSP với tham số truyền vào là tên sản phẩm (@sp). Thủ tục hiển thị kết quả làm việc của các nhân viên đối với sản phẩm đó bao gồm mã nhân viên, tên nhân viên, số lượng, thành tiền và hiển thị dòng thống kê tổng số lượng đã đạt được của sản phẩm đó. (Sử dụng CSDL QL_NV) Câu 3: - Tạo cơ sở dữ liệu có tên KQ_ThiNN quản lý thông tin về kỳ thi cấp chứng chỉ ngoại ngữ với các bảng có tên và cấu trúc như sau: (các khóa chính được in đậm và gạch chân) DanhSach (MaSV int, TenSV nvarchar(50), NamSinh smallint, GioiTinh nvarchar (5), Diemthi decimal , DanhGia nvarchar (20)) KQ_Thi (MaSV int ràng buộc khóa ngoại tham chiếu đến MaSV trong bảng DanhSach, NgayThi datetime, Diem decimal ràng buộc check điều kiện điểm thi lớn hơn 0 và nhỏ hơn 10) KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 120 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU - Xây dựng thủ tục có tên BangDiemNN với tham số truyền vào là ngày thi (@nt) . Thủ tục hiển thị bảng điểm chi tiết của các thí sinh tham dự kỳ thi trong ngày đó gồm các thông tin về mã sinh viên, tên sinh viên, ngày thi, điểm và dòng thống kê số lượng sinh viên tham dự kỳ thi. (Sử dụng CSDL KQ_ThiNN) Câu 4: - Tạo cơ sở dữ liệu có tên QL_BH với các bảng có tên và cấu trúc như sau: (các khóa chính được in đậm và gạch chân) SanPham (MaSP int, TenSP nvarchar(50), NhaCC nvarchar(30), DonGia decimal) BanHang (SoHD int, NgayBan datetime, MaSP int ràng buộc khóa ngoại tham chiếu đến MaSP trong bảng SanPham, NguoiBan nvarchar(50), SoLuong int, ThanhTien decimal) - Xây dựng thủ tục có tên ThongKeBHvới tham số truyền vào là ngày bán hàng(@nb) . Thủ tục hiển thị kết quả bán hàng trong ngày đó. Thông tin đưa ra gồm các cột số hóa đơn, tên người bán, mã sản phẩm, tên sản phẩm, đơn giá, số lượng, thành tiền và dòng thống kê tổng số tiền đã bán được trong ngày đó. (Sử dụng CSDL QL_BH) KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 121 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU CHƯƠNG 3 LÝ THUYẾT THIẾT KẾ CƠ SỞ DỮ LIỆU Mục tiêu: Chương này sẽ trình bày những khái niệm cơ bản nhất về lý thuyết cơ sở dữ liệu quan hệ do E.F Codd đề xuất, đó là các khái niệm về quan hệ, về khóa của lược đồ quan hệ. Những khái niệm này có vai trò quan trọng trong việc thiết kế và cài đặt các hệ cơ sở dữ liệu quan hệ và các hệ quản trị cơ sở dữ liệu. Nội dung của chương bao gồm các phần: Phụ thuộc hàm Bao đóng Phủ tối thiểu Khóa của lược đồ quan hệ Phép tách – kết nối Các dạng chuẩn của lược đồ quan hệ Các phương pháp chuẩn hóa lược đồ quan hệ 3.1. Phụ thuộc hàm 3.1.1 Định nghĩa phụ thuộc hàm Cho một quan hệ R xác định trên tập thuộc tính U, kí hiệu là R(U). X, Y là các tập con của U, ta nói rằng X xác định Y hay Y phụ thuộc hàm vào X, kí hiệu X Y nếu trên quan hệ R ta có mọi bộ giá trị t1, t2 bất kỳ mà giá trị của tập thuộc tính X trên bộ t1 (kí hiệu t1[X]) bằng giá trị của tập thuộc tính X trên bộ t2 (kí hiệu là t2[X]) thì t1[Y]) = t2[Y]). Phụ thuộc hàm ký hiệu là FD. Cần chú ý rằng chỉ xét các phụ thuộc hàm thỏa mãn cho mọi quan hệ trên lược đồ tương ứng của nó. Không thể xem xét một phụ thuộc hàm thỏa mãn một quan hệ r đặc biệt ( ví dụ quan hệ rỗng) của lược đồ R rồi sau đó qui nạp rằng phụ thuộc hàm đó là thỏa trên R. KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 122 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU S (S# STATUS SP (S# P# CITY) P (P# PNAME COLOR WEIGHT CITY) QTY) Trong quan hệ S của hàng cung ứng, mỗi một trong số các thuộc tính SNAME, STATUS, CITY đều phụ thuộc hàm vào thuộc tính S#. Mỗi giá trị S# tồn tại vừa đúng một giá trị tương ứng đối với từng thuộc tính SNAME, STATUS, CITY. Khi đó có thể viết: S# → SNAME, S# → STATUS và S# → CITY. 3.1.2 Phụ thuộc hàm đầy đủ và không đầy đủ Phụ thuộc hàm (FD) đầy đủ: Một FD X Y là một phụ thuộc hàm đầy đủ nếu loại bỏ bất kỳ thuộc tính A nào ra khỏi X thì FD không còn đúng nữa Phụ thuộc hàm không đ ầy đủ (FD bộ phận): Một FD X Y là phụ thuộc hàm bộ phận nếu có thể bỏ đi 1 thuộc tính A X ra khỏi X mà FD vẫn còn đúng. 3.1.3 Hệ tiên đề Amstrong Gọi F là tập tất cả các phụ thuộc hàm đối với lược đồ quan hệ R(U) và X→Y là một phụ thuộc hàm, X,Y⊆ U. Nói rằng X→Y được suy diễn logic từ F nếu mối quán hệ r trên R(U) đều thỏa các phụ thuộc hàm của F thì cũng thỏa X→Y. Chẳng hạn F= {A→B,B→C} thì A→C suy ra từ F. Gọi F+ là bao đóng (closure) của F, tức là tập tất cả các phụ thuộc hàm được suy diễn logic từ F. nếu F= F+ thì F là họ đầy đủ( full family) của các phụ thuộc hàm. Để có thể xác định khóa của một lược đồ quan hệ và các suy diễn logic giữa các phụ thuộc hàm cần thiết phải tính được F+ từ F. Do đó đòi hỏi phải có các hệ tiên đề. Tập các quy tắc của hệ tiên đề được Armstrong (1974) đưa ra, thường được gọi là hệ tiên đề Armstrong. KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 123 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Gọi R(U) là lược đồ quan hệ với U= {A1, ….., An} là tập các thuộc tính. X,Y, Z, W ⊆ U. Hệ tiên đề Armstrong bao gồm : A1(phản xạ): nếu Y⊆X thì X→Y A2(tăng trưởng):nếu Z⊆U và X→Y thì XZ→YZ trong đó ký hiệu XZ là tập hợp của 2 tập X và Z thay cho ký hiệu X∪Z. A3(bắc cầu): nếu X→Y và Y→Z thì X→Z Ví dụ : AB→C, C→A Cần chứng minh rằng BC→ABC Thật vậy từ : 1. C→A ( giả thiết) 2. BC→AB ( luật tăng trưởng (1) thêm B) 3. AB→C ( giả thiết) 4. AB→ABC ( tăng trưởng (3) thêm AB) 5. BC→ABC ( bắc cầu từ (2) và (4)) Định lý : Hệ tiên đề Armstrong là đúng. Có nghĩa là F là tập các phụ thuộc hàm đúng trên quan hệ r. nếu X→Y là một phụ thuộc hàm được suy diễn từ F nhờ hệ tiên đề Armstrong thì X→Y là đúng trên quan hệ r. Chứng minh : Lần lượt kiểm tra tính đúng đắn của ba tiên đề A1, A2, A3 A1 : Tiên đề A1 rõ ràng là đúng vì không thể có hai bộ bằng nhau trên X mà lại không bằng nhau trên tập con của nó. A2 : Giả sử rằng quan hệ r thỏa mãn X→Y. Tồn tại hai bột, u ∈r sao cho t[XZ] = u[ZX] mà t[YZ] ≠ u[YZ]. Vì rằng t[Z] = u[Z] nên để có t[YZ] ≠ u[YZ] thì t[Y] ≠ u[Y]. Nhưng vì t[X] = u[X] nên t[Y] ≠ u[Y] là trái với giả thiết X→Y. Vì vậy A2 đúng. KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 124 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU A3 : Cho X→Y và Y→Z đúng trên quan hệ r. Giả sử tồn tại hai bộ t, u∈r sao cho t[Y] = u[Y]. Nhưng lại có t[Y] = u[Y] và t[Z] ≠ u[Z] là trái với giả thiết Y→Z. Do vậy t[Z] = u[Z]. Suy ra X→Z đúng trên quan hệ r. Từ hệ tiên đề Armstrong suy ra một số luật sau đây : Định lý : a. Luật hợp: nếu X→Y và X→Z thì X→YZ b. Luật tựa bắc cầu: nếu X→Y và WY→X thì XW→Z c. Luật tách: nếu X→Y và Z⊆Y thì X→Z Chứng minh: a. Từ X→Y dùng luật tăng trưởng thêm X có X→XY, dùng luật bắc cầu ta có điều phải chứng minh. b. Từ X→Y, dùng luật tăng trưởng, thêm W có WX→WY. Dùng luật bắc cầu cho WX→WY và Wy→Z suy ra WX→Z. c. Vì Z⊆Y nên Y→Z theo luật phản xạ. Dùng luật bắc cầu cho X→Y và Y→Z có X→Z. 3.1.4. Bao đóng 3.1.4.1 Bao đóng của tập các phụ thuộc hàm Định nghĩa: Cho quan hệ R xác định trên tập thuộc tính U, F là tập các phụ thuộc hàm. Tập hợp tất cả các phụ thuộc hàm được suy diễn logic từ tập F được gọi là bao đóng của F và kí hiệu là F+ Ví dụ: Cho quan hệ R, U ={ A, B, C, D, E, I } F= {AI, ACD, BC, DE} Ta có: 1. BC (gt) 2. AB AC (tăng trưởng thêm A vào (1)) 3. AC D (gt) KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 125 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU 4. AB D (bắc cầu (2) và (3)) CM tương tự có: AC E, AB E Vậy: F+ ={AI, ACD, BC, DE, ABD, ACE, ABE} 3.1.4.2. Bao đóng của tập các thuộc tính Định nghĩa: Cho quan hệ R xác định trên tập các thuộc tính U, gọi F là tập các phụ thuộc hàm trên tập U, X U, X+ là bao đóng của X trên tập F được định nghĩa như sau: X+ = { X A / X A F+ } 3.1.4.3. Thuật toán tìm bao đóng Input: U, F; X, Y, Z U Output: X+ Phương pháp: Tính liên tiếp tập các thuộc tính X0, X1, … theo quy tắc: B1: X0 = X Bi: Xi+1 = Xi A Nếu tồn tại phụ thuộc hàm Y Z thuộc F+ mà A Z, Y Xi Do X U mà U hữu hạn nên i hữu hạn, khi đó X+ = Xi+1 Ví dụ: Cho quan hệ R xác định trên U, với U = { A, B, C, D, E, I}; F= {AI, ACD, BC, DE} Tìm (AC)+ Giải: 1. X0 = AC 2. X1= ACDI (vì A I, AC D) 3. X2= ACDIE (vì D E) Vậy: (AC)+ = ACDEI KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 126 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU 3.1.5. Phủ tối thiểu Phủ của tập các phụ thuộc hàm : Gọi F và G là các tập của các phụ thuộc hàm. Nói rằng F, G là tương đương nếu F+ = G+. Nếu F, G là tương đương đôi khi còn nói F phủ G (và G phủ F). Dễ dàng kiểm tra liệu F và G có tương đương với nhau hay không. Phương pháp kiểm tra: Lấy mỗi phụ thuộc hàm Y→Z thuộc F, kiểm tra xem liệu Y→Z có thuộc G+ không ? Dùng thuật toán 3.1 để tính Y+ và kiểm tra liệu Z⊆ Y+ hay không ? Nếu tồn tại một phụ thuộc hàm Y→Z thuộc F mà không phụ thuộc G+ thì chắc chắn F+ ≠ G+. Nếu mỗi phụ thuộc hàm thuộc F cũng thuộc G+ thì mỗi phụ thuộc hàm V→W thuộc F+ cũng thuộc G+. Để kiểm tra mỗi phụ thuộc G là thuộc F+ quá trình làm hoàn toàn tương tự. Do đó F và G là tương đương khi và chỉ khi mỗi phụ thuộc hàm thuộc F là thuộc G+ và mỗi phụ thuộc hàm thuộc G thuộc F+. Định lý : Mỗi tập các phụ thuộc hàm F đều được phủ bằng tập các phụ thuộc hàm G mà vế phải các phụ thuộc hàm đó bao gồm không quá một thuộc tính. Chứng minh : Gọi G là tập các phụ thuộc hàm X→A sao cho với X→Y thuộc F thì A∈Y. TừX→Y suy ra X→A. Do vậy G⊆ F+ Ngược lại, có F⊆ G+ vì nếu Y= A1…An thì X→Y được suy ra từ : X→A1, ….., X→An nhờ luật hợp. Để có thể phục vụ quá trình thiết kế lược đồ cơ sở dữ liêu, sau đây sẽ đưa ra một số khái niệm: Gọi tập các phụ thuộc hàm F là tối thiểu nếu: a. Mỗi vế phải của một phụ thuộc hàm thuộc F chỉ có một thuộc tính. b. Không tồn tại một phụ thuộc hàm X→A thuộc F mà F+ = (F- {X→A}) +. KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 127 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU c. Không tồn tại một phụ thuộc hàm X→A thuộc F và một tập hợp con Z của X mà F+= (F- {X→A}∪ {Z→A}) + Thực vậy, điều kiện b đảm bảo cho tập F không có một phụ thuộc hàm nào mà dư thừa, điều kiện C đảm bảo không có thuộc tính nao tham gia phía trái của phụ thuộc hàm là dư thừa. Vế phải của phụ thuộc hàm ở điều kiện a chỉ có một thuộc tính đảm bảo chắc chắn không có một thuộc tính nào trên vế phải là dư thừa. Định lý Mỗi tập phụ thuộc hàm F đều tương đương với một tập F’ tối thiểu. Chứng minh: Giả sử rằng không vế phải nào của các phụ thuộc hàm của F có nhiều hơn một thuộc tính. Để kiểm tra điều kiện b, xét (X→Y) ∈F. Nếu (F- {X→Y}) + =F+ thì loại bỏ X→Y khỏi F. Chú ý rằng các phụ thuộc hàm được sắp theo một thứ tự khác nhau thì sẽ cho ra kết quả khác nhau. Ví dụ: Cho tập F gồm: A→B, A→C, B→C, B→A, C→A Có thể loại bỏ F : B→A và A→C hoặc loại bỏ B→C nhưng không thể đồng thời loại bỏ cả ba phụ thuộc hàm. Như vậy điều kiện b được thỏa. Cần kiểm tra điều kiện c cho tập các phụ thuộc còn lại của F. Ở đây cũng cần lưu ý tới thứ tự các thuộc tính xuất hiện bên vế trái của các phụ thuộc hàm. Loại bỏ các thuộc tính vế trái của các phụ thuộc hàm sao cho tập các thuộc tính vẫn là tương đương. Quá trình tiếp tục cho đến khi không thể loại bỏ phụ thuộc hàm nào được nữa. Như vậy tập các phụ thuộc hàm còn lại của F sẽ tạo nên F’ và thỏa ba điều kiện của một tập tối thiểu. KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 128 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Tìm phủ tối thiểu B1: Tách các thuộc tính ở vế phải của mỗi phụ thuộc hàm thành nguyên tử (Vế phải của mỗi phụ thuộc hàm chỉ có 1 thuộc tính) B2: Loại bỏ phụ thuộc hàm dư thừa Giả sử: Xét phụ thuộc hàm XY Tính X+ trên tập F’ (F’ đã loại bỏ FD XY ) Nếu X+ Y thì loại XY khỏi tập F B3: Loại bỏ các thuộc tính dư thừa ở vế trái Giả sử: Xét phụ thuộc hàm XYZ (Loại X hoặc loai Y?) Xét XZ tính X+ (trên tập F) nếu Y X+ Loại Y Xét YZ tính Y+ (trên tập F) nếu X Y+ Loại X Vậy, tập các phụ thuộc hàm còn lại là phủ tối thiểu cần tìm. Ví dụ: Cho F = {X → Z, XY → WP, XY → ZWQ, XZ → R}. Xác định tập phủ tối thiểu từ tập F? Giải: B1. Tách các vế phải của các phụ thuộc hàm sao cho chỉ chứa duy nhất một thuộc tính: F = {X→Z, XY→W, XY →P, XY→Z, XY →W, XY → Q, XZ → R}. B2. Loại bỏ các phụ thuộc dư thừa: xét lần lượt từng phụ thuộc hàm + Xét X→Z. Tính X+ trên F-{X→Z} Có X+ =X ko chứa Z. + Xét XY →W (vì trong tập phụ thuộc hàm F có 2 phụ thuộc hàm này nên loại đi) KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 129 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU F={X→Z, XY→W, XY →P, XY→Z, XY → Q, XZ → R} + Xét XY→Z vì (XY)+=XYZWPQ (Tính (XY)+ trên F-{ XY→Z}) Ta thấy Z ⊂ (XY)+ vì vậy loại XY→Z F: = {X→Z, XY →W, XY →P, XY → Q, XZ → R} B3. Loại bỏ các thuộc tính vế trái dư thừa: xét tất cả các phụ thuộc hàm mà VT có từ 2 thuộc tính trở lên: + Xét XY→W: X→W có X+=XZR không chứa Y nên Y ko dư thừa Y→W có Y+=Y không chứa X nên X ko dư thừa Tương tự xét: XZ → R Có X+=XZR chứa Z nên Z dư thừa. Ta có phủ tối thiểu: G: = {X→Z, XY →W, XY →P, XY → Q, X → R}. 3.1.6. Khóa Thuật toán tìm tất cả các khóa Tìm tập thuộc tính nguồn (TN): Chứa tất cả các thuộc tính xuất hiện ở vế trái (VT) và không xuất hiện ở vế phải (VP) của các phụ thuộc hàm và những thuộc tính không xuất hiện ở VT lẫn VP của các phụ thuộc hàm. Tập thuộc tính trung gian (TG): Chứa tất cả những thuộc tính xuất hiện ở cả VT lẫn VP của các phụ thuộc hàm. Thuật toán: B1: Tạo tập TN và TG B2: Nếu TG = thì lược đồ quan hệ chỉ có một khóa K = TN Kết thúc, KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 130 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Ngược lại, chuyển sang B3 B3: Tìm tất cả các tập con Xi của tập trung gian TG B4: Tìm tất cả các siêu khoá Si bằng cách với Xi : Nếu (TN Xi )+ = Tập thuộc tính của R Thì Si = TN Xi B5: Tìm khóa bằng cách loại bỏ các siêu khóa không tối thiểu Si, Sj S, nếu Si Sj thì Loại Sj ra khỏi tập siêu khoá S; Si còn lại chính là tập khóa cần tìm. Ví dụ: Cho lược đồ quan hệ R(C,S,Z) và tập phụ thuộc hàm như sau: F = {CS → Z, Z → C} Tìm tất cả các khóa của R? Ta có: TN={S}, TG={C,Z} Xi (Xi TN) (Xi TN)+ S S C CS Z CZ Siêu khóa Khóa CSZ CS CS SZ CSZ SZ SZ CSZ CSZ CSZ 3.2. Phép tách - kết nối 3.2.1 Khái niệm Phép tách một lược đồ quan hệ R = {𝐴1 … … , 𝐴𝑛 } là việc thay thế lược đồ quan hệ R bằng các cặp lược đồ {𝑅1 ……,𝑅𝑘 } trong đó 𝑅𝑖 ⊆ R, i = l, …., k và R = 𝑅1 ∪ 𝑅2 ∪…..∪ 𝑅𝑘 . KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 131 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Ở đây không đòi hỏi các lược đồ 𝑅𝑖 phải là phân biệt. Mục tiêu của phép tách chủ yếu là loại bỏ các dị thường dữ liệu. 3.2.2. Phép tách-kết nối tự nhiên Cho lược đồ quan hệ người cung cấp: S(SNAME, ADD, PRO, PRICE) và giả sử có các phụ thuộc hàm : SNAME → ADD SNAME → PRO, SNAME → PRICE Lược đồ S có thể thay thế bằng hai lược đồ khác là S1(SNAME, ADD) và S2 (SNAME, PRO, PRICE) Như vậy rõ ràng ở S1 mỗi nhà cung cấp chỉ cần một lần lưu địa chỉ tương ứng của họ chứ không phải lặp đi lặp lại như ở lược đồ S. Vấn đề đặt ra là liệu một cơ sở dữ liệu r thỏa mãn trên S, khi tách ra S1 và S2 có phù hợp không? Hai hình chiếu r[𝑆1 ] và r[𝑆2 ] có còn phù hợp k? Hai hình chiếu r[𝑆1 ] và có còn giữ được cùng thông tin với r? Nói cách khác, nếu kết nối 2 hình chiếu r[𝑆1 ] và r[𝑆2 ] thành 1 quan hệ mới, ví dụ s = r[𝑆1 ] * r[𝑆2 ] liệu r # s hay r=s? để nghiên cứu các điều kiện cho kết quả phép kết nối tự nhiên nêu trên là duy nhất và bằng quan hệ ban đầu, cần thiết phải nghiên cứu 3.2.3 Phép tách - kết nối không mất mát thông tin. 3.2.3 Phép tách - kết nối không mất mát thông tin. a. Kết nối không mất thông tin Nếu R là một lược đồ quan hệ được tách thành các lược đồ con 𝑅1 ,𝑅2 …𝑅𝑘 và D là tập các phụ thuộc dữ liệu, nói rằng phép tách là tách - kết nối không mất mát thông tin (lossless Join decomposition) đối với D nếu mối quan hệ r trên R thỏa D: r = Π𝑅1 (𝑟) ∗ Π𝑅2 (𝑟) ∗ … .∗ Π𝑅𝑘 (𝑟) tức là r được tạo nên từ phép nối tự nhiên của các hình chiếu của nó trên các 𝑅𝑖 , i= 1…,k. Sau đây xem xét một số tính chất của kết nối không mất mát thông tin. KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 132 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Tập các lược đồ 𝜌 = (R1, …., Rk) được thay thế cho lược đồ R. Gọi m𝜌 là ánh xạ xác định nhờ m𝜌(𝑟) = Π𝑅𝑖 (𝑟) có nghĩa là m𝜌(𝑟) là kết nói của phép chiếu của r trên các lược đồ con trong 𝜌. Điều kiện để kết nói không mất mát thông tin đối với D được biểu diễn như sau: Với mọi r thỏa D, r= m𝜌(𝑟) Định lý: Gọi R là lược đồ quan hệ 𝜌 = (R1, …., R2) là phép tách của R, r là quan hệ trên R và ri = Π𝑅𝑖 (𝑟) thì: a. r⊆ m𝜌(𝑟) b. Nếu s= m𝜌(𝑟) thì Π𝑅𝑖 (𝑟) = 𝑟𝑖 c. m𝜌(m𝜌(𝑟)) = m𝜌(𝑟) b. Kiểm tra phép kết nối không làm mất mát thông tin Liệu một phép tách có phép kết nối không mất mát thông tin hay không đối với tập các phụ thuộc hàm được kiểm tra qua thuật toán sau đây: Thuật toán: Kiểm tra kết nối không mất mát thông tin Input : Lược đồ quan hệ R, tập các phụ thuộc hàm F và phép tách. Output : Kết luận phép tách có phải là không mất mát thông tin ? Phương pháp : Thiết lập một bảng với n cột và k hàng, cột thứ j ứng với thuộc tính Aj, hàng thứ i ứng với lược đồ Ri. Tại hàng j và cột j điền ký hiêu aj nếu Aj ∈Ri, nếu không điền ký hiệu bij. Bây giờ xem xét đến các phụ thuộc hàm từ F áp dụng cho bảng vừa thiết lập được. Giả sử xem xét (X→Y) ∈F. Xét các hàng nếu có giá trị bằng nhau trên thuộc tính X thì làm bằng các giá trị của chúng trên Y. Chú ý khi làm bằng giá trị trên Y, nếu một trong hai giá trị là aj thì ưu tiên làm bằng ký hiệu là aj. Ngoài ra làm bằng chúng bằng một trong các ký hiệu bij. KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 133 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Tiếp tục áp dụng thuật toán cho các phụ thuộc hàm, kể cả các phụ thuộc hàm đã áp dụng cho tới khi không còn áp dụng được nữa. Xem xét lại bảng kết quả: Nếu xuất hiện một hàng gồm các ký hiệu a1…an thì phép kết nối không làm mất thông tin. Trường hợp ngược lại là kết nối mất mát thông tin (lossy join). Ví dụ: Cho R(U) , U = {A, B, C, D}. F = {A C, B C, CD B, CD} Phép tách = {R1(AB), R2(BD), R3(ABC), R4(BCD)} Kiểm tra phép tách có mất mát thông tin? Giải: Lập một bảng gồm: - 4 cột (A, B, C, D) - 4 hàng (R1, R2, R3, R4) KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 134 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Áp dụng phụ thuộc hàm : A C Áp dụng phụ thuộc hàm: B C KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 135 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Áp dụng phụ thuộc hàm: CD Kết luận: Dòng (hàng) thứ 3 xuất hiện toàn giá trị a (a1,a2,a3,a4) nên phép tách không bị mất mát thông tin. Định lý Nếu 𝜌= (R1, R2) là một phép tách của R và F là tập hợp phụ thuộc hàm thì 𝜌 là phép tách không mất mát thông tin đối với F khi và chỉ khi : R1∩ R2 -→ R1- R2 hoặc R1∩ R2 -→ R2 – R1 Chú ý rằng các phụ thuộc hàm nêu trên không nhất thiết phải thuộc tập F ban đầu nhưng là đủ để thuộc F+. 3.3. Chuẩn hóa lược đồ quan hệ 3.3.1. Các dạng chuẩn 3.3.1.1. Dạng chuẩn thứ nhất (1NF – First Normal Form) Một lược đồ quan hệ R được gọi là ở dạng chuẩn một nếu và chỉ nếu toàn bộ các miền có mặt trong R đều chỉ chứa các giá trị nguyên tố. Từ định nghĩa này cho ta thấy rằng bất kỳ quan hệ chuẩn hóa nào cũng ở dạng 1NF và tất nhiên điều đó đúng. KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 136 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Ví dụ: SV (MSSV,Hoten, Ngsinh, ngoaingu) Quan hệ SV chưa ở dạng chuẩn 1 vì có thuộc tính ngoại ngữ là đa trị. 3.3.1.2. Dạng chuẩn thứ 2 (2NF) Lược đồ quan hệ R ở dạng chuẩn thứ hai nếu nó ở dạng 1NF và nếu mỗi thuộc tính không khóa của R là phụ thuộc hàm đầy đủ vào khóa chính. Ví dụ: Cho quan hệ R (A, B, C, D, E) F= {AB CD, CE} Ở dạng chuẩn 2 3.3.1.3. Dạng chuẩn thứ 3 (3NF) Cho lược đồ quan hệ R(U), X là tập con các thuộc tính X⊆ U, A là một thuộc tính thuộc U. A được gọi là phụ thuộc bắc cầu vào X trên R nếu tồn tại một tập con Y của R sao cho X→Y, Y→A nhưng Y ↛ X (không xác định hàm) với A ∉ XY. Ví dụ 1: Cho lược đồ quan hệ R(SAIP) với các phụ thuộc hàm SI→P và S→A. R là không ở dạng 3NF, thậm chí không ở dạng 2NF. Giả sử X= SI, Y= S, A là thuộc tính không khóa vì chỉ có 1 khóa là SI. Vì X→Y và Y→A nhưng lại có Y→X tức là S→SI là không thỏa. Chú ý rằng trong trường hợp này X→Y và Y→A không chỉ thỏa trên R mà là những phụ thuộc đã cho. Điều đó là đủ để nói rằng X→Y, Y→A suy ra từ tập các phụ thuộc hàm. Như vậy A là phụ thuộc bắc cầu vào khóa chính SI. Ví dụ 2: Cho phụ lược đồ quan hệ R(CSZ) với các phụ thuộc hàm CS→Z, Z→C. Trong lược đồ này mọi thuộc tính đều là thuộc tính khóa. Do vậy R là ở dạng 3NF. Ví dụ 3: Cho R (A, B, C, D, E, F) F= {AB CD, ABE, E F} KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 137 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Quan hệ R không ở dạng chuẩn 3 Vì thuộc tính F phụ thuộc bắc cầu vào khóa AB Định nghĩa : Lược đồ quan hệ R là ở dạng chuẩn thứ ba (3NF) nếu nó là 2NF và mỗi thuộc tính không khóa của R là không phụ thuộc hàm bắc cầu vào khóa chính. 3.3.1.4. Dạng chuẩn Boye- Codd (BCNF) Lược đồ quan hệ R với tập các phụ thuộc hàm được gọi là ở dạng chuẩn BCNF nếu X→A thỏa trên R, A∈X thì X là một khóa của R. Ví dụ 1: Trong ví dụ R(CSZ) nêu trên, rõ ràng R không ở BCNF mà là ở 3NF vì rằng Z→C nhưng không phải là khóa của R. Ví dụ 2: cho R (A1,A2,A3,A4,A5) Với các phụ thuộc hàm: A1,A2 → A3,A4,A5 A4 → A2 R vi phạm dạng chuẩn BCNF Vì có thuộc tính khóa (A2) phụ thuộc hàm vào thuộc tính không khóa (A4). Từ ví dụ này thấy rằng một lược đồ quan hệ có thể có 3NF nhưng không phải BCNF. Do đó mỗi lược đồ quan hệ ở BCNF là 3NF. Để khẳng định điều đó có định lý sau đây. Định lý : Nếu một lược đồ quan hệ R với tập phụ thuộc hàm F là ở BCNF thì nó là ở 3NF. Chứng minh: KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 138 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Giả sử rằng lược đồ quan hệ R là ở dạng BCNF nhưng không ở dạng 3NF. Như vậy sẽ tồn tại một phụ thuộc hàm bắc cầu hoặc phụ thuộc hàm thành phần X→ Y→A trong đó X là khóa của R, A ∉X hoặc A ∉Y. Và Y→X ∉ F+. Do vậy Y không phải là một khóa của R. Nhưng A∉ Y, do đó Y→A là một phụ thuộc hàm cho nên vi phạm điều kiện BCNF (tức là Y phải là khóa). 3.3.2. Chuẩn hóa qua phép tách không làm mất mát thông tin a. Phép tách lược đồ quan hệ thành BCNF Định lý : a. Giả sử R là một lược đồ quan hệ với tập phụ thuộc hàm F. Gọi 𝛒 =(R1, ….., Rk) là một phép tách không mất mát thông tin của R đối với F. Gọi Fi là hình chiếu của F trên Ri, i=1…k, tức là tập của (X→Y) ∈ F + sao cho X⊆ Ri và Y⊆ Ri. Gọi 𝛅 =(S1,……,Sm) là phép tách không mất mát thông tin của Ri đối với Fi . Khi đó phép tách của R thành (R1,….., Ri-1, S1….. ,Sm, Ri+1….., Rk) đối với F là không mất mát thông tin. b. Giả sử R, F và 𝝆 như ở mục (a). Gọi t= (R1,….., Rk, Rk+1, ……, Rn) là một phép tách của R thành tập các lược đồ bao gồm cả 𝛒 thì t cũng là phép tách không làm mất mát thông tin đối với F. Thuật toán: Tách một lược đồ quan hệ thành BCNF Input : Lược đồ quan hệ R và tập phụ thuộc hàm F Output : Phép tách của R không làm mất mát thông tin sao cho mỗi lược đồ quan hệ trong phép tách đều ở dạng BCNF đối với phép chiếu của F trên lược đồ đó. Phương pháp: KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 139 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Cấu trúc phép tạch 𝝆 trên R theo phương pháp lặp liên tiếp. Tại mỗi bước phép tách 𝝆 là đảm bảo không mất mát thông tin đối với F. Bước đầu: 𝝆 chỉ bao gồm R Các bước tiếp theo : Nếu S là một lược đồ thuôc 𝝆 , S chưa ở dạng BCNF, chọn X→A là phụ thuộc hàm thỏa trên S, trong đó X không chứa khóa của S, A∉ X. Rõ ràng cần phải có một số thuộc tính khác của S vừa không phải A, vừa không thuộc X hoặc nếu không thuộc X thì phải chứa một khóa của S. Thay thế S trong 𝝆 bởi S1và S2 với S1=XA, S2= S - A Theo định lý, phép tách S thành S1 và S2 là không mất mát thông tin đối với tập phụ thuộc hàm trên S vì rằng S1 ∩ S2 = X, X→S1 –S2 = A. Theo bổ đề phần (a) được thay S bằng S1 và S2 là không mất mát thông tin. Mỗi lược đồ đều có số thuộc tính ít hơn S. Quá trình tiếp tụ cho tới khi tất cả các lược đồ đều ở BCNF. Chú ý rằng tại mọi thời điểm 𝝆 luôn đảm bảo không mất mát thông tin, vì rằng 𝝆 ban đầu là R, mà bước thay đổi 𝝆 đều bảo toàn tính chất đó. Ví dụ: Cho lược đồ R(CTHRSG), trong đó C- giáo trình, T- Thầy giáo, H- giờ, RPhòng học, S- Sinh viên, G- Lớp. Tập các phụ thuộc hàm: C→T : Mỗi giáo trình có một thầy dạy HR→C : Chỉ một môn học (giáo trình) ở một phòng tại một thời điểm HT→R : Tại mỗi thời điểm mỗi thầy chỉ có thể dạy ở một phòng CS→G : Mỗi sin viên chỉ ở một lớp theo học mỗi giáo trình HS→R : Mỗi sinh viên chỉ có thể ở một phòng tại mỗi thời điểm Giải : Khóa của R là HS Tách lược đồ R thành lược đồ BCNF: KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 140 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Xét CS→G cho R. Vi phạm điều kiện BCNF vì CS không chưa khóa. Do vậy, dùng thuật toán 3.3 để tách R thành R1(CSG) và R2(CTHRS). Bước tiếp theo cần tính F+ và chiếu xuống R1 và R2, sau đó kiểm tra các lược đồ đã ở BCNF hay chưa. Có thể biểu diễn quá trình tách qua sơ đồ sau : C→ T HR→ C TH→ R R (CTHRSG) Khóa = HS R1 (CSG) Khóa = CS CS→G HS→R R2 (CTHRS) Khóa = SH C→T TH→R HHS→C HS→R R→C CSG R21 (CT) Khóa = C R22 (CHRS) Khóa = HS C→T CH→R HR→C C→T R221 (CHR) Khóa = CH, HR CH→R, HR→C R222 (CHS) KhóaCH→R, = SH HR→C HS→C R→C b. Phép tách lược đồ quan hệ thành 3NF Tương tự như phép tách không mất mát thông tin một lược đồ quan hệ thành BCNF, ở đây sẽ đưa ra thuật toán tách thành 3NF. Thuật toán: Tách một lược đồ thành 3NF Input : Lược đồ quan hệ R, tập các phụ thuộc hàm F, để không làm mất tín tổng quát, ta giả sử rằng nó là phủ tối thiểu. Output : Phép tách không làm mất mát thông tin trên R bảo toàn các phụ thuộc hàm sao cho mỗi lược đồ con đều ở 3NF. KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 141 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Phương pháp : i. Loại bỏ tất cả các thuộc tính của R nếu các thuộc tính đó không liên quan đến một phụ thuộc hàm nào của F, hoặc vế trái, hoặc vế phải. ii. Nếu có một phụ thuộc hàm nào của F mà liên quan tới tất cả các thuộc tính của R thì kết quả ra chính là R. iii. Ngoài ra, phép tách 𝝆 đưa ra các lược đồ gồm các thuộc tính XA cho phụ thuộc hàm X→A thuộc F, nếu X→A1,….., X→An thuộc tính F thì thay thế tập thuộc tính XA1A2….An cho XAi (1≤ i≤ n). Quá trình tiếp tục. Chú ý : Tại mỗi bước kiểm tra lược đồ R, nếu mỗi thuộc tính không khóa không phụ thuộc bắc cầu vào khóa chính, khi đó R sẽ ở dạng 3NF, ngược lại cần áp dụng bước (iii) để tách tiếp. Ví dụ: Cho lược đồ quan hệ R(CTHRSG) với tập phụ thuộc hàm tối thiểu C→F, HR→C, HT→R, CS→ G và HS→R dùng thuật toán trên cho tập lược đồ ở dạng chuẩn 3NF: R1(CT), R2(CHR), R3(RHT), R4(CGS) và R5(HRS). 3.3.3. Chuẩn hóa nhờ phép tổng hợp Trong phần 3.3.2 đã xem xét quá trình chuẩn hóa một lược đồ quan hệ thành 3NF nhờ phép tách không mất mát thông tin đối với các phụ thuộc hàm. Trong phần này sẽ trình bày quá trình chuẩn hóa nhờ phép tổng hợp. Điều khác nhau cơ bản ở phép tổng hợp so với phép tách là thông tin ban đầu gồm tập các thuộc tính (hiểu theo nghĩa người sử dụng chỉ biết tên các thuộc tính) và tập các phụ thuộc hàm, còn trong phương pháp tách, thông tin ban đầu là một lược đồ rất cụ thể. Qua phép tổng hợp (hoặc phép tách) kết quả đều cho một tập các lược đồ đều ở 3NF. Để làm rõ thuật toán, ở đây nhắc lại khái niệm phụ thuộc hàm dư thừa và phủ không dưa thừa. Một FD X→Y là dư thừa trong tập phụ thuộc hàm F nếu F+ = (F- KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 142 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU {X→Y}) +. G là phủ không dư thừa của F nếu G+ = F+ và G không chứa một FD nào dư thừa. Một thuộc tính thuộc vế trái một phụ thuộc hàm được gọi là dư thừa nếu loại bỏ nó không làm thay đổi bao đóng của tập các phụ thuộc hàm, tức là: Nếu X→Y∈F, A∈X, A là dư thừa nếu (X→A)→Y ∈F+. Định lý : Gọi F là tập các phụ thuộc hàm trên R. (X→Y)∈F. Nếu (V→W)∈F+ và X→Y được sử dụng cho một dẫn xuất nào đó của h từ F nhờ hệ tiên đề Armstrong thì (V→X)∈F+. Thuật toán. Tổng hợp thành các lược đồ ở 3NF Input : Tập các thuộc tính An, tập các phụ thuộc hàm F Output : Tập các lược đồ quan hệ ở 3NF Phương pháp: Tìm phủ không dư thừa H của F (tức là loại bỏ các phụ thuộc hàm dư thừa). Phân chia tập phụ thuộc hàm H thành các nhóm sao cho các phụ thuộc hàm trong một nhóm là có cùng vế trái. Mỗi cặp nhóm, ví dụ H1 và H2 có vế trái là X và Y mà tồn tại song ảnh (X↔Y)(∈ H+ (tức là X→Y và Y→X) thì hòa hai nhóm đó lại với nhau. Với mỗi A∈Y (nếu X→A)∈ H thì loại bỏ nó khỏi H. Tương tự cho mỗi (Y→B)∈H với B∈X. Ở mỗi nhóm đạt được cấu trúc các lược đồ quan hệ bao gồm tất cả các thuộc tính xuất hiện trong nhóm đó. Mỗi tập thuộc tính xuất hiện ở vế trái của một FD trong nhóm là một khóa của lược đồ quan hệ. Các khóa tìm được gọi là khóa được tổng hợp. Mỗi tập được cấu trúc như trên là một lược đồ quan hệ. KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 143 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Định lý Lược đồ quan hệ R(A1,…., An) được tổng hợp qua thuật toán 5.5 từ tập các phụ thuộc hàm F ở 3NF. Nói cách khác không một thuộc tính không khóa nào của R là phụ thuộc hàm bắc cầu vào một khóa chính của R. Chứng minh: Giả sử Ai là một thuộc tính không khóa và phụ thuộc bắc cầu vào khóa K của R (K không nhất thiết là khóa được tổng hợp nên). Tức là tồn tại một tập hợp X⊆ {A1,…., An} sao cho K→X, X→K và X→Ai là thuộc F+ và Ai∈X. Cần chứng minh rằng R là ở 3NF, nói cách khác, giả thiết tồn tại phụ thuộc bắc cầu nêu trên là vô lý. Trước hết xem xét Ai là phụ thuộc bắc cầu vào một khóa được tổng hợp của R. Gọi Z là khóa của R xuất hiện ở vế trái của một phụ thuộc hàm. (Z→X)(∈ F+ vì Z là khóa của R. Hơn nữa X→Z vì nếu X→Z thì X→Z và Z→K suy ra Z→K trái với giả thiết là X→K nếu trên. Do vậy Z→X, X→Z và X→Ai là một phụ thuộc hàm bắc cầu. Gọi H là một phủ không dư thừa của F được tính toán qua thuật toán. Cần chỉ ra rằng Z→Ai xuất hiện trong H là dư thừa. Để đạt được điều đó chỉ cần đủ để chỉ ra rằng Z→X và X→Ai không thể cả hai phụ thuộc hàm được suy dẫn từ H - {Z→Ai}. Thật vậy, vì chỉ những phụ thuộc hàm được sử dụng trong quá trình tổng hợp của R có dạng Z→Ai, cho nên Z→Xk là thỏa trong H với mọi Xk∈X. Vì Ai ∉ X nên (Z→Xk)∈ H- {Z(∈ Ai}. Giả sử tồn tại một cách suy dẫn cho X→Ai trong H mà có dùng tới Z→Ai. Theo bổ đề suy ra X→Z. Nhưng như trên đã chỉ rõ X→Z. Như vậy X→Ai là có thể suy dẫn được mà không cần sử dụng tới Z→Ai. Vì Z→X và X→Ai, cả hai phụ thuộc hàm đều được suy dẫn từ H- {Z- Ai} cho nên Z→Ai là dư thừa trong H. Điều đó là trái với giả thiết H là không dư thừa. Có nghĩa là giả thiết có tồn tại phụ thuộc bắc cầu là không đúng. KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 144 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Ví dụ 1: Cho quan hệ R(A,B,C,D,E,G,H) và tập phụ thuộc hàm: F={AD,ABDE, CEG, EH} a. Tìm khóa b. Xác định dạng chuẩn Giải: a. Tìm khóa TN={A,B,C} TG={E} Xi Xi U TN (Xi U TN)+ Siêu Khóa Khóa Ø ABC ABCDEGH ABC ABC E ABCE ABCDEGH ABCE b. Xác định dạng chuẩn Có AD theo giả thiết. Vậy R không ở dạng chuẩn 2 vì thuộc tính không khóa D phụ thuộc vào bộ phận khóa. Ví dụ 2: Cho R(XYZWPQR), F = {X → Z, XY → WP, XY → ZWQ, XZ → R}. Chuẩn hóa R về 3NF. Giải: B1: Khóa={XY} B2: Xác định tập phủ tối thiểu từ tập F? Ta có phủ tối thiểu: G: = {X→Z, XY →W, XY →P, XY → Q, X → R}. KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 145 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU B3: Tách thành các lược đồ con: R1(XZR), R2(XYWPQ) → R1(XZR), R2(XYWPQ) R1, R2 đã ở 3NF KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 146 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU BÀI TẬP CHƯƠNG III CÂU HỎI TRẮC NGHIỆM Câu 1: Cho R(U) là sơ đồ quan hệ với U là tập thuộc tính. X, Y, Z là tập con của U. Tính chất tăng trưởng (augmentation) của hệ tiên đề Amstrong: với điều kiện nào dưới đây thì YZ là phụ thuộc hàm vào XZ? a. X là phụ thuộc hàm vào Y b. Y là phụ thuộc hàm vào X c. X không là phụ thuộc hàm vào Y d. Y không là phụ thuộc hàm vào X Câu 2: Cho R(U) là sơ đồ quan hệ với U là tập thuộc tính. X, Y, Z là tập con của U. Tính chất: nếu Y là phụ thuộc hàm vào X, Z là phụ thuộc hàm vào Y thì Z là phụ thuộc vào X là tính chất gì trong hệ tiên đề Amstrong? a. Phản xạ (reflexivity) b. Tăng trưởng(augmentation) c. Bắc cầu(transitivity) d. Kết hợp(associativity) Câu 3: Cho R(U) là sơ đồ quan hệ với U là tập thuộc tính. X, Y, Z là tập con của U. Tính chất Phản xạ (reflexivity) của hệ tiên đề Amstrong: với điều kiện nào dưới đây thì Y là phụ thuộc hàm vào X? a. X là con của Y b. Y là con của X c. X không là con của Y d. Y không là con của X KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 147 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Câu 4: Một quan hệ có chứa một miền giá trị của một thuộc tính nào đó là không nguyên tố được gọi là a. Quan hệ chuẩn hóa b. Quan hệ không chuẩn c. Quan hệ chuẩn hóa loại 1 d. Quan hệ chuẩn hóa loại 2 Câu 5: Cho R(U) là sơ đồ quan hệ với U là tập thuộc tính. X, Y, Z là tập con của U. Luật hợp: Nếu Y là phụ thuộc hàm vào X, Z là phụ thuộc hàm vào X thì : a. Y là phụ thuộc hàm vào XZ b. Z là phụ thuộc hàm vào XY c. YZ là phụ thuộc hàm vào X d. XZ là phụ thuộc hàm vào YZ Câu 6: Cho R(U) là sơ đồ quan hệ với U là tập thuộc tính. X, Y, Z, W là tập con của U. Luật tựa bắc cầu: Nếu Y là phụ thuộc hàm vào X, Z là phụ thuộc hàm vào WY thì : a. XW là phụ thuộc hàm vào Z b. Z là phụ thuộc hàm vào XW c. XZ là phụ thuộc hàm vào W d. W là phụ thuộc hàm vào XZ Câu 7: B phụ thuộc hàm vào A (A->B) được suy dẫn logic từ F bằng cách: a. Áp dụng các quy tắc tách/hợp b. Áp dụng các quy tắc phản xạ c. Áp dụng các quy tắc bắc cầu d. Áp dụng hệ tiên đề Amstrong KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 148 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Câu 8: Phát biểu nào đúng với khái niệm Phụ thuộc hàm? a. Cho R(U). X, Y là các tập con của U, ta nói rằng X Y nếu trên quan hệ R có t1[X]) = t2[X]) thì t1[Y]) = t2[Y]. b. Cho R(U). X, Y là các tập con của U, ta nói rằng X Y nếu trên quan hệ R có t1[X]) = t2[X]) thì t1[Y]) t2[Y]. c. Cho R(U). X, Y là các tập con của U, ta nói rằng X Y nếu trên quan hệ R có t1[X]) t2[X]) thì t1[Y]) = t2[Y]. d. Tất cả các đáp án trên. Câu 9: Chọn phát biểu đúng để tìm tập nguồn (TN)? a. Tập TN chứa tất cả các thuộc tính xuất hiện ở vế trái (VT) và không xuất hiện ở vế phải (VP) của các phụ thuộc hàm. b. Tập TN chứa tất cả các thuộc tính xuất hiện ở vế trái (VT) và vế phải (VP) của các phụ thuộc hàm. c. Tập TN chứa tất cả các thuộc tính không xuất hiện ở VT lẫn VP của các phụ thuộc hàm. d. Cả đáp án a và c Câu 10: Chọn phát biểu đúng để tìm tập trung gian (TG)? a. Tập TG chứa tất cả những thuộc tính xuất hiện ở cả VT lẫn VP của các phụ thuộc hàm. b. Tập TG chứa tất cả những thuộc tính không xuất hiện ở cả VT lẫn VP của các phụ thuộc hàm. c. Tập TG chứa tất cả những thuộc tính xuất hiện ở VT của các phụ thuộc hàm. d. Tập TG chứa tất cả những thuộc tính xuất hiện ở VP của các phụ thuộc hàm. KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 149 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Câu 11: Chọn phát biểu đúng để tìm tập đích (TĐ)? a. Tập TĐ chứa tất cả những thuộc tính xuất hiện ở VT của các phụ thuộc hàm. b. Tập TĐ chứa tất cả những thuộc tính xuất hiện ở VP và không xuất hiện ở VT của các phụ thuộc hàm. c. Tập TĐ chứa tất cả những thuộc tính không xuất hiện ở VP và không xuất hiện ở VT của các phụ thuộc hàm. d. Tập TĐ chứa tất cả những thuộc tính không xuất hiện ở VP và chỉ xuất hiện ở VT của các phụ thuộc hàm. Câu 12: Hệ tiên đề Armstrong cho các phụ thuộc hàm gồm các quy tắc: a. Bắc cầu. b. Phản xạ. c. Tăng trưởng. d. Cả 3 đáp án trên. Câu 13: Hệ tiên Amstrong có các hệ quả là: a. Luật hợp, luật bắc cầu, luật tách b. Luật hợp, luật tựa bắc cầu, luật tăng trưởng c. Luật hợp, luật tựa bắc cầu, luật tách d. Luật phản xạ, luật tựa bắc cầu, luật tách Câu 14: Khẳng định nào là phụ thuộc hàm: a. Họ và tên → Thành phố b. Họ và tên → Địa chỉ c. Họ và tên → Số chứng nhân dân d. Số chứng nhân dân → Họ và tên Câu 15: Trong thuật toán tìm tất cả các khóa của lược đồ quan hệ R(U). Sau khi tạo tập TN và tập TG. Nếu TG = ϴ Thì: a. Lược đồ quan hệ chỉ có một khóa K = TG KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 150 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU b. Lược đồ quan hệ chỉ có một khóa K = TN c. Lược đồ quan hệ chỉ có một khóa K = ϴ d. Lược đồ quan hệ chỉ có một khóa K = U Câu 16: Chọn phát biểu đúng cho khái niệm dạng chuẩn 1(1NF)? a. Một quan hệ được gọi là ở dạng chuẩn 1 (1NF) nếu giá trị của mỗi thuộc tính trong một bộ giá trị là một giá trị nguyên tử (đơn, không phân chia được) lấy từ miền giá trị của thuộc tính đó. b. Một quan hệ được gọi là ở dạng chuẩn 1(1NF) nếu tồn tại thuộc tính phụ thuộc một phần vào khóa. c. Một quan hệ được gọi là ở dạng chuẩn 1 (1NF) nếu giá trị của mỗi thuộc tính trong một bộ giá trị có thể phân chia ra được. d. Một quan hệ được gọi là ở dạng chuẩn 1(1NF) nếu tồn tại thuộc tính phụ thuộc bắc cầu vào khóa. Câu 17: Chọn phát biểu đúng cho khái niệm dạng chuẩn 2(2NF)? a. Một quan hệ được gọi là ở dạng chuẩn 2(2NF) nếu nó ở dạng chuẩn 1 và không tồn tại thuộc tính phụ thuộc bắc cầu vào khóa. b. Một quan hệ được gọi là ở dạng chuẩn 2(2NF) nếu nó ở dạng chuẩn 1 và không tồn tại thuộc tính phụ thuộc một phần vào khóa. c. Một quan hệ được gọi là ở dạng chuẩn 2 (2NF) nếu giá trị của mỗi thuộc tính trong một bộ giá trị là một giá trị nguyên tử (đơn, không phân chia được) lấy từ miền giá trị của thuộc tính đó. d. Một quan hệ được gọi là ở dạng chuẩn 2(2NF) nếu nó ở dạng chuẩn 1 và không tồn tại thuộc tính khóa phụ thuộc hàm vào thuộc tính không phải là khóa. KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 151 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Câu 18: Chọn phát biểu đúng cho khái niệm dạng chuẩn 3(3NF)? a. Một quan hệ được gọi là ở dạng chuẩn 3(3NF) nếu nó ở dạng chuẩn 2 và không tồn tại thuộc tính khóa phụ thuộc hàm vào thuộc tính không phải là khóa. b. Một quan hệ được gọi là ở dạng chuẩn 3 (3NF) nếu giá trị của mỗi thuộc tính trong một bộ giá trị là một giá trị nguyên tử (đơn, không phân chia được) lấy từ miền giá trị của thuộc tính đó. c. Một quan hệ được gọi là ở dạng chuẩn 3(3NF) nếu nó ở dạng chuẩn 2 và không tồn tại thuộc tính phụ thuộc bắc cầu vào khóa. d. Một quan hệ được gọi là ở dạng chuẩn 3(3NF) nếu nó ở dạng chuẩn 2 và không tồn tại thuộc tính khóa phụ thuộc hàm vào thuộc tính không phải là khóa. Câu 19: Chọn phát biểu đúng cho khái niệm dạng chuẩn Boyce – Codd (BCNF)? a. Một quan hệ được gọi là ở dạng chuẩn BCNF nếu nó ở dạng chuẩn 3 và không tồn tại thuộc tính khóa phụ thuộc hàm vào thuộc tính không phải là khóa. b. Một quan hệ được gọi là ở dạng chuẩn BCNF nếu giá trị của mỗi thuộc tính trong một bộ giá trị là một giá trị nguyên tử (đơn, không phân chia được) lấy từ miền giá trị của thuộc tính đó. c. Một quan hệ được gọi là ở dạng chuẩn BCNF nếu nó ở dạng chuẩn 3 và không tồn tại thuộc tính phụ thuộc bắc cầu vào khóa. d. Một quan hệ được gọi là ở dạng chuẩn BCNF nếu nó ở dạng chuẩn 3 và không tồn tại thuộc tính khóa phụ thuộc hàm vào thuộc tính không phải là khóa. Câu 20: Phát biểu nào sau đây đúng với Phụ thuộc hàm đầy đủ? a. Một phụ thuộc hàm X Y là một phụ thuộc hàm đầy đủ nếu loại bỏ bất kỳ thuộc tính A nào ra khỏi X thì phụ thuộc hàm luôn đúng. KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 152 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU b. Một phụ thuộc hàm X Y là một phụ thuộc hàm đầy đủ nếu loại bỏ bất kỳ thuộc tính A nào ra khỏi X thì phụ thuộc hàm không còn đúng nữa. c. Một phụ thuộc hàm X Y là một phụ thuộc hàm đầy đủ nếu thêm bất kỳ thuộc tính A nào ra khỏi X thì phụ thuộc hàm luôn đúng. d. Một phụ thuộc hàm X Y là một phụ thuộc hàm đầy đủ nếu thêm bất kỳ thuộc tính A nào ra khỏi X thì phụ thuộc hàm không còn đúng nữa. Câu 21: Phát biểu nào sau đây đúng với Phụ thuộc hàm bộ phận? a. Một phụ thuộc hàm X Y là phụ thuộc hàm bộ phận nếu có thể bỏ đi 1 thuộc tính A X ra khỏi X mà phụ thuộc hàm vẫn còn đúng. b. Một phụ thuộc hàm X Y là một phụ thuộc hàm đầy đủ nếu loại bỏ bất kỳ thuộc tính A nào ra khỏi X thì phụ thuộc hàm không còn đúng nữa. c. Một phụ thuộc hàm X Y là một phụ thuộc hàm đầy đủ nếu thêm bất kỳ thuộc tính A nào ra khỏi X thì phụ thuộc hàm luôn đúng. d. Một phụ thuộc hàm X Y là một phụ thuộc hàm đầy đủ nếu thêm bất kỳ thuộc tính A nào ra khỏi X thì phụ thuộc hàm không còn đúng nữa. Câu 22: Tìm phủ tối thiểu (Phủ không dư thừa) có mấy bước? a. 1 b. 2 c. 3 d. 4 Câu 23: Cho quan hệ R (A, B, C, D, E); Khóa là AB Tập phụ thuộc hàm F= {AB CD, CE} Quan hệ trên ở dạng chuẩn nào? a. 1NF b. 2NF c. 3NF d. BCNF KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 153 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Câu 24: Cho R (A, B, C, D, E, F); Khóa là AB Tập phụ thuộc hàm F= {AB CD, ABE, E F} Quan hệ trên ở dạng chuẩn nào? a. 1NF b. 2NF c. 3NF d. BCNF Câu 25: Cho R (A, B, C, D, E); Khóa là AB Tập phụ thuộc hàm F= {AB CDE, DB} Quan hệ trên ở dạng chuẩn nào? a. 1NF b. 2NF c. 3NF d. BCNF BÀI TẬP THỰC HÀNH Bài 1. Cho LĐQH p = (U,F) víi U = ABCDE, F = { A C, BC D, D E, E A }. Tính: a) (AB)+ b) (BD)+ c) D+ Bài 2. Cho LĐQH p = (U,F) víi U = ABCDEG, F = { B C, AC D, D G, AG E }. Chứng minh rằng: a) AB G F+ ? b) BD AD F+ ? KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 154 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Bài 3. Cho R(U), U={A, B, C, D, E, G}, F ={B →C, AC→D, D→G, AG→E}. Tìm tất cả các khóa của R? Bài 4. Cho R(U), U={H, I, K, L, M, N}, F={I→LM, HI→K, K→N, KN→I}. Tìm tất cả các khóa của R? Bài 5. Cho R(U), U={ A, B, C, D, E, F}. F={A→B, BC→D, CE→D, AE→F, CD→A}. Tìm tất cả các khóa của R? Bài 6. Cho R(U), U={A, B, C, D , E, G} F= {D →G, C→A, CD→E, A→B} Tìm phủ tối thiểu? Bài 7. Cho R(U), U={B, O, I, S, Q} F={ B→I, O→ I, I→S, SQ→I, IQ→B}. Tìm phủ tối thiểu? Bài 8. Cho R(U), U = {A, B, C, D, E, F} F = { A B, BC D, CE D, AE F, CD A} Tìm phủ tối thiểu? KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 155 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Bài 9. Cho R(U), U={A, B, C, D, E, G} F ={B →C, AC→D, D→G, AG→E}. Chuẩn hóa quan hệ về 3NF? Bài 10. Cho R(U), U={H, I, K, L, M, N}, F={I→LM, HI→K, K→N, KN→I}. Chuẩn hóa quan hệ về 3NF? Bài 11. Cho R(U), U={ A, B, C, D, E, F}. F={A→B, BC→D, CE→D, AE→F, CD→A}. Chuẩn hóa quan hệ về 3NF? Bài 12. Cho R(U), U={A, B, C, D , E, G} F= {D →G, C→A, CD→E, A→B} Phép tách ={GD, AC, CDE, AB}. Kiểm tra phép tách có bị mất mát thông tin hay không? Bài 13. Cho R(U), U={C, T, H, R, S, G}. F= {C→T, HT→R, HS→R, CS→G, HR→C} Phép tách =(CSG, CT, CHR, CHS). Kiểm tra phép tách có bị mất mát thông tin hay không? Bài 14. Cho R(U), U={A, B, I, H, K}, F={ B→I, A→ I, I→H, HK→I, IK→B}. Phép tách = {BI, IH, AK, AI, BK}. Kiểm tra phép tách có làm mất mát thông tin hay không? KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 156 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU CHƯƠNG IV TỐI ƯU HÓA CÂU HỎI TRUY VẤN Mục tiêu: Tối ưu hóa câu hỏi là quá trình lựa chọn phương pháp sao cho khi thực hiện các câu hỏi truy vấn có hiệu quả nhất, có thể đánh giá được các khả năng xử lý câu hỏi từ nhiều chiến lược khác nhau, đặc biệt là cho những câu hỏi phức tạp. Một phương pháp khi thực hiện có chi phí thấp, tức là tối ưu về thời gian truy xuất thông tin và tối ưu về không gian lưu trữ mà vẫn bảo đảm được tính độc lập và toàn vẹn dữ liệu. Nội dung của chương gồm các phần sau: Khái quát về tối ưu hóa câu hỏi Nguyên tắc tối ưu hóa Kỹ thuật tối ưu hoá các biểu thức đại số quan hệ Một số nhận xét khi tối ưu hóa câu hỏi Tối ưu hóa câu hỏi bằng khung nhìn 4.1. Mở đầu Ngôn ngữ con dữ liệu là một tập các phép toán có cấu trúc quan hệ được dùng để thao tác trên các dữ liệu dưới dạng quan hệ. Kết quả của các phép toán được biểu diễn duy nhất bằng một quan hệ. Các thuộc tính và các bộ của nó được rút ra từ một hay nhiều quan hệ cho trước, vì vậy trước khi thực hiện các câu hỏi cần thiết phải biến đổi hợp lý sao cho chi phí thời gian thực hiện các phép toán là ít nhất. Quá trình biến đổi này được gọi là quá trình tối ưu hoá các câu hỏi truy vấn dữ liệu. Tối ưu hoá câu hỏi rất có ý nghĩa khi tìm kiếm và truy xuất dữ liệu tại các thiết bị đầu cuối. Nâng cao hiệu suất các phiên làm việc của người sử dụng. Không những tối ưu về thời gian truy xuất thông tin mà là nhân tố quan trọng trong việc bảo đảm tính độc lập của dữ liệu với các chiến lược tìm kiếm, truy xuất dữ liệu. Có nhiều kỹ thuật khác KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 157 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU nhau để tối ưu hoá các câu hỏi, trong đó có kỹ thuật phân rã câu hỏi dựa trên ngôn ngữ của đại số quan hệ. 4.2. Tổng quan về tối ưu hóa câu hỏi Xét cơ sở dữ liệu quản lý mạng cáp gồm các quan hệ sau: a. Thông tin về các tuyến cáp: TUYEN (T#, TC, DAI). b. Thông tin về các loại cáp: CAP (M#, MC, GIA, NSX). c. Thông tin về các loại cáp đã được lắp đặt: L_DAT (T#, M#, SL, NG) Trong đó: T# ký hiệu mã tuyến TC Tên gọi tuyến cáp, DAI Độ dài tuyến cáp M# Mã cáp MC Tên gọi cáp GIA Đơn giá. NSX Nước sản xuất SL NG Ngày lắp đặt cáp. Số lượng cáp lắp đặt. Để có được cách nhin tổng quát của việc tối ưu hoá câu hỏi, xét ví dụ sau: liệt kê tên tất cả các tuyến cáp có lắp đặt cáp Việt nam. Biểu thức đại số quan hệ và cây đại số quan hệ được biểu diễn như sau : 1. TTC ( σ MC# =’Việt nam’ (TUYEN X L_DAT) X CAP)) Cây đại số quan hệ chưa tối ưu hoá KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 158 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Biểu thức trên mô tả quá trình thực hiện câu hỏi như sau: Trước hết, biểu thức tạo ra quan hệ TUYEN X L_DAT X CAP trung gian, bằng cách kết nối tự nhiên hoặc thực hiện tích Đề các các quan hệ TUYEN, L_DAT và CAP với một số lượng bản ghi bằng tích số lượng các bản ghi và các thuộc tính bao gồm các thuộc tính của 3 quan hệ trên. Như vậy sau bước này, quan hệ tạm có lực lượng khá lớn và chiều dài của một bản ghi cũng không phải là nhỏ, nếu kích cỡ các quan hệ nguồn lớn. Tuy nhiên kết quả câu hỏi chỉ quan tâm đến thuộc tính tên tuyến cáp TTC và các bộ dữ liệu có tên loại cáp trùng với “Việt nam”. Như vậy sau khi tính tích Đề các, hệ thống sẽ thực hiện các phép chọn và phép chiếu để đưa ra quan hệ kết quả. Trong cách biểu diễn này, số lượng các phép toán thực hiện tương đối lớn, chi phí thời gian quá cao và chi phí lưu trữ tốn kém. Chú ý rằng, câu hỏi chỉ quan tâm đến các bộ dữ liệu cáp “Việt nam”. Thông tin này được chứa trong các quan hệ L_DAT, và CAP (trong nhật ký lắp đặt là mã các loại cáp Việt nam và trong danh mục là chuỗi “Việt nam”). Như vậy có thể thực hiện các phép chọn trong các quan hệ L_DAT và CAP. Kết quả trung gian các phép chọn sẽ làm giảm đáng kể số lượng các bản ghi, kích cỡ của quan hệ của phép kết nôi tự nhiên của 2 thành phần trung gian trên với quan hệ TUYEN. Càng dễ dàng khi thực hiện phép chiếu trên thuộc tính tên tuyến cáp TTC. Có thể biến đổi biểu thức đại số ban đầu tối ưu hơn, bằng cách thực hiện các phép chiếu và chọn, tiếp sau mới thực hiện phép kết nối. Kết quả biến đổi như sau: TTC (σ MC# =’Việt nam’ (L_DAT) X (σ MC# =’Việt nam’( CAP ) X TUYEN)) Biểu thức này tương đương như biểu thức đại số ban đầu, nhưng nó tạo ra các quan hệ trung gian có kích cỡ nhỏ hơn nhiều so với kích cỡ của TUYEN X L_DAT X CAP. KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 159 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Cây đại số được tối ưu hóa Như vậy, biến đổi một biểu thức đại số quan hệ về một biểu thức đại số quan hệ tương đương tối ưu theo nghĩa sẽ cho cùng một kết quả nhưng với chi phí thời gian thực hiện và sử dụng bộ nhớ ít hơn rất nhiều. 4.3. Nguyên tắc tối ưu hoá Ưu tiên thực hiện các phép chiếu và chọn, nhằm giới hạn khối lượng dữ liệu trung gian. Giảm chi phí truy nhập bộ nhớ. Trước khi phải thực hiện phép tích Đề các, hãy tìm chiến lược truy nhập tốt nhất vào CSDL. Ví dụ như sử dụng các phép sắp xếp, hoặc chọn chỉ số trên thành phần tham gia vào tích Đề các. Thực hiện các phép kết nối cân bằng chi phí sẽ rẻ hơn nhiều so với chi phí thực hiện phép tích Đề các. Nhóm các phép toán chọn và chiếu liên tiếp thành một phép toán duy nhất. Nhóm các phép tích và chiếu liên tiép thành một phép toán duy nhất. Trong khi thi thực hiện phép tích có thể giới hạn chi phí thực hiện bằng phép chiếu. KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 160 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Tìm biểu thức chung trong một biểu thức. Nếu kết quả là một quan hệ không lớn lắm nhưng tần xuất xuất hiện nhiều lần, nên có biểu thức con chung. Đánh giá sơ bộ trước khi thực hiện câu hỏi. Số phép toán thực hiện, tổng chi phí thực hiện: thời gian, bộ nhớ ... Ví dụ: Tên các loại cáp sử dụng trên tuyến “T03” a) Ngôn ngữ đại số quan hệ Cách 1: Cách 2: b) Biểu diễn bằng ngôn ngữ SQL: CREATE VIEW KQ AS SELECT FROM R. M# , R. MC CAP R, L_DAT S WHERE S.T# = “T03” and R.M# = S.M# //Kiểm tra kết quả SELECT * FROM KQ KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 161 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Như vậy với cách biểu diễn trên, câu hỏi đã được phân rã thành 2 câu hỏi con theo chiều hướng ít tốn kém hơn. 4.4. Kỹ thuật tối ưu hoá các biểu thức đại số quan hệ. 4.4..1 Biểu thức quan hệ Biểu thức quan hệ là một biểu thức mà các toán hạng là các quan hệ trong một CSDL và các phép toán là các phép toán trong đại số quan hệ. Biểu thức E1 và E2 tương đương với nhau, ký hiệu là E1 ≅ E2 , nếu chúng biểu diễn cùng một ánh xạ, nghĩa là các quan hệ giống nhau trong biểu thức, thì kết quả cũng giống nhau. Khi thực hiện các phép toán trong một biểu thức quan hệ, các phép toán một ngôi có thứ tự ưu tiên cao hơn so với phép toán hai ngôi. Có thể xem phép chiếu được ưu tiên hơn so với phép hợp, hoặc phép trừ. Tuỳ từng hệ cụ thể mà có thể có những quy định về thứ tự ưu tiên. Ví dụ trong một hệ có qui định phép giao có thứ tự ưu tiên trước phép hợp hai quan hệ. Mỗi biểu thức quan hệ thông thường là một câu hỏi của người sử dụng. Hay nói cách khác, người sử dụng thể hiện nội dung câu hỏi để truy nhập vào CSDL thông qua một biểu thức quan hệ nào đó. Khi một một câu hỏi đã được được đưa vào hệ thống, thì hệ thống cần thực hiện một số các chức năng tiếp theo: Kiểm tra chức năng của biểu thức E. Nếu biểu thức E không có lỗi, thì thực hiện việc tối ưu hoá quá trình thực hiện E. Tối ưu hoá là xác định trật tự thực hiện các phép toán trong E nhằm đáp ứng các nhu cầu: Cho cùng kết quả cho việc thực hiện theo trật tự ban đầu của biểu thức E, giảm bớt được miền nhớ và thời gian thực hiện. Cuối cùng thực hiện biểu thức đã được tối ưu hoá E. Khi các quan hệ càng nhỏ thì thời gian chi phí cần thiết để thực hiện các thao tác trên quan hệ càng thấp. Quan hệ nhỏ hiểu theo nghĩa là lực lượng và bậc của quan hệ nhỏ. Đối với các phép toán quan hệ thì phép chọn sẽ làm giảm kích thước chiều dọc, KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 162 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU phép chiếu làm giảm kích thước chiều ngang. Các phép toán này thường hay được sử dụng trong các biểu thức quan hệ. Phép chia cũng có tác dụng làm nhỏ quan hệ, nhưng tần số sử dụng không nhiều. Nhận thấy rằng muốn tối ưu hoá một biểu thức quan hệ, chuyển đổi thích hợp trật tự các phép toán quan hệ sao cho các phép chiều, chọn có thể thực hiện càng sớm càng tốt và thực hiện phép kết nối càng muộn càng tốt. 4.4.2. Biến đổi biểu thức quan hệ Hai biểu thức đại số quan hệ được gọi là tương đương nếu trên một mô hình dữ liệu bất kỳ, hai biểu thức này tạo ra hai quan hệ có tập các bộ dữ liệu giống nhau. Giống nhau theo nghĩa thứ tự của các bộ không nhất thiết phải tương ứng với nhau, có thể thứ tự khác nhau và thứ tự của các thuộc tính cũng không nhất thiết phải như nhau. Nói một cáh khái quát, 2 quan hệ trùng nhau nếu 2 bộ thuộc tính là như nhau và bộ dữ liệu của quan hệ này cũng là bộ dữ liệu của quan hệ kia và ngược lại. 4.4.3. Một số nhận xé khi thực hiện tối ưu hoá câu hỏi Tối ưu hoá câu hỏi dựa trên chi phí thấp là chủ yếu. Tuy nhiên nhiều khi thực hiện việc tối ưu cũng rất tốn kếm. Qua kinh nghiệm, người ta rút ra một số nhận xét sau: Thực hiện các phép chọn càng sớm càng tốt: Thường các phép chọn chỉ quan tâm đến các bộ thỏa một điều kiện nào đó, như vậy các bước tiếp theo chỉ thực hiện trên một quan hệ kích cỡ nhỏ hơn. Đây là một nhận xét kinh nghiệm, vì không phải lúc nào cũng cho chi phí giảm . Ví dụ biểu thức: Trong đó: F có liên quan đến các thuộc tính của s. Phép chọn này có thể được thực hiện trước khi kết nối. Nếu r là vô cùng nhỏ so với s khi đó thực hiện phép chọn sớm sẽ hiệu quả cao. Phép chiếu cũng như phép chọn, làm giảm độ lớn của các quan hệ. Vì thế bất cứ lúc nào cũng cần tạo ra một quan hệ tạm thời, có lợi khi áp dụng ngay lập tức với bất cứ phép chiếu nào nếu có thể. KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 163 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Thực hiện các phép chọn sớm hơn các phép chiếu thường tốt hơn, vì phép lựa chọn có khả năng làm giảm bớt độ lớn của các quan hệ và cho phép sử dụng các chí số để truy nhập cơ sở dữ liệu. Sau đây là cách khái quát các bước trong một thuật toán tối ưu hoá kinh nghiệm tiêu biểu. 1. Tách các phép chọn liên kết thành một chuỗi phép chọn riêng lẻ. Bước này dựa trên qui tắc tương đương. 2. Chuyển các phép chọn xuống dưới cây đại số để thực hiện trước. Bước này sử dụng các tính chất giao hoán và tính chất phân phối của các phép chọn được thể hiện trong các qui tắc tương đương. Chăng hạn, biến đổi hoặc thành mỗi khi có thể. Thực hiện các phép chọn dựa trên giá trị càng sớm càng giảm được chi phí của sự sắp xếp và sự hoà lẫn các kết quả trung gian. 3. Xác định các phép chọn và các phép kết nối sẽ đưa ra các biểu thức quan hệ nhỏ nhất, nghĩa là sẽ đưa ra số bộ dữ liệu ít nhất. Sử dụng tính chất kết hợp của phép toán để xắp xếp lại cây cho các quan hệ node-lá vơi sự lựa chọn thu hẹp nàyđược thực hiện trước. Bước này dựa vào tính chất kết hợp của phép toán nhị phân đã cho của qui tắc tương đương. Lưu ý rằng, phép chọn bị hạn chế khi số các bản ghi không thỏa điều kiện, vì vậy cần phải cân nhắc tính chất của phép chọn hoặc điều kiện kết nối. 4. Có thể thay phép kết nối của kết quả theo tích Đề-các bằng một điều kiện chọn. Kết quả phép tich Đề-các thường tốn kém khi thực hiện vì khi nhân bao gồm một bản ghi cho mỗi kết nối của các bản ghi từ quan hệ A và quan hệ B. Phép chọn này có thể làm giảm đáng kể một số bản ghẻptong quá trình thực hiện kết nối. It tốn kém hơn nhiều so với phép tich Đề-các. 5. Phá vỡ và chuyển càng nhanh càng tốt danh sách các thuộc tính trong phép chiếu xuống phía dưới cây, tạo ra phép chiếu ở nơi cần. Bước này dựa trên các đặc tính của phép chiếu đã qui định trong các qui tắc tương đương. KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 164 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU 6. Nhận dạng các cây con mà các phép toán của nó thực hiện theo đường không rẽ nhánh và thực thi chúng. Tóm lại các phép chọn sớm sẽ làm giảm bớt số bộ dữ liệu và phép chiếu sớm làm giảm số các thuộc tính. 4.5. Tối ưu hóa bằng khung nhìn (Materialized Views) Thông thường, quan hệ kết quả được sinh ra bởi các câu hỏi truy vấn sẽ được lưu trữ trong các khung nhìn đã được định nghĩa. Ngược lại, khung nhìn cụ thể hóa là khung nhìn lưu trữ toàn bộ dữ liệu tính toán và kết quả tính toán. Trong nhiều ứng dụng mà các thao tác lặp lại nhiều lần, có thể sử dụng các kết quả của các thao tác trước cho các thao tác sau rất hiệu quả. Ví dụ nếu trước đấy có câu hỏi truy vấn về tổng số từng loại cáp lắp đặt trên tuyến: CREATE VIEW SO_LUONG (Loai_cap, SLG) AS SELECT MC# , SUM (SL) FROM L_DAT GROUP BY MC# Và nếu đựơc lưu trữ trong khung nhìn cụ thể hóa thì những câu hỏi về số lượng một số loại cáp cụ thể nào đó sẽ tìm kiếm nhanh chóng, không mất nhiều thời gian. 4.5.1 Phép kết nối Giả sử . Giả sử, chèn thêm vào R một tập IR . Nếu giá trị cũ của R được biểu thị bằng Rold , và giá trị mới của R bằng Rnew, thì Rnew= Rold ∪ IR . KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 165 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Khi đó, giá trị cũ của Vold được biểu diễn bởi được biểu diễn bởi Khi đó ,và giá trị mới Vnew . biểu diễn biểu thức tối ưu như sau: Như vậy, khi thực hiện phép chèn thêm, nếu sử dụng phương pháp khung nhìn cụ thể hóa, thì việc thực hiện sẽ đơn giản hơn, chỉ cần thêm vào nội dung cũ. Tương tự, giả sử cần xóa một số bộ DR khỏi quan hệ R, với khung nhìn cụ thể hóa, chỉ cần thực hiện: 4.5.2 Phép chọn và phép chiếu Xem xét phép chọn V = σF(R): • Chèn thêm tập các bộ IR vào quan hệ R: • Xóa khỏi R một tập các bộ DR: Xem xét phép chọn V = ΠA(R): Giả sử quan hệ R có dạng R=(A,B) và chứa hai bộ (a,2) và (a,3). Sau khi thực hiện phép chiếu trên thuộc tính A, quan hệ kết quả ΠA(R) chứa bộ đơn (a). Nếu xóa bộ (a,2) ra khỏi R: • Xóa trực tiếp từ ΠA(R): khi đó quan hệ ΠA(R) là quan hệ rỗng. • Xóa từ quan hệ R trước khi chiếu, quan hệ ΠA(R) sẽ chứa bộ đơn (a). KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 166 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Như vậy tùy từng trường hợp cụ thể sử dụng phương pháp khung nhìn. Trong trường hợp xóa sau phép chiếu đúng, nếu lực lượng của ΠA(R) lớn hơn 1. Ngược lại sẽ cho kết quả sai. 4.5.3 Các phép toán khối Các phép toán khối, về nguyên tắc cũng như các phép chiếu và chọn. Các phép khối trong SQL là các phép COUNT(), SUM() , AVG(), MIN() và MAX(). COUNT(): Xem xét khung nhìn cụ thể hóa V= COUNT(GROUP BY A)), phân hoạch theo thuộc tính A và đếm theo nó: Chèn • Nếu không tồn tại, chèn thêm ( t.A.1) vào khung nhìn cụ thể hóa. • Nếu tồn tại ( t.A) , thêm 1 vào giá trị đếm của nhóm. SUM(): V = SUM(GROUP BY A)). AVG() MIN(), MAX(). 4.5.4 Các phép toán khác Phép giao tập hợp: V = R ∩ S, : • Chèn một bộ vào R. • Xóa khỏi tập giao nếu nó tồn tại trong đó. Các phép toán tập hợp khác: Hợp và hiệu được thực hiện theo kiểu tương tự . 4.5.5 Tối ưu hóa các câu hỏi và các khung nhìn cụ thể hóa Tối ưu hóa các câu hỏi có thể được thực hiện bằng cách xem các khung nhìn cụ thể hoá như là các quan hệ . Tuy nhiên, sử dụng phương pháp các khung nhìn cụ thể hóa tùy trong các trường hợp cụ thể. KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 167 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Biến đổi câu hỏi để sử dụng khung nhìn cụ thể hóa: Giả sử có một khung nhìn cụ thể và một câu hỏi . Khi đó câu hỏi có thể biến đổi và được sử dụng khung nhìn cụ thể như sau: Thay thế khung nhìn cụ thể bằng khung nhìn bình thường. Giả sử có một khung nhìn cụ thể và một câu hỏi của người sử dụng yêu cầu thực hiện: σ A= 10(V). Giả sử S có một chỉ số trên thuộc tính B và R có một chỉ số trên thuộc tính A. Khi đó phương án tốt nhất cho câu hỏi này có thể thay thế khung nhìn cụ thể V bởi khung nhìn bình thường: . Phép chọn và kết nối có thể được thực hiện một cách hiệu quả bằng cách sử dụng tương ứng các chỉ số trong R.A và S.B . Ngược lại đánh giá phép chọn một cách trực tiếp trên V có thể đòi hỏi sự quét toàn bộ V mà có thể tốn kém hơn nhiều. 4.5.6. Bài tập tối ưu hoá các câu hỏi. Xét các quan hệ sau: TUYEN (TC#, TC, DAI) CAP (MC#, MC, GIA, N#, NSX) L_DAT (TC#, MC#, SL) Trong đó: TC# : Mã tuyến cáp; MC# : Mã cáp TC :Tên tuyến cáp; MC :Tên gọi cáp DAI :Độ dài tuyến cáp; GIA :Đơn giá loại cáp N# :Mã nước sản xuất cáp; KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 168 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU NSX :Tên nước sản xuất cáp. SL :Số lượng cáp lắp đặt Ngữ nghĩa của dữ liệu như sau: Trên một tuyến cáp có nhiều loại cáp khác nhau đựôc lắp đặt. Một loại cáp có thể được lắp đặt trên nhiều tuyến. Thông tin về tuyến cáp: không tồn tại 2 mã tuyến trùng nhau. Không tồn tại mã 2 loại cáp trùng nhau. Ví dụ: Hãy liệt kê tất cả thông tin về các tuyến cáp có độ dài trên 50 km và lắp đặt các loại cáp do Việt nam sản xuất. Hình vẽ: a) Cây đại số ban đầu chưa tối ưu hóa b) Cây đại số đã tối ưu hóa a) Biểu thức đại số quan hệ ban đầu như sau: KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 169 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Kết nối tự nhiên các quan hệ TUYEN, CAP và L_DAT tạo thành một quan hệ trung gian với lực lượng bằng tích của bậc của 3 quan hệ và các thuộc tính là thuộc tính của 3 quan hệ. Tiếp theo thực hiện phép chọn với điều kiện chỉ quan tâm đến các lôại cáp do Việt nam sản xuất được lắp đặt trên các tuyến có chiều dài trên 50 Km. b) Biểu thức tối ưu Đây là biểu thức tương đương với biểu thức ban đầu. Quan hệ trung gian có kích thước nhỏ hơn cũng như về lực lượng. Thời gian thực hiện nhanh hơn, chi phí bộ nhớ ít hơn. Trước tiên thực hiện phép chọn trên quan hệ TUYEN, tạo quan hệ trung gian bao gồm các bộ thỏa chiều dài trên 50 km. Phép chọn trên các quan hệ CAP, tạo ra quan hệ có một bộ duy nhất, nước sản xuất là Việt Nam, và trên quan hệ L_DAT, gồm các bộ thỏa N# =’VNA’. Khi thực hiện phép kết nối các quan hệ trung gian trên, sẽ có quan hệ kích thước nhỏ hơn và lực lượng bé hơn, chi phí thấp hơn. Ví dụ: Hãy cho biết thông tin về các loại cáp do Việt nam sản xuất được lắp đặt trên các tuyến “T01” (Hà nội- Quảng ninh) và “T02” (Hà nội – Hải phòng) trong các năm 1990 đến 1999 có giá trị trên 2 tỷ đồng Viêt nam. Giả sử khung nhìn cần phải tạo có tên là CAP_VN chứa các thông tin về M# mã cáp, MC tên cáp, GIA giá cáp, T_DAI tổng độ dài và giá trị của cùng loại cáp GTR. Để tạo khung CAP_VN cần kết nối các quan hệ TUYEN, CAP và L_DAT: πS (σF (TUYEN x CAP x L_DAT). KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 170 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Trong đó: S là danh sách khung nhìn: CAP_VN: S = M#, MC, GIA, T_DAI, GTR. Điều kiện chọn F: F = (T# = “T01” ∨ T# =”T02” ) ∧ (NSX=’Viẹt Nam’ ) ∧ (1990 ≤ NG ≤ 1999 ) ∧ (SUM(DAI*SL*GIA) ≥ 2) ∧ (TUYEN.T#= L_DAT.T# ) ∧ (CAP.M# = L_DAT.M#)) Cây đại số chưa tối ưu hóa Tách biểu thức chọn F: F1 = {1990 ≤ NG ≤ 1999} F2 = {NSX=’Việt Nam’ } KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 171 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU F3 = {T# = “T01” ∨ T# =”T02” } F4 = { TUYEN.T#= L_DAT.T# } F5 = {CAP.M# = L_DAT.M# } F6 = {SUM(DAI*SL*GIA) ≥ 2} T1 = πT#,DAI(σF3 (TUYEN )) = πT#,DAI (σ T# = “T01” ∨ T# =”T02” (TUYEN )) T2 = πT#,M#,SL(σ F1 (L_DAT)) = π T#,M#,SL(σ 1990 ≤ YEAR ≤ 1999 (L_DAT)) T3 = π M#,MC,GIA(σ F2 (CAP) = π M#,MC,GIA(σ NSX=’Viẹt Nam’ (CAP)) T4 = σ F6 (( T1 F4 T2) F5 T3) T5 =π M#, MC (T4) . KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 172 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Cây cú pháp tối ưu hóa biểu thức quan hệ KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 173 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Biểu diễn bằng ngôn ngữ SQL: CREATE VIEW T1 AS SELECT T#, DAI FROM TUYEN WHERE T#="T01" AND T#="T03" CREATE VIEW T2 AS SELECT T#, M#, SL FROM L_DAT WHERE YEAR FROM NG ) BETWEEN 1990 AND 1999. CREAT VIEW T3 AS SELECT M#, MC, GIA FROM CAP WHERE NSX=’Viẹt Nam’ CREAT VIEW T4 AS SELECT M#, MC#, DAI*SL*GIA GT FROM T1, T2, T3 WHERE (T1.T#=T2.T# and T3.M#=T2.M# ) and DAI*SL*GIA ≥ 2 //Kiểm tra SELECT FROM * T4 KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 174 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU BÀI TẬP CHƯƠNG 4 CÂU HỎI TRẮC NGHIỆM Câu 1. Quá trình tối ưu hoá các câu hỏi truy vấn dữ liệu là quá trình: a. Cần thiết phải biến đổi các câu hỏi hợp lý b. Chi phí thời gian thực hiện các phép toán là ít nhất. c. Cần thiết phải biến đổi các câu hỏi hợp lý sao cho chi phí thời gian thực hiện các phép toán là ít nhất. d. Kết quả của các phép toán được biểu diễn duy nhất bằng một quan hệ. Câu 2. Ý nghĩa của biểu thức π TTC ( σ MC# =’Việt nam’ (TUYEN X L_DAT) X CAP)) a. Liệt kê tên tất cả loại cáp Việt nam. b. Liệt kê tên tất cả các loại cáp Việt nam có lắp đặt trên câc tuyến c. Liệt kê tên tất cả các tuyến có lắp đặt các loại cáp Việt nam. d. Liệt kê tên tất cả các tuyến cáp Câu 3. Hai biểu thức nào sau đây tương đương với nhau a. π TTC (σ MC# =’Việt nam’ (L_DAT) X (σ MC# =’Việt nam’( CAP ) X TUYEN)) b. π TTC ( σ MC# =’Việt nam’ (TUYEN X L_DAT) X CAP)) c. π TTC (σ MC# =’Việt nam’ (L_DAT) X σ MC# =’Việt nam’( CAP ) X TUYEN)) d. π TTC ( σ MC# =’Việt nam’ (CAP X L_DAT) X TUYEN)) KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 175 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Câu 4. Biểu thức nào dưới đây biểu diễn câu truy vấn: Tên các loại cáp sử dụng trên tuyến Hà nội- Hải phòng “T03” ?. Câu 5. Hãy chọn từ/cụm từ tương ứng để hoàn thiện khảng định sau: Tối ưu hoá câu hỏi không những tối ưu về thời gian truy xuất thông tin mà là nhân tố quan trọng trong việc bảo đảm...............với các chiến lược tìm kiếm, truy xuất dữ liệu. a. Tính khả thi của dữ liệu b. Tính toàn vẹn dữ liệu c. Tính độc lập của dữ liệu d. Tính nhất quán của dữ liệu Câu 6. Hãy chọn từ/cụm từ tương ứng để hoàn thiện khảng định sau: Có nhiều kỹ thuật khác nhau để tối ưu hoá các câu hỏi, trong đó có kỹ thuật phân rã câu hỏi dựa trên.......... a. Ngôn ngữ của đại số quan hệ. b. Ngôn ngữ dữ liệu. c. Biểu thức đại số quan hệ. d. Suy dẫn logic từ các tiên đề Armstrong Câu 7. Hãy chọn từ/cụm từ tương ứng để hoàn thiện khảng định sau: Biến đổi một biểu thức đại số quan hệ về một biểu thức đại số quan hệ tương đương ...... theo nghĩa sẽ cho cùng một kết quả nhưng với chi phí thời gian thực hiện và sử dụng bộ nhớ ít hơn rất nhiều a. Ngữ nghĩa dữ liệu KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 176 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU b. Tối ưu c. Thực hiện d. Tiết kiệm bộ nhớ Câu 8. Hãy chọn từ/cụm từ tương ứng để hoàn thiện khảng định sau: Cách tiếp cận cơ bản để đánh giá tối ưu hóa biểu thức quan hệ thường cây kết nối trái theo chiều sâu, là phương án ưu hóa câu hỏi R không quan tâm tới thứ tự kết nối khi các toán hạng bên phải của mỗi phép kết nối . Cây kết nối trái theo chiều sâu rất có....... a. Chi phí rất nhỏ. b. Chi phí bằng chi phí biểu thức ban đầu. c. Cho phí thời gian nhỏ. d. Chí phí bộ nhớ nhỏ Câu 9. Hãy chọn từ/cụm từ tương ứng để hoàn thiện khảng định sau: Trong biểu thức quan hệ các toán hạng là ..........và các phép toán là các phép toán trong đại số quan hệ. a. Các quan hệ trong một CSDL b. Các thuộc tính. c. Các phụ thuộc hàm. d. Các phần tử Câu 10. Biểu thức E1 và E2 tương đương với nhau (E1 ≅ E2) , nếu chúng biểu diễn cùng một ánh xạ, nghĩa là .......... giống nhau trong biểu thức, thì kết quả cũng giống nhau. a. Các quan hệ. b. Các thuộc tính. c. Các bản ghi. d. Các toán hạng KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 177 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU CÂU HỎI VÀ BÀI TẬP Câu hỏi: Hãy tối ưu hoá các câu hỏi sau: 1. Thông tin về các tuyến có lắp đặt các loại cáp do Việt nam sản xuất có giá trị trên 10 tỷ đồng. 2. Thông tin về các tuyến cáp có lắp đặt các loại cáp sau năm 1999, hoặc có các loại cáp do Việt nam sản xuất. 3. Thông tin về các tuyến cáp xuất phát từ Hà nội, có các loại cáp được lắp đặt sau năm 1999, tổng giá trị tuyến cáp không lớn hơn 3 tỷ đồng. 4. Thông tin về các tuyến cáp có tổng giá trị lớn hơn tổng giá trị các tuyến cáp xuất phát từ Hà nội. 5. Thông tin về các tuyến cáp mà trong đó mỗi một loại chỉ có một loại cáp được lắp đặt , hoặc có có ít nhất 5 loại cáp được lắp đặt. 6. Thông tin về các tuyến cáp mà trong đó lắp đặt tất cả các loại cáp có trong danh mục. 7. Tổng giá trị các loại cáp lắp đặt trong các tuyến. 8. Thông tin về các tuyến cáp không sử dụng các loại cáp do Việt nam sản xuất. 9. Thông tin về các tuyến cáp có mã loại cáp không đúng với danh mục ( ngoài danh mục). 10. Tổng giá trị các tuyến cáp 11. Thông tin về các tuyến cáp có tổng giá trị nhỏ hơn giá trị của tuyến mang mã hiệu “T15” 12. Thông tin về các tuyến cáp mà trong đó số loại cáp lắp đặt nhiều hơn số loại cáp lắp đặt trong tuyến “T01”. 13. Thông tin về các loại cáp do Việt nam sản xuất có giá trị trên 10 tỷ đồng, được sử dụng trong năm 1999. 14. Thông tin về các loại cáp do Việt nam sản xuất hoặc do các liên doanh Việt sản xuất. 15. Thông tin về các loại cáp được lắp đặt trên các tuyến xuất phát từ Hà nội, có giá trị cáp không lớn nhỏ 5 triệu đồng. KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 178 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU 16. Thông tin về các loại cáp có chiều dài sử dụng và giá trị của nó lớn hơn chiều dài và giá trị sử dụng của loại cáp mang mã hiệu “M03”. 17. Thông tin về các loại cáp được sử dụng trên hơn 10 tuyến. 18. Thông tin về các loại cáp được sử dụng duy nhất trên một tuyến cáp. 19. Thông tin về các loại cáp được sử dụng trên tất cả các tuyến. 20. Thông tin về các loại cáp chưa được sử dụng trên các tuyến. 21. Thông tin về các loại cáp được sử dụng trên 2/3 tuyến cáp. 22. Thông tin về các loại cáp được lắp đặt trên các tuyến xuất phát từ Hà nội, hoặc đến Hà nội có các loại cáp do Việt Nam sản xuất, có giá trị cáp lớn 5 triệu đồng. BÀI TẬP Bài 1. Giả sử các quan hệ R1(A,B,C), R2(C,D,E) và R3 (E,F), và R1 có 1000 bộ, R2 có 1500 bộ và R3 có 750 bộ. Đánh giá kích cỡ của tích Đề các của R1, R2 và R3. Hãy đề xuất một chiến lược hiệu quả để tính toán phép kết nối. Bài 2. Giả sử các quan hệ R1 (A,B,C), R2(A, D, F) và R3 (B, E, T, Z) và R1 có 3500 bộ, R2 có 500 bộ và R3 có 700 . Hãy tính chi phí cho các thao tác sau: Thêm 100 bộ vào R1 . Thêm 20 bộ vào R2. Thêm 20 bộ vào R3 . Biết chi phí của R1 X R hãy tính chi phí R1 X R2 X R3 Bài 3. Hãy tính chi phí cho các biểu thức quan hệ sau: Thông tin về các loại cáp có giá trị trung bình cao hơn giá trị trung bình của các loại cáp do Việt nam sản xuất được lắp đặt trên từng tuyến. KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 179 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU CHƯƠNG 5 BẢO MẬT VÀ TOÀN VẸN DỮ LIỆU Mục tiêu: Giới thiệu một cách tổng quát về khái niệm an toàn và toàn vẹn dữ liệu. và một số biện pháp cần thiết để bảo vệ cơ sở dữ liệu. “An toàn” dữ liệu nghĩa là các hệ cơ sở dữ liệu cần phải được bảo vệ chống truy nhập trái phép như sửa đổi hay phá hoại dữ liệu. Tính toàn vẹn dữ liệu theo nghĩa dữ liệu không mâu thuẫn, dị thường thông tin trong các hệ thống khi thực hiện các phép lưu trữ, truy vấn, tìm kiếm. Nội dung của chương gồm các phần sau: Sự cần thiết phải bảo vệ an toàn cơ sở dữ liệu Tính toàn vẹn của dữ liệu Ngôn ngữ vấn tin - ngôn ngữ ràng buộc toàn vẹn An toàn cơ sở dữ liệu. Các mức độ bảo vệ an toàn cơ sở dữ liệu. Bảo mật cơ sở dữ liệu 5.1. Sự cần thiết phải bảo vệ an toàn CSDL Hiện nay cùng với sự phát triển nhanh chóng của CNTT và sự bùng nổ của hệ thống mạng thì an toàn và bảo mật thông tin luôn là vấn đề quan tâm lớn nhất của các tổ chức, doanh nghiệp. Cơ sở dữ liệu của một cơ quan, một xí nghiệp, của một ngành... thường được cài đặt tập trung hay phân tán trên các máy chủ trên mạng, là tài nguyên thông tin chung cho nhiều người cùng sử dụng. Các phương thức tấn công thông qua mạng có thể làm mất mát thông tin, thậm chí có thể làm sụp đổ hoàn toàn hệ thống thông tin của doanh nghiệp.Vì vậy các hệ cơ sở dữ liệu cần phải có cơ chế kiểm soát, quản lý và truy xuất khai thác thông tin sao cho dữ liệu phải được an toàn và toàn vẹn. Thuật ngữ “an toàn” dữ liệu có nghĩa là các hệ cơ sở dữ liệu cần phải được bảo vệ chống truy nhập nhằm sửa đổi hay phá hoại một cách chủ định hay không chủ định. KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 180 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Như vậy các hệ thống cơ sở dữ liệu cần thiết phải quản trị, bảo vệ tập trung, nhằm bảo đảm được tính toàn vẹn và an toàn dữ liệu. Toàn vẹn dữ liệu khác với an toàn dữ liệu, tuy rằng chúng có mối quan hệ mật thiết với nhau. Có thể sử dụng chung một số biện pháp để thực hiện. Có rất nhiều mối nguy hiểm đe doạ đến các hệ thống dữ liệu: Cơ sở dữ liệu được cài đặt tập trung hay phân tán trên các vị trí địa lý khác nhau, được khai thác từ các đầu cuối khác nhau theo chế độ Client/Server. Nhiều người sử dụng truy nhập và khai thác trên cùng một cơ sở dữ liệu. Rất nhiều loại dữ liệu được tải về giữ trên các máy cục bộ để khai thác. Truy xuất vào các hệ cơ sở dữ liệu bằng nhiều ngôn ngữ thao tác dữ liệu khác nhau, bằng nhiều hệ ứng dụng khác nhau trên cùng một nội dung thông tin. Vì vậy có thể xẩy ra. Những sai sót ngoài ý muốn, khi thực hiện thêm, sửa, xoá hay do lỗi khi lập trình. Truy nhập trái phép với mục đích xấu: sửa, xoá thông tin hay đánh cắp thông tin... Sự cố kỹ thuật như lỗi do các thiết bị, lỗi lập trình... An toàn và bảo mật thông tin là nhiệm vụ rất nặng nề và khó đoán trước được. Phương thức bảo mật CSDL bao gồm các hệ thống, các quy trình và thủ tục để bảo vệ CSDL khỏi các cuộc tấn công phá hoại cũng như các hành vi sử dụng không đúng hoặc sai sót của con người. Có rất nhiều phương thức để bảo mật CSDL như bảo đảm an ninh hệ thống, có thể là để ngăn chặn, hoặc làm giảm, hoặc giám sát, hoặc phát hiện, hoặc để khắc phục các sự cố xảy ra, hoặc chỉ dùng để phục hồi lại hệ thống khi có sự cố. 5.2. Tính toàn vẹn dữ liệu 5.2.1 Các ràng buộc toàn vẹn Các mô hình dữ liệu không đủ để diễn tả mọi ngữ nghĩa của thế giới thực, vì vậy phải bổ sung thêm các đặc tả thường gọi là các rằng buộc toàn vẹn. Rằng buộc toàn vẹn là một đặc tả mà một CSDL phải thỏa mãn để giữ được tính đúng đắn của nó. Rằng buộc toàn vẹn thường được diễn đạt dưới dạng 1 tân từ. Như vậy các ràng buộc toàn vẹn dữ liệu phải bảo đảm tính độc lập và toàn vẹn dữ liệu. Dữ liệu lưu trữ trong các hệ KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 181 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU thống cơ sở dữ liệu phải phản ánh hiện thực khách quan trong mọi thời điểm có thể, không dư thừa và mâu thuẫn thông tin. Có 2 loại ràng buộc chủ yếu: - Rằng buộc có tính cấu trúc: Liên quan đến các giá trị trong CSDL (tên, kiểu, độ dài của thuộc tính). Mô tả tính chất của các thuộc tính khi tạo lập CSDL như tên, kiểu, độ dài của thuộc tính. Chẳng hạn thuộc tính “Số điện thoại” là kiểu chuỗi có độ dài đúng bằng 7 ký tự. Hệ thống sẽ không chấp nhận, nếu nhập vào CSDL một giá trị kiểu số hoặc kiểu xâu nhưng chưa đủ hoặc vượt quá 7 ký tự. Ràng buộc biểu diễn giá trị của các thuộc tính bằng đẳng thức toán học, các toán hạng là giá trị của các thuộc tính khác. Điển hình là những ràng buộc hạn chế một trường chỉ nhận được một số giá trị trong một phạm vi nào đó hoặc diễn tả một mối liên hệ số học giữa các trường khác. - Rằng buộc logic giữa các thuộc tính: biểu diễn mối quan hệ giữa các thuộc tính là tập các rằng buộc được mô tả bằng khái niệm phụ thuộc hàm và phụ thuộc đa trị (còn gọi là phụ thuộc dữ liệu). Theo định nghĩa, mọi khoá của một lược đồ quan hệ đều có tính duy nhất. Không tồn tại 2 bộ có cùng một giá trị trên các thuộc tính khoá. Giá trị của khoá theo quy định không được nhận giá trị null hay giá trị không xác định. Hệ quản trị CSDL có trách nhiệm phải từ chối khi giá trị của khoá nếu vẫn còn chứa các giá trị chưa xác định hoặc đã tồn tại trong cơ sở dữ liệu thông qua các phép thêm hoặc sửa đổi dữ liệu. Như vậy các ràng buộc toàn vẹn dữ liệu phải bảo đảm tính độc lập và toàn vẹn dữ liệu. Dữ liệu lưu trữ trong các hệ thống cơ sở dữ liệu phải phản ánh hiện thực khách quan trong mọi thời điểm có thể, không dư thừa và mâu thuẫn thông tin. Ví dụ: Cho CSDL gồm các quan hệ sau: KHOA (Mã-khoa, Tên-khoa), là một quan hệ 2 ngôi. KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 182 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Tân từ: "Mỗi khoa có một tên gọi và một mã số duy nhất để phân biệt với tất cả các khoa khác của trường". LỚP-HỌC (Mã-lớp, Tên-lớp, Niên-khóa, Số-học-viên, Mã-khoa) là quan hệ 5 ngôi với tân từ: "Mỗi lớp học trong trường có một mã số quy ước duy nhất để phân biệt với tất cả các lớp học khác trong trường; có một tên gọi của lớp học, một số lượng học viên theo học và thuộc một khoa của trường". MÔN-HỌC (Mã-môn, Tên-môn, Số-đv-học-trình) là quan hệ 3 ngôi. Tân từ: "Mỗi môn học có một tên gọi cụ thể, được học trong một số đơn vị học trình nhất định và ứng với môn học là một mã số duy nhất để phân biệt với mọi môn học khác". HỌC-VIÊN (Mã-học-viên, Tên-học-viên, Ngày-sinh, Quê-quán, Mã-lớp) là quan hệ 5 ngôi. Tân từ: "Mỗi học viên có một họ và tên, ngày sinh, quê quán, ... và được cấp một mã số duy nhất để phân biệt với mọi học viên khác trong trường; học viên được ghi danh vào một lớp học duy nhất trong trường" 5.2.2 Các yếu tố của rằng buộc toàn vẹn (RBTV) Khi xác định một RBTV cần chỉ rõ: - Điều kiện (tức là nội dung) của RBTV, từ đó xác định cách biểu diễn. - Bối cảnh xảy ra RBTV: trên một hay nhiều quan hệ, cụ thể trên các quan hệ nào. -Tầm ảnh hưởng của RBTV. Khả năng tính toàn vẹn dữ liệu bị vi phạm. - Hành động cần phải có khi phát hiện có RBTV bị vi phạm 5.2.3 Phân loại các ràng buộc toàn vẹn a. Rằng buộc toàn vẹn tĩnh: Là một điều kiện mà CSDL phải thỏa mãn vào bất cứ lúc nào để có thể ở trong trạng thái đúng đắn. Bao gồm: KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 183 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU - Các rằng buộc trên thuộc tính - Các rằng buộc trên bộ - Rằng buộc trên quan hệ - Rằng buộc trên nhiều quan hệ *Các rằng buộc trên thuộc tính - Rằng buộc tồn tại: thuộc tính đó phải xác định trong mọi bộ của quan hệ (≠ null) VD: thuộc tính khóa - Rằng buộc về miền: giá trị của mỗi thuộc tính A phải là giá trị nguyên tử và thuộc 1miền giá trị Dom(A) VD: Thuộc tính điểm có giá trị từ 0..10 Thuộc tính BAOHIEM luôn bắt đầu bằng số 1 hoặc 2 - Rằng buộc về giá trị mặc định: chỉ rõ giá trị phải gán cho 1 thuộc tính khi tạo lập VD: NGAY_HĐ lấy giá trị mặc định là ngày hiện tại. * Các rằng buộc trên bộ: thể hiện bằng 1 tân từ hay 1 công thức được đề cập đến các giá trị của nhiều thuộc tính VD:Thuộc tính BAOHIEM nếu bắt đầu bởi sô 1 thì GIOITINH phải lấy giá trị là nam ngược lại là nữ Hoặc ThanhTien=SoLuong*ĐơnGia *Rằng buộc trên quan hệ: - Rằng buộc về khóa: Ràng buộc khoá và ràng buộc trên các giá trị không xác định (null): Một quan hệ được định nghĩa như một tập hợp các bộ. Theo định nghĩa, các KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 184 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU phần tử của một tập hợp là khác nhau, vì vậy, mọi bộ trong quan hệ phải khác nhau. Điều đó có nghĩa là không có hai bộ có cùng một tổ hợp giá trị cho tất cả các thuộc tính của chúng. Thông thường, có tồn tại các tập con của các thuộc tính của một lược đồ quan hệ có tính chất là không có hai bộ nào ở trong mọi trạng thái quan hệ r của R có cùng một tổ hợp giá trị cho các thuộc tính của nó. Giả sử chúng ta ký hiệu một tập con như vậy là SK, khi đó với hai bộ khác nhau bất kỳ t1 và t2 trong một trạng thái quan hệ r của R chúng ta có ràng buộc là t1[SK] ≠ t2[SK]. Tập hợp thuộc tính SK như vậy được gọi là một siêu khoá của lược đồ quan hệ R. Một siêu khoá SK xác định rõ một ràng buộc về tính duy nhất, phát biểu rằng không có hai bộ khác nhau trong một trạng thái r của R có cùng một giá trị cho SK. Mỗi quan hệ có ít nhất là một siêu khoá mặc định, đó là tập hợp tất cả các thuộc tính của nó. Một khoá K của một lược đồ quan hệ R là một siêu khoá của R với tính chất là nếu bỏ đi bất kỳ thuộc tính A nào ra khỏi K thì sẽ còn lại một tập K không phải là siêu khoá của R. Như vậy, một khoá là một siêu khoá tối thiểu, nghĩa là đó là một siêu khoá mà ta không thể vứt bỏ thuộc tính nào ra khỏi nó mà vẫn giữ được ràng buộc về tính duy nhất. Ví dụ, xét quan hệ SINHVIÊN với các thuộc tính Mãsố, Họtên, Ngàysinh, Giớitính, Địachỉ. Thuộc tính {Mãsố} là một khoá của SINHVIÊN bởi vì không có hai bộ sinh viên có cùng một giá trị cho Mãsố. Mọi tập hợp thuộc tính có chứa Mãsố, vídụ {Mãsố, Họtên, Ngàysinh}, đều là một siêu khoá. Tuy nhiên, siêu khoá {Mãsố, Họtên, Ngàysinh} không phải là khoá bởi vì nếu bỏ đi thuộc tính Họtên hoặc Ngàysinh hoặc cả hai thì nó vẫn còn là một siêu khoá. Giá trị của một thuộc tính khoá có thể được sử dụng để xác định một cách duy nhất mỗi bộ trong một quan hệ. Ví dụ, KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 185 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU giá trị 4515202 của Mãsố xác định một cách duy nhất bộ giá trị tương ứng với sinh viên Lê Vân trong quan hệ SINHVIÊN. Chú ý rằng một tập hợp thuộc tính tạo nên một khoá là một tính chất của lược đồ quan hệ. Điều ràng buộc là tính chất đó phải thỏa mãn trên mọi trạng thái của lược đồ. Một khoá được xác định từ ý nghĩa của các thuộc tính và tính chất là bất biến, tính chất đó phải thỏa mãn khi chúng ta chèn thêm các bộ mới vào quan hệ. Ví dụ, ta không thể và không được chỉ định thuôc tính Họtên của quan hệ SINHVIÊN là khoá bởi vì không có gì đảm bảo rằng không tồn tại hai sinh viên có cùng họ tên. Nói chung, một lược đồ quan hệ có thể có nhiều hơn một khoá. Trong trường hợp đó, mỗi một khoá được gọi là một khoá dự tuyển. Thông thường ta phải chỉ định một trong các khoá dự tuyển làm khoá chính của quan hệ. Khoá chính là một khoá dự tuyển mà các giá trị của chúng được dùng để xác định các bộ trong quan hệ. Ta quy ước rằng, các thuộc tính tạo nên khoá chính của một lược đồ quan hệ được gạch dưới. Ví dụ: SINHVIÊN( Mãsố, Họtên, Ngàysinh, Giớitính, Địachỉ ). Chú ý rằng khi một lược đồ quan hệ có nhiều khoá dự tuyển, việc lựa chọn một khoá dự tuyển để làm khoá chính là tuỳ ý, tuy nhiên tốt nhất là chọn khoá chính gồm một thuộc tính hoặc có số các thuộc tính ít nhất. Một ràng buộc khác trên các thuộc tính chỉ rõ khi nào thì cho phép các giá trị null. Những thuộc tính luôn luôn phải có một giá trị xác định và hợp lệ thì bị ràng buộc là NOT NULL. - Rằng buộc phụ thuộc hàm - Rằng buộc về dạng chuẩn - Rằng buộc về bản số KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 186 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU *Rằng buộc trên nhiều quan hệ: -Rằng buộc về khóa ngoài -Rằng buộc toàn vẹn tham chiếu b. Rằng buộc toàn vẹn động Là các rằng buộc nhằm đặc tả 1 thay đổi trạng thái đúng đắn của CSDL. Bao gồm: - Rằng buộc định nghĩa bởi luật ứng xử - Rằng buộc định nghĩa bởi các tiền đề, hậu đề *Rằng buộc định nghĩa bởi luật ứng xử: Các rằng buộc này chỉ ra các hành động phải thực hiện đáp lại 1 thay đổi trạng thái chợt đến trong CSDL. *Rằng buộc định nghĩa bởi các tiền đề, hậu đề - Rằng buộc loại tiền đề - Rằng buộc loại hậu đề - Rằng buộc tiền và hậu đề VD: không được loại bỏ1khách hàng còn có các đơn hàng chưa thanh toán 5.3. Vấn đề an toàn và quyền truy nhập cơ sở dữ liệu - Dữ liệu lưu trữ trong CSDL cần phải được bảo vệ để tránh việc truy nhập trái phép và phá hoại có chủ định hay không chủ định khi thực hiện cập nhật, sửa đổi hay bổ sung thông tin trong các cơ sở dữ liệu. - Cần phải có biện pháp bảo vệ chống lại việc đưa dữ liệu vào một cách không nhất quán ảnh hưởng nghiêm trọng đến tính toàn vẹn dữ liệu. Các dạng truy cập có chủ định bao gồm: KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 187 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Không cho phép đọc dữ liệu. Không cho phép sửa đổi dữ liệu. Không cho phép phá huỷ dữ liệu. 5.3.1. Sự vi phạm an toàn cơ sở dữ liệu - Vấn đề an toàn cơ sở dữ liệu đề cập đến việc bảo vệ chống lại sự truy cập có chủ định. - Việc bảo vệ tuyệt đối các hệ cơ sở dữ liệu khỏi truy nhập là không thể, nhưng phải có các biện pháp đủ mạnh để ngăn chặn hầu hết truy cập trái phép vào cơ sở dữ liệu. Các dạng truy cập có chủ định bao gồm: Không cho phép đọc dữ liệu. Không cho phép sửa đổi dữ liệu. Không cho phép phá huỷ dữ liệu. 5.3.2. Các mức độ an toàn cơ sở dữ liệu Mức độ an toàn hệ thống cơ sở dữ liệu Mức độ an toàn hệ thống điều hành An toàn mức độ mạng Nhận diện người sử dụng Bảo vệ mức vật lý Kiểm tra truy nhập - Mức độ an toàn hệ thống cơ sở dữ liệu: Tùy thuộc vào yêu cầu của người sử dụng mà người quản trị cơ sở dữ liệu cấp phép truy nhập một phần vào cơ sở dữ liệu. Những người sử dụng khác có thể được phép thực hiện các câu hỏi truy vấn, nhưng có thể bị ngăn cấm ý định sửa đổi dữ liệu. KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 188 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU - Mức độ an toàn hệ thống điều hành: Mức hệ thống kiểm soát toàn bộ mức điều hành hệ thống. Vấn đề an toàn mức hệ thống điều hành sẽ được đảm bảo bởi mức độ an toàn hệ thống cơ sở dữ liệu. An toàn trong hệ điều hành đã được tiến hành tại nhiều cấp độ từ sắp xếp các mật mã truy cập vào hệ thống cho tới sự cô lập các quá trình đang cùng xử lý trong hệ thống. Tệp hệ thống cũng cung cấp một số cấp độ bảo vệ. Sự tham khảo những chú ý trong thư mục là bao quát của những chủ đề này trong các bài học về hệ thống điều hành. - An toàn mức độ mạng. Hầu hết các hệ thống cơ sở dữ liệu đều cho phép truy cập từ xa thông qua các thiết bị đầu cuối. An toàn dữ liệu mức độ mạng là chống ăn cắp thông tin, sao chép thông tin và sửa đổi nội dung thông tin trên đường truyền. Vân đề an toàn cấp mức mạng đã đạt được nhiều kết quả, ứng dụng phổ biến trên mạng Internet. Danh sách các chú ý trong thư mục đã bao quát nền tảng nguyên lý của vấn đề an toàn mạng. - Nhận diện người sử dụng: Từ định nghĩa an toàn dữ liệu có thể suy ra rằng, hệ quản trị cơ sở dữ liệu DBMS không cho phép người sử dụng được thực hiện một thao tác nào nếu không được phép của người quản trị CSDL. Người quản trị CSDL phải: Xác định cho hệ thống những thao tác mà người sử dụng được phép thực hiện. Cung cấp một phương tiện cho người sử dụng để hệ thống nhận biết họ. Nói chung người sử đụng đều được trao những quyền khác nhau. Những quyền này có thể bảo đảm quyền đọc một số phần của cơ sở dữ liệu, quyền chèn thêm, xóa hay sửa đổi dữ liệu. Hình thức thông dụng nhất để nhận ra người sử dụng là mật khẩu, và chỉ có hệ thống và người sử dụng biết. Mật khẩu cũng được hệ thống bào vệ như bảo vệ dữ liệu. - Bảo vệ mức vật lý: Một mô hình bảo vệ đáng tin cậy cũng có khả năng bị tấn công vào cơ sở dữ liệu, từ việc phá được mật khẩu đến việc đánh cắp các thiết bi. Có thể chống đánh cắp khá hiệu quả bằng cách mã hóa, che dấu dữ liệu. Một hệ thống có bảo mật cao cần phải có những phương thức nhận diện khác tốt hơn mật khẩu, như nhận diện từng người sử dụng qua một nhân viên bảo vệ, hoặc kết với các quy định về hành chính... KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 189 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU - Kiểm tra truy nhập: Với mỗi người sử dụng hệ thống sẽ quản lý một hồ sơ được phát sinh từ việc các chi tiết về thủ tục xuất trình, xác minh và các chi tiết được quyền thao tác mà người quản trị cơ sở dữ liệu cấp cho người sử dụng. Hệ thống sẽ kiểm tra tính pháp lý của mỗi một thao tác của người sử dụng. Ví dụ yêu cầu được đọc lời đánh giá hàng năm của mỗi một nhân viên, chỉ có thể được phép nếu cơ sở dữ liệu có chứa thông tin quy định rằng người yêu cầu phải là Giám đốc, trưởng, phó phòng tổ chức, chánh văn phòng. Tất cả các đối tượng khác không có trong cơ sở dữ liệu không được phép truy xuất. DBMS sẽ kiểm tra mỗi một thao tác của người sử dụng xem có vi phạm các ràng buộc an toàn hay không, nếu có sẽ phải huỷ bỏ. Một ràng buộc truy nhập nói chung có liên quan đến một bộ phận của cơ sở dữ liệu. Do đó tồn tại một đặc quyền thích hợp, giả sử là chương trình sẽ kiểm tra mỗi một yêu cầu của người sử dụng. Chương trình sẽ sắp xếp quyền truy nhập theo mức độ phức tạp tăng dần sao cho đạt tới quyết định cuối cùng nhanh nhất có thể. An ninh ở tất cả các cấp độ phải được duy trì nếu an ninh cơ sở dữ liệu được bảo đảm. Một sự yếu kém ở vấn đề an toàn cấp thấp (cấp độ vật lý hay cấp độ con người) cho phép sự phá vỡ các biện pháp an toàn nghiêm ngặt ở cấp độ cao (cấp độ hệ thống cơ sở dữ liệu). 5.3.3. Những quyền hạn khi sử dụng cơ sở dữ liệu Đọc một cách hợp pháp: người sử dụng được phép đọc, nhưng không được sửa đổi nội dung dữ liệu. Chèn một cách hợp pháp: là cho phép người sử dụng được chèn thêm dữ liệu mới vào cơ sở dữ liệu, nhưng không sửa đổi dữ liệu hiện có. Sửa đổi một cách hợp pháp: cho phép người sử dụng được phép sửa đổi nội dung dữ liệu, nhưng không được xoá dữ liệu. Xoá một cách hợp pháp: cho phép người sử dụng được phép xoá dữ liệu. Cho phép việc tạo và xoá các chỉ số. Cho phép việc tạo các mối quan hệ mới. KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 190 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Sửa đổi cấu trúc: cho phép chèn thêm, sửa đổi hoặc xoá các thuộc tính trong các quan hệ. Bỏ hợp pháp: cho phép xoá các quan hệ. Một người sử dụng có thể có tất cả các quyền trên, hoặc chỉ có một số quyền hạn nhất định. Thêm vào đó những dạng của sự cho phép truy cập dữ liệu chúng ta có thể ban cho người sử dụng được phép sửa đổi cơ cấu cơ sở dữ liệu. Cho phép bỏ và xoá là khác nhau trong đó xoá hợp pháp là chỉ cho phép xoá bộ dữ liệu. Nếu một người sử dụng xoá tất cả các bộ của một quan hệ, quan hệ đó sẽ vẫn tồn tại nhưng quan hệ đó không còn gì. Nếu một quan hệ bị bỏ nó sẽ không còn tồn tại nữa. Các mệnh đề sau chỉ là một vài ý niệm phạm vi bảo vệ thông tin trong các hệ cơ sở dữ liệu, chỉ ra các mức truy nhập CSDL và trao quyền cho từng lớp người sử dụng: 1. Người sử dụng được phép truy nhập không điều kiện tới toàn bộ cơ sở dữ liệu, với mọi phép toán lưu trữ và truy vấn dữ liệu. 2. Người sử dụng không được phép truy nhập tới bất kỳ bộ phận nào của cơ sở dữ liệu, với mọi phép toán. 3. Người sử dụng có thể đọc đúng một nội dung công việc của họ trong cơ sở dữ liệu, nhưng không được phép sửa đổi, bổ sung nó. 4. Người sử dụng có thể đọc đúng một nội dung công việc của họ trong cơ sở dữ liệu, và được phép sửa đổi, bổ sung nó. 5.Người sử dụng có thể đọc và sửa đổi thuộc tính mã nhân viên, họ và tên nhân viên, đơn vị công tác theo định kỳ vào tuần đầu của mỗi tháng. 6. Người sử dụng cấm đọc thuộc tính nhận xét hàng năm, các thuộc tính mức lương và ngày lên lương được đọc và sửa đổi, các thuộc tính khác chỉ được đọc. Công việc chỉ được thực hiện trong khoảng thời gian từ 9 giờ đến 11 giờ trong các ngày của tuần cuối tháng. 7. Người sử dụng có quyền sử dụng các phép toán thống kê cho thuộc tính mức lương để tính mức lương trung bình trong từng đơn vị. Cấm sửa đổi dữ liệu. KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 191 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU - Đối tượng truy nhập là dữ liệu thì quyền truy nhập:read, insert, select, delete, write, update (điều chỉnh giá trị thuộc tính), expand (thêm thuộc tính), drop (loại bỏ cả tệp), index (tạo chỉ mục)… - Đối tượng truy nhập là chương trình thì quyền truy nhập: run (thi hành chương trình)… Khung nhìn –một cơ chế bảo vệ: Khung nhìn, bằng cách định nghĩa lại cơ sở dử liệu khái niệm, không chỉ tạo điều kiện thuận lợi khi lập trình trình ứng dụng và làm tăng tính độc lập dữ liệu logic, mà còn được sử dụng như một cơ chế bảo vệ. Có hai loại khung nhìn: - Loại khung nhìn chỉ đọc, không cho phép sửa đổi. Loại khung này gọi là khung chỉ đọc.Trong nhiều trường hợp, người quản trị CSDL cho phép người sử dụng này được đọc dữ liệu, nhưng người khác vừa được đọc, vừa được quyền sửa đồi, bổ sung... - Loại khung nhìn thứ hai cho phép đọc và ghi lên các thành phần của khung nhìn. và mọi sửa đồi cho khung nhìn có thể được lưu trong lược đồ khái niệm. SQL đề xuất cho phép đọc/ghi các khung nhìn trong một phạm vi nhất định. Với phương pháp này thiết kế các chương trình ứng dụng linh hoạt hơn loại khung chỉ đọc. Tuy nhiên, khi thao tác cập nhật trên các khung nhìn đọc/ghi thường gây tác động đến một số thành phần của cơ sở dữ liệu không nằm trong khung nhìn. Ví dụ: Trong một hệ CSDL phân cấp, trong khung nhìn chỉ có kiểu bản ghi gốc, không có bản ghi phụ thuộc. Nếu xóa xuất hiện của kiểu bản ghi nay, kéo theo phải xóa các xuất hiện bản ghi phị thuộc. Đây là một hành động không hợp lệ, vi phạm nguyên tắc không cho người sử dụng được phép xóa một đối tượng mà họ không thấy được trong khung nhìn. Cũng tương tự như trong mô hình mạng, nếu xóa một bản ghi khi không biết các bản ghi khác nằm ngoài khung nhìn bhưng có quan hệ với nó. Và nhiều trường KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 192 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU hợp khác tương tự. Vì vậy, tất cả các hệ quản trị cơ sở dữ liệu .DBMS giới hạn quyền cập nhật các khung nhìn trong một số trường hợp cụ thể. Ví dụ về hoạt động của ngân hàng, một thư ký cần biết tên của tất cả các khách hàng có các khoản vay tại nhiều chi nhánh. Người thư ký này không được phép xem những thông tin về khoản vay đặc biệt mà khách hàng có thể có. Hành động của cô thư ký bị từ chối khi truy nhập trực tiếp tới quan hệ cho vay, nhưng có thể truy nhập bằng khung nhìn cust-loan bao gồm các thông tin như: tên của khách hàng và chi nhánh nơi mà khách đó có khoản vay. Khung nhìn này có thể được định nghĩa trong SQL như sau: CREATE VIEW cust-loan AS (SELECT branch-name, customer-name FROM borrower, loan WHERE borrower.loan-number= loan.loan-number) Giả sử rằng cô thư ký đưa ra truy vấn SQL như sau: SELECT * FROM cust-loan Như vậy người thư ký được phép xem kết quả của truy vấn trên, tuy nhiên quá trình xử lý truy vấn này sẽ được thực hiện trên các quan hệ BORROWER and LOAN. Vì vậy hệ thống phải kiểm tra các quyền hạn trên truy vấn của thư ký trước khi bắt đầu quá trình xử lý truy vấn. Việc tạo một khung nhìn không phụ thuộc vào các quan hệ nguồn. Một người sử dụng tạo ra một khung nhìn không được nhận tất cả các đặc quyền trên khung nhìn. Ví dụ, người sử dụng không được quyền cập nhật trên khung nhìn nếu không có quyền cập nhật vào quan hệ bằng khung nhìn đã được định nghĩa. Nếu người sử dụng tạo ra một khung nhìn trên những quyền hạn không được phép, thì hệ thống sẽ phủ nhận yêu cầu tạo khung nhìn. Trong ví dụ khung nhìn cust-loan ở trên, người tạo khung nhìn phải có quyền đọc trên cả hai quan hệ BORROWER and LOAN. KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 193 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU 5.3.4 Cấp phép các quyền truy nhập (bảo vệ tính riêng tư) Mục đích: Bảo đảm các tài nguyên không bị sử dụng bởi các cá nhân không có quyền hoặc theo các cách không hợp pháp - Gán cho mỗi loại người dùng 1 số quyền truy cập nhất định - Cho phép 1 số người dùng được phép ủy quyền, tức là giao quyền truy nhập cho người khác - Để thực hiện việc giao quyền ta phải lập 2 thủ tục “ủy quyền” (GRANT) và “rút quyền” (REVOKE) a. Ủy quyền: Một người dùng có phép ủy quyền với 1 đối tượng truy nhập nào đó có thể dùng lệnh GRANT để trao quyền truy nhập cho người khác Người cho có thể chỉ là người được phép ủy quyền (không nhất thiết là người chủ đứng tên của đối tượng) Cú pháp của lệnh GRANT: GRANT <các quyền> ON <bảng/view> TO <người dùng> [WITH GRANT OPTION] Nếu phần tùy chọn (trong []) được dùng thì có nghĩa là cho phép người dùng được phép ủy quyền tiếp cho người khác Người dùng: tên 1 người, 1 nhóm, 1DS hoặc dùng từ khóa Public, World Ví dụ: Grant read on R to Nga with Grant Option Trao quyền đọc bảng R cho người dùng Nga, người này có thể trao tiếp quyền cho người khác. KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 194 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU b. Rút quyền Cú pháp của lệnh Revoke: REVOKE <các quyền> ON <bảng/view> FROM <người dùng> Ví dụ: Rút quyền đọc bảng R của người dùng tên Nga Revoke Read On R From Nga 5.3.5. Kiểm tra dấu vết Nhiều ứng dụng về bảo mật cơ sở dữ liệu cần duy trì một cơ chế kiểm tra dấu vết. - Một sự kiểm tra dấu vết là một bản lưu tất cả các thay đổi khi thực hiện các phép lưu trữ như chèn thêm, xoá và sửa đổi thông tin trong CSDL cùng với những thông tin phát sinh thêm trong quá trình thực hiện. - Việc kiểm tra dấu vết sẽ giúp cho việc dò tìm được các nguyên nhân nhanh và chính xác. Ví dụ: Nếu một tài khoản nào đó được phát hiện không cân đối, người quản trị có thể lần dấu vết của tất cả các cập nhật đã xảy ra trong tài khoản để tìm thấy sự cập nhật không đúng (có thể là gian lận) của những người đã thực hiện việc cập nhật. - Tạo ra một sự kiểm tra dấu vết bằng cách định nghĩa các chuỗi phản ứng thích hợp trên các cập nhật quan hệ (sử dụng hệ thống các giá trị đã định nghĩa để nhận biết tên người sử dụng và lần truy nhập). - Nhiều hệ thống cơ sở dữ liệu cung cấp phương pháp tạo sự kiểm tra dấu vết thuận tiện và dễ sử dụng. KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 195 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU BÀI TẬP CHƯƠNG V CÂU HỎI TRẮC NGHIỆM Câu 1.An toàn dữ liệu có thể hiểu là: a. Thống nhất các tiêu chuẩn, thủ tục và các biện pháp bảo vệ, an toàn dữ liệu b. Tính nhất quán và toàn vẹn dữ liệu c. Dễ dàng cho công việc bảo trì d. Ngăn chặn các truy nhập trái phép, sai quy định từ trong ra hoặc từ ngoài vào… Câu 2. Người sử dụng có thể truy cập: a. Môt phần cơ sở dữ liệu b. Toàn bộ cơ sở dữ liệu c. Hạn chế d. Phụ thuộc vào quyền truy nhập Câu 3.Cơ sở dữ liêu cần thiết phải bảo vệ vì: a. Rất nhiều loai dữ liệu được tải về giữ trên các máy cục bộ để khai thác b. Một bô sưu tâp rất lớn về các loại dữ liệu tác nghiệp c. Truy suất vào cơ sở dữ liệu bằng nhiều ngôn ngữ thao tác dữ liệu khác nhau d. Tài nguyên chung, nhiều người sử dụng Câu 4.Hãy chọn từ/cụm từ tương ứng để hoàn thiện khẳng định sau: Hình thức thông dụng nhất để nhận biết người sử dụng là mật khẩu...... a. Đảm bảo toàn vẹn dữ liệu b. Và các quy tắc bảo vệ cơ sở dữ liệu c. Mới được phép truy nhập CSDL d. Chỉ có hệ thống và người sử dụng biết KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 196 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Câu 5.Không nhất quán dữ liệu: a. Không xuất hiện mâu thuẫn thông tin b. Không thể sửa đổi, cập nhật, bổ sung dữ liêu c. Có thể triển khai tra cứu tìm kiếm d. Làm cho dữ liệu mất đi tính toàn ven của nó Câu 6. Rằng buộc dữ liệu là: a. Các định nghĩa, tiên đề, định lý b. Quy tắc biểu diễn cấu trúc dữ liêu c. Các quy tắc quy định d. Mối quan hệ giữa các thực thể dữ liệu Câu 7. Rằng buộc kiểu: a. Quy tắc đăt tên cơ sở dữ liêu b. Mối quan hê giữa các thưc thể dữ liệu c. Quy tắc truy nhập CSDL d. Mô tả tính chất của các thuộc tính khi tạo lâp CSDL Câu 8. Rằng buộc giải tích a. Mô tả tính chất của các thuộc tính khi tạo lâp CSDL b. Quy tắc biểu diễn cấu trúc dữ liệu c. Các phép toán đai số quan hê d. Mối quan hệ giữa các thuộc tính được biểu diễn bằng các biểu thức toán học Câu 9. Rằng buộc logic: a. Các phép so sánh b. Mối quan hệ giữa các thuộc tính được biểu diễn bằng các biểu thức toán học c. Các phép toán quan hệ d. Mối quan hệ giữa các thuộc tính được biểu diễn bằng các phụ thuộc hàm KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 197 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU Câu 10. Bảo vệ an toàn cơ sở dữ liệu có thể là: a. Không cho phép ghi đè dữ liệu b.Không cho phép cập nhât dữ liệu c.Không cho phép sửa đổi dữ liệu d. Không cho phép đọc, sửa, ghi, xóa dữ liệu… Câu 11. Hãy chọn từ/cụm từ tương ứng để hoàn thiện khẳng định sau: Hình thức thông dụng nhất để nhận biết người sử dụng là mật khẩu...... a. Đảm bảo toàn vẹn dữ liệu b. Và các quy tắc bảo vệ cơ sở dữ liệu c. Mới được phép truy nhập CSDL d. Chỉ có hệ thống và người sử dụng biết Câu 12. Hãy chọn từ/cụm từ tương ứng để hoàn thiện khẳng định sau: Toàn vẹn dữ liệu nghĩa là ...... a. Có thể thực hiện các chiến lược truy nhập dữ liệu. b. Bảo đảm tính độc lập dữ liệu tại mọi thời điểm c. Có thể tìm kiếm tại mọi thời điểm d. Dữ liệu trong CSDL luôn luôn chính xác tại mọi thời điểm Câu 13. An toàn dữ liệu có thể là: a. Chống sửa đổi hay phá hoai b.Cần thiết phải quản trị, bảo vệ tập trung c. Chống vi phạm có chủ định d. Cần phải được bảo vệ chống truy nhập trái phép Câu 14. Mức độ an toàn hệ thống CSDL: a. Có thể được phép thực hiện các câu hỏi truy vấn b.Người quản trị CSDL cấp phép truy nhập cho bất kỳ người sử dụng c. Phụ thuộc vào người sử dụng không cần cấp phép của người quản trị KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 198 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU d.Người quản trị cấp phép truy nhập cho người sử dụng khi có nhu cầu Câu 15. Mức bảo vệ vật lý: a.Nhận diện bằng các phương pháp trao quyền. b.Nhận diện bằng mặt khẩu c.Nhận diện bằng cách kiểm tra d. Nhận diện qua nhân viên bảo vệ, hoặc các quy định về hành chính... Câu 16. Hãy chọn từ/cụm từ tương ứng để hoàn thiện khẳng định sau: Người sử dụng được quyền ghi và đọc bao gồm các quyền như: a.GRANT SELECT ON R TO GROUP /WORLD b.GRANT READ ON R TO GROUP /WORLD c.GRANT ALL ON R TO GROUP /WORLD d.GRANT READ/WRITE ON R TO GROUP /WORLD Câu 17. Dạng thu hồi quyền truy nhập: a.REVOKE ON <THUộC tính>FROM b.REVOKE <NGười dụng sử>ON FROM c.REVOKE ON FROM d.REVOKE <các thao tác> ON <quan hệ> FROM <người sử dụng> Câu 18. Chọn một khẳng định nào sau đây là đúng nhất a.Tổ chức lưu trữ theo lý thuyết cơ sở dữ liệu, các thuộc tính có thể lặp lại. b.Tính toàn vẹn dữ liệu đảm bảo dữ liệu luôn luôn đúng c.Tính nhất quán dữ liệu đảm bảo cho sự cập nhật, bổ sung dễ dàng d.Sự không nhất quán dữ liệu trong lưu trữ làm cho dữ liệu mất đi tính toàn vẹn Câu 19. Mục tiêu của cơ sở dữ liệu là: a.Tính toàn vẹn dữ liệu b.Tính phụ thuộc dữ liệu KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 199 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU c.Phản ánh thế giới thực dữ liệu d.Tính độc lập dữ liệu CÂU HỎI VÀ BÀI TẬP 1.Vì sao phải bảo vệ an toàn các hệ thống cơ sở dữ liệu. 2. Các ràng buộc toàn vẹn. Ví dụ minh hoạ. 3. Tính bảo mật. 4. Nhận diện người sử dụng. 5. Bảo vệ vật lý. 6. Kiểm tra truy nhập. 7. Khung nhìn –Một cơ chế bảo vệ. 8. Sử dụng ngôn ngữ vấn tin định nghĩa các quyền truy nhập 9. Tính bảo mật trong SQL. KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP 200 TÀI LIỆU HỌC TẬP CƠ SỞ DỮ LIỆU TÀI LIỆU THAM KHẢO 1. Nguyễn Tuệ, Giáo trình Nhập môn CSDL, NXBGD, 2009. 2. Phạm Thế Quế, Cơ sở dữ liệu, Tài liệu đào tạo Đại học từ xa, Học viện Công nghệ Bưu chính Viễn thông, 2006 3. Đỗ Trung Tuấn, Cơ sở dữ liệu, NXB ĐHQGHN, 2006 4. Nguyễn Thị Ngọc Mai, Cơ sở dữ liệu, NXB Lao động - Xã hội, 12-2007 5. Đỗ Trung Tuấn, Nhập môn Cơ sở dữ liệu, Học viện Công nghệ Bưu chính Viễn thông, 2006. KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP