KHỞI ĐẦU
CÁC MÔ HÌNH CSDL
ĐẠI SỐ QUAN HỆ
TỐI ƯU DỮ LIỆU
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
Dự án mới của mình là gamehow.net, mời anh em ghé thăm và góp ý ạ.

Mô hình dữ liệu quan hệ (Relational Data Model)

Trong bài này chúng ta sẽ tìm hiểu đến mô hình dữ liệu quan hệ dựa trên những khái niệm về nối quan hệ ở mô hình thực thể ER. Đây là mô hình được TS. E. F. Codd đưa ra vào năm 1970, dựa trên những khái niệm về toán học trên nền tảng lý thuyết và tập hợp.

Mình sẽ không đi sâu vào lý thuyết mà thay vào đó sẽ giải thích những ví dụ mà trong giáo trình của thầy Hải biên soạn, nếu bạn nào không thích đọc chuỗi bài viết này thì có thể download tài liệu của thầy ở bài cuối cùng nhé.

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

1. Thuộc tính (attribute)

Thuộc tính là đặc điểm của một đối tượng, nó có các đặc tính sau đây:

  • Tên gọi: Là một dãy ký tự, bạn phải đặt sao đọc tên thuộc tính là sẽ gợi ý được ý nghĩa của nó
  • Kiểu dữ liệu: thuộc tính phải xác định kiểu dữ liệu lưu trữ, ký hiệu miền giá trị là Dom(A). Ví dụ với thuộc tính GIOITINH thì nó là kiểu chuỗi, miền giá trị của nó là Dom(GIOITINH)=(‘Nam’,’Nu’).
  • Tại một thời điểm xác định thì thuộc tính có thể có giá trị hoặc không (là giá trị NULL).

Khi bạn thiết kế CSDL thì thuộc tính chính là các đặc tính của đối tượng.

2. Quan hệ (relation)

Quan hệ là một tập hợp hữu hạn các thuộc tính, được kí hiệu là Q (A1, A2, An ,...). Ví dụ với đối tượng CONNGUOI thì sẽ có rất nhiều thuộc tính như tay - chân - mắt - mũi, .. , và tập các thuộc tính này ta gọi là quan hệ.

Ví dụ

  • HOCVIEN (Mahv, Hoten, Ngsinh, Gioitinh, Noisinh, Malop)
  • LOP (Malop, Tenlop, Siso, Trglop, Khoa)

Nói cách khác thì quan hệ chính là bảng lưu trữ CSDL, còn thuộc tính chính là các column của bảng. Tuy nhiên khi học mô hình này bạn đừng nói cái này nhé, thầy sẽ phạt ngay vì ở mô hình này không có khái niệm bảng.

3. Bộ (tuple)

Bộ là các thông tin của một đối tượng thuộc quan hệ và ta hay còn gọi là mẫu tin (record) hoặc là dòng (row).

Một bộ của quan hệ: Q (A1 A2 An) là q = (a1 a2 an)  với ai ∈ Dom (Ai).

Nói cách khác thì bộ chính là một dòng thông tin trong một bảng, bạn hãy xem ví dụ dưới đây để hiểu rõ hơn.

Ví dụHOCVIEN(Mahv, Hoten, Ngsinh, Noisinh)q=(1003,Nguyen Van Lam, 1/1/1987,Dong Nai), nghĩa là học viên có mã số là 1003, họ tên là Nguyen Van Lam, sinh ngày 1/1/1987 ở Dong Nai.

4. Thể hiện của quan hệ (instance)

Sau này khi học đến lập trình OOP thì bạn sẽ đụng đến khái niệm về instance, chính xác hơn là học về design pattern ;) Nhưng bây giờ bạn đừng quan tâm nó nhé, mình chỉ gợi ý một chút thôi.

Instance là tập hợp các bộ của table tại một thời điểm, hay chính xác hơn là toàn bộ dữ liệu của một bảng. Ký hiệu là TQ.

Ví dụ: THOCVIEN là thể hiện của quan hệ HOCVIEN tại thời ñiểm hiện tại gồm có các bộ như sau:

instance PNG

5. Tân từ

Tân từ là một quy tắc dùng để mô tả cho quan hệ, ký hiệu là ||Q||. Đây là những gợi ý và cũng là các câu hỏi giúp nhà thiết kế có thể vẽ ra biểu đồ dữ liệu chính xác với từng dự án. 

