Tìm hiểu cấu trúc về bộ nhớ ngoài các loại cơ sở dữ liệu nâng cao, các thuật toàn tìm kiếm trong cơ sở dữ liệu theo chỉ mục.... Qua đó xây dựng được các cách lưu trữ dữ liệu trên bộ nhớ ngoài. Hiểu biết về các trigger, bẫy lỗi trong việc xây dựng cơ sở dữ liệu
Trang 1BÀI GIẢNG CƠ SỞ DỮ LIỆU NÂNG CAO
Chương 1: Hệ cơ sở dữ liệu quan hệ
1.1 Cơ sở dữ liệu quan hệ
1.1.1 Vòng đời của hệ thống ứng dụng cơ sở dữ liệu
Các hoạt động liên quan đến vòng đời của hệ thống ứng dụng cơ sở dữ liệubao gồm các giai đoạn sau đây:
1 Định nghĩa hệ thống: Định nghĩa phạm vi của hệ thống cơ sở dữ liệu,
người sử dụng của nó và các ứng dụng của nó Các giao diện cho các loạingười sử dụng khác nhau, các ràng buộc thời gian trả lời, các yêu cầu về lưutrữ và xử lý được xác định
2 Thiết kế cơ sở dữ liệu: Vào cuối giai đoạn này, một thiết kế logic và vật
lý đầy đủ của hệ cơ sở dữ liệu trên một hệ quản trị cơ sở dữ liệu đượcchọn là sẵn sàng
3 Cài đặt cơ sở dữ liệu: Giai đoạn này bao gồm quá trình đặc tả các định
nghĩa cơ sở dữ liệu quan niệm, bên trong và bên ngoài, tạo ra các file cơ
sở dữ liệu trống và cài đặt các ứng dụng phần mềm
4 Nhập hoặc chuyển đổi: Nhập trực tiếp các dữ liệu cho cơ sở dữ liệu
hoặc chuyển đổi các file cơ sở dữ liệu có sẵn từ hệ thống khác thànhkhuôn dạng của hệ cơ sở dữ liệu
5 Chuyển đối các ứng dụng: Mọi ứng dụng phần mềm từ hệ thống trước
được chuyển đổi thành các ứng dụng trong hệ thống mới
6 Kiểm tra và làm có hiệu lực: Hệ thống mới được kiểm tra và làm có
hiệu lực
7 Hoạt động : Hệ thống cơ sở dữ liệu và các ứng dụng của nó được đưa
vào hoạt động Thông thường các hệ thống mới và cũ được hoạt độngsong song trong một thời gian
8 Hướng dẫn và bảo trì: Trong giai đoạn hoạt động, hệ thống luôn luôn
được hướng dẫn và bảo trì Sự phát triển và mở rộng có thể xảy ra trong cảnội dung dữ liệu và các ứng dụng phần mềm Đa số các sửa đổi và tổ chứclại có thể được cần thiết thường xuyên
Trang 21.1.2 Quá trình thiết kế cơ sở dữ liệu thực tiễn
Bài toán thiết kế cơ sở dữ liệu có thể được phát biểu như sau: Thiết kế cấutrúc lô gic và vật lý của cơ sở dữ liệu để cung cấp các nhu cầu thông tin củacác người sử dụng trong một tổ chức đối với một tập hợp các ứng dụng đượcxác định
Các mục tiêu của thiết kế cơ sở dữ liệu là :
Làm thỏa mãn các yêu cầu nội dung thông tin của các người sử dụng vàcác ứng dụng cụ thể
Cung cấp một cấu trúc thông tin tự nhiên và dễ hiểu
Hỗ trợ các yêu cầu xử lý và các mục tiêu thao tác như thời gian trả lời,thời gian xử lý và không gian lưu trữ
Quá trình thiết kế cơ sở dữ liệu bao gồm 6 giai đoạn chính sau đây:
1 Tập hợp và phân tích các yêu cầu
2 Thiết kế cơ sở dữ liệu quan niệm
3 Lựa chọn hệ quản trị cơ sở dữ liệu
4 Ánh xạ mô hình dữ liệu (còn gọi là thiết kế cơ sở dữ liệu logic)
5 Thiết kế cơ sở dữ liệu vật lý
6 Cài đặt cơ sở dữ liệu và điều chỉnh
Việc thiết kế cơ sở dữ liệu bao gồm hai hoạt động song song (như hình vẽ1.1) Hoạt động thứ nhất bao gồm thiết kế cấu trúc và nội dung của cơ sở dữliệu, hoạt động thứ hai liên quan đến việc thiết kế các ứng dụng cơ sở dữ liệu.Sau đây chúng ta sẽ tìm hiểu chi tiết hơn về từng giai đoạn
NỘI DUNG DỮ LIỆU CÁC ỨNG DỤNG
VÀ CẤU TRÚC CƠ SỞ DỮ LIỆU
Trang 3Giai đoạn 1: Tập hợp và Các yêu cầu dữ liệu Các yêu cầu xử lý
Phân tích các yêu cầu
Giai đoạn 2: Thiết kế Thiết kế lược đồ Thiết kế giao tác và
CSDL quan niệm quan niệm ứng dụng
(độc lập với HQTCSDL) (độc lập với HQTCSDL)
Giai đoạn 3: Lựa chọn
HQTCSDL
Giai đoạn 4: Ánh xạ mô Thiết kế lược đồ lô gic Các ràng buộc
hình dữ liệu và khung nhìn thực hiện
Giai đoạn 6: Cài đặt hệ Các lệnh định nghĩa dữ liệu Cài đặt các giao tác và
thống và tinh chỉnh Các lệnh lưu trữ dữ liệu ứng dụng
Hình 1.1
1.2 Hệ quản trị cơ sở dữ liệu quan hệ
Trong phần này chúng ta nghiên cứu sâu hơn về hệ quản trị cơ sở dữ liệu,mục tiêu, chức năng và cấu trúc của nó
1.2.1 Các thể hiện và các lược đồ
Mọi cơ sở dữ liệu bao gồm việc việc định nghĩa các tính chất của các tậphợp đối tượng được mô hình hóa trong cơ sở dữ liệu chứ không phải địnhnghĩa các tính chất của các đối tượng cụ thể Các đối tượng cụ thể được địnhnghĩa thông qua các chương trình ứng dụng trong các phép chèn và cập nhật
Trang 4dữ liệu Khi đó chúng phải thỏa mãn các tính chất của các tập hợp mà chúngthuộc vào Người ta phân biệt hai khái niệm cơ bản:
- Kiểu đối tượng cho phép chỉ rõ các tính chất chung cho một tập hợp
các đối tượng theo bằng thuật ngữ các cấu trúc dữ liệu nhìn thấy được
và các phép toán truy cập Kiểu đối tượng là một tập hợp đối tượng cócác đặc trưng như nhau và được thao tác bởi các phép toán như nhau
- Thể hiện đối tượng tương ứng với một đối tượng cụ thể được xác định
trong số các đối tượng của một kiểu Thể hiện đối tượng là một phần tử
cụ thể của một kiểu đối tượng được đặc trưng qua một tên gọi và cácgiá trị của các tính chất
Ví dụ: SINHVIEN(maso, hoten, ngaysinh, gioitinh) là một kiểu đối tượng SinhviênA( ‘sv002’, ‘nguyễn văn lực’, ‘25/05/ 1986’, ‘nam’) là một
thể hiện đối tượng
Như vậy, mọi mô tả dữ liệu được thực hiện ở mức kiểu với sự giúp đỡ củamột tập hợp các phần tử mô tả cho phép diễn đạt các tính chất của các tập hợpđối tượng và tạo nên một mô hình mô tả dữ liệu Mô hình này thường đượcdiễn đạt thông qua hình thức đồ họa Nó được vận dụng nhờ một ngôn ngữ
mô tả dữ liệu Mô tả của một tập dữ liệu cụ thể tương ứng vói một ứng dụngnhờ một ngôn ngữ mô tả tạo ra một lược đồ dữ liệu Nói chung người ta phânbiệt lược đồ nguồn được chỉ ra bởi những người quản lý dữ liệu và lược đồđối tượng là kết quả của việc dịch sơ đồ nguồn thông qua máy tính Sơ đồ đốitượng được hệ quản trị cơ sở dữ liệu sử dụng một cách trực tiếp để tìm ra vàkiểm tra các tính chất của các thể hiện đối tượng được các chương trình ứngdụng thao tác Chúng ta có một số khái niệm sau:
- Mô hình mô tả dữ liệu (data model): Là tập hợp các khái niệm và các
quy tắc cấu tạo của các khái niệm này cho phép mô tả các dữ liệu
- Ngôn ngữ mô tả dữ liệu (data description language): Ngôn ngữ hỗ trợ
một mô hình và cho phép mô tả các dữ liệu của cơ sở theo cách có thểđồng hóa thông qua một máy tính
- Lược đồ (schema): Mô tả bằng một ngôn ngữ được xác định của một
tập hợp các dữ liệu cụ thể
1.2.2 Kiến trúc hệ quản trị cơ sở dữ liệu và độc lập dữ liệu
1.2.2.1 Kiến trúc ba lược đồ
Trang 5Một mục tiêu chính của hệ quản trị cơ sở dữ liệu là đảm bảo một sự trừutượng của các dữ liệu được lưu trữ trên bộ nhớ ngoài để làm đơn giản hóacách nhìn của những người sử dụng Vì vậy, nhóm ANSI/X3/SPARC đã phânbiệt ba mức mô tả dữ liệu,gọi là kiến trúc ba lược đồ (Three-Schema-Architecture).
Mục đích của kiến trúc ba lược đồ là tách rời các ứng dụng của người dùng
và cơ sở dữ liệu vật lý Trong kiến trúc này, các lược đồ có thể được xác định
ở ba mức sau đây:
1 Mức trong (internal level) có một lược đồ trong (internal schema): Nó mô
tả cấu trúc lưu trữ vật lý của cơ sở dữ liệu Lược đồ trong sử dụng một
mô hình dữ liệu vật lý và mô tả các chi tiết đầy đủ của việc lưu trữ dữ liệu
và các đường dẫn truy cập đối với cơ sở dữ liệu
2 Mức quan niệm (conceptual level) có một lược đồ quan niệm: Nó mô tảcấu trúc của toàn bộ cơ sở dữ liệu cho một cộng đồng người sử dụng.Lược đồ quan niệm che dấu các chi tiết của cấu trúc lưu trữ vật lý và tậptrung vào mô tả các thực thể, các kiểu dữ liệu, các mối liên kết, các thaotác của người sử dụng và các ràng buộc Một mô hình dữ liệu bậc caohoặc một mô hình dữ liệu thể hiện có thể được sử dụng ở mức này
3 Mức ngoài (external) hoặc mức khung nhìn gồm một số các lược đồngoài hoặc các khung nhìn của người dùng Mỗi lược đồ ngoài mô tả mộtphần của cơ sở dữ liệu mà một nhóm người sử dụng quan tâm và che dấuđối với nhóm này phần còn lại của cơ sở dữ liệu Một mô hình dữ liệubậc cao hoặc một mô hình dữ liệu thể hiện có thể được sử dụng ở mứcnày
Hình vẽ (1.5) sau đây mô tả kiến trúc ba lược đồ:
Người dùng cuối
Trang 6CƠ SỞ DỮ LIỆU ĐƯỢC LƯU GIỮ
Hình 1.5 : Minh hoạ kiến trúc ba mức
Kiến trúc ba mức là một công cụ thuận tiện cho người sử dụng hình dung
ra các mức lược đồ trong một hệ cơ sở dữ liệu Đa số các hệ quản trị cơ sở
dữ liệu không phân tách ba mức một cách đầy đủ, nhưng hỗ trợ kiến trúc balược đồ ở một mức nhất định
Ba lược đồ chỉ là mô tả của dữ liệu, bản thân dữ liệu chỉ tồn tại ở mức vật
lý Trong một hệ cơ sở dữ liệu dự trên kiến trúc ba lược đồ, mỗi nhóm người
sử dụng chỉ tham chiếu đến lược đồ ngoài của họ Như vậy, hệ quản trị cơ sở
dữ liệu phải chuyển đổi một yêu cầu được chỉ ra trên lược đồ ngoài thànhmột yêu cầu trên lược đồ quan niệm và sau đó thành một yêu cầu trên lược
đồ trong để xử lý trên cơ sở dữ liệu được lưu giữ Nếu một yêu cầu là lấy dữliệu ra, các dữ liệu được lấy ra phải được định dạng lại cho phù hợp vớikhung nhìn bên ngoài của người sử dụng Các tiến trình chuyển đổi các yêucầu và các kết quả giữa các mức được gọi là các ánh xạ Các ánh xạ này cóthể tiêu tốn thời gian, vì vậy một số hệ quản trị cơ sở dữ liệu – nhất là các hệ
hỗ trợ các cơ sở dữ liệu nhỏ- không hỗ trợ các khung nhìn ngoài Tuy nhiên,ngay trong các hệ như vậy cũng phải có một số ánh xạ để chuyển đổi cácyêu cầu giữa mức quan niệm và mức trong
1.2.2.2 Sự độc lập dữ liệu
Khung nhìn ngoài Khung nhìn ngoài
LƯỢC ĐỒ QUAN NIỆM
LƯỢC ĐỒ TRONG
Trang 7Kiến trúc ba lược đồ có thể được sử dụng để giải thích khái niệm độc lập dữliệu Độc lập dữ liệu có thể định nghĩa như là khả năng thay đổi lược đồ tạimột mức của một hệ cơ sở dữ liệu mà không làm thay đổi lược đồ ở mức caohơn tiếp theo Có hai loại độc lập dữ liệu:
1 Độc lập dữ liệu lô gic : đó là khả năng làm thay đổi lược đồ quan niệm
mà không làm thay đổi các lược đồ ngoài hoặc các chương trình ứngdụng Chúng ta có thể thay đổi lược đồ quan niệm để mở rộng cơ sở dữliệu (bằng cách thêm vào một kiểu bản ghi hoặc một mục dữ liệu) hoặclàm giảm cơ sở dữ liệu (bằng cách loại bỏ một kiểu bản ghi hoặc mộtmục dữ liệu) Trong trường hợp làm giảm, các lược đồ ngoài chỉ thamchiếu đến các dữ liệu còn lại sẽ không bị ảnh hưởng Chỉ có định nghĩakhung nhìn và các ánh xạ cần được thay đổi trong một hệ cơ sở dữ liệu hỗtrợ độc lập dữ liệu Các chương trình ứng dụng tham chiếu các cấu trúclược đồ ngoài phải làm việc như trước đó, sau khi lược đồ quan niệm chịumột sự tổ chức lại lô gic Các thay đổi đối với các ràng buộc cũng có thểđược áp dụng cho lược đồ quan niệm mà không làm thay đổi các lược đồngoài hoặc các chương trình ứng dụng
2 Độc lập dữ liệu vật lý: đó là khả năng thay đổi lược đồ trong mà khônglàm thay đổi các lược đồ quan niệm hoặc các lược đồ ngoài Các thay đổiđối với lược đồ trong có thể cần thiết bởi vì một số file vật lý phải được
tổ chức lại - ví dụ, bằng cách tạo ra các cấu trúc truy cập phụ - để cảithiện thao tác rút ra hoặc cập nhật Nếu các dữ liệu như trước đó còn lạitrong cơ sở dữ liệu, chúng ta sẽ không làm thay đổi lược đồ quan niệm Khi chúng ta có một hệ quản trị cơ sở dữ liệu nhiều mức, từ điển(catalog) của nó phải được mở rộng để chứa thông tin về việc ánh xạ cácyêu cầu và các dữ liệu giữa các mức khác nhau như thế nào Hệ quản trị
cơ sở dữ liệu sử dụng một phần mềm phụ để thực hiện các ánh xạ nàybằng cách tham chiếu đến thông tin ánh xạ trong catalog Sự độc lập dữliệu sẽ được thực hiện bởi vì khi một lược đồ bị thay đổi tại một mức nào
đó thì lược đồ ở mức cao hơn tiếp đó sẽ không bị thay đổi, chỉ có ánh xạgiữa hai mức là thay đổi
1.2.3 Các mục tiêu và chức năng của hệ quản trị cơ sở dữ liệu
1.2.3.1 Các mục tiêu
Trang 8Giải pháp cơ sở dữ liệu có những đặc trưng sau:
1 Bản chất tự mô tả của hệ cơ sở dữ liệu
Một đặc trưng cơ bản của giải pháp cơ sở dữ liệu là hệ thống cơ sở dữ liệukhông chỉ gồm có bản thân cơ sở dữ liệu mà còn có cả định nghĩa hoặc mô tảđầy đủ về cấu trúc cơ sở dữ liệu và các ràng buộc Định nghĩa này được lưutrữ trong từ điển hệ thống, nó chứa các thông tin như là cấu trúc của mỗi tệp,kiểu và dạng lưu trữ của từng mục dữ liệu Các thông tin được lưu giữ trong
từ điển gọi là siêu dữ liệu (meta-data) và chúng mô tả cấu trúc của dữ liệunguyên thủy Phần mềm hệ quản trị cơ sở dữ liệu và những người sử dụng cơ
sở dữ liệu sử dụng từ điển để lấy thông tin về cấu trúc của cơ sở dữ liệu
2 Sự độc lập giữa chương trình và dữ liệu
Trong hệ thống tệp, cấu trúc của các tệp cơ sở dữ liệu được nhúng vàotrong các chương trình truy cập, vì vậy bất kỳ một thay đổi nào về cấu trúccủa một tệp cũng đòi hỏi phải thay đổi tất cả các chương trình truy cập đếntệp đó Ngược lại, các chương trình truy cập của hệ quản trị cơ sở dữ liệukhông đòi hỏi việc thay đổi như thế Cấu trúc của các tệp dữ liệu được lưu trữtrong từ điển tách rời với các chương trình truy cập Tính chất này gọi là sựđộc lập dữ liệu – chương trình
3 Hỗ trợ các khung nhìn dữ liệu nhiều thành phần
Một cơ sở dữ liệu có nhiều người sử dung, mỗi một người có thể đòi hỏimột phối cảnh hoặc một khung nhìn (view) khác nhau Một khung nhìn có thể
là một tập con của cơ sở dữ liệu hoặc nó có thể chứa các dữ liệu ảo, đó là các
dữ liệu được trích ra từ các tệp cơ sở dữ liệu khác nhau nhưng không đượclưu trữ một cách rõ ràng Một hệ quản trị cơ sở dữ liệu nhiều người sử dụngphải cung cấp nhiều công cụ để định nghĩa các khung nhìn nhiều thành phần
4 Chia sẻ dữ liệu và nhiều người sử dụng
Một hệ quản trị cơ sở dữ liệu nhiều người sử dụng phải cho phép nhiềungười sử dụng truy cập đồng thời đến cơ sở dữ liệu Hệ quản trị cơ sở dữ liệuphải có phần mềm kiểm tra cạnh tranh để đảm bảo rằng các người sử dụngcập nhật đến cùng một cơ sở dữ liệu phải được thực hiện theo cách được kiểmtra để cho kết quả của các cập nhật là đúng đắn
1.2.3.2 Các chức năng của một hệ quản trị cơ sở dữ liệu
1 Kiểm tra sự dư thừa
Trang 9Dư thừa dữ liệu nghĩa là cùng một dữ liệu được lưu trữ nhiều lần trong cơ
sở dữ liệu Sự dư thừa dẫn đến nhiều vấn đề: Thứ nhất, phải thực hiện cậpnhật cùng một dữ liệu nhiều lần Việc đó tốn nhiều công phu và hay dẫn đếnsai sót Thứ hai, dư thừa thông tin làm lãng phí bộ nhớ lưu trữ Thứ ba, cácfile lưu trữ cùng một dữ liệu có thể trở nên mâu thuẫn khi việc cập nhật khôngđược thực hiện trên tất cả các file đó Kiểm tra dư thừa của hệ quản trị cơ sở
dữ liệu là giảm các vấn đề trên
2 Hạn chế các truy cập không được phép
Khi có nhiều người sử dụng dùng chung một hệ cơ sở dữ liệu, sẽ có một sốngười sử dụng không được phép truy cập tất cả thông tin của hệ thống Cóngười được chỉ được quyền truy cập để lấy thông tin từ cơ sở dữ liệu ra nhưngkhông được quyền cập nhật Điều đó dẫn đến việc phải kiểm tra các thao táctruy cập của người sử dụng Hệ quản trị cơ sở dữ liệu cung cấp một hệ thốngcon cấp phép và an ninh Người quản trị hệ thống có thể sử dụng hệ thống connày để tạo ra các tài khoản cho người sử dụng và hạn chế truy cập trên các tàikhoản đó
3 Cung cấp việc lưu trữ lâu dài cho các đối tượng chương trình và các cấutrúc dữ liệu
Các đối tượng dữ liệu phải được lưu trữ lâu dài để phục vụ cho nhiềuchương trình khác nhau Các hệ quản trị cơ sở dữ liệu cung cấp các phươngtiện để lưu trữ cơ sở dữ liệu dưới dạng các file cũng như việc biến đổi dữ liệu
từ khuôn dạng file sang cấu trúc biến cuả chương trình
4 Cho phép tham chiếu và hành động bằng cách sử dụng các quy tắc
Các hệ quản trị có thể cung cấp các quy tắc suy diễn để suy diễn ra cácthông tin mới từ các dữ liệu được lưu giữ
5 Cung cấp nhiều giao diện người sử dụng
Do cơ sở dữ liệu có nhiều người dùng có trình độ hiểu biết sử dụng cơ sở
dữ liệu khác nhau, một hệ quản trị cơ sở dữ liệu phải cung cấp nhiều giao diệnngười sử dụng Các giao diện đó là các ngôn ngữ truy vấn cho người sử dụngbình thường, giao diện ngôn ngữ lập trình cho các người lập trình ứng dụng,giao diện bảng chọn hoặc mẫu biểu (gọi là giao diện người dùng đồ hoạ) chonhững người sử dụng độc lập,v v
6 Biểu diễn các mối liên hệ phức tạp giữa các dữ liệu
Trang 10Một cơ sở dữ liệu có thể gồm nhiều dữ liệu liên kết với nhau theo nhiềucách Một hệ quản trị cơ sở dữ liệu phải có khă năng biểu diễn các mối liên hệphức tạp giữa các dữ liệu cũng như việc rút ra hoặc cập nhật các dữ liệu cóliên quan với nhau một cách dễ dàng và có hiệu quả
7 Áp đặt các ràng buộc toàn vẹn
Nhiều ứng dụng cơ sở dữ liệu có một số ràng buộc toàn vẹn phải thoả mãnđối với các dữ liệu Hệ quản trị cơ sở dữ liệu cung cấp các khả năng địnhnghĩa và áp đặt các ràng buộc đó
8 Cung cấp việc sao lưu và phục hồi
Việc khi thác và sử dụng hệ thống cơ sở dữ liệu không thể tránh khỏi cáchỏng hóc về phần cứng và phần mềm Sau mỗi lần hỏng hóc, dữ liệu cần phảiđược phục hồi Hệ thống con sao lưu và phục hồi của hệ quản trị cơ sở dữ liệu
có nhiệm vụ đó Ví dụ, nếu một hệ thống máy tính bị hỏng ở giữa một chươngtrình cập nhật phức tạp thì nó có nhiệm vụ đảm bảo rằng cơ sở dữ liệu đượcphục hồi đến trạng thái của nó trước khi chương trình bắt đầu thực hiện
1.2.4 Các mô đun thành phần của hệ quản trị cơ sở dữ liệu
Một hệ quản trị cơ sở dữ liệu là một hệ thống phần mềm đầy đủ, gồm các
mô đun thành phần sau đây:
1. Mô đun quản trị dữ liệu được lưu giữ mức cao (higher-level stored datamanager) Cơ sở dữ liệu và từ điển của hệ quản trị dữ liệu thường được lưugiữ trên đĩa Việc truy cập đến đĩa trước hết do hệ điều hành (operatingsystem) kiểm soát, nó lập lịch ra/vào (input/output) đĩa Mô đun quản trị dữliệu mức cao kiểm tra truy cập đến thông tin của hệ quản trị cơ sở dữ liệuđược lưu giữ trên đĩa là một phần của cơ sở dữ liệu hoặc của từ điển Bộ quảntrị dữ liệu được lưu giữ có thể sử dụng các phục vụ cơ bản của hệ điều hành
để thực hiện việc chuyển dữ liệu mức thấp giữa đĩa và bộ nhớ trong của máytính nhưng nó kiểm soát các khía cạnh khác của việc chuyển dữ liệu như làđiều khiển các phòng đợi (buffer) trong bộ nhớ chính Mỗi một khi đã ở trongphòng đợi của bộ nhớ chính, nó có thể được các mô đun khác của hệ quản trị
cơ sở dữ liệu hoặc các chương trình ứng dụng xử lý
Trang 112 Chương trình dịch các lệnh định nghĩa dữ liêu (DDL compiler) Mô đunnày xử lý các định nghĩa lược đồ chỉ ra trong các lệnh định nghĩa dữ liệu vàlưu giữ các mô tả của các lược đồ ( siêu dữ liệu) và từ điển của hệ quản trị cơ
sở dữ liệu Từ điển chứa các thông tin như là tên các file, các mục dữ liệu, lưugiữ các chi tiết của mỗi file, ánh xạ thông tin giữa các lược đồ, các ràng buộc
và nhiều kiểu thông tin khác cần cho các mô đun của hệ quản trị cơ sở dữliệu Sau đó các mô đun phần mềm của hệ quản trị cơ sở dữ liệu sẽ tìm kiếmthông tin từ điển nếu cần
3 Bộ xử lý cơ sở dữ liệu thời gian chạy (run-time database processor) Môdun này điều khiển việc truy cập cơ sở dữ liệu tại thời gian chạy Nó nhận cácthao tác rút thông tin ra hoặc cập nhật và thực hiện chúng trên cơ sở dữ liệu.Việc truy cập đến đĩa thực hiện thông qua bộ xử lý dữ liệu được lưu giữ
4 Chương trình dịch truy vấn (query compiler) xử lý các truy vấn bậc caođược đưa vào theo kiểu giao tiếp Nó kiểm tra, phân tích và thông dịch hoặcbiên dịch một truy vấn bằng cách tạo ra chương trình truy cập cơ sở dữ liệu vàsau đó sinh ra các lời gọi đến bộ xử lý thời gian chạy để thực hiện chươngtrình đó
5 Chương trình tiền dịch (Pre-compiler) Nó lấy ra các lệnh xử thao tác cơ
sở dữ liệu từ một chương trình ứng dụng được viết trong một ngôn ngữ lậptrình chủ Các lệnh này sẽ được chuyển đến bộ dịch ngôn ngữ thao tác cơ sở
dữ liệu (DML compiler) để dich thành chương trình đích để truy cập cơ sở dữliệu Phần còn lại của chương trình sẽ được gửi đến chương trình dịch ngônngữ chủ Các chương trình đích của các lệnh thao tác dữ liệu và phần còn lạicủa chương trình được liên kết lại tạo nên một giao tác hoàn chỉnh mà chươngtrình thực hiện của nó chứa các lời gọi đến bộ xử lý cơ sở dữ liệu thời gianchạy
Hình vẽ (1.6) sau đây minh hoạ các mô đun thành phần của một hệ quảntrị cơ sở dữ liệu và mối liên hệ giữa chúng
Ngoài các mô đun phần mềm được môt tả ở trên, đa số các hệ quản trị cơ
sở dữ liệu có các tiện ích cơ sở dữ liệu giúp cho người quản trị hệ thống trongviệc quản trị hệ cơ sở dữ liệu Các tiện ích có các chức năng sau:
1 Nạp (loading) Tiện ích nạp được sử dụng để nạp các file dữ liệu đã
có – chẳng hạn các file văn bản hoặc các file tuần tự - vào cơ sở dữ liệu Nó
Trang 12còn thực hiện việc định dạng lại các dữ liệu từ các file nguồn cho phù hợp vớikhuôn dạng của các dữ liệu trong cơ sở dữ liệu.
2 Sao lưu (backup): Một tiện ích sao lưu tạo ra một bản sao sao lưucủa cơ sở dữ liệu, thường là bằng cách gom toàn bộ cơ sở dữ liệu vào mộtbăng từ Bản sao sao lưu có thể được sử dụng để khôi phục cơ sở dữ liệutrong trường hợp có các hỏng hóc nặng
3 Tổ chức lại file: Tiện ích này có thể được sử dụng để tổ chức lại một file
cơ sở dữ liệu thành một tổ chức file khác để cải thiện việc thao tác
4 Hướng dẫn thao tác (performance monitoring): Tiện ích này hướng dẫnviệc sử dụng cơ sở dữ liệu và cung cấp các thống kê cho người quản trị cơ sở
dữ liệu
Hình 1.6 Các mô đun thành phần của hệ QTCSDL
1.3 Một số mô hình cơ sở dữ liệu quan hệ mở rộng
1.3.1 Cơ sở dữ liệu chủ động (tích cực)
Trang 13Có thể nói, cơ sơ dữ liệu tích cực là một cơ sở dữ liệu cộng với một tập hợpcác quy tắc tích cực (active rules) Các quy tắc này sẽ được tự động kích hoạtsau một sự kiện cập nhật (insert, delete, update) trên cơ sở dữ liệu, nhằm đảmbảo tính toàn vẹn và cố kết của cơ sở dữ liệu.
Mô hình được sử dụng để chỉ rõ các quy tắc của cơ sở dữ liệu active đượctham chiếu đến như là mô hình ECA (Event-Condition-Action) Một quy tắctrong mô hình ECA có 3 thành phần:
1 Sự kiện (event) làm kích hoạt quy tắc: Các sự kiện này thường là cácthao tác cập nhật cơ sở dữ liệu được áp dụng một cách tường minh đốivới cơ sở dữ liệu Tuy nhiên, trong mô hình tổng quát, chúng cũng cóthể là các sự kiện thời gian hoặc là các dạng sự kiện ngoài khác
2 Điều kiện (condition) xác định hành động của quy tắc có thể được thựchiện hay không: Mỗi khi sự hiện kích hoạt có mặt, một điều kiện chọn
có thể được tính giá trị Nếu không có điều kiện nào được chỉ rõ, hànhđộng sẽ được thực hiện một lần sự kiện xảy ra Nếu điều kiện được chỉ
rõ, đầu tiên nó được tính giá trị và chỉ khi nó tính giá trị là đúng (true)thì hành động của quy tắc sẽ được thực hiện
3 Hành động (action) thực hiện: Hành động thường là một dãy lệnh SQLnhưng nó cũng có thể là một giao tác cơ sở dữ liệu hoặc một chươngtrình bên ngoài sẽ được thực hiện một cách tự động
Trên thực tế, các quy tắc này cũng đã được đề nghị từ sớm trong ngôn ngữSQL và được thể hiện trong các hệ quản trị cơ sở dữ liệu như SQL-Server,ORACLE dưới cái tên Trigger
Cú pháp để chỉ ra các trigger trong hệ thống Oracle được tổng kết như sau: <trigger> ::= CREATE TRIGGER < Tên Trigger>
(AFTER| BEFORE) < sự kiện kích hoạt> ON <tên bảng> [ FOR EACH ROW]
[WHEN < điều kiện>]
< hành động của trigger> ;
< Sự kiện kích hoạt> ::= < sự kiện của trigger>
<Sự kiện của trigger> ::= < INSERT | DELETE | UPDATE [OF <Têncột>
{,<Tên cột> }]
Trang 14CREATE TRIGGER chỉ rõ tên của một trigger (hoặc active rule) Mệnh đềAFTER|BEFORE chỉ ra rằng quy tắc sẽ được kích hoạt sau (hoặc trước) sựkiện kích hoạt quy tắc xảy ra Các từ khoá tuỳ chọn FOR EACH ROW chỉ rarằng quy tắc sẽ được kích hoạt một lần với mỗi một hàng bị ảnh hưởng bởi sựkiện kích hoạt Mệnh đề tuỳ chọn WHEN được sử dụng để chỉ ra điều kiệnnào cần kiểm tra sau(hoặc trước) khi quy tắc được kích hoạt nhưng trước khihành động được thực hiện Cuối cùng, hành động cần làm được chỉ ra nhưmột khối PL/SQL, khối này thường chứa một hoặc nhiều lệnh SQL hoặc cáclời gọi để thực hiện các thủ tục bên ngoài
Mỗi Trigger sử dụng hai file riêng, tạm gọi là file NEW và file OLD FileNEW dùng để chứa các bộ giá trị được chèn vào (trong sự kiện INSERT)hoặc các bộ giá trị sau khi được thay đổi (trong sự kiện UPDATE) File OLDchứa các bộ giá trị bị loại bỏ (trong sự kiện DELETE) hoặc các bộ giá trịtrước khi sửa đổi (trong sự kiện UPDATE) Khi được kích hoạt, trigger sẽ sửdụng thông tin trong hai file này để kiểm tra điều kiện và thực hiện hành độngthích hợp
Xét một vài ví dụ minh hoạ khái niệm này Có hai quan hệ NHÂNVIÊN vàĐƠNVỊ Mỗi nhân viên có một tên (tenNV), mã số (MasoNV), lương, mã sốđơn vị (MasoDV) là khoá ngoài tham chiếu đến DONVI, và mã số ngườigiám sát (MasoNGS) là khoá ngoài đệ quy đến NHANVIEN Với ví dụ này,chúng ta giả thiết rằng MasoDV có thể cho phép có giá trị null, chỉ ra rằngnhân viên có thể tạm thời chưa được đăng ký vào đơn vị nào Mỗi đơn vị cómột tên (TenDV), một mã số (MasoDV), tổng lương của tất cả các nhân viênđăng ký vào đơn vị (Tongluong) và một người quản lý (MasoNQL) là khoángoài đến NHANVIEN Như vậy
NHÂNVIÊN(MasoNV, TenNV, Luong, MasoNGS, MasoDV)
ĐƠNVỊ(MasoDV, TenDV, Tongluong, MasoNQL)
Chú ý rằng thuộc tính Tongluong thực chất là một thuộc tính suy diễn được,giá trị của nó là tổng lương của tất cả các nhân viên đăng ký vào một đơn vị
cụ thể Việc duy trì giá trị đúng của một thuộc tính suy diễn được như vậy cóthể được thực hiện thông qua một active rule Trước tiên chúng ta phải xácđịnh các sự kiện có thể gây ra một thay đổi giá trị của Tongluong, đó là các sựkiện sau:
1 Chèn vào một hoặc nhiều bộ giá trị nhân viên mới
2 Thay đổi lương của một hoặc nhiều nhân viên có sẵn
Trang 153 Thay đổi việc đăng ký của các nhân viên có sẵn từ đơn vị này sang đơn
vị khác
4 Loại bỏ một hoặc nhiều bộ giá trị nhân viên
Trong trường hợp của sự kiện 1, chúng ta chỉ cần tính lại Tongluong nếunhân viên mới được ghi tức khắc vào một đơn vị - nghĩa là giá trị của thuộctính MasoDV đối với bộ nhân viên mới là khác null (giả thiết null là cho phépđối với MasoDV).Như vậy điều đó sẽ là điều kiện để kiểm tra Một điều kiệntương tự có thể sẽ được kiểm tra cho sự kiện 2 (và 4) để xác định xem có phải
là nhân viên mà lương của anh ta bị thay đổi (hoặc bị xoá) hiện tại đã đượcđăng ký vào một đơn vị hay không Với sự kiện 3, chúng ta luôn luôn thựchiện một hành động để duy trì giá trị của Tongluong một cách đúng đắn, nhưvậy là không cần điều kiện nào (hành động luôn luôn được thực hiện)
Hành động đối với các sự kiện 1,2 và 4 là cập nhật một cách tự động giá trịcủa Tongluong đối với đơn vị của nhân viên để phản ánh việc lương của nhânviên vừa mới được thêm, xoá hoặc cập nhật Trong trường hợp của sự kiện 3,cần một hành động đúp: một để cập nhật Tongluong của đơn vị cũ của nhânviên và hành động khác để cập nhật Tongluong của đơn vị mới của nhân viên Bốn active rules R1,R2,R3 và R4 tương ứng với các tình trạng ở trên có thểđược chỉ ra trong trong ký hiệu của hệ quản trị CSDL Oracle như dưới đây R1: CREATE TRIGGER Tongluong1
AFTER INSERT ON NHÂNVIÊN
FOR EACH ROW
WHEN (NEW.MasoDV IS NOT NULL)
UPDATE ĐƠNVỊ
SET Tongluong = Tongluong + NEW.Luong
WHERE MasoDV = NEW.MasoDV;
R2: CREATE TRIGGER Tongluong2
AFTER UPDATE OF Luong ON NHÂNVIÊN
FOR EACH ROW
WHEN (NEW.MasoDV IS NOT NULL)
UPDATE ĐƠNVỊ
Trang 16SET Tongluong = Tongluong + NEW.Luong – OLD.Luong
WHERE MasoDV = NEW.MasoDV ;
R3: CREATE TRIGGER Tongluong3
AFTER UPDATE OF DNO ON NHÂNVIÊN
FOR EACH ROW
BEGIN
UPDATE ĐƠNVỊ
SET Tongluong = Tongluong + NEW.Luong
WHERE MasoDV = NEW.MasoDV;
UPDATE ĐƠNVỊ
SET Tongluong = Tongluong – OLD.Luong
WHERE MasoDV = OLD.MasoDV;
END;
R4: CREATE TRIGGER Tongluong4
AFTER DELETE ON NHÂNVIÊN
FOR EACH ROW
WHEN (OLD.MasoDV IS NOT NULL)
UPDATE ĐƠNVỊ
SET Tongluong = Tongluong – OLD.Luong
WHERE MasoDV = OLD.MasoDV;
Bốn trigger (các active rules) R1,R2, R3, và R4 minh hoạ một số tính chấtcủa các active rules Trước tiên, các sự kiện cơ bản có thể chỉ ra để kích hoạtcác quy tắc là các lệnh cập nhật của SQL chuẩn: INSERT, DELETE vàUPDATE Chúng được chỉ ra bằng các từ khoá INSERT, DELETE,UPDATE trong ký hiệu của Oracle Trong trường hợp cử UPDATE người ta
có thể chỉ ra các thuộc tính được update- ví dụ, bằng cách viết UPDATE OFLuong, MasoDV Thứ hai, người thiết kế quy tắc cần có cách tham chiếu đến
Trang 17các bộ giá trị đã được chèn, xoá, sửa đổi : Các từ khoá NEW và OLD được sửdụng trong Oracle: NEW được sử dụng để tham chiếu đến bộ vừ được chènvào hoặc vừa được sửa đổi, trong khi đó OLD được sử dụng để tham chiếuđến bộ bị xoá hoặc bộ trước khi được cập nhật.
Như vậy, quy tắc RI được kích hoạt sau một phép toán INSERT được ápdụng cho quan hệ NHÂNVIÊN Trong R1, điều kiện (NEW.MasoDV IS NOTNULL) được kiểm tra, và nếu nó được tính giá trị là đúng, nghĩa là bộ nhânviên vừa mới được chèn vào là có quan hệ với một đơn vị, thì hành động sẽđược thực hiện Hành động cập nhật các bộ ĐƠNVỊ có lien quan tới nhânviên vừa mới được chèn vào bằng cách cộng lương của người đó(NEW.Luong) vào Thuộc tính Tongluong của đơn vị lien quan của chúng Quy tắc R2 tương tự với R1 nhưng nó được kích hoạt bằng một phép toánUPDATE, sử đổi lương của một nhân viên thay vì chèn Quy tắc 3 được kíchhoạt bằng một sửa đổi đối với thuộc tính MasoDV của NHÂNVIÊN, nó cónghĩa thay đổi đăng ký của nhân viên từ một đơn vị sang một đơn vị khác.Không có điều kiện để kiểm tra trong R3, vì vậy hành động được thực hiệnmỗi khi sự kiện kích hoạt xuất hiện Hành động sửa đổi cả dơn vị mới và đơn
vị cũ của nhân viên đăng ký lại bằng cách cộng lương của họ vào Tongluongcủa đơn vị mới và trừ lương của họ ra khỏi Tongluong của đơn vị cũ Để ýrằng điều này có thể làm việc ngay cả giá trị của MasoDV là NULL bởi vìtrong trường hợp này không đơn vị nào được lựa chọn cho hành động của quytắc
Điều quan trọng là xét ảnh hưởng của mệnh đề tuỳ chọn FOR EACHROW, nó có nghĩa là quy tắc được kích hoạt một cách riêng rẽ đối với mỗi bộgiá trị Điều này được biết đến như một trigger mức hàng (row-level-trigger).Nếu mệnh đề này bị bỏ qua, trigger sẽ được biết như là một trigger mức lệnh(statement-level trigger) và sẽ được kích hoạt một lần đối với mỗi lệnh kíchhoạt
Việc thiết kế và cài đặt các quy tắc cần giải quyết một số vấn đề Vấn đềthứ nhất liên quan đến việc kích hoat, thôi kích hoạt, và nhóm các quy tắc.Thêm vào việc tạo ra các quy tắc, một hệ thống cơ sở dữ liệu active phải chophép những người sử dụng kích hoạt, thôi kích hoạt và bỏ các quy tắc bằngcách tham chiếu đến các tên quy tắc của chúng Một quy tắc không được kíchhoạt (deactivated rule) sẽ không bị kích hoạt bởi sự kiện kích hoạt Tính chấtnày cho phép các người sử dụng lựa chọn các rule deactivate đối với một chu
Trang 18kỳ thời gian nào đó khi chúng là không cần thiết Các lệnh làm kích hoạt sẽlàm cho các quy tắc tích cực trở lại, Lệnh drop loại bỏ các quy tắc ra khỏi hệthống Một tuỳ chọn khác là nhóm các quy tắc vào một cái gọi là tập hợp quytắc (rule set), như vậy toàn bộ tập hợp các quy tắc có thể được kích hoạt,ngừng kích hoạt hoặc loại bỏ Việc có một lệnh có thể kích hoạt một quy tắchoặc một tập quy tắc thông qua một lệnh PROCESS RULES do người sửdụng đưa ra cũng là một điều có lợi.
Vấn đề thứ hai liên quan đến liệu hành động được kích hoạt có thể đượcthực hiện trước, sau, hoặc đồng thời với sự kiện kích hoạt được hay không.Vấn đề liên quan là liệu hành động được kích hoạt có thể được xem như mộtgiao tác tách rời hay không hay nó phải là một phần của cùng giao tác kíchhoạt quy tắc Trước tiên chúng ta cố gắng phân loại các tuỳ chọn khác nhau.Điều quan trọng để để ý là không phải tất cả các tuỳ chọn có thể sẵn sàng sửdụng đối với một hệ cơ sở dữ liệu active Thật vậy, hầu hết các hệ thốngthương mại được giới hạn đến một hoặc hai tuỳ chọn mà bây giờ chúng ta sẽthảo luận Giả thiết rằng sự kiện kích hoạt xẩy ra như là một phần của việcthực hiện giao tác Trước hết chúng ta xét các tuỳ chọn khác nhau với việc sựkiện kích hoạt liên kết với việc tính giá trị của các điều kiện của quy tắc nhưthế nào Việc tính giá trị của các điều kiện của quy tắc cũng được xem nhưxem xét quy tắc bởi vì hành động chỉ được thực hiện sau sự xem xét liệu điềukiện tính giá trị đến true hoặc false Có ba khả năng chính đối với sự xem xétquy tắc:
1 Sự xem xét tức khắc (immediate consideration): Điều kiện được tínhgiá trị như là một phần của cùng giao tác như là sự kiện kích hoạt vàđược tính toán ngay tức khắc Trường hợp này có thể được phân loạithành ba tuỳ chọn:
- Tính giá trị điều kiện trước khi thực hiện sự kiện kích hoạt
- Tính giá trị điều kiện sau khi thực hiện sự kiện kích hoạt
- Tính giá trị điều kiện thay vì thực hiện sự kiện kích hoạt
2 Sự xem xét chậm: Điều kiện được tính giá trị ở cuối giao tác chứa sựkiện kích hoạt Trong trường hợp này có thể có nhiều quy tắc được kíchhoạt chờ để có các điều kiện của chúng được tính
3 Sự xem xét riêng rẽ: Điều kiện được tính giá trị như là một giao tácriêng rẽ, tách rời khỏi giao tác kích hoạt
Trang 19Tập hợp các tuỳ chọn tiếp theo liên quan đến mối quan hệ giữa việc tính giátrị điều kiện của quy tắc và việc thực hiện hành động của quy tắc Ở đây, mộtlần nữa, có ba tuỳ chọn có thể có: thực hiện tức khắc, thực hiện chậm và thựchiện tách rời Tuy nhiên, hầu hết các hệ thống active sử dụng tuỳ chọn thứnhất Nghĩa là, khi điều kiện được tính giá trị, nếu nó trả lại giá trị true, hànhđộng được thực hiện ngay tức khắc.
Một vấn đề khác liên quan đến các quy tắc của cơ sở dữ liệu active là sựphân biệt các quy tắc mức dòng (row-level rule) và các quy tắc mức lệnh(statement-level rule) Bởi vì các lệnh update của SQL (được xem như các sựkiện kích hoạt) có thể chỉ ra một tập hợp các bộ, người ta phải phân biệt giữaliệu quy tắc có thể được xem xét một lần đối với toàn bộ lệnh hay không hayliệu nó có thể được xem xét một cách tách biệt đối với từng hàng (for eachrow) bị ảnh hưởng bởi lệnh Hệ thống Oracle cho phép người sử dụng chọnmột trong hai tuỳ chọn trên để sử dụng với từng quy tắc
Một trong các khó khăn có thể hạn chế việc sử dụng rộng rãi các quy tắcactive, mặc dù khả năng của chúng làm đơn giản việc phát triển cơ sở dữ liệu
và phần mềm, là ở chỗ không có các kỹ thuật dễ sử dụng để thiết kế, viết vàkiểm tra các quy tắc Ví dụ, hoàn toàn khó khăn để kiểm tra rằng một tập hợpcác quy tắc là tương thích, nghĩa là hai hoặc nhiều quy tắc trong tập hợpkhông mâu thuẫn với nhau Cũng rất khó khăn để đảm bảo sự kết thúc củamột tập hợp các quy tắc dưới mọi hoàn cảnh Để minh hoạ ngắn gọn vấn đềkết thúc, hãy xem xét các quy tắc dưới đây:
R1: CREATE TRIGGER T1
AFTER INSERT ON TABLE 1
FOR EACH ROW
UPDATE TABLE 2
SET ATTRIBUTE 1 = ……;
R2: CREATE TRIGGER T2
AFTER UPDATE OF ATTRIBUTE1 ON TABLE 2
FOR EACH ROW
INSERT INTO TABLE 1 VALUES (….) ;
Trang 20
Ở đây quy tắc R1 được kích hoạt bởi một sự kiện INSERT trên bảng 1 vàhành động của nó gồm một sự kiện UPDATE trên thuộc tính 1 của bảng 2 Tuy nhiên, sự kiện kích hoạt của quy tắc R2 là một sự kiện UPDATE trênthuộc tính 1 của bản 2 và hành động của nó bao gồm một sự kiện INSERTtrên bảng 1 Dễ dàng nhìn thấy trong ví dụ này hai quy tắc có thể kích hoạtlẫn nhau không ngừng, dẫn đến sự không kết thúc Vì vậy, nếu hàng chục quytắc được viết thì sẽ rất khó khăn để xác định sụ kết thúc có được đảm bảo haykhông.
Nếu các quy tắc active đạt đến khả năng của nó thì cần phải phát triển cácphương tiện để thiết kế, sửa lỗi và hướng dẫn các quy tắc active nhằm giúpcác người sử dụng trong việc thiết kế và sửa lỗi các quy tắc của họ
Cuối cùng chúng ta sẽ thảo luận một vài ứng dụng tiềm năng của các activerule Một cách hiển nhiên, một ứng dụng quan trọng là cho phép khai báo một
số các điều kiện xuất hiện Ví dụ, một cơ sở dữ liệu active có thể được sửdụng để theo dõi nhiệt độ của một lò nung công nghiệp Ứng dụng có thể đưamột cách có chu kỳ các bản ghi đọc nhiệt độ một cách trực tiếp từ các cảmứng nhiệt độ vào cơ sở dữ liệu và các quy tắc active có thể được viết để đượckích hoạt khi một bản ghi nhiệt độ được đưa vào với điều kiện là kiểm tra nếunhiệt độ vượt quá mức nguy hiểm và hành động là đưa ra báo động
Các quy tắc active cũng có thể được sử dụng để bắt tuân theo các ràng buộctoàn vẹn bằng cách chỉ rõ các kiểu của sự kiện có thể gây ra việc các ràngbuộc bị vi phạm và sau đó tính giá trị các điều kiện thích hợp để kiểm tra xemcác ràng buộc có bị vi phạm bởi các sự kiện hay không Vì thế, các ràng buộcứng dụng phức tạp, thường được biết như các quy tắc nghiệp vụ có thể đượcbắt buộc theo cách đó Ví dụ, trong ứng dụng của cơ sở dữ liệu quản lý họctập một quy tắc có thể theo dõi điểm trung bình của các sinh viên mỗi khi mộtđiểm mới được nhập vào và nó có thể báo cho người giám sát nếu điểm trungbình của sinh viên ở dưới một ngưỡng nào đấy
Một ứng dụng khác bao gồm duy trì tự động dữ liệu suy diễn được giốngnhư các ví dụ về quy tắc R1 đến R4 duy trì thuộc tính suy diễn đượcTongluong mỗi khi các bộ giá trị nhân viên riêng rẽ được thay đổi Một ứngdụng tương tự là sử dụng các quy tắc active để duy trì sự kiên định của cáckhung nhìn mỗi khi các quan hệ cơ sở được sửa đổi Một ứng dụng lien quan
là duy trì tính kiên định của các bảng được nhân bản bằng cách chỉ rõ các quytắc sửa đổi các bản sao mỗi khi bảng chính được sửa đổi
Trang 211.3.2 Cơ sở dữ liệu thời gian
Các cơ sở dữ liệu thời gian, theo nghĩa rộng, bao gồm tất cả các ứng dụng
cơ sở dữ liệu có đòi hỏi khía cạnh thời gian khi tổ chức thông tin của chúng
Do đó, chúng cung cấp một ví dụ tốt để minh hoạ sự cần thiết để phát triểnmột tập hợp các khái niệm đồng nhất để các người phát triển ứng dụng sửdụng Các ứng dụng cơ sở dữ liệu thời gian đã được phát triển từ những ngàyđầu của việc sử dụng cơ sở dữ liệu Tuy nhiên, trong việc tạo ra các ứng dụngnày , nó thường được trao cho các người thiết kế và phát triển ứng dụng đểphát hiện, thiết kế, lập trình và cài đặt các khái niệm thời gian mà họ cần Cónhiều ví dụ về ứng dụng trong đó một vài khía cạnh về thời gian được cần đểduy trì thông tin trong cơ sở dữ liệu Chúng bao gồm chăm sóc sức khoẻ,trong đó các lịch sử của bện nhân cần được duy trì; bảo hiểm, trong đó cáclịch sử các đòi hỏi và tai nạn được yêu cầu cũng như thông tin trên thời giankhi các chính sách bảo hiểm có hiệu lực; các hệ thông đặt chỗ nói chung(khách sạn, máy bay, tàu hoả,…), trong đó thông tin về ngày và giờ khi sự đặtchỗ có hiệu lực được đòi hỏi; các cơ sở dữ liệu khoa học, trong đó các dữ liệuthu thập được từ các thí nghiệm chứa thời gian khi mỗi dữ liệu được đo đạcv v
Để xây dựng cơ sở dữ liệu thời gian, người ta tích hợp thời gian vào cơ sở
dữ liệu quan hệ bằng cách sử dụng các phiên bản bộ giá trị Sau đây là một sốkiểu cơ sở dữ liệu thời gian khac nhau được biểu diễn trong mô hình cơ sở dữliệu quan hệ
a) Các quan hệ thời gian có hiệu lực
Giả sử rằng chúng ta muốn đưa vào lịch sử các thay đổi như chúng xẩy ra
trong thế giới thực Xét cơ sở dữ liệu gồm các bảng NHÂNVIÊN và ĐƠNVỊ
ở trên và giả sử rằng với ứng dụng này , việc phân chia thời gian là ngày.Như vậy chúng ta có thể chuyển đổi hai quan hệ NHÂNVIÊN và ĐƠNVỊthành các quan hệ thời gian có hiệu lực (valid time relation) bằng cách thêmvào các thuộc tính VST (Valid start time) và VET (Valid end time) mà kiểu
dữ liệu của chúng la DATE để cung cấp sự phân chia ngày Các quan hệ nàybây giờ trở thành các quan hệ NHÂNVIÊN_VT và ĐƠNVỊ_VT như hình vẽsau:
NHÂNVIÊN_VT
Trang 22VST VE
T
Bây giờ chúng ta xét xem quan hệ NHÂNVIÊN_VT khác gì với quan hệkhông thời gian NHÂNVIÊN Trong NHÂNVIÊN_VT, mỗi bộ v biểu diễnmột phiên bản của một thông tin nhân viên, nó là có giá trị (trong thế giớithực) chỉ trong chu lỳ thời gian [v.vst, v.vet], trong khi đó trong NHÂNVIÊNmỗi bộ chỉ biểu diễn trạng thái hiện tại hoặc là phiên bản hiện tại của mỗinhân viên Trong NHÂNVIÊN_VT, phiên bản hiện tại của mỗi nhân viênthường có một giá trị đặc biệt, bây giờ (now), như là giá trị thời gian kết thúc
có hiệu lực của nó Giá trị đặc biệt này, now, là một biến tạm thời biểu diễn
ẩn thời gian hiện tại như tiến trình thời gian Quan hệ không thời gianNHÂNVIÊN chie có thể bao gồm các bộ từ quan hệ NHÂNVIÊN_VT vớiVET của nó là now
Hình vẽ dưới đây chỉ ra một vài phiên bản bộ trong các quan hệ thời gianhiệu lực NHÂNVIÊN_VT và ĐƠNVỊ_VT
Nam 333445555 25000 4 999887777 2004-08-20 2006-01-31 Nam 333445555 30000 5 999887777 2006-02-01 2007-03-31 Nam 333445555 40000 5 888665555 2007-04-01 Now
Bắc 222447777 28000 4 999887777 2006-05-01 2006-08-01 Hải 666884444 38000 5 333445555 2008-08-01 Now
Trang 23Có hai phiên bản của Trung, ba phiên bản của Nam, một phiên bản của Bắc
và một phiên bản của Hải Bây giờ chúng ta có thể thấy một quan hệ thời gianhiệu lực sẻ ứng xử thế nào khi thông tin bị thay đổi Mỗi khi một hay nhiềuthuộc tính của một nhân viên được cập nhật, thay vì viết đè lên các giá trị cũnhư thường xảy ra trong một quan hệ không thời gian, hệ thống sẽ tạo ra mộtphiên bản mới và đóng phiên bản hiện tại bằng cách thay đổi VET của nóthành thời gian kết thúc Như vậy, khi người sử dụng đưa ra lệnh để sửa đổilương của Trung có hiệu lực từ 1 tháng 6 năm 2008 thành 30000, phiên bảnthứ hai của Trung được tạo ra (xem hình vẽ) Tại thời điểm của việc sửa đổinày, phiên bản thứ nhất của Trung là phiên bản hiên tại, với now như VETcủa nó, nhưng sau khi sửa đổi now được thay đổi thành 31 tháng 5 năm 2008(ít hơn 1/6/2008 một ngày), để chỉ ra rằng phiên bản đã trở thành bị đónghoặc phiên bản lịch sử và phiên bản mới (thứ hai) của Trung bây giờ là phiênbản hiện tại
Điều quan trọng cần chú ý là trong một quan hệ thời gian hiệu lực, người sửdụng nói chung phải cung cấp thời gian có hiệu lực của một cập nhật Ví dụ,việc cập nhật của Trung có thể được nhập vào trong cơ sở dữ liệu vào15/05/2008 lúc 8:52:12am mặc dù Lương thay đổi trong thế giới thực là cóhiệu lực vào 1/6/2008 Điều này được gọi là cập nhật proactive, bởi vì nóđược áp dụng đối với cơ sở dữ liệu trước khi nó trở thành có hiệu lực trongthế giới thực Nếu cập nhật được áp dụng cho cơ sở dữ liệu sau khi nó trởthành có hiệu lực trong thế giới thực thì nó được gọi là một cập nhậtretroactive Một cập nhật được áp dụng tại cùng thời gian khi nó trở thành cóhiệu lực được gọi là cập nhật đồng thời
Hành động tương ứng với xoá (deleting) một nhân viên trong cơ sở dữ liệukhông thời gian cũng thường được áp dụng cho một cơ sở dữ liệu thời gian cóhiệu lực bằng cách đóng phiên bản hiện tại của nhân viên bị loại bỏ Ví dụ,nếu Trung rời khỏi công ty có hiệu lực vào 19/01/2009 thì điều đó có thể
Trang 24được áp dụng bằng cách thay VET của phiên bản hiện tại của Trung từ nowthành 19/01/2009 Trong hình vẽ trên, không có phiên bản hiện tại của Bắcbởi vì nó đã rời khỏi công ty từ trước vào ngày 10/08/2007 và bị xoá một cáchlogic.
Phép toán để chèn một nhân viên mới sẽ tương ứng với việc tạo một phiênbản bộ đầu tiên cho nhân viên đó, và làm cho nó trở thành phiên bản hiện tại,với VST là thời gian có hiệu lực (thế giới thực) khi nhân viên bắt đầu làmviệc Trong hình trên, bộ giá trị trên Hải minh hoạ điều đó, bởi vì phiên bảnđầu tiên còn chưa bị sửa đổi
Để ý rằng trong một quan hệ thời gian hiệu lực, khoá không thời gian chẳnghạn như MasoNV trong NHÂNVIÊN là không còn duy nhất trong mỗi bộ(phiên bản) Khoá quan hệ mới cho NHÂNVIÊN_VT là một tổ hợp của khoákhông thời gian và thuộc tính thời gian xuất phát có hiệu lực VST, vì vậychúng ta sử dụng (MasoNV, VST) như là khoá chính Đó là vì, tại mọi điểmtrong thời gian, sẽ có nhiều nhất là một phiên bản có hiệu lực của mỗi thựcthể Để ý rằng nếu giá trị khoá chính không thời gian có thể thay đổi trên thờigian thì điều quan trọng là có một thuộc tính khoá thay thế duy nhất mà giá trịcủa nó không bao giờ thay đổi đối với mỗi thực thể của thế giới thực để liênkết tất cả các phiên bản của cùng một thực thể của thế giới thực với nhau Các quan hệ thời gian có hiệu lực lưu giữ dấu vết của lịch sử các thay đổi vìchúng trở thành có hiệu lực trong thế giới thực Như vậy, nếu tất cả các thayđổi thế giới thực được áp dụng, cơ sở dữ liệu giữ ịch sử của các trạng thái thếgiới thực được biểu diễn Do đó, vì các cập nhật chèn và xoá có thể được ápdụng retroactively hoặc proactively, khong có bản ghi của trạng thái cơ sở dữliệu hiện tại tai mọi điểm trong thời gian Nếu các trạng thái của cơ sở dữ liệuhiện tại là quan trọng hơn một ứng dụng thì người ta có thể sử dụng các quan
hệ thời gian giao tác
b) Các quan hệ thời gian giao tác Trong một cơ sở dữ liệu thời gian giao
tác, khi một thay đổi được áp dụng cho cơ sở dữ liệu, timestamp của giao tác
áp dụng sự thay đổi (insert, delete hoặc update) được ghi lại Một cơ sở dữliệu như vậy là rất tiện lợi khi các thay đổi được áp dụng một cách đồng thờitrong đa số các trường hợp- ví dụ, các giao tác ngân hàng hoặc buôn bán Nếuchúng ta chuyển đổi cơ sở dữ liệu không thời gian (ở phần trên) thành một cơ
sở dữ liệu thời gian giao tác thì hai quan hệ NHÂNVIÊN và ĐƠNVỊ được
Trang 25chuyển đổi thành các quan hệ thời gian giao tác bằng cách thêm vào các thuộctính TST (Transaction Start Time) và TET (Transction End Time)mà kiểu dữliệu của nó là TIMESTAMP Điều đó được chỉ ra bằng hình vẽ dưới đây:
TST TET
thông tin cua nhân viên được tạo ra tại thời điểm v.TST và bị loại bỏ (mộtcách logic) ở thời điểm v.TET (bởi vì thông tin không còn đúng nữa) TrongNHÂNVIÊN_TT, phiên bản hiện tại của mỗi nhân viên thường có giá trị đặcbiệt uc (Until Changed) như là thời gian kết thúc giao tác (TET)của nó, nó chỉ
ra rằng bộ giá trị biểu diễn thông tin đúng đắn cho đến khi nó được thay đổibởi một giao tác khác nào đó Một cơ sở dữ liệu thời gian giao tác cũng đượcgọi là cơ sở dữ liệu rollback bởi vì một người sử dụng có thể rollback mộtcách logic đến trạng thái cơ sở dữ liệu hiện tại tại mọi điểm trong thời gianquá khứ t bằng cách lấy ra tất cả các phiên bản bộ v có chu kỳ thời gian[v.TST, v.TET] chứa điểm thời gian t
c) Các quan hệ song thời gian (Bitemporal relation) Nhiều ứng dụng đòi
hỏi cả thời gian có hiệu lực và thời gian giao tác, dẫn đến các quan hệ songthời gian Trong ví dụ của chúng ta, hình vẽ dưới đây chỉ ra các quan hệkhông thời gian NHÂNVIÊN và ĐƠNVỊ sẽ xuất hiện như các quan hệ songthời gian NHÂNVIÊN_BT và ĐƠNVỊ_BT tương ứng:
MasoĐ V
MasoNQ L
VST VE
T
TST TET
Trang 26MasoNQ L
VS T
VE T
Trong các bảng này, các bộ giá trị mà thời gian kết thúc giao tác của nó
TET là uc là các bộ biểu diễn thông tin có hiệu lực hiện tại, trong khi đó các
bộ giá trị mà TET của nó là một timestamp tuyệt đối là các bộ đã có hiệu lực
cho đến khi (ngay trước) timestamp Như vậy, các bộ giá trị với uc trong hình
Trang 27vẽ bày tương ứng với các bộ giá trị thời gian có hiệu lực trong hình ở trên.Thuộc tính TST trong mỗi bộ là timestamp của giao tác tạo ra bộ đó.
Bây giờ hãy xem xét phép toán update sẽ được thể hiện trên một quan hệsong thời gian như thế nào Trong mô hình cơ sở dữ liệu thời gian này, không
có các thuộc tính được thay đổi một cách vật lý trong mọi bộ giá trị ngoại trừđối với thuộc tính TET với giá trị uc Để minh hoạ các bộ giá trị được tạo rathế nào, hãy xét quan hệ NHÂNVIÊN_BT Phiên bản hiện tại v của một nhânviên có uc trong thuộc tính TET của nó và now trong thuộc tính VET của nó.Nếu một thuộc tính nào đó- ví dụ, Luong- được cập nhật thì giao tác T thựchiện cập nhật sẽ có hai tham số: giá trị mới của Luong và thời gian hiệu lực vtkhi lương mới trở nên có hiệu lực (trong thế giới thực) Giả sử rằng vt- làđiểm thời gian trước vt trong một phân chia thời gian cho trước và giao tác T
có một timestamp TS(T) Khi đó, các thay đổi vật lý sau đây sẽ được áp dụngđối với bảng NHÂNVIÊN_BT:
1- Tạo một bản sao v2 của phiên bản hện tại v; thiết lập v2.VET thành vt-,v2.TST thành TS(T), v2.TET thành uc, và chèn v2 vàoNHÂNVIÊN_BT; v2 là bản sao của phiên bản hiện tại v trước đó saukhi nó bị đóng tại thời gian hiệu lưc vt-
2- Tạo một phiên bản v3 của phiên bản hiện tại v; thiết lập v3.VST thành
vt, v3.VET thành now, v3.Luong thành giá trị lương mới, v3.TST thànhTS(T), v3.TET thành uc và chèn v3 vào NHÂNVIÊN_BT; v3 biểu diễnphiên bản hiện tại mới
3- Thiết lập v.SET thành TS(T) bởi vì phiên bản hiện tại không còn biểudiễn thông tin chính xác
Như để minh hoạ, chúng ta hãy xem ba bộ đầu tiên v1,v2,v3 trong bảngNHÂNVIÊN_BT trong hình 1.8 Trước khi sửa đổi lương của Trung từ
25000 thành 30000, chỉ có v1 trong NHÂNVIÊN_BT và nó là phiên bảnhiện tại và TET của nó có giá trị uc Sau đó, một giao tác T với timestamp
là 1998-06-04, 08:56:12 sử đổi lương thành 30000 với thời gian có hiệulực 1988-06-01 Bộ giá trị v2 được tạo ra, nó là bản sao của v1 ngoại trừVET được thiết lập thành 1988-05-31, nhỏ hơn thời gian hiệu lực mộtngày và TST của nó là timestamp của giao tác update Bộ v3 cũng đượctạo ra, nó có lương mới, VST của nó được thiết lập thành 1998-06-01 vàTST cũng là timestamp của giao tác cập nhật Cuối cùng, TET của v1được thiết lập thành timestamp của giao tác cập nhật,1988-06-04,08:56:12
Trang 28Để ý rằng đây là một update retroactive bởi vì giao tác update vào 4 tháng6,1988 nhưng sự thay đổi lương là có hiệu lực vào 1 tháng 6,1988
Một cách tương tự, khi lương và đơn vị của Wong được sử đổi (cùngmột thời điểm) thành 30000 và 5, timestamp của giao tác update là 1996-01-07, 14:33:02 và thời gian có hiệu lực đối với update là 1996-02-01.Như vậy, đó là một update proactive bởi vì giao tác chạy vào 7 tháng1,1966 nhưng ngày có hiệu lực là 1 tháng 2,1996 Trong trường hợp này,
bộ v4 được thay thế một cách logic bằng v5 và v6
Tiếp theo, ta hãy minh hoạ phép toán delete được thể hiện như thế nàotrên một quan hệ song thời gian bằng việc xét các bộ v9 và v10 trong quan
hệ NHÂNVIÊN_BT của hình 1.8 Ở đây, nhân viên Bắc rời công ty cóhiệu lực 10 tháng 8, 1997, và sự xoá logic được thực hiện bởi giao tác Tvới TS(T) = 1997-08-12, 10:11:07 Trước đó, v9 là phiên bản hiện tại củaBắc và TET của nó là uc Phép xoá logic được thể hiện bằng việc thiết lậpv9.TET thành 1997-08-12, 10:11:07 để làm nó mất hiệu lực, và tạo raphiên bản cuối cùng v10 cho Bắc với VET của nó = 1997-08-10
Cuối cùng , phép toán INSERT được thực hiện bằng cách tạo ra phiênbản đầu tiên như được minh hoạ bởi v11 trong bảng NHÂNVIÊN_BT
1.3.3 Cơ sở dữ liệu không gian
1.3.4 Cơ sở dữ liệu đa phương tiện
Trang 29Chương 2 CÁC PHƯƠNG PHÁP LƯU TRỮ CƠ SỞ DỮ LIỆU
Ở BỘ NHỚ NGOÀI
Các quan hệ của một cơ sở dữ liệu thường được lưu trữ thường trực trên bộnhớ ngoài bởi vì bộ nhớ trong của máy tính chỉ lưu giữ các dữ liệu tạm thời.Trong chương này chúng ta nghiên cứu một số phương pháp lưu trữ các quan
hệ (gọi là các file cơ sở dữ liệu) ở bộ nhớ ngoài, cũng như các phép toán thaotác với các file
Có nhiều loại bộ nhớ ngoài (đĩa từ, băng từ, …), nhưng trong chương nàychúng ta chỉ hạn chế vào việc lưu trữ trên đĩa, một loại bộ nhớ ngoài thôngdụng nhất
Trang 302.1 MỞ ĐẦU
Tập hợp các dữ liệu tạo nên cơ sở dữ liệu tin học hóa có thể được lưu trữmột cách vật lý trên một số phương tiện lưu trữ Phương tiện lưu trữ máy tínhtạo nên một phân cấp lưu trữ bao gồm hai loại chính:
Lưu trữ chính: Loại này bao gồm các phương tiện có thể thao tác nhanh mộtcách trực tiếp bằng bộ xử lý trung tâm của máy tính (CPU) như là bộ nhớtrong của máy tính và các bộ nhớ cash Lưu trữ chính thường cung cấp mộttruy cập nhanh nhưng khả năng lưu trữ hạn chế
Lưu trữ phụ : Loại này bao gồm các đĩa từ, các đĩa quang và băng từ Cácphương tiện này thường có khả năng lớn, giá hạ, và cung cấp một truy cậpđến dữ liệu chậm hơn so với các phương tiện lưu trữ chính Các dữ liệu tronglưu trữ phụ không được CPU xử lý một cách trực tiếp, muốn được xử lý trướctiên chúng phải được sao chép vào bộ nhớ chính
2.1.1 Phân cấp bộ nhớ và các công cụ lưu trữ
Ở mức bộ nhớ chính, phân cấp bộ nhớ bao gồm : Bộ nhớ cash , đó là bộnhớ RAM tĩnh Bộ nhớ cash thường được CPU sử dụng để làm tăng việc thựchiện các chương trình Mức tiếp theo của lưu trữ chính là DRAM (dynamicRAM), nó cung cấp vùng làm việc chính cho CPU để lưu trữ các chương trình
và các dữ liệu, thường được gọi là bộ nhớ chính Ưu điểm của DRAM là giá
hạ, nhược điểm của nó là mất thông tin khi mất điện (volatility) và tốc độchậm hơn so với RAM tĩnh
Ở mức lưu trữ phụ, phân cấp bao gồm các đĩa từ (gồm đĩa cứng, đĩaCD,các đĩa mềm), băng từ và một số thiết bị nhớ ngoài khác Khả năng lưutrữ được đo bằng kilobyte, megabyte, gigabyte, terabyte
Các chương trình trú ngụ và thực hiện trong DRAM Nói chung, các cơ sở
dữ liệu thường được lưu trữ ở bộ nhớ ngoài và khi cần, các phần của cơ sở dữliệu sẽ được đọc vào hoặc được ghi ra từ các vùng đệm (buffer) trong bộ nhớchính
2.1.2 Lưu trữ cơ sở dữ liệu
Thông thường các cơ sở dữ liệu lưu trữ một số lớn các dữ liệu phải tồn tạilâu qua các chu kỳ thời gian dài Các dữ liệu được truy cập và được xử lýnhiều lần trong chu kỳ này Điều đó trái với khái niệm cấu trúc dữ liệu tạmthời chỉ tồn tại một thời gian hạn chế trong khi thực hiện chương trình Hầu
Trang 31hết các cơ sở dữ liệu được lưu trữ thường trực ở bộ nhớ ngoài do các lý dosau:
- Nói chung, các cơ sở dữ liệu là qúa lớn, không thể lưu trữ toàn bộ vào
2.2.1 Mô tả phần cứng của đĩa
Các đĩa từ được sử dụng để lưu trữ một số lớn các dữ liệu Đơn vị cơ bảnnhất của dữ liệu trên đĩa là bit Bằng cách từ hóa trên mặt đĩa theo một cáchnào đấy người ta có thể làm cho nó biểu diễn các giá trị bit 0 hoặc 1 Để mãhóa thông tin, các bit được nhóm lại thành các byte, có kích cỡ là 8 bit Khảnăng của đĩa là số các byte có thể lưu trữ được
Đĩa được gọi là một mặt nếu nó chỉ chứa thông tin trên một mặt, hai mặtnếu cả hai mặt cùng được sử dụng Để tăng khả năng lưu trữ, các đĩa đượcnhóm lại thành một bộ đĩa Các thông tin được lưu trữ trên đĩa trong các vòngtròn đồng tâm có đường kính khác nhau Mỗi vòng gọi là một rãnh (track).Với các bộ đĩa, các vòng cùng đường kính trên các bề mặt khác nhau gọi làmột trụ (cylinder) Một đĩa có thể có hàng trăm hoặc hàng nghìn rãnh, mỗirãnh chứa từ hàng chục đến vài trăm Kbyte Vì một track thường chứa một sốlớn thông tin nên nó được chia thành các khối nhỏ hơn hoặc các cung (sector),việc phân chia một rãnh thành các sector được mã cứng trên bề mặt đĩa vàkhông thể thay đổi được
Việc phân chia một rãnh thành các khối đĩa có kích cỡ như nhau (hoặc cáctrang) được hệ điều hành thiết lập trong khi khởi tạo đĩa Kích thước của khốiđược cố định khi khởi tạo và không thể thay đổi Thường các khối đĩa nằmtrong khoảng 512 đến 4096 byte Các khối được phân cách bằng một chỗ giánđoạn (gap) giữa các khối, chỗ đó chứa một thông tin kiểm tra được mã hóa
Trang 32được viết khi khởi tạo đĩa Thông tin này được dùng để xác định khối nàotrên rãnh là tiếp theo chỗ gián đoạn
Một đĩa là một thiết bị được đánh địa chỉ truy cập ngẫu nhiên Việc trao đổi
dữ liệu giữa bộ nhớ chính và đĩa xảy ra theo đơn vị của các khối đĩa Địa chỉcứng của một khối, gồm một tổ hợp của số mặt đĩa, chỉ số rãnh (bên trong mặtđĩa), và chỉ số khối (bên trong rãnh), được cung cấp cho phần cứng vào/ra.Địa chỉ của buffer (một vùng liên tiếp dành sẵn trong bộ nhớ chính để lưu trữmột khối) cũng được cung cấp cho thiết bị phần cứng vào/ra Với một lệnhread, một khối từ đĩa được sao chép vào trong buffer, với một lệnh write, nộidung của buffer được sao chép vào trong khối đĩa Đôi lúc, nhiều khối liêntiếp, gọi là cụm (cluster), có thể được trao đổi như là một đơn vị
Cơ cấu phần cứng dùng để đọc và ghi một block gọi là đầu đọc/ghi, nó là một bộ phận của một hệ thống gọi là ổ đĩa
Một bộ kiểm tra đĩa, được nhúng vào trong ổ đĩa, kiểm tra ổ đĩa và giao tiếp
nó với hệ thống máy tính
2.2.2 Đặt các bản ghi của file lên đĩa
2.2.2.1 Các bản ghi và các kiểu bản ghi
Các dữ liệu thường được lưu trữ dưới dạng các bản ghi Mỗi bản ghi baogồm một tập các giá trị dữ liệu có liên quan với nhau, trong đó mỗi giá trịđược tạo nên từ một hoặc nhiều byte tương ứng với một trường cụ thể của bảnghi Các bản ghi thường dùng để mô tả các thực thể và các thuộc tính củachúng Một tập hợp các tên trường và các kiểu dữ liệu tương ứng của chúngtạo nên một định nghĩa kiểu bản ghi hoặc khuôn dạng bản ghi Kiểu dữ liệugắn với mỗi trường chỉ ra kiểu dữ liệu mà trường đó có thể lấy Các kiểu dữliệu của các trường thường là một trong các kiểu dữ liệu chuẩn được sử dụngtrong lập trình (integer, long integer, floating point, string of character,boolean) và đôi khi dùng kiểu ngày (date) và thời gian (time) Trong các ứngdụng cơ sở dữ liệu hiện nay, cần thiết phải mở rộng các mục dữ liệu lưu trữchứa các đối tượng không có cấu trúc lớn biểu diễn hình ảnh, âm thanh, vănbản….,đó là BLOB (Binary Large Object) Một dữ liệu BLOB thường đượclưu trữ trong một vùng dùng chung (pool) của các khối đĩa tách rời với bảnghi của nó và có một con trỏ chỉ đến khối được chứa trong bản ghi
Trang 332.2.2.2 Các file, các bản ghi có độ dài cố định và các bản ghi có độ dài thay đổi
Một file là một dãy các bản ghi Trong nhiều trường hợp, tất cả các bản ghitrong một file là cùng một kiểu Nếu mỗi bản ghi trong file có cùng một kích
cỡ chính xác thì file được gọi là được tạo nên từ các bản ghi có độ dài cốđịnh Nếu các bản ghi trong file có kích cỡ khác nhau thì file được gọi là tạonên từ các bản ghi có độ dài thay đổi Một file có thể có các bản ghi có độ dàithay đổi do nhiều lý do:
- Các bản ghi file có cùng kiểu bản ghi nhưng một hoặc nhiều trường cókích cỡ thay đổi (Ví dụ trường Tên trong các bản ghi về người)
- Các bản ghi file có cùng một kiểu bản ghi nhưng một hoặc nhiều trường
có giá trị đa trị đối với các bản ghi riêng lẻ; các trường như vậy gọi làcác trường lặp lại và nhóm giá trị cho trường thường được gọi là nhómlặp lại
- Các bản ghi file có cùng một kiểu bản ghi nhưng một hoặc nhiều trường
là tùy ý; nghĩa là chúng có thể có các giá trị nhưng không phải tất cả cácbản ghi đều có (các trường tùy ý)
- File chứa các bản ghi thuộc nhiều kiểu bản ghi và vì vậy có kích cỡ thayđổi
Nếu mỗi bản ghi có các trường như nhau và độ dài các trường là cố địnhthì hệ thống có thể xác định vị trí byte xuất phát của mỗi trường liên quan đến
vị trí xuất phát của bản ghi Điều đó làm cho các chương trình truy cập đếncác file như vậy dễ định vị các giá trị trường
Để ý rằng, người ta có thể biểu diễn một file có các bản ghi có độ dài thayđổi như là một file có các bản ghi có độ dài cố định Ví dụ, trong trường hợpcác trường tùy ý chúng ta có thể có mỗi một trường bên trong mỗi bản ghi filenhưng chứa một giá trị rỗng đặc biệt nếu trường không có giá trị Với cáctrường lặp lại, chúng ta có thể sử dụng số vị trí trong mỗi bản ghi bằng số lớnnhất các giá trị mà trường đó có thể lấy
Với các trường có độ dài thay đổi, mỗi bản ghi có một giá trị cho mỗitrường nhưng chúng ta không biết độ dài chính xác của một vài giá trị trường
Để xác định các byte bên trong một bản ghi cụ thể biểu diễn mỗi trườngchúng ta có thể sử dụng các ký tự dấu ngăn ( như ?, % hoặc $ ) – chúng khôngxuất hiện trong giá trị trường – để xác định các trường có độ dài thay đổi hoặcchúng ta có thể lưu trữ độ dài trong các byte của trường trong bản ghi ở trướcgiá trị trường
Trang 34Một file các bản ghi với các trường tùy ý có thể được định dạng theo nhiềucách Nếu số các trường đối với một đối với một kiểu bản ghi là lớn nhưng sốcác trường xuất hiện chính xác trong bản ghi là bé chúng ta có thể đưa vàotrong mỗi bản ghi một dãy các cặp <tên trường, giá trị trường> thay vì chínhcác giá trị trường Ba kiểu ký tự dấu ngăn được sử dụng: dấu ngăn giữa têntrường và giá trị trường; dấu ngăn giữa trường này và trường khác, và dấungăn giữa các bản ghi Một lựa chọn thực tế hơn là sử dụng các cặp <kiểutrường, giá trị trường> thay cho các cặp < tên trường, giá trị trường>.
Một trường lặp lại cần một ký tự dấu ngăn để phân cách các giá trị lặp củatrường và một ký tự dấu ngăn khác để chỉ việc kết thúc trường Cuối cùng,với các file chứa các bản ghi thuộc các kiểu khác nhau, mỗi bản ghi được bắtđầu bằng chỉ dẫn kiểu bản ghi
Chúng ta dễ nhận thấy là các chương trình xử lý các file với các bản ghi có
độ dài thay đổi – thường là một phần của hệ thống file và được che dấu đốivới người lập trình thông thường – thường phức tạp hơn đối với các bản ghi
có độ dài cố định, ở đó vị trí xuất phát và kích cỡ của mỗi trường được biếttrước và cố định
2.2.2.3 Phân khối bản ghi và cách tổ chức kéo dài và không kéo dài
Các bản ghi của một file phải được cấp cho các khối đĩa bởi vì một khối làđơn vị dữ liệu trao đổi giữa đĩa và bộ nhớ trong Khi kích cỡ của khối là lớnhơn kích cỡ bản ghi, một khối sẽ chứa nhiều bản ghi mặc dù một vài file cóthể có các bản ghi rất lớn và không thể vừa với một khối Giả sử kích cỡ củakhối là B byte Với một file có các bản ghi có độ dài cố định với kích cỡ Rbyte, với B>= R, chúng ta có thể đặt bfr = [ B/R] bản ghi vào một khối ( [B/R] là giá trị nguyên lớn nhất nhỏ hơn B/R) Giá trị của bfr được gọi là hệ sốphân khối Nói chung, B không chia hết cho R môt cách chính xác nên chúng
ta có một số vị trí không sử dụng trong khối là B - (bfr * R) byte
Để sử dụng không gian không sử dụng chúng ta có thể lưu trữ một phần củabản ghi trên một khối và phần còn lại trên khối khác Một con trỏ ở cuối khốithứ nhất chỉ đến khối chứa phần còn lại của bản ghi trong trường hợp nókhông được chứa trong khối tiếp theo Cách tổ chức này được gọi là kéo dài,bởi vì các bản ghi có thể kéo dài hơn một khối Khi một bản ghi là lớn hơnmột khối chúng ta phải sử dụng tổ chức kéo dài Nếu các bản ghi không đượccho phép vượt quá giới hạn của khối thì cách tổ chức đó được gọi là khôngkéo dài Nó thường được dùng với các bản ghi có B > R bởi vì nó làm cho
Trang 35mỗi bản ghi bắt đầu tại một nơi biết trước ở trong khối, làm đơn giản việc xử
lý bản ghi Với các bản ghi có độ dài thay đổi có thể sử dụng cả tố chức kéodài hoặc không kéo dài Nếu bản ghi trung bình là lớn thì tốt hơn là sử dụng
tổ chức kéo dài để làm giảm không gian lãng phí trong mỗi khối Hình vẽdưới đây mô tả tổ chức kéo dài và không kéo dài
ta có thể sử dụng bfr để tính số các khối b cần cho một file có r bản ghi:
b = (r/bfr) khối , trong đó (x) là làm tròn của x đến số nguyên tiếptheo
1.2.3 Phân phối các khối file trên đĩa
Có nhiều kỹ thuật chuẩn để phân phối các khối file trên đĩa Trong phânphối liên tục, các khối file được phân phối vào các khối đĩa liên tiếp Điều đólàm cho việc đọc toàn bộ file bằng cách sử dụng bộ đệm đôi, nhưng nó làmcho việc mở rộng file khó khăn Trong phân phối móc nối, mỗi khối file chứamột con trỏ trỏ đến khối file tiếp theo Điều đó làm cho việc mở rộng file dễdàng nhưng làm cho việc đọc toàn bộ file chậm Một tổ hợp cả hai phươngpháp phân phối các cụm (cluster) khối đĩa liên tiếp và các cụm được móc nối.Các cụm đôi khi còn được gọi là các đoạn file hoặc các phạm vi (extent) Mộtkhả năng khác là phân phối chỉ số, trong đó một hoặc nhiều khối chỉ số chứa
Bản ghi 1 Bản ghi 2 Bản ghi 3
Bản ghi4 Bản ghi 5 Bản ghi 6
Bản ghi 1 Bản ghi 2 Bản ghi 3 Bản ghi 4 P
Bản ghi 4 (tiếp) Bản ghi 5 Bản ghi 6 Bản ghi 7
Trang 36các con trỏ đến các khối file hiện tại Thường người ta sử dụng tổ hợp của các
kỹ thuật trên
1.2.3.1 Đầu file
Một đầu file hoặc một mô tả file chứa thông tin về về một file cần cho cácchương trình hệ thống để truy cập đến các bản ghi file Đầu file bao gồmthông tin để xác định địa chỉ của các khối file cũng như các mô tả định dạngbản ghi, nó có thể bao gồm các độ dài trường và thứ tự của các trường bêntrong một bản ghi đối với các bản ghi không kéo dài có độ dài cố định và các
mã kiểu trường, các ký tự ngăn và các mã kiểu đối với các bản ghi có độ dàithay đổi
Để tìm kiếm một bản ghi trên đĩa, một hoặc nhiều khối được sao chép vàovùng đệm bộ nhớ chính Sau đó các chương trình tìm kiếm bản ghi hoặc cácbản ghi mong muốn bên trong vùng đệm bằng cách sử dụng thông tin trongđầu file Nếu địa chỉ của khối chứa bản ghi mong muốn là không được biết,các chương trình tìm kiếm phải thực hiện một tìm kiếm tuyến tính thông quacác khối file Từng khối file sẽ được sao chép vào phòng đợi và được tìmkiếm cho đến khi nào tìm thấy bản ghi hoặc tất cả các khối file đã được tìmkiếm không thành công Điều đó có thể tốn thời gian đối với các file lớn Mụcđích của việc tổ chức file tốt là định vị khối file chứa bản ghi mong muốn vớimột số các dịch chuyển khối tối thiểu
2.2.3.2 Các phép toán trên các file
Các phép toán trên các file thường được nhóm thành các phép toán các phéptoán lấy thông tin ra (retrieve) và các phép toán cập nhật (update) Các phéptoán lấy thông tin ra không làm thay đổi dữ liệu nào ở trong file mà chỉ định
vị một số bản ghi sao cho các giá trị trường của nó có thể được xem xét và xử
lý Các phép toán cập nhật làm thay đổi file bằng việc chèn hoặc xoá các bảnghi hoặc bằng việc sửa đổi các giá trị trường Trong cả hai trường hợp, chúng
ta phải lựa chọn một hoặc nhiều bản ghi để lấy ra, loại bỏ hoặc sửa đổi dựatrên một điều kiện chọn (hoặc điều kiện lọc), nó chỉ ra các tiêu chuẩn mà bảnghi hoặc các bản ghi mong muốn phải thoả mãn Nói chung, điều kiện chọn làmột biểu thức logic tuỳ ý trên các trường của file
Các phép toán tìm kiếm trên các file nói chung dựa trên các điều kiện chọnđơn giản Một điều kiện chọn phức tạp phải được hệ quản trị cơ sở dữ liệu
Trang 37(hoặc người lập trình) phân tích để rút ra một điều kiện đơn giản có thể sửdụng để định vị các bản ghi trên đĩa Sau đó mỗi bản ghi được định vị sẽ đượckiểm tra xem nó có thoả mãn điều kiện lựa chọn đầy đủ hay không Ví dụ,chúng ta có thể rút ra điều kiện đơn giản (ĐƠNVỊ =’Nghiêncứu’) từ điều kiệnphức tạp ((Lương >= 3000) AND (ĐƠNVỊ = ’Nghiêncứu’); mỗi bản ghi thoảmãn (ĐƠNVỊ = ’Nghiêncứu’) được định vị và sau đó được kiểm tra để xem
nó có thoả mãn điều kiện (Lương >= 3000) hay không
Khi có nhiều bản ghi file thoả mãn một điều kiện chọn, bản ghi đầu tiên –đối với dãy vật lý của các bản ghi file- được định vị đầu tiên và được xem làbản ghi hiện tại Các phép toán tìm kiếm tiếp theo bắt đầu từ bản ghi này vàđịnh vị bản ghi tiếp theo ở trong file thoả mãn điều kiện này
Các phép toán hiện nay để để định vị và truy cập các bản ghi file thay đổi từ
hệ thống này sang hệ thống khác Sau đây, chúng ta trình bày một tập hợp cácphép toán đại diện Thông thường, các chương trình mức cao chẳng hạn nhưcác chương trình phần mềm của hệ quản trị cơ sở dữ liệu, truy cập các bản ghibằng cách sử dụng các lệnh này, vì vậy đôi khi chúng ta tham khảo đến cácbiến chương trình trong các mô tả dưới đây:
- Open: Chuẩn bị file để đọc hoặc ghi Chỉ định các buffer thích hợp(thường it nhất là 2) để lưu giữ file từ đĩa và lấy ra đầu file Đặt con trỏfile đến đoạn đầu của file
- Reset: Đặt con trỏ file của một file mở vào đoạn đầu của file
- Find (hoặc Locate) : Tìm kiếm bản ghi đầu tiên thoả mãn điều kiện tìmkiếm Chuyển khối chứa bản ghi đó vào trong buffer của bộ nhớ trong(nếu nó chưa có sẵn ở đây) Con trỏ file chỉ đến bản ghi trong buffer và
nó trở thành bản ghi hiện tại Đôi khi, các động từ khác được sử dụng đểchỉ ra có phải bản ghi được định vị sẽ được rút ra hoặc cập nhật haykhông
- Read (hoặc Get): Sao chép bản ghi hiện tại từ buffer vào một biếnchương trình trong chương trình của người sử dụng Lệnh này cũng cóthể đẩy con trỏ bản ghi hiện tại đến bản ghi tiếp theo ở trong file, nó cóthể cần cho việc đọc khối file khác từ đĩa
Trang 38- FindNext: Tìm bản ghi tiếp theo trong file thoả mãn điều kiện tìm kiếm.Chuyển khối chứa bản ghi đó vào trong buffer của bộ nhớ chính (nếu nóchưa có sẵn ở đây) Bản ghi được định vị trong buffer và trở thành bảnghi hiện tại
- Delete: Loại bỏ bản ghi hiện tại và sửa đổi file trên đĩa để phản ảnhviệc loại bỏ
- Modify: Sửa đổi một số giá trị trường đối với bản ghi hiện tại và sửa đổifile trên đĩa để phản ánh việc sửa đổi
- Insert: Chèn một bản ghi mới vào trong file bằng cách định vị khối mà
ở đó bản ghi sẽ được chèn vào, chuyển khối đó vào trong buffer bộ nhớchính (nếu nó chưa có sẵn ở đây), ghi bản ghi vào trong buffer, và ghibuffer vào đĩa để phản ánh việc chèn
- Close: Hoàn thành việc truy cập file bằng cách giải phóng các buffer vàthực hiện các thao tác dọn dẹp cần thiết
- Các phép toán trên (trừ Open và Close) được gọi là các phép toán mộtlần một bản ghi (record-at-a-time) bởi vì mỗi phép toán áp dụng chomột bản ghi đơn
Trong các hệ thống cơ sở dữ liệu, các phép toán phụ thêm mức cao một lầnmột tập hợp ( set-at-a-time) có thể được áp dụng cho một file Ví dụ về cácphép toán đó như sau:
- FindAll: Định vị tất cảc các bản ghi trong file thoả mãn điều kiện tìmkiếm
- FindOrdered: Lấy ra tất cả các bản ghi trong file theo một thứ tự đượcchỉ ra nào đấy
- Reorganize: Bắt đầu tiến trình tổ chức lại Như chúng ta đã nhìn thấy,một vài sự tổ chức file đòi hỏi một sự tổ chức lại định kỳ Một ví dụ làsắp xếp lại các bản ghi của file bằng cách sắp xếp thứ tự của chúng theomột trường cụ thể
Chúng ta cần chú ý đến sự khác nhau giữa các thuật ngữ tổ chức file (fileorganization) và phương pháp truy cập (access method) Một tổ chức file ámchỉ đến sự tổ chức các dữ liệu của file thành các bản ghi, các khối, và các cấutrúc truy cập; điều đó bao gồm cách mà các bản ghi và các khối được đặt vàocác phương tiện lưu giữ và được kết nối Mặt khác, một phương pháp truy cậpcung cấp một nhóm các phép toán – như được liệt kê ở trên- có thể áp dụng
Trang 39cho một file Nói chung, có thể áp dụng nhiều phương pháp truy cập cho một
tổ chức file Một số phương pháp truy cập có thể chỉ áp dụng cho các fileđược tổ chức theo một cách nào đó Ví dụ, chúng ta không thể áp dụng mộtphương pháp truy cập chỉ số cho một file không có chỉ số
2.2.3.3 Các file với các bản ghi không sắp thứ tự (heap files).
Trong kiểu tổ chức cơ sở nhất và đơn giản nhất này, các bản ghi được đặtvào trong file theo thứ tự chúng được chèn vào, như vậy các bản ghi mớiđược đặt vào cuối file Cách tổ chức như vậy được gọi là file đống (heap)hoặc file chồng (pile)
Việc chèn vào một bản ghi mới là rất hiệu quả: Khối đĩa cuối cùng của fileđược sao chép vào vùng đệm; bản ghi mới được thêm vào; và sau đó khốiđược ghi trở lại và đĩa Địa chỉ của khối file cuối cùng được lưu giữ trong đầufile
Việc tìm kiếm một bản ghi bằng cách sử dụng một điều kiện tìm kiếm nào
đó cần một tìm kiếm tuyến tính qua lần lượt từng khối file, đó là một thủ tụctốn kém Nếu chỉ có một bản ghi thoả mãn điều kiện tìm kiếm, thì tính trungbình, một chương trình sẽ đọc vào bộ nhớ và tìm một nửa các khối file trướckhi tìm ra bản ghi Với một file có b khối, điều đó đòi hỏi tìm kiếm trungbình (b/2) khối Nếu không có bản ghi nào hoặc có nhiều bản ghi thoả mãnđiều kiện tìm kiếm, chương trình phải đọc và tìm kiếm tất cả b khối của file
Để loại bỏ một bản ghi, chương trình đầu tiên phải tìm ra khối của nó, saochép khối vào buffer sau đó loại bỏ bản ghi ra khỏi buffer và cuối cùng ghikhối trở lại vào đĩa Điều đó để lại một vị trí không sử dụng trong khối đĩa.Việc loại bỏ một số lớn bản ghi theo cách này tạo ra một không gian lưu trữtrống Một kỹ thuật khác được sử dụng cho việc loại bỏ bản ghi là có mộtbyte hoặc bit phụ, gọi là cái đánh dấu xoá (deletion marker), được lưu trữ vớimỗi bản ghi Một bản ghi được xoá bằng cách gán cho cái đánh dấu xoá mộtgiá trị nào đấy Một giá trị khác của cái đánh dấu chỉ ra một bản ghi có giá trị(chưa bị xoá) Các chương trình tìm kiếm chỉ xem xét các bản ghi có giá trịtrong một khối khi điều khiển sự tìm kiếm của chúng Cả hai kỹ thuật xoá nàyđòi hỏi việc tổ chức lại file một cách định kỳ để phục hồi lại không giankhông được sử dụng của các bản ghi bị xoá.Trong quá trình tổ chức lại, cáckhối file được truy cập liên tiếp và các bản ghi được nén lại bằng cách loại bỏcác bản ghi bị xoá Sau sự tổ chức lại như vậy, các khối được làm đầy một lầnnữa Một khả năng khác là sử dụng khoảng trống của các bản ghi bị xoá khi
Trang 40chèn vào các bản ghi mới mặc dù điều đó đòi hỏi một tính toán phụ để giữdấu vết của các vị trí trống
Chúng ta có thể sử dụng tổ chức kéo dài hoặc không kéo dài đối với một filekhông thứ tự, và nó có thể được sử dụng với các bản ghi có độ dài thay đổihoặc có độ dài cố định Việc sửa đổi một bản ghi có độ dài thay đổi có thể đòihỏi loại bỏ bản ghi cũ và chèn vào một bản ghi đã được sửa đổi bởi vì bản ghiđược sửa đổi có thể không đặt vừa vào vị trí cũ của nó trên đĩa
Để đọc tất cả các bản ghi theo thứ tự của các giá trị của một trường nào đó,chúng ta tạo ra một bản sao được sắp xếp của file Sắp xếp là một phép toánđắt đối với một file đĩa lớn, và sử dụng các kỹ thuật đặc biệt đối với sắp xếpngoài
Đối với một file của các bản ghi có độ dài cố định sử dụng các khối khôngkéo dài và định vị liên tiếp, việc truy cấp đến một bản ghi bất kỳ theo vị trícủa nó ở trong file là dễ dàng Nếu các bản ghi của file được đánh số 0,1,2,
…,r-1 và các bản ghi trong mỗi một khối được đánh số 0,1, 2,…, bfr-1, trong
đó bfr là hệ số khối, thì bản ghi thứ i của file được xếp vào khối (i/bfr) và làbản ghi thứ (i mod bfr) trong khối đó Một file như vậy thường được gọi làfile trực tiếp hoặc file tương đối bởi vì các bản ghi có thể được truy cập mộtcách trực tiếp bằng vị trí tương đối của chúng Việc truy cập một bản ghi bằng
vị trí của nó không giúp đỡ định vị một bản ghi dựa trên một điều kiện tìmkiếm ; tuy nhiên, nó làm dễ việc xây dựng các đường dẫn trên file như là cácchỉ mục sẽ nói về sau
2.2.3.4 Các file với các bản ghi có thứ tự (các file được sắp xếp)
Chúng ta có thể sắp xếp thứ tự vật lý các bản ghi của một file trên đĩa dựatrên các giá trị của một trong các trường của nó – gọi là trường sắp xếp Điều
đó dẫn đến một file được sắp xếp hoặc file tuần tự Nếu trường sắp xếp cũng
là trường khoá của file thì trường được gọi là khoá sắp xếp của file
Các bản ghi được sắp xếp có một số ưu điểm so với các file không có thứ
tự Trước hết, việc đọc các bản ghi theo thứ tự của các giá trị khoá sắp xếp trởnên vô cùng hiệu quả, bởi vì không đòi hỏi một sự sắp xếp nào Thứ hai, việctìm bản ghi tiếp theo bản ghi hiện tại theo thứ tự của khoá sắp xếp thườngkhông đòi hỏi các truy cập khối bổ sung vì bản ghi tiếp theo là ở trong cùngmột khối với bản ghi hiện tại (trừ khi bản ghi hiện tại là bản ghi cuối cùngtrong khối) Thứ ba, việc sử dụng một điều kiện tìm kiếm dựa trên giá trị củamột trường khoá sắp xếp tạo ra một truy cập nhanh hơn khi sử dụng kỹ thuật