24/05/2018, 21:45

Lời nói đầu - Cơ sở dữ liệu

Các hệ thống cơ sở dữ liệu là công cụ không thể thiếu cho việc quản lý thông tin, và khóa học về lý thuyết và thực hành trên các hệ thống cơ sở dữ liệu là một phần quan trọng của chương trình đào tạo ngành khoa học máy tính. Quyển sách này trình bày ...

Các hệ thống cơ sở dữ liệu là công cụ không thể thiếu cho việc quản lý thông tin, và khóa học về lý thuyết và thực hành trên các hệ thống cơ sở dữ liệu là một phần quan trọng của chương trình đào tạo ngành khoa học máy tính. Quyển sách này trình bày những nội dung cơ bản của các hệ thống quản lý cơ sở dữ liệu hiện đại, cụ thể là các hệ cơ sở dữ liệu quan hệ.

Chúng tôi cố gắng trình bày vấn đề này một cách rõ ràng và đơn giản. Cách tiếp cận định lượng được sử dụng cùng với nhiều những ví dụ chi tiết. Có rất nhiều bài tập trong mỗi chương, nó giúp tăng cường khả năng của sinh viên để áp dụng những khái niệm vào giải quyết các vấn đề thực tế.

Quyển sách có thể được sử dụng cùng với phần mềm hỗ trợ và các bài tập lập trình trong hai loại khác nhau của khóa học:

1. Tập trung vào ứng dụng: Khóa học này tập trung vào các nội dung cơ bản của các hệ thống cơ sở dữ liệu, và nhấn mạnh vào việc chúng được sử dụng như thế nào trong các ứng dụng hướng-dữ-liệu. Hai chương mới về phát triển ứng dụng đã được thêm vào trong phiên bản thứ ba, và toàn bộ quyển sách được tổ chức lại để hỗ trợ những khóa học kiểu này. Một ví dụ nghiên cứu và các tài nguyên hỗ trợ trực tuyến (ví dụ, mã lệnh của các truy vấn SQL và các ứng dụng Java, cơ sở dữ liệu trực tuyến và các giải pháp) giúp cho quyển sách này trở nên dễ dạy cho những khóa hướng ứng dụng.

2. Tập trung vào hệ thống: Khóa học này giả thiết rằng sinh viên có kỹ năng lập trình C và C++ tốt. Trong trường hợp này một phần mềm Minibase phù hợp có thể được sử dụng như một dự án trong đó sinh viên được yêu cầu để thực hiện hàng loạt các vấn đề của RDBMS. Một vài mô-đun trong phần mềm (ví dụ, heap files, quản lý vùng đệm, B+trees, các chỉ số băm, các phương pháp nối khác nhau) được trình bày chi tiết trong tài liệu để sinh viên có thể thực hiện chúng, với các giao diện lớp (C++).

Rất nhiều giáo viên dạy khóa học liên quan đến cả hai kiểu chương trình trên. Việc cấu trúc lại trong phiên bản thứ ba cho phép thực hiện một khóa học lai như vậy. Quyển sách này có đủ để hỗ trợ những khóa học nâng cao bao gồm hai-khóa-học liên tục.

Quyển sách này được tổ chức thành sáu phần chính và hàng loạt các chủ đề nâng cao đã được lựa chọn, như trong Hình 0.1. Các chương cơ bản giới thiệu về các hệ thống cơ sở dữ liệu, mô hình ER và mô hình quan hệ. Chúng giải thích việc các cơ sở dữ liệu được tạo ra và sử dụng như thế nào, và trình bày những vấn đề cơ bản của thiết kế cơ sở dữ liệu và các truy vấn, bao gồm những vấn đề chuyên sâu về các truy vấn SQL. Trong khi giảng viên có thể bỏ qua một số vấn đề này theo ý của họ (ví dụ, đại số quan hệ, một vài phần về mô hình ER hoặc các truy vấn SQL), nhưng vấn đề này liên quan đến tất cả các sinh viên làm việc trên các hệ thống cơ sở dữ liệu, và chúng tôi đề nghị rằng nó nên được trình bày chi tiết nhiều nhất có thể.

