RÀNG BUỘC TRÊN CSDL QUAN HỆ

Ngày đăng: 11/11/2020   -    Cập nhật: 11/11/2020


Như các bạn đã biết, một CSDL quan hệ có thể gồm nhiều quan hệ khác nhau và các bộ trong các quan hệ có thể liên hệ với nhau theo một số cách nào đó.


Tuy nhiên, để các liên hệ đó được “thuận tiện” và không gây xung đột thì các CSDL phải thoã mãn một số ràng buộc và các giới hạn nhất định – gọi chung là các ràng buộc để đảm bảo tính hợp lý và nhất quán của các giá trị trong CSDL.



Ràng buộc trên CSDL quan hệ


Các ràng buộc có thể tồn tại giữa các thuộc tính hoặc các bộ dữ liệu và đồng thời, các bộ của các quan hệ từ một lược đồ CSDL phải thoả mãn các ràng buộc ở bất kì thời điểm nào.

1. Các loại ràng buộc


Ràng buộc ngầm định: Là các ràng buộc liên quan đến tính chất của một quan hệ như:


  • Giá trị các thuộc tính phải là nguyên tố
  • Không được phép có hai bộ giống nhau trong cùng một quan hệ
  • Thứ tự các bộ trong một quan hệ là không quan trọng,…


Ràng buộc dựa trên ứng dụng: Là ràng buộc liên quan đến ngữ nghĩa và hành vi (behavior) của các thuộc tính. Loại ràng buộc này khó mô tả trong mô hình dữ liệu và chỉ được kiểm tra trong quá trình cập nhật dữ liệu dựa trên nền tảng ứng dụng đã được lập trình.


Ràng buộc dựa trên lược đồ: Là ràng buộc có thể mô tả trực tiếp trong lược đồ của mô hình dữ liệu. Loại ràng buộc này được mô tả bằng ngôn ngữ DDL bao gồm các ràng buộc về:



  • Miền giá trị (domain constraint)
  • Khoá (key constraint)
  • Các giá trị NULL
  • Toàn vẹn thực thể (entity integrity constraint)
  • Toàn vẹn tham chiếu (referential integrity constraint)


Ràng buộc dựa trên lược đồ có thể liên quan đến nhiều quan hệ hoặc trong phạm vi chỉ một quan hệ. Nếu phạm vi chỉ là một quan hệ:


  • Miền giá trị (domain constraint)
  • Khoá (key constraint)
  • Các giá trị NULL
  • Toàn vẹn thực thể (entity integrity constraint)


Phạm vi liên quan đến nhiều quan hệ:


  • Toàn vẹn tham chiếu (referential integrity constraint)
  • Các ràng buộc khác


Ràng buộc miền giá trị: Là loại ràng buộc về giá trị của một thuộc tính xác định nào đó trong một quan hệ cụ thể. Ràng buộc này có thể áp dụng lên một thuộc tính hoặc một nhóm các thuộc tính tự ràng buộc lẫn nhau về giá trị.


Ví dụ: 0 <= điểm <= 10 hoặc 1 <= tháng <= 12


Hay một quan hệ TRASACH có thuộc tính ngayMuonngayTra: ngayMuon <= ngayTra


Ràng buộc về khoá: Thường được biểu diễn bằng các phụ thuộc hàm, là một loại ràng buộc liên bộ phổ biến xác lập sự tồn tại duy nhất của các bộ trong một quan hệ.


Ví dụ: Hai bộ phân biệt của cùng quan hệ không thể có thuộc tính khoá trùng nhau.  Mỗi sinh viên có mã số duy nhất, …


Ràng buộc về giá trị NULL: Ràng buộc này cho biết một thuộc tính có thể nhận giá trị NULL hay không.
Ví dụ:


 - Nếu mỗi bộ của quan hệ SINH VIÊN bắt buộc phải hợp lệ thì thuộc tính tên sinh viên không được phép NULL. Vì vậy tên sinh viên được ràng buộc là NOT NULL.


