1. Mô hình dữ liệu quan hệ
Như đã biết ở chương I, việc xây dựng và khai thác một hệ CSDL thường được tiến hành qua một số bước và có sự tham gia của nhiều người với mức hiểu biết khác nhau về CSDL. Để có thể nghiên cứu và phát triển các ứng dụng CSDL, cộng đồng những người làm việc trong lĩnh vực CSDL cần trao đổi với nhau về những yếu tố sau đây của một hệ CSDL:
- Cấu trúc dữ liệu;
- Các thao tác, phép toán trên dữ liệu;
- Các ràng buộc dữ liệu.
Các khái niệm dùng để mô tả các yếu tố trên tạo thành mô hình dữ liệu.
Có nhiều mô hình dữ liệu khác nhau như mô hình phân cấp, mô hình quan hệ, mô hình hướng đối tượng,... nhưng ở đây ta chỉ đề cập đến mô hình dữ liệu quan hệ vì cho đến nay đó là mô hình phổ biến nhất trong thực tế xây dựng các ứng dụng CSDL.
Mô hình dữ liệu quan hệ (gọi tắt là mô hình quan hệ) được E. F. Codd đề xuất năm 1970. Trong khoảng ba mươi năm trở lại đây, các hệ CSDL xây dựng theo mô hình quan hệ được dùng rất phổ biến. Trong mô hình quan hệ:
- Về mặt cấu trúc: Dữ liệu được thể hiện trong các bảng. Mỗi bảng bao gồm các hàng và các cột thể hiện thông tin về một chủ thể. Các cột biểu thị các thuộc tính của chủ thể và tên cột thường là tên của thuộc tính. Mỗi hàng biểu thị cho một cá thể, gồm một bộ các giá trị tương ứng với các cột.
- Về mặt thao tác trên dữ liệu: Có thể cập nhật dữ liệu như thêm, xoá hay sửa bản ghi trong một bảng. Các kết quả tìm kiếm thông tin qua truy vấn dữ liệu có được nhờ thực hiện các thao tác trên dữ liệu.
- Về mặt các ràng buộc dữ liệu: Dữ liệu trong các bảng phải thoả mãn một số ràng buộc, chẳng hạn, không được có hai bộ nào trong một bảng giống nhau hoàn toàn. Với sự xuất hiện lặp lại của một số thuộc tính ở các bảng, mối liên kết giữa các bảng được xác lập. Mối liên kết này thể hiện mối quan hệ giữa các chủ thể được CSDL phản ánh.
2. Cơ sở dữ liệu quan hệ
a) Khái niệm
Cơ sở dữ liệu được xây dựng dựa trên mô hình dữ liệu quan hệ gọi là cơ sở dữ liệu quan hệ . Hệ QTCSDL dùng để tạo lập, cập nhật và khai thác CSDL quan hệ gọi là hệ QTCSDL quan hệ.
Ngoài thuật ngữ quan hệ để chỉ bảng, thuộc tính để chỉ cột, bộ (bản ghi) để chỉ hàng, trong mô hình dữ liệu quan hệ ta sử dụng thuật ngữ miền để chỉ kiểu dữ liệu của một thuộc tính. Mỗi thuộc tính có một miền, ví dụ miền của thuộc tính họ và tên trong CSDL Lớp là tập các xâu kí tự, mỗi xâu không quá 25 kí tự. Các miền của các thuộc tính khác nhau không nhất thiết phải khác nhau.
Một quan hệ trong hệ CSDL quan hệ có các đặc trưng chính sau:
- Mỗi quan hệ có một tên phân biệt với tên các quan hệ khác;
- Các bộ là phân biệt và thứ tự của các bộ không quan trọng;
- Mỗi thuộc tính có một tên phân biệt, thứ tự các thuộc tính không quan trọng;
- Quan hệ không có thuộc tính đa trị hay phức hợp.
Ví dụ, bảng ở hình 69 không phải là một quan hệ vì có thuộc tính đa trị.
Hình 69. Bảng có thuộc tính đa trị
Còn bảng ở hình 70 cũng không phải là một quan hệ vì có thuộc tính phức hợp.
Hình 70. Bảng có thuộc tính phức hợp
Ở nước ta, thường dùng một số hệ QTCSDL quan hệ như Microsoft, Access, Foxpro, Microsoft SQL Server, ... Ngoài ra có thể kể đến một số hệ QTCSDL quan hệ thông dụng khác như Oracle, Paradox, Visual DBase,...
b) Ví dụ
CSDL Lớp ở chương I và các CSDL được giới thiệu trong chương II đều là những CSDL quan hệ.
Như vậy, về thực chất, trong chương II, ta đã làm quen với nhiều khái niệm về CSDL quan hệ và hệ QTCSDL quan hệ. Tuy nhiên, nội dung đó chủ yếu đề cập đến kĩ năng cơ bản sử dụng một hệ QTCSDL quan hệ (cụ thể là Access) để tạo lập, cập nhật và khai thác CSDL. Dưới đây là một ví dụ được xem xét ở mức mô hình để thấy được một số nét đặc trưng của các hệ CSDL quan hệ.
Để quản lí việc học sinh mượn sách ở thư viện của một trường, thông thường, thư viện cần quản lí các thông tin về:
- Tình hình mượn sách: Số thẻ, mã số sách, ngày mượn, ngày trả.
- Các học sinh có thể mượn sách: Số thẻ, họ tên, ngày sinh, lớp.
- Sách có trong thư viện: Mã số sách, tên sách, số trang, tác giả.
Có thể sử dụng ba bảng để lưu trữ dữ liệu tương ứng với những thông tin cần quản lí nêu trên. Giữa ba bảng đó có các liên kết được minh hoạ ở hình 71.
Hình 71. Liên kết giữa các bảng
Sự xuất hiện lại của thuộc tính Số thẻ và Mã số sách ở bảng MƯỢN SÁCH trong bảng NGƯỜI MƯỢN và bảng SÁCH thể hiện một sự liên kết giữa học sinh mượn sách và sách trong thư viện. Nhờ liên kết này mà ta biết được nhiều thông tin, chẳng hạn những học sinh đã mượn một cuốn sách nào đó, sách do một học sinh nào đó mượn,...
c) Khoá và liên kết giữa các bảng
• Khoá
Trong một bảng, mỗi hàng thể hiện thông tin về một đối tượng (cá thể) nên sẽ không thể có hai hàng giống nhau hoàn toàn. Nghĩa là không có hai hàng nào (trong một bảng) tương ứng bằng nhau trên tất cả các thuộc tính. Ta còn nói rằng tập tất cả các thuộc tính trong bảng "phân biệt" (hay "nhận diện") được các cá thể.
Tuy nhiên, thông thường không cần đến tập tất cả các thuộc tính trong bảng để phân biệt các cá thể. Trong nhiều trường hợp một thuộc tính hay một tập con các thuộc tính trong bảng cũng có tính chất này.
Bảng NGƯỜI MƯỢN
Số thẻ | Họ tên | Ngày sinh | Lớp |
TV-01 | Nguyễn Anh | 10/10/1990 | 12A |
TV-02 | Trần Cương | 23/02/1991 | 11B |
... | ... | ... | ... |
TV-56 | Nguyễn Anh | 21/8/1990 | 12A |
TV-91 | Nguyễn Thị Dung | 10/10/1990 | 12A |
Hình 72. Thuộc tính Số thẻ được dùng để phân biệt người mượn
Ví dụ, trong bảng NGƯỜI MƯỢN (h. 72), thuộc tính Số thẻ có thể dùng để phân biệt các học sinh, vì mỗi học sinh có một số thẻ thư viện riêng.
Một ví dụ nữa, hãy xem xét bảng MƯỢN SÁCH (h. 73). Chỉ một thuộc tính Số thẻ không đủ để phân biệt các lần mượn sách bởi một học sinh có thể mượn sách nhiều lần.
Hình 73. Một học sinh có thể mượn sách nhiều lần
Tập gồm hai thuộc tính Số thẻ và Mã số sách cũng chưa đủ để phân biệt các lần mượn sách vì một học sinh có thể mượn đi mượn lại một cuốn sách nào đó.
Hình 74. Một học sinh có thể mượn một cuốn sách nhiều lần
Giả sử có quy định rằng trong một ngày, mỗi học sinh không được mượn một cuốn sách nhiều lần thì với tập gồm ba thuộc tính Số thẻ, Mã số sách, Ngày mượn ta có thể phân biệt được các lần mượn sách được ghi trong bảng MƯỢN SÁCH.
Như vậy trong các thuộc tính của một bảng, ta quan tâm đến một tập thuộc tính (có thể chỉ gồm một thuộc tính) vừa đủ để phân biệt được các bộ, nghĩa là không thể bỏ bớt được thuộc tính nào.
Trong một bảng, tập thuộc tính được mô tả ở trên được gọi là khoá của một bảng.
Trở lại ví dụ trên, trong bảng NGƯỜI MƯỢN có thuộc tính Số thẻ là một khoán khoá này chỉ gồm một thuộc tính. Thuộc tính Mã số sách làm thành một khoá của bảng SÁCH. Khoá của bảng MƯỢN SÁCH gồm ba thuộc tính Số thẻ, Mã số sách, Ngày mượn.
• Khoá chính
Một bảng có thể có nhiều khoá. Trong các khoá của một bảng người ta thường chọn (chỉ định) một khoá làm khoá chính (primary key). Trong một hệ QTCSDL quan hệ, khi nhập dữ liệu cho một bảng, dữ liệu tại các cột khoá chính không được để trống. Các hệ QTCSDL quan hệ kiểm soát điều đó và đảm bảo sự nhất quán dữ liệu, tránh trường hợp thông tin về một cá thể xuất hiện hơn một lần sau những cập nhật dữ liệu. Trong mô hình quan hệ, ràng buộc như vậy về dữ liệu còn được gọi là ràng buộc toàn vẹn thực thể (hay gọi ngắn gọn là ràng buộc khoá).
Chú ý :
- Mỗi bảng có ít nhất một khoá. Việc xác định khoá phụ thuộc vào quan hệ lôgic của các dữ liệu chứ không phụ thuộc vào giá trị các dữ liệu.
- Nên chọn khoá chính là khoá có ít thuộc tính nhất.
• Liên kết
Thực chất sự liên kết giữa các bảng được xác lập dựa trên thuộc tính khoá. Chẳng hạn thuộc tính Số thẻ là khoá của bảng NGƯỜI MƯỢN xuất hiện lại ở bảng MƯỢN SÁCH đã tạo nên liên kết giữa hai bảng này. Cũng như vậy, khoá Mã số sách của bảng SÁCH xuất hiện ở bảng MƯỢN SÁCH thể hiện mối quan hệ giữa hai bảng này. Nhờ các liên kết này mà ta biết được học sinh nào mượn cuốn sách gì.
Ví dụ, ta cần biết thông tin đầy đủ về học sinh nào đã mượn sách có mã số 'TO-012'. Bộ đầu tiên trong bảng MƯỢN SÁCH (h. 71) cho biết học sinh có số thẻ 'TV-02' đã mượn cuốn sách có mã số 'TO-012'. Trong bảng NGƯỜI MƯỢN, ta tìm thấy bộ có giá trị thuộc tính số thẻ là 'TV-02'. Từ đó ta biết được người mượn cuốn sách mã số 'TO-012' vào ngày '5/9/2007' là học sinh 'Trần Cương', sinh ngày '23/02/1991', học lớp '11B'. Nói một cách khác, từ một bộ ở bảng MƯỢN SÁCH, ta đã tham chiếu đến một bộ khác ở bảng NGƯỜI MƯỢN qua giá trị của thuộc tính Số thẻ. Trong mối liên kết như vậy giữa hai bảng trên, ta coi bảng MƯỢN SÁCH là bảng chính của liên kết, còn bảng NGƯỜI MƯỢN là bảng được tham chiếu đến (h. 71).
Tương tự, có thể dựa vào mối liên kết giữa hai bảng MƯỢN SÁCH và SÁCH để biết được thông tin chi tiết về cuốn sách mà người có số thẻ 'TV-02' đã mượn vào ngày '5/9/2007. Đối với mối liên kết này, bảng chính vẫn là bảng MƯỢN SÁCH, bảng được tham chiếu đến là bảng SÁCH, thuộc tính đóng vai trò liên kết hai bảng là Mã số sách.
Khi sử dụng đồng thời nhiều mối liên kết, ta có thể kết nối được các thông tin tương ứng với nhau. Chẳng hạn, nhờ hai mối liên kết giữa bảng MƯỢN SÁCH với bảng NGƯỜI MƯỢN và với bảng SÁCH, ta biết được thông tin đầy đủ: vào ngày '5/9/2007', học sinh 'Trần Cương' sinh ngày '23/02/1991', lớp '11B' đã mượn cuốn sách 'Sáng tạo Toán học' gồm '308' trang và đã trả cuốn sách này vào ngày '30/9/2007.
Tóm lại, có thể xem ba bảng trên cùng các liên kết giữa chúng tạo thành một CSDL quan hệ đơn giản, được lưu trữ ở bộ nhớ ngoài, phục vụ quản lí việc mượn sách thư viện của một trường học.
CÂU HỎI VÀ BÀI TẬP
1. Theo em, khi xét một mô hình dữ liệu ta cần quan tâm những yếu tố nào?
2. Hãy nêu các khái niệm cơ bản mà em biết về hệ CSDL quan hệ.
3. Những tiêu chí nào giúp ta chọn khoá chính cho bảng? Hãy cho ví dụ và giải thích.