Mỗi phần trong năm phần chính còn lại có hoặc là ứng dụng hoặc là tập trung vào các hệ thống cơ sở dữ liệu. Trong ba phần về Các hệ thống, mỗi phần đều có một chương giới thiệu, được thiết kế để cung cấp những khái niệm cho chính phần đó, ví dụ, Chương 8 là tổng quan về lưu trữ và chỉ số hóa. Các chương tổng quan này có thể được sử dụng để cung cấp tổng quan về chủ đề này, hoặc như là chương đầu tiên trước khi đi vào những nội dung chi tiết hơn. Vì thế, trong một khóa học hướng ứng dụng, Chương 8 trình bày về các tổ chức file và chỉ số hóa, trong khi đó, khóa học hướng hệ thống sẽ chọn từ Chương 9 đến Chương 11. Phần về thiết kế và tinh chỉnh cơ sở dữ liệu trình bày về những vấn đề trong thiết kế và tinh chỉnh thực thi cho những truy vấn cần đảm bảo an toàn. Những chủ đề ứng dụng nên được trình bày tốt nhất là sau khi cung cấp cho sinh viên những kiến thức về kiến trúc của hệ thống cơ sở dữ liệu, và vì thế các chương này nên được trình bày lần lượt.

(1) Cơ bản Cả hai
(2) Phát triển ứng dụng Tập trung vào ứng dụng
(3) Lưu trữ và chỉ số hóa Tập trung vào hệ thống
(4) Đánh giá truy vấn Tập trung vào hệ thống
(5) Quản lý giao dịch Tập trung vào hệ thống
(6) Thiết kế cơ sở dữ liệu và tinh chỉnh Tập trung vào ứng dụng
(7) Các chủ đề bổ sung Cả hai

Quyển sách này có thể được sử dụng trong hai kiểu của khóa học cơ sở dữ liệu nói trên. Khóa học hướng ứng dụng có thể sử dụng các chương Cơ bản, sau đó là các chương Phát triển ứng dụng, sau đó là các chương Tổng quan về hệ thống, và tổng kết bằng phần Thiết kế và tinh chỉnh cơ sở dữ liệu. Sự phụ thuộc giữa các chương được giữ ở mức thấp nhất, vì thế giảng viên có thể dễ dàng điều chỉnh bài giảng của mình. Phần I về các vấn đề Cơ bản nên được tìm hiểu đầu tiên. Chỉ các chương còn lại trong Phần I tới Phần VI là có sự phụ thuộc lẫn nhau được chỉ ra theo các mũi tên trong Hình 0.2. Các chương trong Phần I nên được nghiên cứu tuần tự. Tuy nhiên, phần tìm hiểu về đại số quan hệ và các phép toán logic có thể được để lại để tìm hiểu về các truy vấn SQL trước (mặc dù chúng ta biết rằng vấn đề này là quan trọng và lưu ý rằng nó nên được nghiên cứu trước khi tìm hiểu về SQL.) .

Khóa học hướng hệ thống sẽ tìm hiểu về các chương Cơ bản và một số phần trong các chương về Ứng dụng và Hệ thống. Một điểm quan trọng cho các khóa học hướng hệ thống là lựa chọn đúng các dự án lập trình (ví dụ, việc sử dụng Minibase) làm cho người đọc mong muốn sớm được nghiên cứu các chủ đề về hệ thống. Sự phụ thuộc giữa các chương được giới hạn một cách cẩn thận để cho phép các chương Hệ thống được tìm hiểu ngay sau Chương 1 và Chương 3. Các chương Cơ bản còn lại và các chương Ứng dụng có thể được tìm hiểu sau. Quyển sách này cũng có thể được hỗ trợ cho đa-khóa-học. Hiển nhiên, việc lựa chọn bài giảng Tập trung vào Ứng dụng hay Tập trung vào Hệ thống dẫn đến việc bỏ đi những nội dung không thực sự cần thiết; những phần trình bày trong quyển sách này hỗ trợ hỗn hợp cả hai dạng khóa học. Các chủ đề bổ sung dải trên một miền rộng lớn các vấn đề, và có thể được sử dụng cho các khóa học nâng cao.