- Nhưng nếu xét quan hệ KHÁCH HÀNG(id, hoten, dienthoai, tuoi, diachi, luong) thì thuộc tính tuổi và luong có thể ràng buộc là NULL.


Ràng buộc toàn vẹn thực thể: Kiểm tra rằng khoá chính không thể mang giá trị NULL hay nói cách khác – các khoá chính được sử dụng để xác định các bộ trong một quan hệ. Nếu có bất cứ khoá chính nào mang giá trị NULL thì các bộ tương ứng đó sẽ không thể xác định được.


Ví dụ: Nếu có hai hoặc nhiều bộ có khoá chính mang giá trị NULL => thể không thể phân biệt chúng nếu tham khảo chúng từ các quan hệ khác.


Ràng buộc toàn vẹn tham chiếu: Được quy định giữa hai quan hệ và dựa trên ràng buộc thực thể, được sử dụng để duy trì sự thống nhất / nhất quán giữa các bộ trong hai quan hệ. Ràng buộc này được thể hiện qua khái niệm khoá ngoại hay còn gọi là ràng buộc toàn vẹn về khoá ngoại.


Ví dụ: Xét 2 quan hệ bên dưới



Ví dụ ràng buộc của 2 quan hệ


Một số ràng buộc khác:


  • RBTV liên thuộc tính giữa nhiều quan hệ
  • RBTV liên bộ giữa các bộ trong các quan hệ
  • RBTV về thuộc tính tổng hợp


> Trong các khóa học LẬP TRÌNH WEB VỚI JAVA, LẬP TRÌNH WEB VỚI PHP cũng như các khóa học khác tại NIIT - ICT Hà Nội, bạn sẽ được hướng dẫn rõ hơn về các ràng buộc này khi làm đồ án (Thường là làm 2 đồ án lớn).

2. Sự tương thông giữa các quan hệ


Sự tương thông giữa các quan hệ là mối liên hệ giữa các quan hệ trong cùng một cơ sở dữ liệu. Dựa vào sự tương thông này, bạn có thể truy xuất các thuộc tính dữ liệu cần thiết từ các quan hệ mà không cần phải xét hết các quan hệ.


Chẳng hạn, ta có lược đồ CSDL như sau:



