foreign key có nên dùng hay không?


Mình còn nhớ hồi sinh viên có học môn CSDL (Cơ sở dữ liệu) quan hệ, và trong lần kiểm tra cuối kỳ lúc đó, giáo viên chấm bài khi nhìn vào project mình làm đã nói thế này:

Anh thiết kế vậy đó hả, đã là CSDL quan hệ thì giữa các bảng phải có ràng buộc khóa ngoại với nhau.

Đương nhiên lúc đó mình cũng đã gân cổ trình bày luận điểm rằng với project em đang làm thì một số table không cần phải có ràng buộc, em tự đảm bảo tính nhất quán dữ liệu trên này bla..bla.

Thời điểm lúc đó mình vẫn tự thắc mắc tại sao có tới 10 table mình làm giống ý giáo viên, riêng table 11 mình để nó nằm riêng 1 chỗ như vậy lại bị la. và có nhất thiết phải gắn kết nó với 10 table còn lại thông qua một cái khóa ngoại (foreign key) hay không?

Khi đã ra trường và đi làm công việc liên quan tới Database nhiều hơn, mình nhận thấy việc có dùng các ràng buộc constraint, foreign key, trigger hay không là tuỳ thuộc vào ứng dụng.

Thí dụ các website hay hệ thống ưu tiên về tốc độ truy vấn phần data không quan trọng cho lắm thì bạn có thể bỏ qua việc tạo các ràng buộc này để câu query đạt được tốc độ cao nhất vì nếu để quá nhiều ràng buộc thì SQL SERVER phải kiểm tra rất nhiều thứ không cần thiết trước khi trả về kết quả.

Ngược lại các hệ thống ưu tiên về tính an toàn nhất quán của dữ liệu thì bạn nên có những ràng buộc này để đảm bảo an toàn cho dữ liệu.

Notes


  • Khóa chính (Primary key) là một (hoặc một tập) các thuộc tính ( field ) đóng vai trò là thứ để xác định các (field ) thuộc tính còn lại và nó là duy nhất.
  • Khóa ngoại (Foreign Key) trong nhiều trường hợp, khóa chính của một bảng được đưa sang làm thuộc tính bên bảng khác, thuộc tính đó gọi là khóa ngoại. Khóa ngoại đóng vai trò thể hiện liên kết giữa 2 bảng.


Không có nhận xét nào

Đăng nhận xét