Quyển sách có những hỗ trợ trực tuyến:

Tổ chức các chương và sự phụ thuộc lẫn nhau

Các chương trực tuyến: Để tạo không gian cho các vấn đề mới như phát triển ứng dụng, truy cập thông tin, và XML, chúng tôi đưa một số chương lên tài liệu trực tuyến. Sinh viên có thể tải về miễn phí các chương này trên website của quyển sách, và các giải pháp cho các bài tập trong chương này được trình bày trong một quyển kèm theo.

Các slide bài giảng: Các slide bài giảng của tất cả các chương được miễn phí trong định dạng Postscript, và PDF. Giảng viên khóa học cũng có thể có được các slide này trong định dạng Microsoft Powerpoint, và có thể sửa chúng để phù hợp với bài giảng của mình. Giảng viên cũng có thể truy cập tới tất cả các hình sử dụng trong quyển sách này (trong định dạng xfig), và có thể sử dụng chúng để thay đổi các slide.

Lời giải cho các bài tập trong các chương: Quyển sách có nhiều bài tập chuyên sâu. Sinh viên có thể tìm thấy lời giải của các bài tập được đánh số lẻ và các slide bài giảng của mỗi chương có trên Website trong các định dạng Postscript và Adobe PDF. Giảng viên có thể có được giải pháp cho tất cả các bài tập.

Phần mềm: Song hành với quyển sách này là hai loại phần mềm. Đầu tiên, chúng ta có Minibase, một RDBMS nhỏ được sử dụng trong các khóa học hướng-hệ-thống. Cùng với Minibase là các bài tập ví dụ và lời giải, xem Phụ lục 30. Thứ hai, chúng tôi đưa ra mã chương trình của tất cả các bài tập phát triển ứng dụng trên Java và SQL trong quyển sách này, cùng với những script để tạo ra các cơ sở dữ liệu minh họa, và các script cho việc thiết đặt một số DBMSs thương mại. Sinh viên có thể chỉ truy cập được các lời giải của các bài tập lẻ, nhưng giảng viên thì có thể truy cập lời giải của tất cả bài tập.

Tài liệu cho giảng viên: Quyển sách có những tài nguyên trực tuyến trong đó có những dẫn giải cho giảng viên về từng chương. Nó cung cấp tổng quan về mỗi chương và hướng dẫn giảng viên nên nhấn mạnh hoặc bỏ qua những nội dung nào. Tài liệu này cũng bàn về các tài nguyên được hỗ trợ trực tuyến của từng chương và hàng loạt những đề xuất cho các bài tập và các dự án. Cuối cùng, nó bao gồm các ví dụ về các bài kiểm tra cho các khóa học sử dụng quyển sách này làm giáo trình.

Trang chủ của cuốn sách này có URL là:

http://www.es.wisc.edu/~ dbbook

Nó bao gồm danh sách những thay đổi từ phiên bản 2 sang phiên bản 3, và những lỗi và những hỗ trợ của quyển sách này cũng được cập nhật thường xuyên. Giảng viên nên vào website này định kỳ hoặc đăng ký để nhận được những thông tin này qua thư điện tử.