SINHVIEN (MASV, hoten, namsinh, diachi, #ML)
LOP (ML, tenlop)
MONHOC (MM, tenmon, TC, LT, TH)
DIEM (#MASV, #MM, hk, nk, diem)
GIAOVIEN (MAGV, hotenGv, namsinhGv, diachiGv)
DAY (#MAGV, #MM, hk, nk)


Ta có thể thấy, trong lược đồ CSDL trên có các ràng buộc tham chiếu giữa MSSV giữa hai quan hệ SINHVIEN và DIEM, ML giữa SINHVIEN và LOP, MM giữa MONHOC và DAY, MAGV giữa GIAOVIEN và DAY.


Vậy sự tương thông dữ liệu nằm ở đâu? Đó chính là thông qua các ràng buộc tham chiếu mà ta vừa liệt kê ra.


Ví dụ: Tìm điểm môn CSDL của sinh viên Trương Vô Kỵ


 
Minh họa sự tương thông dữ liệu
 

Tổng kết



Tóm lại, ràng buộc là thứ không thể thiếu trong việc thiết kế và vận hành một CSDL trong thực tế. Ràng buộc là kiến thức tiên quyết để bắt đầu xây dựng một CSDL nhất quán và logic để đáp ứng được các nhu cầu khách hàng trong xây dựng và phát triển phần mềm.


Mặc dù, nội dung bài viết chỉ giúp các bạn làm quen với mô hình quan hệ - nhưng bạn hãy đọc lại 2 bài vừa rồi vài lần, nắm vững kiến thức này rồi chuyển qua học cách câu lệnh truy vấn SQL để đảm bảo bạn hiểu sâu về CSDL.


Nó rất quan trọng khi thiết kế CSDL để lập trình web, lập trình ứng dụng đó.



---
HỌC VIỆN ĐÀO TẠO CNTT NIIT - ICT HÀ NỘI
Học Lập trình chất lượng cao (Since 2002). Học làm Lập trình viên. Hành động ngay!
Đc: Tầng 3, 25T2, N05, Nguyễn Thị Thập, Cầu Giấy, Hà Nội
SĐT: 02435574074 - 0914939543
Email: hello@niithanoi.edu.vn
Fanpage: https://facebook.com/NIIT.ICT/
 
#niit #niithanoi #niiticthanoi #hoclaptrinh #khoahoclaptrinh #hoclaptrinhjava #hoclaptrinhphp #java #php #python
Bình luận Facebook
Đăng ký tư vấn
Nhân viên gọi điện tư vấn miễn phí sau khi đăng ký
Được cập nhật các ưu đãi sớm nhất
Hotline: 0383180086
Tên không được để trống
Số điện thoại không được để trống
Email không được để trống
Hãy đăng ký để nhận những thông tin mới nhất về học bổng mới nhất tại NIIT - ICT Hà Nội
top
Đóng lại Đăng ký học tại NIIT - ICT Hà Nội
6260+ học viên đã theo học tại NIIT - ICT Hà Nội và có việc làm tốt trong ngành lập trình. Nắm lấy cơ hội ngay hôm nay!
Chọn khóa học
  • KHÓA HỌC LẬP TRÌNH FRONT END VỚI REACT.JS
  • KHÓA HỌC LẬP TRÌNH PHP WEB
  • Khóa học PHP Full stack [2023] cho người mới bắt đầu
  • Khóa học BIG DATA với Hadoop và Spark
  • Khóa học Lập trình Android tại Hà Nội
  • [Tuyển sinh 2023] Lập trình viên Quốc tế DigiNxt
  • Khóa học Tiền lương & Phúc lợi (C&B Excel) tại Hà Nội
  • LẬP TRÌNH GAME
    • Khóa học Lập trình Game Unity
  • LẬP TRÌNH WEB FRONT END
    • KHÓA HỌC PYTHON HƯỚNG ĐỐI TƯỢNG
    • KHÓA HỌC ANGULAR & TYPESCRIPT (FRONT END)
  • LẬP TRÌNH WEB BACK END
    • LẬP TRÌNH JAVA WEB VỚI FRAME WORK
    • Lập trình Web với Django
    • Lập trình PHP với Laravel Framework
  • CHƯƠNG TRÌNH ĐÀO TẠO ỨNG DỤNG CÔNG NGHỆ
    • Khóa học Tiền lương & Phúc lợi (C&B Excel) tại TP HCM
  • LẬP TRÌNH WEB FULL STACK
    • Khóa học Java Full stack (IJFD)
  • LẬP TRÌNH MOBILE
    • FRONT-END VỚI REACTJS VÀ REACT NATIVE
    • Lập trình Android Nâng cao
  • ĐÀO TẠO CHO DOANH NGHIỆP
    • KHÓA HỌC BUSINESS ANALYSIC TỪ CƠ BẢN ĐẾN NÂNG CAO 2023
    • Khóa học Magento: Làm chủ CMS TMĐT lớn nhất
    • Khóa học IOT: Xây dựng Sản phẩm IOT với Raspberry Pi
    • Khóa học Automation Testing Chuyên nghiệp
  • KHÓA HỌC DỰ ÁN
    • Học sử dụng bộ Office: Word, Excel, Power Point, Mail chuyên nghiệp
  • KHÓA HỌC KHÁC
    • VBA Excel Toàn Tập (Cơ Bản - Nâng Cao)
    • VBA Excel Nâng cao
    • Khóa học JMeter: Performance Testing
    • Khóa học Tester đạt chuẩn Quốc tế ISTQB Foundation Level
    • Khoá Học Tester đạt chuẩn quốc tế ISTQB Advanced Level
Bạn chưa chọn khóa học cần đăng ký
Tên không được để trống
Số điện thoại không được để trống
Email không được để trống
Đăng ký học thành công!
Cảm ơn bạn đã đăng ký học tại NIIT - ICT HÀ NỘI!