Ví dụ: THI (Mahv, Mamh, Lanthi, Diem)

  • ||THI|| mỗi học viên được phép thi một môn học nhiều lần, mỗi lần thi lưu trữ học viên nào thi môn gì? lần thi thứ mấy? và điểm là bao nhiêu?

6. Phép chiếu

Phép chiếu dùng để trích giá trị của một số thuộc tính trong danh sách các thuộc tính của quan hệ. Ví dụ với danh sách quan hệ THI (Mahv, Mamh, Lanthi, Diem) nếu ta dùng phép chiếu thì có thể chiếu lên các thuộc tính của nó.

Ký hiệu: phép chiếu của quan hệ R lên tập thuộc tính X là R[X] hoặc R.X.

Giả sử ta có quan hệ của HOCVIEN như hình sau:

phep chieu png

Chiếu lên một thuộc tính: Bây giờ mình sẽ chiếu lên thuộc tính NoiSinh của quan hệ HOCVIEN: 

  • HOCVIEN[Noisinh] = {‘Nghe An’,’Kien Giang’,’Tay Ninh’}

phep chieu 1 png

Kết quả trả về là tập hợp tất cả các bộ của quan hệ HOCVIEN nhưng chỉ chọn thuộc tính NoiSinh.

Chiếu lên nhiều thuộc tính: Giả sử mình cần chiếu lên hai thuộc tính HoTen và NoiSinh thì sẽ làm như sau:

  • HOCVIEN[Hoten, Noisinh] = {(‘Ha Duy Lap’, ‘Nghe An’),(‘Tran Ngoc Han’, ‘Kien Giang’),(‘Tran Ngoc Linh’,’Tay Ninh’)}

phep chieu 2 PNG

7. Khóa

Nói về khóa thì có rất nhiều loại khóa:

  • Siêu khóa, khóa
  • Khóa chính
  • Khóa tương đương
  • Khóa ngoại. 

Để tiện cho việc học thì mình đưa vào một bảng và được dùng cho các ví dụ ở các phần dưới đây.

sieu khoa PNG

Siêu khóa

  • Là tập hợp con các thuộc tính của quan hệ Q mà giá trị của chúng có thể phân biệt giữa ai bộ với nhau. Ví dụ với quan hệ HOCVIEN ở trên thì MaHV là siêu khóa vì nó dùng để phân biệt các bộ (các records).
  • Một bộ có thể có nhiều siêu khóa, và theo chuẩn CSDL thì phải có ít nhất một siêu khóa

Như vậy ta có dánh sách các siêu khóa như sau: 

  • {Mahv}
  • {Mahv,Hoten}
  • {Hoten};{Noisinh,Hoten}
  • ...

Khóa

Khóa là siêu khóa nhỏ nhất (có ít thuộc tính nhất), và thuộc tính nào tham gia vào một khóa ta gọi là thuộc tính khóa, ngược lại là thuộc tính không khóa.

Như ở ví dụ trên thì khóa sẽ là: {Mahv}

Khóa chính

Khi cài đặt trên một hệ quản trị CSDL cụ thể nào đó thì nếu quan hệ có nhiều khóa thì ta chỉ được phép chọn ra một khóa làm khóa chính.

Về thực tế bạn có thể chọn bất kì một siêu khóa làm khóa chính, tuy nhiên để tối ưu và đạt chuẩn thì bạn phải chọn khóa thay vì chọn siêu khóa.

Khóa tương đương

Khóa tương đương là các khóa còn lại không được chọn làm khóa chính.

Ví dụ trong hai khóa {Mahv},{Hoten} thì khóa chính là {Mahv}, khóa tương đương là {Hoten}.

Khóa ngoại

Khóa ngoại là sự tham chiếu giữa các thuộc tính của hai quan hệ với nhau, với điều kiện các thuộc tính đó phải có cùng tính chất như kiểu dữ liệu, chiều dài ....

Ví dụ: Cho hai quan hệ như sau

khoa ngoai PNG

Thuộc tính Malop trong quan hệ LOP là khóa chính của quan hệ LOP. Thuộc tính Malop trong quan hệ HOCVIEN là khóa ngoại, tham chiếu đến Malop trong quan hệ LOP.

khoa ngoai 1 PNG

 

Như vậy mình đã giới thiệu sơ lược tất cả những vấn đề then chốt của lược đồ cơ sở dữ liệu quan hệ. Với lược đồ này thì gần như là những thông tin quan trọng để thiết kế ra mô hình CSDL chính xác nhất.