Quyển sách này được phát triển từ các bài giảng của môn học có mã là CS564, một khóa học về cơ sở dữ liệu ở UW-Madison. David DeWitt đã phát triển khóa học này và một dự án Minibase, trong đó sinh viên có viết một số phần trong RDBMS. Những suy nghĩ của tôi đã hình thành từ khi dạy CS564, và Minirel là nguồn cảm hứng để xây dựng Minibase – nó có nhiều sự pha trộn (ví dụ, nó có một bộ tối ưu hóa truy vấn và một phần mềm mô phỏng) nhưng cố gắng để giữ lại những tưởng tượng của Minirel. Mike Carey và tôi cùng nhau thiết kế Minibase rất nhiều. Bài giảng của tôi bị ảnh hưởng rất nhiều từ các bài giảng của Mike và slides bài giảng của Yannis Loannidis. Joe Hellerstein đã sử dụng phiên bản beta của quyển sách này ở Berkeley và đã cung cấp cho tôi những phản hồi vô giá, hỗ trợ các slides và những chú giải rất hài hước. Việc viết các chương về hệ cơ sở dữ liệu hướng đối tượng cùng với Joe có rất nhiều niềm vui. C. Mohan cung cấp những hỗ trợ vô giá, kiên nhẫn trả lời một số lượng lớn các câu hỏi về công nghệ thực thi được sử dụng trong các hệ thống thương mại, cụ thể là việc chỉ số hóa, điều khiển tương tranh, và các thuật toán liên quan đến phục hồi dữ liệu. Moshe Zloof trả lời rất nhiều các câu hỏi về ngữ nghĩa QBE và các hệ thống thương mại dựa trên QBE. Ron Fagin, Krishna Kulkarni, Len Shapiro, Jim Melton, Dennis Shasha, và Dirk Van Gucht phản biện quyển sách này và cung cấp những phản hồi rất chi tiết, giúp cải thiện cả nội dung và phần trình bày. Michael Goldweber ở Đại học Beloit, Matthew Haines ở Wyoming, Michael Kifer ở SUNY StonyBrook, Jeff Naughton ở Wisconsin, Praveen Seshadri ở Cornell, và Stan Zdonik ở Brown cũng sử dụng phiên bản beta cho các bài giảng về cơ sở dữ liệu của họ và cung cấp những phản hồi và những báo cáo chi tiết. Cụ thể, Michael Kifer chỉ ra một lỗi trong thuật toán (cũ) về tính tập bao phủ tối thiểu và đề xuất tìm hiểu một số đặc tính SQL trong Chương 2 để cải thiện khả năng module hóa. Tài liệu tham khảo của Gio Wiederhold trình bày dưới dịnh dạng Latex, và tài liệu tham khảo trực tuyến của Michael Ley trên các cơ sở dữ liệu và lập trình logic đã có đóng góp lớn lao trong khi biên dịch tài liệu tham khảo cho các chương. Shaun Flisakowski và Uri Shaft đã giúp đỡ tôi liên tục khi đối mặt cùng Latex.

Tôi cũng gửi lời cảm ơn đặc biệt của mình tới rất, rất nhiều sinh viên đã xây dựng nên phần mềm Minibase. Emmanuel Ackaouy, Jim Pruyne, Lee Schumacher, và Michael Lee đã làm việc cùng tôi khi tôi phát triển phiên bản đầu tiên của Minibase (nhiều phần đã bị bỏ qua, nhưng nó ảnh hưởng rất nhiều tới phiên bản sau). Emmanuel Ackaouy và Bryan So là người đồng hướng dẫn của tôi khi tôi dạy khóa học CS564 sử dụng phiên bản này và họ đã nỗ lực để tinh chỉnh nó. Paul Aoki đã làm việc hết sức mình với một phiên bản Minibase và đưa ra nhiều lời nhận xét đáng giá. Sinh viên của lớp CS764 (khóa học cơ sở dữ liệu cho sinh viên đã tốt nghiệp) đã phát triển phiên bản hiện tại của Minibase rất nhiều trong một dự án của lớp dưới sự hướng dẫn của tôi và Mike Carey. Amit Shukla và Michael Lee là những giảng viên đi kèm với tôi khi tôi dạy khóa học CS564 sử dụng phiên bản này của Minibase và phát triển phần mềm xa hơn.

