Đăng ký Đăng nhập
Trang chủ Xây dựng mô đun sinh tự động mã nguồn trigger trên ngôn ngữ c phục vụ cập nhật g...

Tài liệu Xây dựng mô đun sinh tự động mã nguồn trigger trên ngôn ngữ c phục vụ cập nhật gia tăng, đồng bộ các khung nhìn thực với truy vấn lồng cho postgresql.

.PDF
92
14
114

Mô tả:

ĐẠI HỌC ĐÀ NẴNG TRƯỜNG ĐẠI HỌC SƯ PHẠM --------------------------------------- LÊ THỊ THẢO NGUYÊN XÂY DỰNG MÔ-ĐUN SINH TỰ ĐỘNG MÃ NGUỒN TRIGGER TRÊN NGÔN NGỮ C PHỤC VỤ CẬP NHẬT GIA TĂNG, ĐỒNG BỘ CÁC KHUNG NHÌN THỰC VỚI TRUY VẤN LỒNG CHO POSTGRESQL LUẬN VĂN THẠC SĨ NGÀNH HỆ THỐNG THÔNG TIN Đà Nẵng - Năm 2018 ĐẠI HỌC ĐÀ NẴNG TRƯỜNG ĐẠI HỌC SƯ PHẠM --------------------------------------- LÊ THỊ THẢO NGUYÊN XÂY DỰNG MÔ-ĐUN SINH TỰ ĐỘNG MÃ NGUỒN TRIGGER TRÊN NGÔN NGỮ C PHỤC VỤ CẬP NHẬT GIA TĂNG, ĐỒNG BỘ CÁC KHUNG NHÌN THỰC VỚI TRUY VẤN LỒNG CHO POSTGRESQL Chuyên ngành Mã số : Hệ thống thông tin : 8480104 LUẬN VĂN THẠC SĨ NGƯỜI HƯỚNG DẪN KHOA HỌC: TS. Nguyễn Trần Quốc Vinh Đà Nẵng - Năm 2018 i LỜI CAM ĐOAN Tôi xin cam đoan công trình nghiên cứu khoa học này là của riêng tôi. Các số liệu, kết quả nêu trong luận văn là trung thực và chưa từng được ai công bố trong bất kỳ công trình nào. Mọi sự giúp đỡ cho việc thực hiện luận văn này đã được cảm ơn và các thông tin trích dẫn trong luận văn đã được chỉ rõ nguồn gốc rõ ràng và được phép công bố. Tac gia lu�n van � Le Thj Thao Nguyen iv MỤC LỤC LỜI CAM ĐOAN .......................................................................................................... i TRANG THÔNG TIN LUẬN VĂN THẠC SĨ .......................................................... ii DANH MỤC CÁC TỪ VIẾT TẮT ............................................................................ vi DANH MỤC HÌNH VẼ.............................................................................................. vii DANH MỤC CÁC BẢNG......................................................................................... viii LỜI MỞ ĐẦU ................................................................................................................1 1. Lý do chọn đề tài .........................................................................................................1 2. Mục tiêu và nhiệm vụ đề tài ........................................................................................2 3. Đối tượng và phạm vi nghiên cứu ...............................................................................3 4. Phương pháp nghiên cứu .............................................................................................3 5. Ý nghĩa khoa học và thực tiễn của đề tài.....................................................................4 6. Cấu trúc của luận văn ..................................................................................................4 CHƯƠNG 1. NGHIÊN CỨU TỔNG QUAN ..............................................................5 1.1. Tổng quan về ngôn ngữ lập trình C ......................................................................5 1.1.1. Ngôn ngữ lập trình C .....................................................................................5 1.1.2. Đặc điểm của ngôn ngữ C ..............................................................................5 1.2. Tổng quan về truy vấn lồng ..................................................................................6 1.2.1. Đặc điểm của truy vấn lồng ...........................................................................6 1.2.2. Phân loại ........................................................................................................8 1.3. Tổng quan về khung nhìn thực .............................................................................9 1.3.1. Giới thiệu chung .............................................................................................9 1.3.2. Phân loại khung nhìn thực ...........................................................................14 1.4. Tổng quan về cập nhật gia tăng, đồng bộ khung nhìn thực ................................15 1.4.1. Tổng quan về cập nhật gia tăng ...................................................................15 1.4.2. Cập nhật đồng bộ khung nhìn thực ..............................................................16 1.5. Cập nhật khung nhìn thực bằng trigger trên C trong PostgreSQL .....................16 1.5.1. Khái niệm về trigger ....................................................................................16 1.5.2. Trigger trên các HQT CSDL ........................................................................17 1.5.3. Trigger trong PostgreSQL ...........................................................................17 1.5.4. Hàm trong C .................................................................................................18 1.5.5. Hàm trigger trong C ....................................................................................19 1.5.6. Ví dụ tạo trigger trên C trong PostgreSQL..................................................19 1.6. Kết chương 1 .......................................................................................................19 v CHƯƠNG 2: KHUNG NHÌN THỰC TRONG POSTGRESQL VÀ THUẬT TOÁN CẬP NHẬT GIA TĂNG KHUNG NHÌN THỰC VỚI TRUY VẤN LỒNG .......................................................................................................................................20 2.1. PostgreSQL và khung nhìn thực trong PostgreSQL ...........................................20 2.2. Các phương pháp cập nhật KNT ........................................................................21 2.2.1. Phương pháp làm mới KNT .........................................................................21 2.2.2. Phương pháp cập nhật gia tăng đồng bộ .....................................................21 2.2.3. Một số vấn đề cần quan tâm khi CNGT KNT với truy vấn lồng ..................22 2.3. Thuật toán cập nhật gia tăng KNT với truy vấn lồng .........................................23 2.3.1. Thuật toán chuyển từ truy vấn lồng sang truy vấn nối trong .......................23 2.3.2. Điều kiện triển khai thuật toán ....................................................................25 2.3.3. Thuật toán cập nhật gia tăng khung nhìn thực với truy vấn nối trong ........26 2.4. Kết chương 2 .......................................................................................................35 CHƯƠNG 3: XÂY DỰNG CHƯƠNG TRÌNH SINH TỰ ĐỘNG MÃ NGUỒN CÁC TRIGGER THỰC HIỆN CẬP NHẬT GIA TĂNG KHUNG NHÌN THỰC VỚI TRUY VẤN LỒNG .............................................................................................36 3.1. Cài đặt môi trường CSDL và ngôn ngữ lập trình ...............................................36 3.2. Xây dựng mô-đun sinh mã tự động trigger.........................................................36 3.2.1. Tạo cơ sở dữ liệu thực nghiệm .....................................................................36 3.2.2. Chương trình sinh tự động mã trigger .........................................................36 3.2.3. Sử dụng kết quả của chương trình sinh mã..................................................40 3.2.4. Đánh giá kết quả thực nghiệm .....................................................................41 3.3. Kết chương 3 .......................................................................................................47 KẾT LUẬN VÀ KIẾN NGHỊ .....................................................................................48 1. THẢO LUẬN MỘT SỐ KẾT QUẢ ĐẠT ĐƯỢC....................................................48 2. GIỚI HẠN CỦA LUẬN VĂN NÀY ........................................................................48 TÀI LIỆU THAM KHẢO...........................................................................................49 PHỤ LỤC 1 ...................................................................................................................51 PHỤ LỤC 2 ...................................................................................................................55 PHỤ LỤC 3 ...................................................................................................................74 vi DANH MỤC CÁC TỪ VIẾT TẮT Chữ cái viết tắt/ ký hiệu BG Cụm từ đầy đủ Bảng gốc CNGT Cập nhật gia tăng CSDL Cơ sở dữ liệu HQTCSDL Hệ quản trị cơ sở dữ liệu KNT Khung nhìn thực SPJ Select – Project – Join; Kết nối trong bao gồm phép chọn, chiếu TVG Truy vấn gốc DSSV Danh sách sinh viên Col QLSV Columns (cột) Quản lý sinh viên vii DANH MỤC HÌNH VẼ Số hiệu hình vẽ 1.1. Tên hình vẽ Cơ sở dữ liệu quản lý đặt và giao hàng hóa. Trang 12 Mô tả hoạt động của HQT CSDL khi xuất hiện truy vấn yêu 1.2. cầu sử dụng dữ liệu khi không sử dụng KNT 13 1.3. Cơ sở dữ liệu quản lý đặt và giao hàng hóa sử dụng khung nhìn thực. 13 2.1. Mô tả quá trình CNGT KNT bằng trigger 22 2.2. CSDL quản lý sinh viên đơn giản với 3 bảng 24 3.1. Ví dụ về dữ liệu đầu vào 40 3.2. Giao diện chương trình sinh mã 41 3.3. Tốc độ thực thi lệnh Select 1000 row không dùng KNT 42 3.4. Tốc độ thực thi lệnh Select 1000 row có dùng KNT 43 3.5. Tốc độ thực thi lệnh insert 1 row không dùng câu lệnh trigger 43 3.6. Tốc độ thực thi lệnh insert 1 row có dùng câu lệnh trigger 44 3.7. Tốc độ thực thi lệnh update 1 row không dùng câu lệnh trigger 44 3.8. Tốc độ thực thi lệnh update 1 row có dùng câu lệnh trigger 45 3.9. Tốc độ thực thi lệnh update 1000 row không dùng câu lệnh trigger 45 3.10. Tốc độ thực thi lệnh update 1000 row có dùng câu lệnh trigger 46 viii DANH MỤC CÁC BẢNG Số hiệu bảng 1.1 1.2 Tên bảng Trang Mô tả thông tin chi tiết dữ liệu bảng SINHVIEN và bảng LOP 10 Khung nhìn thực DSSV với dữ liệu lấy từ bảng SINHVIEN và LOP 10 1 LỜI MỞ ĐẦU 1. Lý do chọn đề tài Khung nhìn thực (KNT) là một kỹ thuật giúp cải thiện và nâng cao tốc độ thực thi đối với các truy vấn phức tạp, có tần suất sử dụng cao trên một lượng dữ liệu lớn. Ý tưởng của KNT là dựa trên các bảng kết quả sẵn có để trả lời truy vấn một cách nhanh chóng mà không cần thực thi lại truy vấn. Đối với những truy vấn phức tạp bao gồm nhiều phép nối và các hàm thống kê, hiệu quả sử dụng KNT càng rõ rệt, đặc biệt khi áp dụng trên một lượng dữ liệu đủ lớn, do đã bỏ qua các bước thực thi phép nối và các hàm thống kê vốn là những thành phần chiếm nhiều chi phí trong quá trình thực thi truy vấn. Đến nay, kỹ thuật KNT đã được triển khai trên các hệ quản trị cơ sở dữ liệu (HTQCSDL) thương mại lớn như Oracle, Microsoft SQL Server, IBM DB2,… và ngày càng được ứng dụng rộng rãi. PostgreSQL là một HQTCSDL mã nguồn mở hàng đầu trên thế giới, tuy nhiên KNT mới được triển khai trên PostgreSQL ở phiên bản 9.3.4 và chưa hỗ trợ vấn đề cập nhật đồng bộ gia tăng. Thay vào đó, PostgreSQL cập nhật KNT theo cơ chế toàn phần bất đồng bộ, tức là thực thi lại toàn bộ truy vấn dùng để tạo KNT mỗi khi cần cập nhật. Điều này tốn chi phí xấp xỉ chi phí thực hiện truy vấn, và không đảm bảo được dữ liệu trên KNT luôn luôn là mới nhất. Đến phiên bản 10 có bổ sung tính năng cập nhật đồng thời, tuy nhiên tính năng này chỉ hỗ trợ việc truy cập đồng thời đến KNT, nghĩa là cung cấp khả năng truy cập bảng KNT để trả lời truy vấn ngay cả khi nó đang được cập nhật bằng lệnh refresh materialized view, chứ chưa đề cập đến vấn đề CNGT. Cập nhật gia tăng (CNGT) là kỹ thuật cập nhật dữ liệu trên KNT một cách đồng bộ, được thực hiện mỗi khi dữ liệu tại các bảng gốc (BG) tham gia vào KNT có sự thay đổi, nhờ đó giúp cho KNT luôn trong trạng thái được cập nhật. Do vậy, việc nghiên cứu các kỹ thuật CNGT cho KNT trên PostgesSQL đang rất được quan tâm. Việc CNGT KNT có thể được thực hiện thông qua việc xây dựng các trigger bắt các sự kiện làm thay đổi dữ liệu trên các bảng gốc, từ đó tiến hành xác định các thay đổi có thể làm ảnh hưởng đến tính đúng đắn của kết quả được lưu trong KNT, sau đó tiến hành việc cập nhật dữ liệu trong KNT. PostgreSQL hỗ trợ 2 loại trigger là trigger viết bằng ngôn ngữ PL/pgSQL và trigger viết bằng 2 ngôn ngữ C. Đã có nghiên cứu về việc sử dụng trigger mã nguồn PL/pgSQL để CNGT đồng bộ cho KNT trong PostgreSQL [2, 3, 5], nhưng trigger mã nguồn PL/pgSQL được đánh giá là có hiệu năng chưa cao ở hầu hết các xử lý so với trigger trong ngôn ngữ C, trigger trên ngôn ngữ C thực thi nhanh hơn so với trigger trên ngôn ngữ PL/pgSQL (khoảng 13%). Vì vậy, nghiên cứu này đề xuất sử dụng ngôn ngữ C làm mã nguồn cho trigger và xây dựng mô-đun để sinh tự động các trigger cho tất cả các BG tham gia vào truy vấn, phục vụ thực hiện CNGT KNT trong cơ chế đồng bộ, như một phần của giao tác thực hiện thao tác dữ liệu trong các BG. Đã có các nghiên cứu [1, 2, 3] xây dựng được chương trình sinh mã nguồn trigger tự động bằng ngôn ngữ C, triển khai các thuật toán CNGT KNT trên HQTCSDL PostgreSQL. Tuy nhiên nghiên cứu này vẫn chưa quan tâm đến các KNT được tạo bởi truy vấn lồng, truy vấn đệ quy, truy vấn bao gồm phép nối ngoài. Có thể thấy truy vấn lồng (SubQuery) là một dạng truy vấn phổ biến, tần suất xuất hiện cao, tuy nhiên các nghiên cứu về CNGT KNT cho PostgreSQL đến nay vẫn chưa hỗ trợ dạng truy vấn này. Vì vậy, tôi chọn đề tài “Xây dựng mô-đun sinh tự động mã nguồn trigger trên ngôn ngữ C phục vụ cập nhật gia tăng, đồng bộ các khung nhìn thực với truy vấn lồng cho PostgreSQL” làm khóa luận tốt nghiệp cao học. 2. Mục tiêu và nhiệm vụ đề tài 2.1. Mục tiêu - Xây dựng chương trình sinh tự động mã nguồn trigger trên ngôn ngữ C phục vụ cập nhật gia tăng, đồng bộ các khung nhìn thực với truy vấn lồng trong PostgreSQL. - Chương trình có khả năng sinh mã SQL cài đặt khung nhìn thực, trigger trên các bảng gốc để cập nhật gia tăng, đồng bộ các khung nhìn thực. Để đạt được mục tiêu chung đó, tác giả nghiên cứu các mục tiêu cụ thể như sau: - Nghiên cứu tổng quan về KNT, truy vấn lồng. - Nghiên cứu cơ sở lý thuyết về cập nhật gia tăng, đồng bộ KNT với truy vấn lồng. - Nghiên cứu tổng quan về trigger trên C trong PostgreSQL. - Xây dựng thuật toán cập nhật gia tăng KNT với truy vấn lồng. 3 - Xây dựng mô-đun sinh tự động mã nguồn trigger. 2.2. Nhiệm vụ - Tìm hiểu các biên dịch và sử dụng trigger viết bằng ngôn ngữ C trên PostgreSQL. - Tìm hiểu và nghiên cứu cơ sở lý thuyết về cập nhật gia tăng, đồng bộ KNT với truy vấn lồng. - Khai thác các thuật toán CNGT KNT đã có để ứng dụng vào đề tài, đặc biệt là thuật toán CNGT KNT với truy vấn lồng. 3. Đối tượng và phạm vi nghiên cứu 3.1. Đối tượng nghiên cứu - CSDL quan hệ, HQT CSDL quan hệ - Ngôn ngữ lập trình C - Trigger trên các HQT CSDL quan hệ - Truy vấn lồng - Khung nhìn thực - Thuật toán CNGT KNT với truy vấn lồng 3.2. Phạm vi nghiên cứu - HQT CSDL PostgreSQL - Kỹ thuật viết trigger cho PostgreSQL bằng ngôn ngữ C - Cách sử dụng trigger được viết bằng ngôn ngữ C trên PostgreSQL - Các thuật toán CNGT cho KNT trên PostgreSQL - Thuật toán CNGT KNT hỗ trợ truy vấn lồng 4. Phương pháp nghiên cứu Về phương pháp nghiên cứu, tôi sử dụng hai phương pháp chính là nghiên cứu lý thuyết và nghiên cứu thực nghiệm. 4.1. Phương pháp lý thuyết Thu thập, chọn lọc, phân loại, ghi chú và nghiên cứu các tài liệu (sách, bài báo, luận văn, trang web) có liên quan đến khung nhìn thực, HQTCSDL PostgreSQL, cập nhật gia tăng KNT, đồng bộ KNT, sinh mã trigger trong ngôn ngữ C. 4.2. Phương pháp thực nghiệm Dựa trên lý thuyết đã nghiên cứu, tiến hành xây dựng chương trình sinh tự động mã các trigger thực hiện cập nhật gia tăng khung nhìn thực với truy vấn 4 lồng trong hệ cơ sở dữ liệu PostgreSQL; thử nghiệm trên máy đơn và đánh giá tốc độ cập nhật dữ liệu trên các bảng gốc (BG) có trigger cập nhật KNT. 5. Ý nghĩa khoa học và thực tiễn của đề tài 5.1. Ý nghĩa khoa học - Đề xuất thuật toán cập nhật gia tăng KNT truy vấn lồng. - Đề xuất thuật toán sinh tự động mã nguồn các trigger trong ngôn ngữ C phục vụ cập nhật gia tăng các bảng khung nhìn thực truy vấn lồng trong hệ quản trị cơ sở dữ liệu PostgreSQL. 5.2. Ý nghĩa thực tiễn Áp dụng chương trình vào cơ sở dữ liệu PostgreSQL nhằm làm tăng tốc độ thực thi các truy vấn dữ liệu mà vẫn đảm bảo ràng buộc toàn vẹn dữ liệu. Chương trình sinh tự động mã trigger C thực hiện CNGT KNT có tính ứng dụng cao, giúp tiết kiệm thời gian và công sức của người quản trị CSDL khi làm việc với HQTCSDL PostgreSQL cũng như các HQTCSDL mã nguồn mở có hỗ trợ trigger trong ngôn ngữ C. Chương trình sinh tự động mã nguồn các trigger có thể hỗ trợ các lập trình viên sinh mã trigger. Lập trình viên chỉ cần điều chỉnh trigger được sinh ra theo ý muốn thay vì phải lập trình từ đầu. 6. Cấu trúc của luận văn Ngoài phần mở đầu và kết luận, cấu trúc nội dung của luận văn bao gồm 3 chương: Chương 1: Nghiên cứu tổng quan, chương này giới thiệu tổng quan về ngôn ngữ lập trình C, truy vấn lồng và KNT, cập nhật gia tăng, đồng bộ KNT. Trình bày các vấn đề liên quan đến trigger trên C trong PostgreSQL. Chương 2: Khung nhìn thực trong PostgreSQL và thuật toán cập nhật gia tăng khung nhìn thực với truy vấn lồng, chương này trình bày các phương pháp cập nhật KNT; phân tích thuật toán cập nhật gia tăng KNT với truy vấn lồng. Chương 3: Xây dựng chương trình sinh tự động mã nguồn các trigger thực hiện cập nhật gia tăng khung nhìn thực với truy vấn lồng, chương này trình bày cách cài đặt môi trường CSDL và ngôn ngữ lập trình; xây dựng mô-đun sinh mã tự động trigger. 5 CHƯƠNG 1. NGHIÊN CỨU TỔNG QUAN 1.1. Tổng quan về ngôn ngữ lập trình C 1.1.1. Ngôn ngữ lập trình C Ngôn ngữ lập trình C là một ngôn ngữ mệnh lệnh được phát triển từ đầu thập niên 1970 bởi Dennis Ritchie, là một trong những ngôn ngữ phổ dụng nhất. C là ngôn ngữ rất có hiệu quả và được ưa chuộng để viết các phần mềm hệ thống, mặc dù nó cũng được dùng cho việc viết các ứng dụng. C là ngôn ngữ lập trình tương đối nhỏ gọn vận hành gần với phần cứng, được tạo ra với một mục tiêu là làm cho nó thuận tiện để viết các chương trình lớn. Ngôn ngữ lập trình C là một ngôn ngữ lập trình hệ thống rất mạnh và rất “mềm dẻo”, có một thư viện gồm rất nhiều các hàm (function) đã được tạo sẵn. Người lập trình có thể tận dụng các hàm này để giải quyết các bài toán mà không cần phải tạo mới. Hơn thế nữa, ngôn ngữ C hỗ trợ rất nhiều phép toán nên phù hợp cho việc giải quyết các bài toán kỹ thuật có nhiều công thức phức tạp. Ngoài ra, C cũng cho phép người lập trình tự định nghĩa thêm các kiểu dữ liệu trừu tượng khác. 1.1.2. Đặc điểm của ngôn ngữ C Ngôn ngữ C có các đặc điểm sau: C là một ngôn ngữ đơn giản theo nghĩa là nó giúp ta cách tiếp cận có cấu trúc (chia bài toán thành các phần khác nhau), tập hợp các hàm thư viện phong phú, các kiểu dữ liệu, ... Không giống như hợp ngữ, các chương trình C có thể thực thi trên nhiều loại máy khác nhau mà không có sự thay đổi nào. Nhưng nó không phải là độc lập về nền tảng như Java. C cũng được sử dụng để lập trình bậc thấp. Nó được dùng để phát triển các ứng dụng hệ thống như các nhân Hệ điều hành, trình điều khiển thiết bị, ... Nó cũng hỗ trợ những tính năng của ngôn ngữ bậc cao. Đó là tại sao được gọi là ngôn ngữ bậc trung. C là ngôn ngữ lập trình theo nghĩa chúng ta chia chương trình thành các phần bằng cách sử dụng hàm. Vì thế, nó dễ hiểu và dễ chỉnh sửa. C cung cấp nhiều hàm có sẵn giúp việc phát triển các ứng dụng trở nên nhanh chóng hơn. 6 Nó hỗ trợ nhiều tính năng của Cấp phát bộ nhớ động. Trong ngôn ngữ C, chúng ta có thể giải phóng một bộ nhớ được cấp phát tại thời điểm bất kỳ bằng cách gọi hàm free(). Quá trình biên dịch và thực thi của ngôn ngữ C rất nhanh trong thời gian rất ngắn. C cung cấp tính năng con trỏ, chúng ta có thể tương tác trực tiếp với bộ nhớ bằng việc sử dụng con trỏ. Chúng ta có thể sử dụng con trỏ cho bộ nhớ, cấu trúc, hàm, mảng, ... Trong C, chúng ta có thể gọi hàm ngay bên trong bản thân hàm đó. Nó cung cấp những mã có khả năng sử dụng lại cho mỗi hàm. Ngôn ngữ C có khả năng mở rộng vì nó dễ dàng nhận một tính năng mới. 1.2. Tổng quan về truy vấn lồng 1.2.1. Đặc điểm của truy vấn lồng Là dạng truy vấn mà câu lệnh Select lồng trong câu lệnh Select. Câu lệnh Select bên ngoài gọi là truy vấn ngoài Câu lệnh Select bên trong gọi là truy vấn trong hay truy vấn con Có 2 loại: - Loại 1: Truy vấn con nằm trong mệnh đề WHERE SELECT FROM INNER JOIN ON <điều kiện nối> INNER JOIN ON <điều kiện nối>… WHERE ( SELECT FROM < danh sách các bảng> WHERE<điều kiện>) - Loại 2: Truy vấn con nằm trong mệnh đề FROM SELECT FROM , , () AS WHERE <điều kiện> 7 Các câu lệnh Select có thể lồng nhau ở nhiều mức Câu truy vấn con thường trả về một tập các giá trị Mệnh đề Where của câu truy vấn ngoài So sánh tập hợp thường đi cùng với một số toán tử - - - - IN SELECT ma_sv, ten_sv FROM sinh_vien WHERE ma_lop IN ( SELECT ma_lop FROM lop WHERE ten_lop = ‘CNTT – 1’) NOT IN SELECT ma_sv, ten_sv FROM sinh_vien WHERE ma_lop NOT IN ( SELECT ma_lop FROM lop WHERE ten_lop = ‘CNTT – 1’) ALL SELECT ma_sv, ten_sv FROM sinh_vien WHERE ma_lop = ‘ML1’ AND ngay_sinh < ALL ( SELECT ngay_sinh FROM sinh_vien WHERE ma_lop = ‘ML1’ ANY hoặc SOME SELECT ma_sv, ten_sv FROM sinh_vien WHERE ma_lop = ‘ML1’ AND ngay_sinh < ANY ( 8 SELECT ngay_sinh FROM sinh_vien WHERE ma_lop = ‘ML1’ - - EXISTS SELECT * FROM sinh_vien WHERE EXISTS ( SELECT * FROM lop WHERE ma_lop= sinh_vien.ma AND ma_lop = ‘ML1’) NOT EXISTS SELECT * FROM sinh_vien WHERE NOT EXISTS ( SELECT * FROM lop WHERE ma_lop= sinh_vien.ma AND ma_lop = ‘ML1’) 1.2.2. Phân loại Dựa vào đặc điểm của câu truy vấn con người ta phân truy vấn lồng thành 2 loại chính: - Truy vấn lồng phân cấp: Khi nội dung của câu truy vấn con độc lập với câu truy vấn cha. Cú pháp: SELECT A FROM X WHERE … (SELECT B, C FROM Y) … Ví dụ: Đưa ra mã, tên của những sinh viên thuộc lớp CNTT 1 SELECT ma_sv, ten_sv FROM sinhvien WHERE ma_lop IN ( SELECT ma_lop FROM lop WHERE ten_lop = ‘CNTT – 1’) 9 Ở ví dụ trên, câu truy vấn con SELECT ma_lop FROM lop WHERE ten_lop = ‘CNTT – 1’ không sử dụng bất kỳ thành phần nào của câu truy vấn cha. Do đó đây là một câu truy vấn lồng phân cấp. - Truy vấn lồng tương quan: Khi nội dung của câu truy vấn con phụ thuộc vào câu truy vấn cha. Cú pháp: SELECT A FROM X WHERE … (SELECT B, C FROM Y WHERE B = X.A) … Ví dụ: Đưa ra mã, tên của những sinh viên thuộc lớp CNTT – 1 SELECT ma_sv, ten_sv FROM sinhvien WHERE EXISTS ( SELECT* FROM Lop WHERE ma_lop = sinhvien.ma_lop AND ten_lop = ‘CNTT – 1’) Ở ví dụ này, câu truy vấn con SELECT*. FROM Lop. WHERE ma_lop = sinhvien.ma_lop and ten_lop = ‘CNTT – 1’. WHERE ma_lop = sinhvien.ma_lop có sử dụng thành phần của câu truy vấn cha qua biểu thức so sánh ma_lop = sinhvien.ma_lop. Do đó, đây là một câu truy vấn lồng tương quan. 1.3. Tổng quan về khung nhìn thực 1.3.1. Giới thiệu chung Một khung nhìn (view) có thể được xem như là một bảng “ảo” trong cơ sở dữ liệu có nội dung được định nghĩa thông qua một truy vấn (câu lệnh SELECT). Điểm khác biệt giữa khung nhìn và bảng là khung nhìn không được xem là một cấu trúc lưu trữ dữ liệu tồn tại trong cơ sở dữ liệu. Thực chất dữ liệu quan sát được trong khung nhìn được lấy từ các bảng thông qua câu lệnh truy vấn dữ liệu. Bảng 1.2 dưới đây minh hoạ cho ta thấy khung nhìn có tên DSSV được định nghĩa thông qua câu lệnh SELECT truy vấn dữ liệu trên hai bảng SINHVIEN và LOP: 10 Bảng 1.1 – Mô tả thông tin chi tiết dữ liệu bảng SINHVIEN và bảng LOP Từ hai bảng này, ta tạo được khung nhìn sau đây Bảng 1.2 – Khung nhìn thực DSSV với dữ liệu lấy từ bảng SINHVIEN và LOP
- Xem thêm -

Tài liệu liên quan

Tài liệu vừa đăng

Tài liệu xem nhiều nhất