Một lượng lớn thông tin hữu ích đối với chúng ta tồn tại ở dạng văn bản, và giá trị của dữ liệu chính là tài sản quan trọng. Tuy nhiên, khả năng quản lý một lượng lớn thông tin, nhanh chóng truy cập đến những thông tin cần thiết còn quan trọng hơn nữa. Điều đó có nghĩa là có thông tin là chưa đủ, chúng ta còn phải biết cách sử dụng nó sao cho thật hiệu quả. Từ thực tế đó dẫn chúng ta đến một suy nghĩ là: cần phải có một hệ thống quản lý dữ liệu thật mạnh mẽ và hiệu quả. Để quản lý một lượng lớn dữ liệu phức tạp, người sử dụng phải có những công cụ - hỗ trợ tính năng đơn giản trong thao tác nhưng lại hiệu quả trong trích lọc thông tin.
Cơ sở dữ liệu là tập hợp dữ liệu biểu diễn các hoạt động của một hoặc một số tổ chức có liên quan đến nhau. Ví dụ, cơ sở dữ liệu của một trường đại học có thể chứa thông tin về:
Hệ quản trị cơ sở dữ liệu, còn gọi là DBMS là phần mềm được thiết kế để lưu trữ và quản lý một lượng lớn dữ liệu. Sử dụng DBMS là hướng tới một cách tiếp cận mới, không phải lưu trữ dữ liệu ở các tệp tin độc lập và viết từng ứng dụng cụ thể để quản lý chúng. Sự hữu ích của cơ sở dữ liệu sẽ được chúng ta đề cập chi tiết trong phần 4.
Note: Lĩnh vực của hệ quản trị cơ sở dữ liệu là một thế giới thu nhỏ của khoa học máy tính. Những vấn đề đặt ra và công nghệ sử dụng liên quan đến một chuỗi những ngành khoa học như xử lý ngôn ngữ, ngôn ngữ lập trình, biên dịch, hệ điều hành, điều khiển tương tranh, cấu trúc dữ liệu, thuật toán, hệ thống phân tán và song song, giao diện người máy, hệ chuyên gia và trí tuệ nhân tạo, công nghệ thống kê. Chúng ta sẽ không thể đi vào tất cả các lĩnh vực nói trên trong cuốn sách này, nhưng nên chắc chắn rằng đây là những môn học cần thiết và đầy hứng thú.
Quản lý dữ liệu
Mục đích của cuốn sách này là trình bày chi tiết về hệ quản trị cơ sở dữ liệu, nhấn mạnh về cách thức tổ chức thông tin trong DBMS, lưu trữ và truy cập dữ liệu hiệu quả, bao gồm, cách thiết kế một cơ sở dữ liệu và sử dụng DBMS hiệu quả. Quyết định sử dụng DBMS nào cho một ứng dụng cụ thể phụ thuộc vào khả năng của DBMS, cân nhắc xem nó có hỗ trợ ứng dụng này hiệu quả không. Vì thế, để sử dụng tốt một DBMS nào đó, thì chúng ta cần phải hiểu được DBMS đó làm việc như thế nào.
Có rất nhiều loại của hệ quản trị cơ sở dữ liệu, nhưng cuốn sách này tập trung vào hệ thống cơ sở dữ liệu quan hệ (RDBMSs), ngày nay hầu hết các DBMS hỗ trợ hệ thống này. Những câu hỏi sau được giải đáp trong cuốn sách này:
- Thiết kế cơ sở dữ liệu và phát triển ứng dụng: Cách thức người sử dụng có thể biểu diễn các hoạt động của thế giới thực (ví dụ, hoạt động của một trường đại học) bằng những dữ liệu được lưu trữ trong DBMS? Những dữ liệu nào phải được xem xét và tổ chức lưu trữ như thế nào? Như thế nào để phát triển ứng dụng trên DBMS (Chương 2, 3, 6, 7, 19, 20 và 21)
- Phân tích dữ liệu: Người sử dụng đưa ra yêu cầu với hệ thống như thế nào thông qua các truy vấn trên dữ liệu đang được lưu trữ trong DBMS? (Chương 4, và 5) Một chương trực tuyến về Query-by-Example (QBA) cũng có thể phù hợp
- Điều khiển tương tranh và đảm bảo an toàn: Cách thức DBMS cho phép rất nhiều người cùng truy cập tới một dữ liệu đồng thời và làm thế nào để bảo vệ an toàn dữ liệu thậm chí khi hệ thống có sự cố. (Chương 16, 17 và 18)
- Hiệu suất: Làm cách nào DBMS có thể lưu trữ được tập dữ liệu lớn và đáp ứng được yêu cầu về hiệu quả của dữ liệu (Chương 8, 9, 10, 11, 12, 13, và 14)
Những chương cuối trình bày về những chủ để mở rộng như hệ quản trị cơ sở dữ liệu phân tán và song song, kho dữ liệu và những truy vấn phức tạp cho việc hỗ trợ ra quyết định, khai phá dữ liệu, truy vấn thông tin và cơ sở dữ liệu, XML, cơ sở dữ liệu hướng đối tượng, quản lý dữ liệu không gian và DBMS hướng chức năng.
Trong chương này, chúng ta giới thiệu về những vấn đề liệt kê ở trên. Trong phần 2, chúng ta sẽ bắt đầu tìm hiểu tóm tắt về lịch sử và vai trò của hệ quản trị cơ sở dữ liệu trong những hệ thống thông tin hiện đại. Sau đó, chúng ta chỉ ra lợi ích của việc lưu trữ dữ liệu bằng DBMS thay vì lưu trữ bằng hệ thống file trong phần 3, và bàn về những lợi ích của việc sử dụng DBMS để quản lý dữ liệu trong phần 4. Trong phần 5, chúng ta sẽ xem xét dữ liệu được lưu trữ như thế nào trong DBMS. Người sử dụng có lẽ nghĩ rằng thông tin được lưu trữ dưới dạng các khái niệm mức cao như là các thực thể (đối tượng) trong một tổ chức và các mối liên kết giữa các đối tượng này. Ngược lại, DBMS lưu trữ dữ liệu cụ thể ở dạng các bits. Sự khác nhau giữa suy nghĩ của người sử dụng với thực tế lưu trữ dữ liệu trong DBMS được giải quyết bằng cầu nối là một số các mức trừu tượng được DBMS hỗ trợ. Bằng trực giác, người sử dụng có thể biểu diễn dữ liệu ở mức cao và sau đó làm rõ ràng những biểu diễn này bằng cách thêm vào một số thông tin và miêu tả cần thiết.
Trong phần 6, chúng ta đề cập đến việc như thế nào người sử dụng có thể truy cập đến những dữ liệu được lưu trữ trong DBMS và những yêu cầu về công nghệ để làm cho các truy vấn trở nên hiệu quả. Phần 7 cung cấp tổng quan về cách thức DBMS hỗ trợ những truy cập tương tranh và bảo vệ an toàn dữ liệu ngay cả khi hệ thống gặp sự cố. Sau đó, chúng ta biểu diễn sơ bộ kiến trúc bên trong của DBMS trong phần 8 và một số đối tượng làm việc trên DBMS trong phần 9.
Lịch sử phát triển
Từ những ngày đầu tiên có máy tính, lưu trữ và các thao tác dữ liệu đã trở thành những mối quan tâm chính. DBMS đầu tiên đã được Charles Bachman thiết kế vào những năm 60 và gọi là Lưu trữ dữ liệu tích hợp. Nó được xây dựng dựa trên mô hình mạng. Bachman đã nhận được giải thưởng ACM's Turing (được đánh giá là giải Nobel trong ngành khoa học máy tính) vào năm 1973 trong lĩnh vực cơ sở dữ liệu.
Cuối những năm 60, IBM đã phát triển Hệ thống quản lý dữ liệu và được sử dụng đến ngày nay trong nhiều ứng dụng chính. IMS được xây dựng dựa trên mô hình gọi là mô hình phân cấp. Hệ thống SABRE phục vụ cho hệ thống đặt vé máy bay được Hàng không Mỹ và IBM phối hợp thực hiện và hệ thống này cho phép một số người có thể cùng truy cập vào một dữ liệu thông qua mạng máy tính. Điều thú vị là ngày nay là hệ thống SABRE vẫn được sử dụng trong các dịch vụ du lịch dựa trên nền Web như là Travelocity.
Trong năm 1970, Edgar Codd, thuộc phòng nghiên cứu ở IBM's San Jose đã đưa ra một mô hình biểu diễn dữ liệu mới gọi là mô hình dữ liệu quan hệ. Phát minh này đã mở ra một thời kỳ phát triển mới cho hệ thống cơ sở dữ liệu, những DBMS xây dựng dựa trên mô hình này phát triển rất mạnh mẽ. Codd đã đạt được giải Turing về nghiên cứu này. Những lợi ích của nghiên cứu này được nhận thức rộng rãi và sử dụng DBMSs cho quản lý dữ liệu trở thành chuẩn mực.
Trong những năm 80, mô hình quan hệ phát triển mạnh mẽ và hệ thống cơ sở dữ liệu tiếp tục được ứng dụng rộng rãi. Ngôn ngữ truy vấn dữ liệu (SQL) dùng cho cơ sở dữ liệu quan hệ được dự án IBM's System R phát triển và ngày nay đã trở thành ngôn ngữ truy vấn dữ liệu chuẩn. SQL được chuẩn hóa vào cuối những năm 80 và SQL-92 được phát triển bởi American National Standards Institute (ANSI) và International Standards Organization (ISO) đã thành ngôn ngữ chuẩn hiện nay. Ngoài ra, người sử dụng có thể viết các giao dịch thực hiện trên cơ sở dữ liệu. James Gray đã đạt được giải thưởng Turing năm 1999 về sự đóng góp của ông trong lĩnh vực quản lý giao dịch trên DBMS.
Cuối những năm 80 và những năm 90, đã có rất nhiều tiến bộ trong nhiều lĩnh vực hệ thống cơ sở dữ liệu. Nhiều nghiên cứu đã đem đến sức mạnh cho ngôn ngữ truy vấn và các mô hình dữ liệu trở nên phong phú hơn, đã có những hỗ trợ đáng kể cho những phân tích dữ liệu phức tạp. Một số những hãng như IBM’s, DB2, Oracle, Informix
Điều đặc biệt là sự nổi lên của một số gói ứng dụng như Enterprise resource planning (ERP) và Management resource planning (MRP), đã có tác dụng đáng kể trong việc nâng cao khả năng của lớp trên cùng của DBMS - chính là lớp hướng ứng dụng (application-oriented). Những gói ứng dụng được sử dụng rộng rãi đến từ các hãng Baan, Oracle, PeopleSoft, SAP, và Siebel. Những gói này cung cấp một số các chức năng như: quản lý các đánh giá, lập kế hoạch, phân tích tài chính…Dữ liệu được lưu trữ trong cơ sở dữ liệu quan hệ và lớp ứng dụng có thể được xây dựng để hỗ trợ từng yêu cầu khác nhau của các công ty.
Một lợi ích lớn lao nữa chính là DBMSs đã ra nhập hệ thống Internet. Trong khi thế hệ đầu tiên của các Websites chỉ có thể lưu trữ dữ liệu dưới dạng hệ thống file, thì việc sử dụng cơ sở dữ liệu để lưu trữ dữ liệu và sau đó truy cập đến dữ liệu thông qua các trình duyệt Web đã trở nên vô cùng phổ biến. Các truy vấn được đưa vào thông qua các trình duyệt Web và sau đó kết quả được định dạng và trả về sử dụng ngôn ngữ đánh dấu như HTML để dễ dàng hiển thị lên các trình duyệt. Tất cả các nhà phát triển cơ sở dữ liệu thêm các tính năng khác vào hệ quản trị cơ sở dữ liệu để nó có thể ứng dụng hiệu quả trên Internet.
Hệ quản trị cơ sở dữ liệu tiếp tục thể hiện vai trò của mình khi ngày càng nhiều giao dịch được thực hiện trực tuyến và những truy cập được thực hiện thông qua mạng máy tính. Ngày nay, các tiện ích của cơ sở dữ liệu đa phương tiện, thư viện số, các kho dữ liệu khoa học, thương mại điện tử … đã làm thay đổi cuộc sống của con người.
So sánh giữa lưu trữ bằng hệ thống file cổ điển với DBMS
Để hiểu được sự cần thiết của DBMS, chúng ta cùng nhau xem xét ví dụ sau: Một công ty có một tập hợp dữ liệu lớn (khoảng 500GB
Chúng ta có thể giải quyết các vấn đề về quản lý dữ liệu bằng việc lưu trữ dữ liệu trên hệ thống file riêng rẽ. Tuy nhiên, cách tiếp cận này gặp một số khó khăn, bao gồm:
- Có lẽ chúng ta không có bộ nhớ trong nào đủ 500GB để lưu trữ tất cả dữ liệu. Vì thế, chúng ta phải lưu trữ dữ liệu này thông qua các thiết bị lưu trữ như đĩa, băng từ và sau đó chuyển từng phần vào bộ nhớ trong để xử lý khi cần thiết.
- Thậm chí, nếu chúng ta có một bộ nhớ trong có dung lượng 500GB trên hệ thống máy tính 32-bits, chúng ta cũng không thể tham chiếu trực tiếp đến nhiều hơn 4GB dữ liệu! Chúng ta phải lập trình một vài phương pháp để có thể định vị được tất cả dữ liệu.
- Chúng ta phải viết các chương trình đặc biệt để trả lời từng câu hỏi của người sử dụng đối với dữ liệu. Những chương trình này rất phức tạp vì không gian tìm kiếm quá lớn.
- Chúng ta phải bảo đảm sự đúng đắn của dữ liệu đối với những thay đổi không nhất quán của nhiều người sử dụng đồng thời tác động lên dữ liệu. Nếu những chương trình được viết cho phép truy cập đồng thời thì nó thực sự rất phức tạp.
- Chúng ta phải đảm bảo rằng dữ liệu được lưu trữ phải có tính chất nhất quán nếu như hệ thống gặp trục trặc trong khi đang thực hiện một phiên giao dịch có sự thay đổi dữ liệu.
- Hệ điều hành chỉ cung cấp duy nhất một mật khẩu cho máy tính để đảm bảo an toàn. Điều này không đủ khả năng để cung cấp quyền cho các đối tượng người dùng khác nhau để họ chỉ được phép thực hiện trên các vùng dữ liệu nào đó của cơ sở dữ liệu.
DBMS là tập hợp các phần mềm được thiết kế để có thể thực hiện các công việc nói trên một cách dễ dàng. Bằng việc lưu trữ dữ liệu trên DBMS thay vì việc lưu trữ vào các file riêng rẽ, chúng ta có thể sử dụng các chức năng của DBMS để quản lý dữ liệu dễ dàng. Với dung lượng dữ liệu khổng lồ và số lượng rất lớn những người sử dụng đồng thời, những tính năng mà DBMS hỗ trợ đã trở nên vô cùng quan trọng và không thể thiếu.
Những lợi ích của DBMS
Sử dụng DBMS để quản lý dữ liệu có rất nhiều lợi ích:
- Độc lập dữ liệu: Những chương trình ứng dụng nên được độc lập tối đa có thể đối với việc biểu diễn và lưu trữ dữ liệu. DBMS có thể cung cấp các khung nhìn trừu tượng trên dữ liệu cách ly với lưu trữ vật lý của dữ liệu.
- Truy cập dữ liệu hiệu quả: Hàng loạt những tính năng của DBMS có thể giúp lưu trữ và truy cập cơ sở dữ liệu hiệu quả. Những tính năng này đặc biệt quan trọng nếu dữ liệu được lưu trữ trên các thiết bị lưu trữ ngoài.
- Toàn vẹn và an toàn dữ liệu: Nếu dữ liệu luôn luôn được truy cập thông qua DBMS, thì DBMS có thể thiết đặt các ràng buộc toàn vẹn trên dữ liệu. Ví dụ, trước khi thêm thông tin về lương của một nhân viên, DBMS có thể kiểm tra số lương đó không vượt quá số tiền hiện có của phòng. Hoặc, DBMS có thể thiết đặt các quyền truy cập để giới hạn các đối tượng người dùng khác nhau đối với các phần bên trong cơ sở dữ liệu.
- Quản trị dữ liệu: Khi một vài người dùng chia sẻ dữ liệu, người quản trị hệ thống có thể đưa ra những đề xuất mang lại hiệu quả đáng kể. Những chuyên gia có kinh nghiệm hiểu rõ dữ liệu đang được quản lý như thế nào và những nhóm người sử dụng nào có thể sử dụng từng phần trong cơ sở dữ liệu, từ đó họ có thể đưa ra được cách thức tổ chức dữ liệu để giảm được tối đa dư thừa và truy cập trở nên hiệu quả.
- Truy cập đồng thời và khôi phục dữ liệu: DBMS lập lịch cho việc truy cập đồng thời đến dữ liệu để người sử dụng có cảm giác rằng chỉ có một người đang sử dụng dữ liệu trong một khoảng thời gian. Thêm vào đó, DBMS bảo vệ người sử dụng tránh những ảnh hưởng khi hệ thống gặp sự cố.
- Giảm thời gian phát triển ứng dụng: DBMS hỗ trợ rất nhiều các tính năng quan trọng được sử dụng trong rất nhiều các ứng dụng truy cập tới dữ liệu được lưu trữ trong DBMS. Thông qua lược đồ mức cao (high-level interface), những ứng dụng được phát triển nhanh chóng và dễ dàng hơn vì rất nhiều những công việc đã được DBMS hỗ trợ thay vì bạn phải xây dựng trong chương trình ứng dụng.
Với những lợi ích nêu trên thì có lý do nào để chúng ta không sử dụng DBMS? DBMS là sự kết hợp của những gói phần mềm phức tạp, được tối ưu cho những kiểu công việc có sự kế thừa, chồng lên nhau, và nó không thích hợp với những ứng dụng quá hẹp. Ví dụ những ứng dụng có ít ràng buộc hoặc chỉ có một vài các phép toán phải thực hiện. Lý do khác để không sử dụng DBMS là với những ứng dụng không cần có ngôn ngữ truy vấn hỗ trợ. Trong trường hợp này, lưu trữ dữ liệu một cách trừu tượng hóa như trong DBMS là không phù hợp và nó không tận dụng được những tính năng của DBMS như: thực hiện truy vấn phức tạp, bảo mật, điều khiển tương tranh, tự động khôi phục khi có sự cố.
Biểu diễn và lưu trữ dữ liệu trong DBMS
Người sử dụng của DBMS chỉ tập trung vào biểu diễn thế giới thực và các ràng buộc trong đó. Ví dụ, có các đối tượng Sinh viên, Khoa, và các Khóa học khi cần mô tả về trường đại học, và dữ liệu trong cơ sở dữ liệu về trường đại học này được biểu diễn dưới dạng thực thể và các mối quan hệ giữa các thực thể.
Mô hình dữ liệu là tập hợp những cấu trúc biểu diễn dữ liệu ở mức cao, nó đã ẩn đi phần chi tiết dữ liệu được lưu trữ ở mức thấp như thế nào. DBMS cho phép người sử dụng được định nghĩa dữ liệu lưu trữ trong các phần của mô hình dữ liệu. Hầu hết các DBMS hiện nay dựa trên mô hình dữ liệu quan hệ- mô hình được tập trung trình bày trong cuốn sách này.
Mô hình dữ liệu của DBMS ẩn đi rất nhiều các chi tiết về cách thức lưu trữ bên trong của hệ thống để nó trở nên dễ dàng hơn đối với người sử dụng. Mô hình dữ liệu mức ngữ nghĩa là mô hình dữ liệu mức cao, trừu tượng, dễ dàng để người sử dụng tiếp cận và biểu diễn dữ liệu của ứng dụng.
Note: Ví dụ một thiết kế không tốt: Lược đồ quan hệ của thực thể Students sau đây chứng tỏ một thiết kế không tốt; bạn không nên tạo ra trường age, vì giá trị của trường này thay đổi theo thời gian. Tốt hơn, thay vì trường age sẽ là trường DOB (Date of Birth); bởi vì trường luôn có giá trị cố định và trường age cũng có thể suy ra từ trường này. Trong những ví dụ của cuốn sách này, ta vẫn sử dụng trường age để chúng ta dễ đọc.
Mô hình dữ liệu mức ngữ nghĩa được sử dụng rộng rãi nhất ngày nay là mô hình quan hệ -thực thể (còn gọi là mô hình ER), cho phép ta biểu diễn thế giới thực dưới dạng các thực thể và mối liên kết giữa các thực thể đó. Chúng ta sẽ nghiên cứu sâu hơn về mô hình này trong chương 2.
Mô hình quan hệ
Trong phần này chúng ta sẽ tìm hiểu tóm tắt về mô hình quan hệ. Cấu trúc để biểu diễn dữ liệu trong mô hình này ở dạng quan hệ, có thể hiểu là tập hợp của các bản ghi.
Biểu diễn cấu trúc trong mô hình dữ liệu được gọi là lược đồ. Trong mô hình quan hệ, lược đồ của một quan hệ được xác định bằng tên của lược đồ và tên của các trường - còn gọi là các cột hoặc các thuộc tính. Ví dụ, thông tin về sinh viên trong cơ sở dữ liệu của trường đại học có thể được lưu trữ trong quan hệ, được biểu diễn ở dạng lược đồ như sau:
Students(sid: string, name: string, login: string, age: integer, gpa: real)
Lược đồ trên chỉ ra rằng mỗi một bản ghi trong quan hệ Students có năm trường, cùng với tên của trường và kiểu dữ liệu của trường đó.
Một thể hiện dữ liệu của quan hệ Students được chỉ ra trong Hình 1.
Mỗi một dòng trong quan hệ Students là một bản ghi, biểu diễn chi tiết về một sinh viên cụ thể. Biểu diễn này không phải là toàn bộ thông tin về một đối tượng nào đó- ví dụ, thông tin về chiều cao của sinh viên không được chỉ ra vì nó không quan trọng trong cơ sở dữ liệu của một trường đại học. Mỗi lược đồ chỉ ra cấu trúc của quan hệ, vì thế nó có thể được xem như một khuôn dạng để biểu diễn quan hệ.
Chúng ta có thể xác định các ràng buộc toàn vẹn trên thông tin về các sinh viên, đó là những điều kiện mà các bản ghi trong quan hệ phải tuân theo. Ví dụ, chúng ta có thể xác định mỗi sinh viên phải có một sid duy nhất. Quan sát thấy rằng, chúng ta không thể biểu diễn những ràng buộc này thông qua lược đồ Students. Vì thế, chúng ta phải chỉ ra các ràng buộc trên từng trường dữ liệu khi biểu diễn dữ liệu thông qua DBMS. Việc chỉ ra các ràng buộc về toàn vẹn dữ liệu rất quan trọng trong khi xây dựng mô hình dữ liệu.
Những mô hình dữ liệu khác:
Ngoài mô hình dữ liệu quan hệ (mô hình được sử dụng trong rất nhiều hệ thống (bao gồm IBM's DB2, Informix, Oracle, Sybase, Microsoft's Access, FoxBase, Paradox, Tandem, và Teradata), những mô hình dữ liệu quan trọng khác như mô hình phân cấp (ví dụ, mô hình sử dụng trong IBM's IMS DBMS), mô hình mạng (ví dụ, mô hình sử dụng trong IDS và IDMS), mô hình hướng đối tượng (ví dụ, mô hình sử dụng trong Objectstore và Versant), và mô hình quan hệ - hướng đối tượng (ví dụ, mô hình sử dụng trong các sản phẩm của DBMS từ các hãng IBM, Informix, ObjectStore, Oracle, Versant, và một số hãng khác). Mặc dù có một số hệ thống cơ sở dữ liệu vẫn đang sử dụng mô hình dữ liệu mạng và phân cấp, một số hệ thống khác sử dụng mô hình hướng đối tượng và mô hình quan hệ hướng đối tượng, nhưng mô hình phổ biến nhất hiện nay vẫn là mô hình quan hệ.
Trong cuốn sách này, chúng ta tập trung tìm hiểu về mô hình quan hệ bởi vì nó được ứng dụng rộng rãi. Thực tế, mô hình quan hệ - hướng đối tượng, cũng bắt đầu trở nên phổ biến vì nó kết hợp đặc trưng giữa mô hình quan hệ và mô hình hướng đối tượng, nắm chắc về mô hình quan hệ là thực sự cần thiết để bạn có thể tìm hiểu tiếp về mô hình hướng đối tượng. (Chúng ta sẽ bàn đến mô hình hướng đối tượng và mô hình quan hệ - hướng đối tượng ở Chương 23.)
Các mức trừu tượng trong DBMS
Dữ liệu trong DBMS được biểu diễn ở ba mức trừu tượng, minh họa trong hình 5. Ba mức trừu tượng này được biểu diễn trong các lược đồ: lược đồ khái niệm, lược đồ vật lý và lược đồ ngoài.
Ngôn ngữ định nghĩa dữ liệu (DDL) được sử dụng để định nghĩa lược đồ ngoài và lược đồ khái niệm. Chúng ta sẽ bàn tới ngôn ngữ DDL trong chương 3, phần trình bày về ngôn ngữ SQL- ngôn ngữ truy vấn dữ liệu được sử dụng rộng rãi hiện nay. Tất cả các nhà sản xuất DBMS hiện nay đều hỗ trợ những lệnh SQL để biểu diễn những khía cạnh của lược đồ vật lý, nhưng những lệnh này không nằm trong ngôn ngữ SQL chuẩn. Thông tin về lược đồ khái niệm, lược đồ trong, lược đồ vật lý được lưu trữ trong Danh mục hệ thống (Phần 12.1). Chúng ta sẽ bàn về ba mức trừu tượng trong phần này.

Lược đồ khái niệm - Conceptual Schema
Lược đồ khái niệm (còn được gọi là Lược đồ logic) biểu diễn cấu trúc và các ràng buộc trong toàn bộ cơ sở dữ liệu phục vụ cho việc giao tiếp với người dùng. Lược đồ khái niệm ẩn đi cách thức tổ chức vật lý của dữ liệu, chỉ tập trung vào việc biểu diễn các thực thể, các kiểu dữ liệu, mối quan hệ giữa các thực thể, các thao tác của người sử dụng và các ràng buộc giữa các dữ liệu.
Trong hệ quản trị cơ sở dữ liệu quan hệ, lược đồ khái niệm chỉ ra tất cả các quan hệ được lưu trữ trong cơ sở dữ liệu. Trong cơ sở dữ liệu về trường đại học, các quan hệ có thể chứa đựng thông tin về các đối tượng như sinh viên, khoa, các khóa học và các mối quan hệ giữa các đối tượng này. Tất cả các sinh viên được biểu diễn trong các bản ghi của quan hệ sinh viên và chúng ta dễ dàng nhìn thấy chúng. Chúng ta thường biểu diễn quan hệ thông qua lược đồ khái niệm như sau:
Students(sid: string, name: string, login: string, age: integer, gpa: real)
Faculty(fid: string, fname: string, sal: real)
Courses(cid: string, cname: string, credits: integer)
Rooms(rno: integer, address: string, capacity: integer)
Enrolled(sid: string, cid: string, grade: string)
Teaches(fid: string, cid: string)
Meets_In(cid: string, rno: integer, time: string)
Lựa chọn các quan hệ, và các trường trong các quan hệ đó không phải dễ dàng và thống nhất. Quá trình lựa chọn này được gọi là thiết kế cơ sở dữ liệu khái niệm. Chúng ta sẽ bàn đến nội dung này trong Chương 2 và 19.
Lược đồ vật lý - Physical Schema
Lược đồ vật lý chỉ ra cách lưu trữ dữ liệu chi tiết. Về cơ bản, lược đồ vật lý chỉ ra cách thức dữ liệu được lưu trữ trong các thiết bị lưu trữ thứ cấp như đĩa và băng từ.
Chúng ta phải quyết định những cách thức tổ chức tệp tin nào được sử dụng để lưu trữ các quan hệ và tạo ra những cấu trúc dữ liệu bổ trợ gọi là các chỉ số để tăng tốc độ của các phép toán truy cập dữ liệu. Ví dụ về lược đồ vật lý của cơ sở dữ liệu University như sau:
- Lưu trữ tất cả các quan hệ bằng những tệp tin không được sắp xếp của các bản ghi (Một tệp tin trong DBMS là tập hợp những bản ghi hoặc tập hợp các trang, tốt hơn là một xâu của các ký tự như trong hệ điều hành.)
- Tạo các chỉ số trên cột đầu tiên của các quan hệ Students, Faculty, và Courses, cột Sal của Faculty, và cột Capacity của quan hệ Rooms.
Những quyết định về lược đồ vật lý dựa trên những hiểu biết về cách thức dữ liệu được truy cập thế nào. Quá trình đi đến một lược đồ vật lý tốt được gọi là thiết kế cơ sở dữ liệu vật lý. Chúng ta sẽ bàn đến nội dung này trong Chương 16.
Lược đồ ngoài - External Schema
Lược đồ ngoài cũng là một trong những thành phần trong mô hình dữ liệu của DBMS, cho phép truy cập tới dữ liệu ở các mức khác nhau mà người sử dụng được phép. Mỗi cơ sở dữ liệu có chính xác một lược đồ vật lý và một lược đồ khái niệm vì nó chỉ lưu trữ một tập hợp các quan hệ, nhưng nó lại có thể có nhiều lược đồ mức ngoài để thích hợp cho nhiều đối tượng người sử dụng khác nhau. Một lược đồ ngoài có thể có nhiều khung nhìn và các quan hệ có từ lược đồ khái niệm. Một khung nhìn có thể được hiểu là một quan hệ, nhưng những bản ghi của khung nhìn không được lưu trữ trong DBMS. Khung nhìn được người sử dụng định nghĩa và kết quả của nó được lấy ra từ các quan hệ trong cơ sở dữ liệu (kết quả của khung nhìn có thể là dữ liệu của một hoặc nhiều quan hệ). Chúng ta sẽ bàn kỹ về khung nhìn trong Chương 3 và 25.
Thiết kế lược đồ ngoài dựa trên những yêu cầu của người dùng cuối. Ví dụ, chúng ta muốn cho sinh viên xem thông tin về các khóa học, gồm có mã số của khóa học, tên khoa dạy khóa học đó, và số lượng những đăng ký tham gia khóa học, chúng ta sẽ định nghĩa một khung nhìn như sau:
Courseinfo(cid: string, fname: string, enrollment: integer)
Người dùng coi những khung nhìn giống như những quan hệ và yêu cầu xem những bản ghi trong khung nhìn. Mặc dù, những bản ghi trong khung nhìn không được lưu trữ rõ ràng, chúng chỉ được tính toán khi cần thiết. Chúng ta không chỉ ra Courseinfo trong lược đồ khái niệm vì nó có thể được tính ra từ những quan hệ trong lược đồ khái niệm, và việc lưu trữ nó sẽ làm dư thừa thông tin. Dư thừa thông tin thì sẽ có khả năng sẽ dẫn tới dữ liệu không nhất quán. Ví dụ, một bộ dữ liệu có thể được thêm vào quan hệ Enrolled, chỉ ra rằng một sinh viên đã tham gia vào một vài khóa học nào đó, trong khi giá trị trường Enrollment của lược đồ Courseinfo không tăng lên tương ứng.
Độc lập dữ liệu
Một lợi ích rất quan trọng được sử dụng trong DBMS là khả năng độc lập dữ liệu. Đó là, những chương trình ứng dụng được cách ly với những thay đổi về cấu trúc và cách lưu trữ dữ liệu. Độc lập dữ liệu đạt được thông qua việc sử dụng ba mức trừu tượng dữ liệu; cụ thể, lược đồ khái niệm và lược đồ ngoài cung cấp lợi ích này.
Những quan hệ trong lược đồ ngoài được sinh ra dựa trên những quan hệ tương ứng trong lược đồ khái niệm
Faculty_public(fid: string, fname: string, office: integer)
Faculty_public(fid: string, sal: real)
Bằng trực giác, một vài thông tin bí mật về khoa đã được lưu trong một quan hệ riêng và trường office đã được thêm vào. Khung nhìn Courseinfo có thể được định nghĩa lại dựa trên hai quan hệ Faculty_public và Faculty_private, những quan hệ cùng nhau chứa thông tin về Faculty, vì thế những người sử dụng truy vấn thông tin trong Courseinfo sẽ thu được kết quả không thay đổi với trước.
Như vậy, người sử dụng có thể được bảo vệ từ những thay đổi trong cấu trúc logic của dữ liệu, hoặc những thay đổi trong việc lựa chọn những quan hệ nào được lưu trữ. Tính chất này được gọi là độc lập dữ liệu logic.
Quay trở lại, lược đồ khái niệm bảo vệ người dùng từ những thay đổi trong lưu trữ vật lý của dữ liệu. Đặc trưng này được đề cập như là độc lập dữ liệu vật lý. Lược đồ khái niệm ẩn đi những chi tiết như dữ liệu được lưu trữ thực sự như thế nào trên đĩa, cấu trúc tệp tin, các lựa chọn chỉ số. Vì thế, chúng ta có thể thay đổi việc lưu trữ chi tiết của dữ liệu mà không cần thay đổi chương trình ứng dụng. (Tất nhiên, việc thực hiện thì vẫn có thể ảnh hưởng từ những thay đổi này).
Truy vấn trong DBMS
Người sử dụng thường có nhiều những yêu cầu khác nhau về dữ liệu đối với cơ sở dữ liệu. Ngược lại với những hệ thống thông tin cũ, hệ cơ sở dữ liệu quan hệ cho phép dễ dàng truy cập đến thông tin trong cơ sở dữ liệu, tính năng này khiến cho hệ thống trở nên thân thiện với người sử dụng hơn. Xem xét ví dụ cơ sở dữ liệu về một trường đại học trong phần 5.2, sau đây là một số các yêu cầu đối với cơ sở dữ liệu mà người sử dụng thường đặt ra.
- Tên của sinh viên có mã là 123456?
- Lương trung bình của các giáo viên dạy cho khóa học CS546?
- Bao nhiêu sinh viên đã đăng ký khóa học CS564?
- Tỷ lệ sinh viên tham gia khóa học CS564 có một điểm từ B trở lên?
- Có sinh viên nào có điểm trung bình chung nhỏ hơn 3 tham gia khóa học CS564?
Những yêu cầu trên cần phải truy xuất thông tin từ DBMS và được gọi là các truy vấn. DBMS cung cấp một ngôn ngữ đặc biệt là ngôn ngữ truy vấn. Tính năng nổi trội của mô hình quan hệ là nó hỗ trợ rất mạnh mẽ ngôn ngữ truy vấn. Phép toán quan hệ là ngôn ngữ truy vấn chuẩn dựa trên các phép toán logic, và truy vấn viết bằng ngôn ngữ này rất trực quan và rõ ràng. Đại số quan hệ là ngôn ngữ truy vấn chuẩn khác dựa trên tập hợp các phép toán trên quan hệ.
DBMS rất quan tâm đến việc đánh giá hiệu quả của các truy vấn. Chúng ta sẽ bàn đến tối ưu hóa truy vấn và đánh giá trong chương 12, 14 và 15. Tất nhiên, hiệu quả của việc đánh giá truy vấn nhằm mục đích xác định cách thức lưu trữ vật lý của dữ liệu như thế nào. Việc đánh chỉ số có thể được sử dụng để làm tăng tốc độ của câu lệnh truy vấn. Chúng ta sẽ bàn đến cách lưu trữ dữ liệu và đánh chỉ số trong chương 8, 9, 10 và 11.
DBMS cho phép người sử dụng tạo, sửa, và truy vấn dữ liệu thông qua ngôn ngữ thực thi dữ liệu (DML). Vì thế, ngôn ngữ truy vấn-cung cấp các câu lệnh thêm, xóa và sửa dữ liệu-chỉ là một phần của DML. Chúng ta sẽ bàn đến các tính năng của DML trong chương 5. DML và DDL có thể được nhúng trong các ngôn ngữ lập trình như C hoặc COBOL.
Quản lý giao dịch
Xem xét cơ sở dữ liệu lưu trữ thông tin về đặt chỗ vé máy bay. Trong nhiều trường hợp, tại cùng một thời điểm, có nhiều đại lý cùng truy cập tới hệ thống để đặt chỗ trên máy bay. Ví dụ, như họ cùng muốn đặt một chỗ nào đó trên cùng một chuyến bay. Lúc đó, hệ thống phải đảm bảo được thứ tự thực hiện các yêu cầu để tránh xung đột.
Một ví dụ khác về nhiều người dùng đồng thời sử dụng hệ thống là cơ sở dữ liệu của ngân hàng. Trong khi một chương trình ứng dụng đang tính toán tổng số khoản tiền gửi của một tài khoản, thì một ứng dụng khác lại đang thực hiện chuyển tiền vào tài khoản này. Nếu hai giao dịch này diễn ra đồng thời thì kết quả của hai giao dịch trên không đồng nhất. Vì thế, những giao dịch dị thường như thế không được phép xảy ra.
Thêm vào đó, DBMS phải bảo vệ người dùng tránh những ảnh hưởng khi hệ thống xảy ra sự cố, đảm bảo rằng tất cả dữ liệu và các trạng thái của ứng dụng phải được khôi phục nhất quán khi hệ thống khởi động lại. Ví dụ, nếu đại lý bán vé máy bay yêu cầu được đặt chỗ và DBMS phản hồi lại là đã chấp nhận thì yêu cầu đó chắc chắn phải được thực hiện dù hệ thống có gặp sự cố. Và, nếu như DBMS chưa phản hồi lại yêu cầu của đại lý bán vé, thì những thay đổi thành phần đã thực hiện trước khi hệ thống gặp sự cố phải được khôi phục lại, tức là hệ thống phải khôi phục lại như chưa từng có yêu cầu thực hiện giao dịch đó để đảm bảo tính đúng đắn của dữ liệu.
Giao dịch là bất kỳ một thực hiện nào của người dùng trong DBMS. (Thực hiện cùng một chương trình nhiều lần sẽ đưa ra nhiều giao dịch). Đây là một đơn vị cơ sở (basic unit) của thay đổi được thực hiện trong DBMS: Những giao dịch chưa hoàn thành (một phần của giao dịch) sẽ không được phép, có nghĩa là một giao dịch thành công nếu tất cả các lệnh trong giao dịch đó được thực hiện thành công và ngược lại, giao dịch sẽ thất bại nếu một trong số những lệnh trong giao dịch đó thất bại. Chúng tôi sẽ trình bày tóm tắt như thế nào để đảm bảo được những tính chất này, phần chi tiết sẽ được bàn đến trong những chương sau.
Thực hiện đồng thời của các giao dịch
Một công việc quan trọng của DBMS là lập lịch trình cho những truy cập đồng thời tới dữ liệu để người dùng được đảm bảo an toàn, mặc dù thực tế rằng nhiều người khác có thể đang cùng truy cập tới dữ liệu đó. Sự quan trọng của việc này không thể được xem nhẹ vì cơ sở dữ liệu được chia sẻ cho một số lượng lớn người sử dụng, họ gửi yêu cầu tới DBMS một cách độc lập. DBMS cho phép người sử dụng nghĩ về những chương trình của họ như thể nó đang được thực hiện độc lập, chương trình này sau chương trình kia theo thứ tự được DBMS sắp xếp. Ví dụ, có một chương trình chuyển tiền vào một tài khoản diễn ra đồng thời với một chương trình ghi nợ của chính tài khoản này, cả hai chương trình có thể được DBMS thực hiện, và thứ tự của chúng sẽ phải được đảm bảo để không xảy ra sai sót dữ liệu.
Giao thức khóa là tập các quy tắc theo sau mỗi giao dịch để đảm bảo rằng trong khi một giao dịch đang thực hiện, những thao tác của một số giao dịch khác có thể được xen vào, nhưng kết quả cuối cùng vẫn phải tương đương với việc các giao dịch này được thực hiện theo một thứ tự. Khóa là một cơ chế được sử dụng để điều khiển việc truy cập tới các đối tượng cơ sở dữ liệu. Hai loại của khóa được DBMS hỗ trợ: khóa chia sẻ trên một đối tượng cho phép hai giao dịch tại cùng một thời điểm, nhưng khóa độc quyền trên một đối tượng sẽ đảm bảo rằng không có bất kỳ một giao dịch nào khác được nắm khóa trên đối tượng này.
Giả sử rằng có giao thức khóa: Tất cả các giao dịch bắt đầu bằng việc nắm giữ khóa chia sẻ trên mỗi đối tượng dữ liệu nếu nó thực hiện thao tác đọc, và nắm giữa khóa độc quyền khi nó cần sửa dữ liệu và sau đó giải phóng tất cả các khóa khi nó hoàn thành tất cả các công việc. Xem xét hai giao dịch T1 và T2, T1 muốn sửa một đối tượng dữ liệu và T2 muốn đọc trên chính đối tượng dữ liệu này. Như vậy, nếu T1 có khóa độc quyền sẽ được thực hiện trước, T2 không thể được thực hiện cho đến khi T1 giải phóng khóa. Với thứ tự này, tất cả các yêu cầu của T1 sẽ phải được hoàn thành trước khi T2 bắt đầu. Chúng ta sẽ đề cập chi tiết đến khóa trong chương 16 và 17.
Những giao dịch không hoàn thành và sự cố hệ thống
Giao dịch có thể bị ngắt trước khi hoàn thành do xảy ra sự cố. DBMS phải đảm bảo rằng những thay đổi đã hoàn thành từ khi bắt đầu giao dịch đến khi bị ngắt phải được loại bỏ ra khỏi cơ sở dữ liệu. Ví dụ, nếu DBMS đang thực hiện chuyển tiền từ tài khoản A sang tài khoản B, và hệ thống gặp sự cố khi tài khoản A đã bị trừ tiền, tài khoản B chưa kịp cộng tiền. Lúc này, giao dịch bị ngắt phải thực hiện khôi phục lại tình trạng như trước khi nó thực hiện. Để làm được điều này, DBMS duy trì một lịch sử (log) đối với tất cả các hoạt động ghi lên cơ sở dữ liệu. Đặc tính chủ yếu của log là tất cả các hoạt động ghi phải được lưu lại trên log (nằm trên đĩa) trước khi nó thực hiện trên cơ sở dữ liệu. Vì nếu không làm như vậy, DBMS sẽ không thể khôi phục lại những thay đổi đã thực hiện. Đặc tính này được gọi là Write-Ahead Log hoặc WAL. Để đảm bảo được đặc tính này, DBMS phải có khả năng cưỡng chế một trang nào đó của bộ nhớ phải ghi lên đĩa.
Log cũng được sử dụng để chắc chắn rằng những thay đổi được thực hiện bằng các giao dịch thành công sẽ không bị mất do hệ thống gặp sự cố, được giải thích rõ hơn trong chương 18. Việc mang đến cho cơ sở dữ liệu trạng thái ổn định sau khi sự cố xảy ra có thể mất nhiều thời gian, vì DBMS phải chắc chắn rằng những ảnh hưởng của tất cả các giao dịch đã thành công phải được lưu trữ lại và tất cả các giao dịch chưa hoàn thành phải được khôi phục lại trạng thái như trước khi nó bắt đầu. Có thể giảm thời gian khôi phục lại bằng cách xác nhận định kỳ một số thông tin trên đĩa, thao tác thực hiện định kỳ này được gọi là checkpoint.
Các điểm cần lưu ý
Cuối cùng, có ba điểm cần ghi nhớ đối với một DBMS hỗ trợ điều khiển tương tranh và khôi phục hệ thống:
- Giao dịch đọc một đối tượng nào đó của cơ sở dữ liệu theo chế độ khóa chia sẻ và ghi theo chế độ khóa độc quyền. Đặt khóa trên đối tượng giúp giới hạn những khả năng của nó với những giao dịch khác, ảnh hưởng đến việc thực hiện.
- Để duy trì hiệu quả của log, DBMS phải được lựa chọn hiệu quả tập các trang trong bộ nhớ chính trên đĩa. Hệ điều hành hỗ trợ chức năng này không phải lúc nào cũng đáp ứng được.
- Checkpoint định kỳ có thể giảm thời gian khôi phục hệ thống khi có sự cố. Tất nhiên, điều này phải được cân đối để tránh ảnh hưởng của checkpoint quá nhiều làm giảm tốc độ thực hiện các yêu cầu bình thường.
Kiến trúc của một DBMS
Hình 3 chỉ ra kiến trúc của một DBMS tiêu biểu dựa trên mô hình dữ liệu quan hệ.
DBMS nhận những câu lệnh SQL từ các giao diện người dùng, lập kế hoạch thực hiện truy vấn, thực hiện những truy vấn này trên cơ sở dữ liệu và trả lại kết quả. (Câu lệnh SQL có thể được nhúng trong các ngôn ngữ lập trình, ví dụ, Java hoặc COBOL. Chúng ta bỏ qua những vấn đề này để tập trung vào các chức năng chính của DBMS).
Khi người sử dụng yêu cầu một truy vấn, cú pháp truy vấn được xem xét trong bộ tối ưu hóa truy vấn, bộ tối ưu hóa này sẽ dựa vào những dữ liệu đang được lưu trữ và cách thức lưu trữ chúng để lên kế hoạch thực hiện truy vấn sao cho hiệu quả. Kế hoạch thực hiện truy vấn là một tập các bước thực hiện được biểu diễn thành các phép toán quan hệ dưới dạng hình cây. Chúng ta sẽ bàn tới tối ưu hóa truy vấn trong chương 12 và chương 15. Thực hiện của các phép toán khác được trình bày trong chương 12 và 14.
Phần mã chương trình thực thi các phép toán quan hệ được đặt phía trên của lớp files and access methods. Lớp này bao gồm hàng loạt các phần mềm hỗ trợ khái niệm của tệp tin, trong DBMS là tập hợp các trang hoặc các bản ghi. Lớp này hỗ trợ các file vun đống, còn gọi là file chứa các trang không được sắp thứ tự, và các chỉ số. Thêm vào đó, để nắm được vị trí của các trang trong tệp tin, lớp này lưu trữ những thông tin bên trong một trang. Vấn đề lưu trữ mức trang và file được đề cập trong Chương 9. Cấu trúc của file và các chỉ số được đề cập trong Chương 8.
Phần mã chương trình của lớp filesandaccessmethods được đặt phía trên của buffer manager, bộ phận này có nhiệm vụ mang những trang từ đĩa tới bộ nhớ chính khi cần thiết để phản hồi các yêu cầu từ người dùng. Buffer management được bàn đến trong Chương 9.
Lớp thấp nhất của phần mềm DBMS giúp quản lý các vùng trống trên đĩa, nơi lưu trữ dữ liệu, là disk space manager. Lớp này được trình bày trong chương 9.
DBMS hỗ trợ truy cập tương tranh và khôi phục sự cố bằng việc lập lịch trình cẩn thận cho những yêu cầu của người dùng và duy trì lịch sử của tất cả các thay đổi trên cơ sở dữ liệu. Các thành phần hỗ trợ điều khiển tương tranh và khôi phục sự cố nằm trong transaction managercủa DBMS, quản lý giao dịch đảm bảo rằng các giao dịch yêu cầu và giải phóng các khóa theo các giao thức khóa thích hợp và lập lịch trình thực hiện cho các giao dịch; log manager quản lý các yêu cầu đối với các khóa trên các đối tượng cơ sở dữ liệu; và recovery manager duy trì lịch sử và khôi phục hệ thống trở về trạng thái nhất quán sau sự cố. Các lớp disk space manager, buffer manager, và file and access method phải chịu ảnh hưởng của các thành phần này. Chúng ta sẽ bàn chi tiết đến điều khiển đồng thời và khôi phục sự cố trong Chương 16.
Những người làm việc với cơ sở dữ liệu
Có rất nhiều người tham gia tạo và sử dụng cơ sở dữ liệu. Hiển nhiên, có những nhà sáng chế - người xây dựng phần mềm DBMS, và người dùng cuối – người mong muốn được lưu trữ và sử dụng dữ liệu trong DBMS. Người xây dựng phầm mềm DBMS làm việc cho những nhà phát triển hệ thống như IBM hoặc Oracle. Người dùng cuối là những người đến từ các lĩnh vực khác nhau. Dữ liệu tăng trưởng rất nhanh và phức tạp, và nó được coi là tài sản của cơ quan, việc lưu trữ nó trong DBMS đang được chấp nhận rộng rãi. Nhiều người dùng cuối đơn giản chỉ sử dụng các ứng dụng được viết bởi những người lập trình ứng dụng và họ không cần có nhiều hiểu biết về phầm mềm DBMS. Tất nhiên, những người dùng có trình độ cao hơn yêu cầu có thể tự viết được các lệnh truy vấn của họ.
Ngoài hai đối tượng người dùng là người dùng cuối và người xây dựng các phần mềm DBMS còn có hai đối tượng nữa, đó là: người lập trình ứng dụng và người quản trị cơ sở dữ liệu.
Người lập trình ứng dụng cơ sở dữ liệu phát triển những gói phần mềm hỗ trợ người dùng cuối truy cập cơ sở dữ liệu, người dùng cuối thường không phải là những chuyên gia về máy tính. Người lập trình ứng dụng sử dụng các ngôn ngữ lập trình và các công cụ phần mềm do các nhà sáng chế DBMS cung cấp. (Các công cụ như viết báo cáo, bảng tính, thống kê, …). Các chương trình ứng dụng nên truy cập dữ liệu thông qua lược đồ ngoài. Có thể viết những ứng dụng truy cập dữ liệu ở mức thấp, nhưng những ứng dụng như vậy phải có sự dàn xếp với khả năng độc lập dữ liệu.
Một cơ sở dữ liệu cá nhân được duy trì bằng một người làm chủ nó và sử dụng nó. Tuy nhiên, những cơ sở dữ liệu của một tổ chức hoặc được sử dụng rộng rãi sẽ đủ quan trọng và phức tạp để cần có một chuyên gia quản lý nó, người này gọi là người quản trị cơ sở dữ liệu (DBA). DBA có rất nhiều nhiệm vụ:
- Thiết kế các lược đồ vật lý và lược đồ khái niệm: DBA phải hiểu những kiểu dữ liệu nào có thể được lưu trữ trong DBMS và nó được sử dụng như thế nào. Dựa vào những hiểu biết này, DBA phải thiết kế các lược đồ khái niệm (quyết định lưu trữ những quan hệ nào) và lược đồ vật lý (các quan hệ này được lưu trữ như thế nào). DBA có lẽ cũng có thể thiết kế những phần khác nhau của lược đồ ngoài bằng cách tạo ra các khung nhìn bổ sung.
- Bảo mật và Xác thực: DBA phải chịu trách nhiệm đảm bảo rằng những truy cập dữ liệu không hợp lệ sẽ không được phép. Nói chung, không phải tất cả người dùng đều có thể truy cập vào tất cả dữ liệu. Trong DBMS quan hệ, người dùng có thể được cấp quyền truy cập tới các quan hệ và các khung nhìn hiện có. Ví dụ, bạn có thể cho phép sinh viên đăng ký các khóa học và giáo viên dạy khóa học đó, nhưng bạn không nên cho sinh viên xem lương và thứ hạng của các giáo viên. DBA có thể thực hiện những chính sách này bằng cách chỉ cấp cho sinh viên quyền truy cập tới khung nhìn Courseinfo.
- Sự sẵn sàng của dữ liệu và khôi phục sau sự cố: DBA phải thực hiện các bước để đảm bảo rằng nếu hệ thống gặp sự cố, người dùng có thể được tiếp tục truy cập nhiều nhất có thể những dữ liệu không bị hỏng. DBA cũng phải làm việc để khôi phục dữ liệu về trạng thái nhất quán. DBMS cung cấp phần mềm hỗ trợ những tính năng này, nhưng DBA phải có nhiệm vụ thực thi những thủ tục sao lưu dữ liệu định kỳ và duy trì logs của hệ thống để có thể khôi phục dữ liệu sau sự cố.
- Tinh chỉnh cơ sở dữ liệu: Yêu cầu của người dùng thay đổi theo thời gian. DBA phải có trách nhiệm sửa đổi cơ sở dữ liệu, cụ thể là các lược đồ vật lý và lược đồ khái niệm để đảm bảo thực hiện tương xứng với những thay đổi của yêu cầu.
Các câu hỏi ôn tập
Câu trả lời của các câu hỏi có thể được tìm thấy trong các phần sau:
- Lợi ích chính của việc sử dụng DBMS để quản lý dữ liệu trong những ứng dụng có phạm vi sử dụng rộng lớn? (Phần 1, 4)
- Khi nào bạn thực hiện lưu trữ dữ liệu bằng DBMS thay vì sử dụng hệ thống tệp tin do hệ điều hành cung cấp? (Phần 3)
- Mô hình dữ liệu là gì? Mô hình dữ liệu quan hệ là gì? Độc lập dữ liệu là gì và DBMS hỗ trợ nó như thế nào? (Phần 5)
- Giải thích lợi ích của việc sử dụng ngôn ngữ truy vấn thay vì các chương trình của người dùng để truy cập đến dữ liệu? (Phần 6)
- Giao dịch là gì? Những đảm bảo gì mà DBMS phải làm để thực hiện các giao dịch? (Phần 7)
- Khóa trong DBMS là gì và vì sao khóa được sử dụng? Write-ahead logging là gì và vì sao nó được sử dụng? Checkpointing là gì và vì sao nó được sử dụng? (Phần 8)
- Trình bày các chức năng của người quản trị cơ sở dữ liệu, các lập trình ứng dụng và người sử dụng cuối của cơ sở dữ liệu. Ai là người cần phải biết tất cả về các thành phần của hệ thống cơ sở dữ liệu? (Phần 9)
Bài tập
Vì sao bạn lựa chọn hệ thống cơ sở dữ liệu thay vì việc lưu trữ dữ liệu đơn giản trong hệ thống tệp tin. Khi nào không nên sử dụng hệ thống cơ sở dữ liệu?
Một cơ sở dữ liệu là một tập hợp dữ liệu hợp nhất, nó thường rất lớn nên phải lưu trữ trong các thiết bị lưu trữ thứ cấp như đĩa hoặc băng từ. Dữ liệu này có thể được lưu trữ như một tập hợp các file, hoặc lưu trữ trong một DBMS. Những lợi ích khi sử dụng DBMS bao gồm:
- Sự độc lập dữ liệu và truy cập hiệu quả. Các chương trình ứng dụng cơ sở dữ liệu độc lập với những chi tiết của biểu diễn và lưu trữ dữ liệu. Lược đồ ngoài và lược đồ khái niệm cung cấp sự độc lập với những quyết định về các lưu trữ vật lý và thiết kế logic. Thêm nữa, DBMS cung cấp cách thức lưu trữ và các cơ chế truy cập rất hiệu quả, bao gồm việc hỗ trợ các file có kích thước rất hơn, các cấu trúc chỉ mục và tối ưu hóa truy vấn.
- Giảm thời gian phát triển ứng dụng. Vì DBMS cung cấp các chức quan trọng cho các ứng dụng, như điều khiển tương tranh và khôi phục sự cố, các khả năng truy vấn mức cao, vv…, người lập trình chỉ phải viết những đoạn mã chương trình đặc biệt cho từng ứng dụng. Thậm chí điều này cũng được hỗ trợ bởi các công cụ phát triển ứng dụng phù hợp do các nhà sáng chế ra DBMS cung cấp.
- Toàn vẹn dữ liệu và bảo mật. Cơ chế khung nhìn và các khả năng xác thực của DBMS cung cấp một cơ chế điều khiển truy cập mạnh mẽ. Thêm nữa, những cập nhật gây ra sự không nhất quán của dữ liệu có thể được phát hiện và từ chối bởi DBMS nếu người dùng chỉ rõ các ràng buộc toàn vẹn tương ứng.
- Quản trị dữ liệu. Bằng việc cung cấp một bộ khung giúp hỗ trợ một tập hợp dữ liệu lớn và nhiều người sử dụng, DBMS hỗ trợ việc duy trì và các công việc quản trị dữ liệu. Một DBA tốt có thể là bức bình phong ngăn chặn những truy cập trái phép, và định kỳ sao lưu dữ liệu vv…
- Điều khiển tương tranh và khôi phục sự cố. DBMS hỗ trợ khai niệm giao dịch. Người dùng có thể viết các giao dịch như thể các chương trình của họ đang được chạy độc lập trên cơ sở dữ liệu. DBMS thực thi các thao tác của các giao dịch một cách xen kẽ để nâng cao khả năng của hệ thống, nhưng các lịch trình của chúng lại được đảm bảo rằng các thao tác xung đột không được phép diễn ra đồng thời. Thêm nữa, DBMS duy trì một log để ghi lại những thay đổi đối với dữ liệu, và nếu hệ thống gặp sự cố, nó có thể khôi phục lại cơ sở dữ liệu để nó trở về trạng thái nhất quán. Tức là, các thao tác của các giao dịch chưa hoàn thành được làm lại để trạng thái cơ sở dữ liệu chỉ tương ứng với các giao dịch đã thành công. Vì thế, nếu mỗi giao dịch thành công khi thực hiện độc lập đưa cơ sở dữ liệu về trạng thái nhất quán thì trạng thái cơ sở dữ liệu sau khi khôi phục sự cố cũng trở về trạng thái nhất quán.
- Nếu những lợi ích trên không quan trọng với ứng dụng của bạn, thì việc sử dụng một tập các file là giải phát tốt hơn vì việc duy trì và thực hiện trên DBMS phải trả giá thành cao hơn.
Độc lập dữ liệu logic là gì và vì sao nó quan trọng?
Dành cho bạn đọc.
Giải thích sự khác nhau giữa độc lập dữ liệu logic và độc lập dữ liệu vật lý?
Độc lập dữ liệu logic có nghĩa là người dùng được bảo vệ từ những thay đổi trong cấu trúc logic của dữ liệu, trong khi độc lập dữ liệu vật lý cách ly người dùng với những thay đổi trong lưu trữ vật lý của dữ liệu. Chúng ta xem một ví dụ của độc lập dữ liệu logic trong câu trả lời của Bài 1.2. Xem xét quan hệ Students từ ví dụ này (và bây giờ giả sử rằng nó không được thay thế bằng hai quan hệ nhỏ hơn). Chúng ta có thể lựa chọn để lưu trữ các bản ghi của quan hệ Students trong một heap file, cùng với một chỉ mục phân cụm trên trường sname. Ngoài ra, chúng ta có thể lựa chịn để lưu trữ nó cùng với một chỉ mục trên trường gpa, hoặc tạo ra các chỉ mục rên cả hai trường này, hoặc lưu trữ nó như một file được sắp xếp bằng gpa. Những cách lưu trữ này người dùng không nhìn thấy được, họ chỉ nhìn thấy quan hệ đơn giản là một tập các bản ghi. Điều này chính là sự độc lập dữ liệu vật lý.
Giải thích sự khác nhau giữa lược đồ ngoài, lược đồ trong, lược đồ khái niệm. Những lược đồ khác nhau này liên quan đến khái niệm độc lập dữ liệu logic và độc lập dữ liệu vật lý như thế nào?
Dành cho bạn đọc.
Trách nhiệm của DBA là gì? Nếu giả sử rằng DBA không quan tâm đến các truy vấn, DBA vẫn cần hiểu về tối ưu hóa truy vấn? Vì sao?
DBA có nhiệm vụ sau:
- Thiết kế các lược đồ logic và vật lý, cũng như là những khung nhìn chủ yếu của lược đồ ngoài.
- Bảo mật và xác thực.
- Sự sẵn sàng của dữ liệu và khôi phục sau sự cố.
- Tinh chỉnh cơ sở dữ liệu: DBAM có nhiệm vụ phát triển cơ sở dữ liệu, cụ thể là phát triển các lược đồ vật lý và lược đồ ngoài để đảm bảo thực hiện được những yêu cầu thay đổi theo thời gian của người dùng.
Scrooge McNugget muốn lưu trữ thông tin (names, addresses, descriptions) về chi trả cá nhân của ông. Không ngạc nhiên, ông muốn mua một hệ thống cơ sở dữ liệu. Để tiết kiệm tiền, ông muốn mua một hệ thống với những chức năng cần thiết tối thiểu, và ông lên kế hoạch để sử dụng nó như ứng dụng chỉ chạy trên máy tính cá nhân của ông. Tất nhiên, ông không lên kế hoạch để chia sẻ ứng dụng cho bất kỳ ai. Chỉ ra những đặc tính của DBMS mà ông Scrooge cần, trong từng trường hợp, chỉ ra vì sao đặc trưng này cần hoặc không cần phải mua.
- Khả năng bảo đảm an toàn.
- Khả năng điều khiển truy cập đồng thời.
- Khả năng khôi phục sau sự cố.
- Cơ chế khung nhìn.
- Ngôn ngữ truy vấn.
Dành cho bạn đọc.
Những thành phần nào sau đây có vai trò quan trọng tới biểu diễn thông tin về thế giới thực trong cơ sở dữ liệu? Giải thích tóm tắt.
- Ngôn ngữ định nghĩa dữ liệu.
- Ngôn ngữ thực thi dữ liệu.
- Quản lý bộ đệm.
- Mô hình dữ liệu.
Hãy cùng chúng tôi bàn về những lựa chọn này.
- Ngôn ngữ định nghĩa dữ liệu quan trọng trong biểu diễn thông tin vì nó được sử dụng để biểu diễn các lược đồ logic và lược đồ ngoài.
- Ngôn ngữ thực thi dữ liệu được sử dụng để truy cập và cập nhật dữ liệu; nó không quan trọng trong biểu diễn dữ liệu. (Tất nhiên, ngôn ngữ thực thi dữ liệu phải hiểu được dữ liệu đang được biểu diễn như thế nào, và phản chiếu điều này trong các cấu trúc mà nó hỗ trợ).
- Quản lý bộ đệm không thực sự quan trọng trong biểu diễn vì nó mang những trang trên đĩa vào bộ nhớ chính, độc lập với việc dữ liệu được biểu diễn như thế nào.
- Mô hình dữ liệu là nền tảng để biểu diễn thông tin. Mô hình dữ liệu xác định các chơ chế biểu diễn dữ liệu nào đang được DBMS hỗ trợ. Ngôn ngữ định nghĩa dữ liệu chỉ chỉ ta tập các cấu trúc ngôn ngữ dùng để biểu diễn dữ liệu của một ứng dụng cụ thể.
Trình bày kiến trúc của một DBMS. Nếu hệ điều hành của bạn được nâng cấp để hỗ trợ một số chức năng mới trên các tệp tin của hệ điều hành, những tầng nào của DBMS chúng ta cần viết lại để tận dụng được các ưu điểm của chức năng mới này?
Dành cho bạn đọc
Trả lời các câu hỏi sau:
- Giao dịch là gì?
- Vì sao DBMS chen vào các hoạt động của các giao dịch khác nhau, thay vì thực hiện các giao dịch một cách tuần tự?
- Điều gì mà DBMS phải đảm bảo để thực hiện đồng thời nhiều giao dịch và nhất quán cơ sở dữ liệu?
- Giải thích về giao thức khóa hai pha nghiêm ngặt.
- Đặc tính WAL là gì, và vì sao nó quan trọng?
Hãy cùng chúng tôi trả lời từng câu hỏi:
- Một giao dịch là một tập các thực thi được gộp lại thành một khối của một chương trình ứng dụng.
- Một DBMS thường được chia sẽ cho rất nhiều người dùng. Các giao dịch từ những người dùng này có thể được thực thi xen kẽ để cải thiện thời gian thực hiện các truy vấn của người dùng. Bằng cách này, người dùng không phải đợi những giao dịch của người dùng khác hoàn thành rồi mới đến giao dịch của mình được bắt đầu. Không thực hiện xen kẽ, nếu người dùng A thực hiện một giao dịch nào đó mất 10s, và người dùng B bắt đầu thực hiện giao dịch của mình, người dùng B sẽ phải đợi 10s để giao dịch của người dùng A hoàn thành.
- DBMS phải đảm bảo rằng giao dịch được thực thi toàn bộ và độc lập với các giao dịch khác. Một tính chất quan trọng của giao dịch trong DBMS là tính nguyên tử, và tính cô lập. Các giao dịch hoặc là thành công hoặc là thất bại hoàn toàn. Điều này đảm bảo tính nhất quán của cơ sở dữ liệu.
- Khóa hai-pha nghiêm ngặt sử dụng các khóa chia sẻ và khóa độc quyền để bảo vệ dữ liệu. Một giao dịch phải nắm giữ tất cả các khóa cần thiết trước khi thực thi và không giải phóng bất cứ khóa nào trước khi giao dịch kết thúc hoàn toàn.
- Đặc tính WAL ảnh hưởng đến chiến lược logging trong DBMS. WAL là viết tắt của Write- Ahead Log, có nghĩa là mỗi một thao tác viết lên cơ sở dữ liệu đều phải được ghi vào log (trên đĩa) trước khi nó thực sự xảy ra trong cơ sở dữ liệu. Điều này bảo vệ được cơ sở dữ liệu nếu có sự cố xảy ra trong quá trình giao dịch đang thực hiện. Bằng việc ghi lại những thay đổi vào trong log trước khi những thay đổi này thực sự diễn ra, cơ sở dữ liệu biết được phải làm lại những thao tác nào để khôi phục sự cố. Ngược lại, nếu việc ghi vào log diễn ra sau thì cơ sở dữ liệu sẽ không thể phát hiện được có những thay đổi nào đã xảy ra trong quá trình khôi phục sự cố.
Bài tập lớn
Sử dụng trình duyệt Web để tìm kiếm tài liệu dạng HTML về Minibase. Cố gắng để có được kiến trúc tổng quan về nó.
Dành cho bạn đọc.
TÀI LIỆU THAM KHẢO
Quá trình phát triển của DBMS được trình bày trong [289]. Sử dụng các mô hình dữ liệu để biểu diễn thế giới thực được trình bày trong [423], và [425] chứa nguyên tắc phân loại các mô hình dữ liệu. Ba mức trừu tượng được giới thiệu trong [186, 712]. Mô hình dữ liệu mạng được trình bày trong [186], và [775] trình bày một số hệ thống thương mại được xây dựng dựa trên mô hình này.
Những tài liệu khác về DBMS bao gồm [204, 245, 305, 339, 475, 574, 689, 747, 762]. [204] cung cấp những thảo luận chi tiết về mô hình quan hệ và có những tài liệu tham khảo đáng chú ý khác. [574] trình bày triển vọng của cách tiếp cận hướng đối tượng và tham khảo tới một số hệ thống thương mại. [245] và [689] trình bày về các khái niệm hệ thống cơ sở dữ liệu, bao gồm những thảo luận về các mô hình dữ liệu mạng và phân cấp. [339] trình bày nhấn mạnh sự kết nối giữa ngôn ngữ truy vấn cơ sở dữ liệu và ngôn ngữ lập trình. [762] tập trung vào các mô hình dữ liệu. [747] cung cấp những trình bày chi tiết nhất về các bài toán lý thuyết. Những tài liệu tập trung vào các khía cạnh lý thuyết bao gồm [3, 45, 501].