Một số sinh viên đã làm việc cùng tôi trên các dự án độc lập trong một thời gian dài để phát triển các thành phần khác nhau của Minibase. Nó bao gồm các gói phần mềm mô phỏng phục vụ quản lý bộ đệm và B+trees (Huseyin Bektas, Harry Stavropoulos, và Weiqing Huang); một bộ tối ưu hóa truy vấn và người mô phỏng là Stephen Harris, Michael Lee, và Donko Donjerkovic; một công cụ lược đồ ER dựa trên lược đồ Opossum (Eben Haber); và một công cụ dựa trên GUI trong việc chuẩn hóa (Andrew Prock và Andy Therber). Ngoài ra, Bill Kimmel đã làm việc để tích hợp và cố định phần mã nguồn (quản lý bộ đệm, quản lý lưu trữ, các phương pháp truy cập và files, các phép toán quan hệ, và bộ lập kế hoạch truy vấn) được đưa ra trong dự án của lớp CS764. Ranjani Ramamurty đã mở rộng đáng kể công việc của Bill trong việc làm rõ và tích hợp hàng loạt các modun. Luke Blanshard, Uri Shaft, và Shaun Flisakowski đã cùng nhau làm việc để phát triển những bài kiểm tra thích hợp và những bài tập dựa trên phần mềm Minibase. Krishna Kunchithapadam đã kiểm tra bộ tối ưu hóa và phần đã phát triển của Minibase GUI.

Rõ ràng, phần mềm Minibase sẽ không tồn tại nếu không có sự góp mặt của rất nhiều người có tài. Phần mềm này miễn phí cho các người dùng trong lĩnh vực này, tôi hy vọng nhiều giảng viên sẽ có thể dạy khóa học về cơ sở dữ liệu hướng-hệ-thống cùng với sự kết hợp giữa thực tiễn và kinh nghiệm để hoàn thành các tài liệu cho bài giảng.

Tôi cũng muốn cảm ơn rất nhiều sinh viên đã giúp tôi xây dựng và kiểm tra các đáp án của các bài tập và cung cấp những phản hồi hữu ích cho các phiên bản nháp của quyển sách này. Theo thứ tự là: X. Bao, S. Biao, M. Chakrabarti, C. Chan, W. Chen, N. Cheung, D. Colwell, C. Fritz, V. Ganti, J. Gehrke, G. Glass, V. Gopalakrishnan, M. Higgins, T. Jasmin, M. Krishnaprasad, Y. Lin, C. Liu, M. Lusignan, H. Modi, S. Narayanan, D. Randolph, A. Ranganathan, J. Reminga, A. Therber, M. Thomas, Q. Wang, R. Wang, Z. Wang, và J. Yuan. Arcady Grenader, James Harrington, và Martin Reames ở Wisconsin và Nina Tang ở Berkeley đã cung cấp những phản hồi đặc biệt chi tiết.

Charlie Fischer, Avi Silberschatz, và Jeff Ullman cho tôi những lời khuyên đáng giá trong khi làm việc với nhà xuất bản. Người biên tập của tôi ở McGraw-Hill, Betsy Jones và Eric Munson, đã đọc rất kỹ và chỉ dẫn cho quyển sách này trong những giai đoạn ban đầu của nó.

Cuối cùng, quyển sách này là một tên trộm thời gian, và trong nhiều trường hợp, nó gây ra những khó khăn cho gia đình tôi còn nhiều hơn đối với tôi. Con trai của tôi đã nói thẳng thắn như vậy. Từ khi năm tuổi, Ketan đã nói: “Bố, đừng làm việc với quyển sách ngớ ngẩn này. Bố không có bất kỳ thời gian nào dành cho con.” Đứa con hai tuổi, Vivek nói: “Bố làm việc với sách? Không không không hãy chơi bóng với con!” Tất cả sự bất bình đã được vợ của tôi giải quyết, Apu đã giữ không khí vui vẻ cho cả gia đình mặc dù rất nhiều buổi tối và ngày cuối tuần tôi dành cho quyển sách này. (Không kể đến những ngày tôi sử dụng bên cạnh những đồng nghiệp trong khoa của tôi).

Trên tất cả, tôi cảm ơn tình yêu của cha tôi và mẹ tôi, cùng với tình yêu của họ dành cho tôi. Anh trai của tôi đã gọi điện để kéo tôi ra khỏi phòng làm việc, nhưng thay vì cảm ơn anh ấy, tôi đã tức giận. Tôi muốn cảm ơn gia đình của tôi đã ủng hộ những gì tôi làm. (Ở đây! Tôi đã tìm ra được lý do để cảm ơn Kartik.)