8. Lược đồ quan hệ

Tóm lại, lược đồ CSDL quan hệ không phải là dùng các kí hiệu như lược đồ ER mà nó dùng bằng ngôn từ và văn bản bình thường để diễn đạt. 

  • Lược đồ quan hệ nhằm mô tả cấu trúc của quan hệ, các mối liên hệ giữa các thuộc tính trong quan hệ đó
  • Một lược đồ quan hệ gồm một tập thuộc tính của quan hệ kèm theo một mô tả để xác định ý nghĩa và mối liên hệ giữa các thuộc tính

Dưới đây là hình ảnh hai lược đồ, các bạn tham khảo nhé.

qlhk PNG

qlsv PNG

Chúc các bạn học tốt!

Cùng chuyên mục:

Phiên làm việc là gì trong SQL

Phiên làm việc là gì trong SQL

Trong bài viết này mình sẽ giải thích phiên làm việc là gì trong SQL…

Ràng buộc Check trong SQL

Ràng buộc Check trong SQL

Bài này bạn sẽ được học cách tạo ràng buộc giá trị trong SQL bằng…

Khóa ngoại Foreign Key trong SQL

Khóa ngoại Foreign Key trong SQL

Trong bài này bạn sẽ được học cách tạo khóa ngoại Foreign Key bằng câu…

Primary Key trong SQL

Primary Key trong SQL

Bài này bạn sẽ được giới thiệu cách tạo khóa chính (Primary Key) thể hiện…

Create và Drop Database trong SQL

Create và Drop Database trong SQL

Bài viết này sẽ hướng dẫn bạn cách sử dụng lệnh Create Database để tạo…

Subquery trong SQL - truy vấn con

Subquery trong SQL - truy vấn con

Trong bài này mình sẽ nói đến một cách sử dụng câu truy vấn SLECT…

Self Join trong SQL

Self Join trong SQL

Mỗi phép Join đều phải có hai bảng table1 và table2, tuy nhiên có trường…

Right Join trong SQL

Right Join trong SQL

Chào các bạn, hôm nay mình sẽ tiếp tục nói đến phép Join trong SQL.…

Left Join trong SQL

Left Join trong SQL

Ở bài trước chúng ta đã được tìm hiểu Inner Join và biết được tại…

Inner JOIN trong SQL

Inner JOIN trong SQL

Ở bài trước chúng ta đã học hiểu cách truy vấn nhiều bảng trong SQL…

Toán tử BETWEEN và NOT BETWEEN trong SQL

Toán tử BETWEEN và NOT BETWEEN trong SQL

Toán tử BETWEEN dùng để kiểm tra một giá trị có nằm trong một khoảng…

Tìm hiểu ALIAS  (AS) trong SQL

Tìm hiểu ALIAS (AS) trong SQL

Trong bài này mình sẽ nói về cách đặt lại tên cho column, table bằng…

Tích đề các trong SQL

Tích đề các trong SQL

Trong bài này mình sẽ hướng dẫn các bạn cách truy vấn dữ liệu trên…

Gộp dữ liệu với UNION và UNION ALL trong SQL

Gộp dữ liệu với UNION và UNION ALL trong SQL

Có một số trường hợp bắt buộc bạn phải chạy hai câu truy vấn nên…

Lọc dữ liệu trùng với DISTINCT trong SQL

Lọc dữ liệu trùng với DISTINCT trong SQL

Đôi khi có những câu truy vấn có kết quả bị trùng lặp thì lúc…

Toán tử AND và OR trong SQL

Toán tử AND và OR trong SQL

Trong bài này chúng ta học hai toán tử có thể nói là được sử…

Toán tử IN và NOT IN trong SQL

Toán tử IN và NOT IN trong SQL

Trong bài này chúng ta sẽ học hai lệnh mới dùng để kiểm tra một…

Toán tử LIKE và NOT LIKE trong SQL

Toán tử LIKE và NOT LIKE trong SQL

Trong bài này chúng ta sẽ tìm hiểu lệnh LIKE, lệnh này dùng để so…

Sắp xếp dữ liệu với ORDER BY trong SQL

Sắp xếp dữ liệu với ORDER BY trong SQL

Nếu bạn muốn sắp xếp dữ liệu trả về theo tăng dần hoặc giảm dần…

Lệnh Delete trong SQL

Lệnh Delete trong SQL

DELETE FROM posts WHERE post_id > 7000 AND post_content IS NOT NULL;

Top