Chương 1 KHÁI QUÁT VỀ CƠ SỞ DỮ LIỆU PHÂN TÁN Chương này trình bày một cách khái quát những kiến thức cơ sở về mô hình quan hệ (lược đồ quan hệ, ngôn ngữ dữ liệu quan hệ…), về hệ CSDL phân tán (các kiến trúc, đặc trưng, và các vấn đề của CSDL phân tán…)[4]. Chương này cung cấp những kiến thức cơ sở cho các chương sau.1 Cơ sở dữ liệu quan hệ Cơ sở dữ liệu (CSDL) là một tập hợp dữ liệu có cấu trúc, liên quan đến các hiện tượng thực tế mà chúng ta cố gắng mô hình hóa chúng. CSDL quan hệ là loại CSDL được cấu trúc theo dạng bảng (table). Về hình thức quan hệ (relation) là một tập con của tích Descartes của một hoặc nhiều miền trị (domain) xác định trên tập các thuộc tính (attributes).
Một quan hệ r xác định trên tập thuộc tính Ω = { A1 , A2 ,. An } , khi đó : r ⊆ Dom( A1 ) × Dom( A2 ) ×. × Dom( An ) Mỗi hàng của quan hệ được gọi là một bộ (tuple), như vậy quan hệ r là một tập hợp các n-bộ có dạng: r ⊆ {(a1 , a2 ,., an ) | ai ∈ Dom( Ai ), với i = 1,2,.n} Trong đó Dom( Ai ) là miền giá trị của thuộc tính Ai. Số thuộc tính của quan hệ gọi là bậc của quan hệ.
Quan hệ r có thể bị thay đổi theo thời gian do việc thực hiện các phép toán cập nhật trên r (thêm vào, loại bỏ, sửa đổi các bộ). Lược đồ quan hệ (relation scheme). Một lược đồ quan hệ R là một cặp có thứ tự R =< Ω, F > , trong đó Ω là tập hữu hạn các thuộc tính của quan hệ, F là tập các điều kiện giữa các thuộc tính (F còn gọi là tập các ràng buộc toàn vẹn). Một ràng buộc trên tập các thuộc tính { A1 , A2 ,., An } là một tính chất trên tập tất cả các quan hệ xác định trên tập thuộc tính này.
z 7 Còn khi nói đến một lược đồ quan hệ, trong đó chỉ tập trung vào khía cạnh mô tả cấu trúc của một quan hệ mà không quan tâm đến bộ cụ thể, ta sẽ dùng ký hiệu: R ( A1 , A2 ,., An ) Với R là tên của quan hệ, A1 , A2 ,., An là danh sách tên các thuộc tính. Thể hiện quan hệ. Với lược đồ quan hệ R, theo thời gian, nhiều quan hệ có cấu trúc và ràng buộc toàn vẹn được mô tả bởi lược đồ này. Mỗi quan hệ như vậy còn được gọi là một thể hiện của lược đồ R.
Lược đồ quan hệ mô tả cấu trúc của quan hệ. Tại mỗi thời điểm lược đồ quan hệ sẽ có một thể hiện quan hệ cụ thể. Khóa của một lược đồ quan hệ là một tập con các thuộc tính không rỗng nhỏ nhất sao cho giá trị của các thuộc tính trong khóa cho phép xác định duy nhất mỗi bộ của quan hệ. Các thuộc tính có mặt trong ít nhất một khóa gọi là các thuộc tính khóa.
Một tập có chứa khóa được gọi là siêu khóa (supperkey). Ta có thể định nghĩa một cách hình thức như sau: Cho lược đồ quan hệ R =< Ω, F > , K ⊆ Ω , K được gọi là khóa của lược đồ quan hệ R nếu thỏa mãn 2 điều kiện sau: i. Bất kỳ hai bộ khác nhau t1 , t 2 ∈ r , r là một thể hiện của R, luôn có t1[ K ] ≠ t 2 [ K ]. Không tồn tại K ' ⊂ K thỏa mãn điều kiện trên.
Tập K sẽ là siêu khóa nếu chỉ thỏa mãn điều kiện (i). Chuẩn hóa – là một quá trình từng bước thay thế một tập quan hệ đã cho bằng các tập quan hệ có cấu trúc ngày càng đơn giản và chuẩn tắc hơn [Tsichritzis and Lochovsky, 1977]. Mục đích của chuẩn hóa là loại bỏ những bất thường của một quan hệ. Quan hệ được chuẩn hóa là quan hệ trong đó mỗi miền của một thuộc tính chỉ chứa những giá trị nguyên tố (atomic), tức là không phân nhỏ được nữa và do đó mỗi giá trị trong quan hệ cũng là nguyên tố.
Theo lý thuyết ban đầu Codd đưa ra có 3 dạng chuẩn của quan hệ: z 8 Về sau Boyce và Codd đã định nghĩa một phiên bản sửa đổi của dạng 3NF, thường được gọi là dạng chuẩn Boyce-Codd (BCNF). Tiếp sau đó là các dạng chuẩn 4NF [Fagin, 1977] và chuẩn 5NF [Fagin, 1979] Yêu cầu của chuẩn hóa là không làm mất mát thông tin khi thay một quan hệ bằng các quan hệ khác. Nếu chúng ta có thể nối các quan hệ kết quả để tạo thành quan hệ ban đầu, thì quá trình phân rã đó được gọi là phân rã không mất thông tin. Một yêu cầu khác đối với quá trình chuẩn hóa là bảo toàn phụ thuộc (dependency preservation).
Phân rã được gọi là bảo toàn phụ thuộc nếu hợp của các phụ thuộc hàm của các quan hệ được phân rã tương đương với bao đóng (closure) của các phụ thuộc hàm trong quan hệ ban đầu. Định nghĩa dạng chuẩn 1NF. Một lược đồ quan hệ R được gọi là ở dạng chuẩn 1NF nếu và chỉ nếu toàn bộ các miền có mặt trong R đều chỉ chứa các giá trị nguyên tố [2]. Định nghĩa dạng chuẩn 2NF.
Lược đồ quan hệ R ở dạng chuẩn 2NF nếu nó ở dạng chuẩn 1NF và nếu mỗi thuộc tính không khóa của R phụ thuộc hàm đầy đủ vào mỗi một khóa [2]. Định nghĩa dạng chuẩn 3NF. Lược đồ quan hệ R ở dạng chuẩn 3NF nếu nó ở dạng chuẩn 1NF và nếu mỗi thuộc tính không khóa của R là không phụ thuộc hàm bắc cầu vào mỗi một khóa [2]. Định nghĩa dạng chuẩn BCNF.
Lược đồ quan hệ với tập các phụ thuộc hàm được gọi là ở dạng chuẩn BCNF nếu X → A thỏa trên R, A ∉ X thì X là một siêu khóa của R [2]. z 9 Định nghĩa phụ thuộc hàm đầy đủ. Cho lược đồ quan hệ R với tập thuộc tính Ω = { A1 , A2 ,. An } , X và Y là hai tập thuộc tính khác nhau X ⊆ Ω và Y ⊆ Ω.
Y là phụ thuộc hàm đầy đủ vào X nếu Y là phụ thuộc hàm vào X nhưng không phụ thuộc vào bất kỳ một tập con thực sự nào của X [2].3 Ngôn ngữ dữ liệu quan hệ [4]. Các ngôn ngữ thao tác dữ liệu (DML) được phát triển cho mô hình quan hệ (được gọi là ngôn ngữ truy vấn – query language) được chia thành hai nhóm cơ bản.: các ngôn ngữ dựa trên đại số quan hệ (relational algebra) và các ngôn ngữ dựa trên phép tính quan hệ. Khác biệt giữa chúng là cách thức người sử dụng đưa ra câu truy vấn. Đại số quan hệ thuộc loại thủ tục (procedural), trong đó người dùng cần phải đặc tả, nhờ một số toán tử, xem làm thế nào để thu được kết quả.
Ngược lại phép tính quan hệ thuộc loại phi thủ tục (nonpropcedural), người sử dụng chỉ cần đặc tả các mối liên hệ cần phải bảo đảm trong kết quả. Cả hai đều được Codd đưa ra và đều tương đương về khả năng diễn tả. Đại số quan hệ được sử dụng nhiều hơn trong các nghiên cứu về CSDL phân tán vì nó ở mức thấp hơn và tương ứng trực tiếp hơn với chương trình được trao đổi trên mạng. Về cơ bản thì phép tính quan hệ có thể được dịch thành đại số quan hệ.
Đại số quan hệ là cơ sở quan trọng trong việc tối ưu hóa truy vấn, sau đây sẽ trình bày một số các phép toán trên các quan hệ. Đại số quan hệ có một tập hợp các phép toán trên các quan hệ. Mỗi toán tử nhận một hoặc hai quan hệ làm toán hạng và cho ra một quan hệ mới (quan hệ kết quả), đến lượt nó lại có thể sử dụng làm toán hạng cho một toán tử khác. Các phép toán này cho phép vấn tin và cập nhật CSDL quan hệ.
Có năm phép toán cơ bản và năm phép khác có thể được định nghĩa theo năm phép toán cơ bản này. Đó là các phép chọn (selection), chiếu (projection), hợp (union), trừ (set difference), và tích Descartes. Hai phép toán đầu tiên thuộc loại một ngôi, ba phép toán sau thuộc loại hai ngôi. Các phép toán bổ sung có thể là: giao (intersection), nối θ ( θ -join), nối tự nhiên (natural join), nối nửa (semi join) và phép chia (division) [4].
Trong đó toán hạng của phép toán hai ngôi phải khả hợp z 10 (union compatible). Hai quan hệ được gọi là khả hợp nếu chúng có cùng bậc (có số thuộc tính bằng nhau) và thuộc tính thứ i của quan hệ này có miền xác định trùng với miền của thuộc tính thứ i của quan hệ kia. Phép chọn trên quan hệ R với vị từ p là tập tất cả các bộ t của R thỏa p σ p ( R) = {t ∈ R ∧ p(t )} Phép chiếu của quan hệ R trên tập các thuộc tính X của quan hệ R, là một quan hệ trên tập thuộc tính X, được xây dựng bằng cách loại đi trong quan hệ R những thuộc tính không nằm trong X. Vì thế bậc của quan hệ kết quả luôn nhỏ hơn bậc của quan hệ gốc ∏ X ( R ) = {t[ X ] | t ∈ R} Phép hợp.
Hợp của hai quan hệ R và S, là tập tất cả các bộ thuộc R hoặc thuộc S hoặc thuộc cả hai. Cần chú ý rằng R và S phải khả hợp. R ∪ S = {t | t ∈ R hoặc t ∈ S hoặc t ∈ R và S } Phép trừ. Hiệu của hai quan hệ R và S là tập tất cả các bộ của R không thuộc S.
R − S = {t | t ∈ R và t ∉ S } Tích Descartes. Tích Descartes của hai quan hệ R bậc n và S bậc m có kết quả là tập các (n+m)-bộ sao cho mỗi bộ này có n thành phần đầu thuộc R và m thành phần sau thuộc S.bm ) ∈ S } Phép giao. Giao của hai quan hệ R và S, là tập tất cả các bộ t thuộc về cả hai quan hệ R và S. Giao có thể biểu thị bằng các toán tử cơ bản như sau: R ∩ S = {t | t ∈ R, t ∈ S } = R − ( R − S ) Nối- θ.
Phép nối này là một dẫn xuất của tích Descartes. Có nhiều kiểu nối, và kiểu nối tổng quát nhất là nối- θ , hay đơn giản là nối. Với F là vị từ nối: R >< F S = σ F ( R × S ) Nối tự nhiên.