Emily Gray và Betsy Jones ở McGraw-Hill đã đọc rất cẩn thân và cung cấp những lời khuyên và sự hỗ trợ khi chúng tôi chuẩn bị thực hiện phiên bản hai. Những người phản biện sau này cung cấp cho chúng tôi nhiều phản hồi có giá trị cả về nội dung và cách tổ chức: Liming Cai ở Ohio University, Costas Tsatsoulis ở University of Kansas, Kwok-Bun Yue ở University of Houston, Clear Lake, William Grosky ở Wayne State University, Sang H. Son ở University of Virginia, James M. Slack ở Minnesota State University, Mankato, Herman Balsters ở University of Twente, Netherlands,Karen C. Davis ở University of Cincinnati, Joachim Hammer ở University of Florida, Fred Petry at Tulane University, Gregory Speegle ở Baylor University, Salih Yurttas ở Texas A&M University, và David Chao ở San Francisco State University.

Một số người thông báo về các lỗi xảy ra trong phiên bản đầu tiên. Cụ thể, chúng tôi gửi lời cảm ơn tới những người sau: Joseph Albert ở Portland State University, Han-yin Chen ở University of Wisconsin, Lois Delcambre ở Oregon Graduate Institute, Maggie Eich ở Southern Methodist LIniversity, Raj Gopalan ở Curtin University of Technology, Davood Rafiei ở University of Toronto, Michael Schrefl ở University of South Australia, Alex Thomasian ở University of Connecticut, và Scott Vandenberg ở Siena College.

Chúng tôi đặc biệt cảm ơn những người đã trả lời chi tiết những câu hỏi về cách thức các hệ thống thương mại hỗ trợ các đặc tính khác nhau trong DBMS: Ở IBM: Mike Carey, Bruce Lindsay, C. Mohan, và James Teng; ở Informix: M. Muralikrishna và Michael Ubell: ở Microsoft: David Campbell, Goetz Graefe, và Peter Spiro; ở Oracle: Hakan Jacobsson, Jonathan D. Klein, Muralidhar Krishnaprasad, và M. Ziauddin; và ở Sybase, Marc Chanliau, Lucien Dimino, Sangeeta Doraiswamy, Hanuma Kodavalla, Roger MacNicol, và Tirumanjanam Rengarajan.

Chúng tôi cảm ơn Raghav Kaushik về những đóng góp của anh ấy đối với phần XML, và Alex Thomasian với những đóng góp trong phần điều khiển tương tranh. Chúng tôi đặc biệt cảm ơn Jim Melton đã gửi cho chúng tôi cuốn sách chưa xuất bản của anh ấy về những phần mở rộng hướng đối tượng trong chuẩn SQL: 1999, và chỉ ra một vài lỗi trong bản nháp phiên bản thứ ba này. Marti Hearst ở Berkeley đã hào phóng cho phép chúng tôi sử dụng một số slide của anh ấy trong phần Truy cập thông tin, Alon Levy và Dan Suciu đã cho chúng tôi sử dụng một số slid của họ về XML, Mike Carey giúp đỡ sử dụng các dịch vụ Web.

Emily Lupash ở McGraw-Hill đã hỗ trợ và khuyến khích chúng tôi liên tục. Cô ấy là người phản biện đến từ Ming Wang ở Embry-Riddle Aeronautical University, Cheng Hsu at RPI, Paul Bergstein ở Univ. of Massachusetts, Archana Sathaye ở SJSU, Bharat Bhargava ở Purdue, John Fendrich ở Bradley, Ahmet Ugur ở Central Michigan, Richard Osborne ở Univ. of Colorado, Akira Kawaguchi ở CCNY, Mark Last ở Ben Gurion, Vassilis Tsotras ở Univ. of California, và Ronald Eaglin ở Univ. of Central Florida. Chúng tôi gửi lời cảm ơn chân thành tới những người phản biện, họ đã giúp chúng tôi có những cải tiến lớn trong nội dung và thiết kế.

0