Ở bài trước chúng ta đã được hiểu về khái niệm Primary Keys và Foreign Keys (hay còn gọi là Khóa Chính và Khóa Phụ). Hôm nay chúng ta sẽ tìm hiểu thêm về Foreign Key Constraints (các ràng buộc của Khóa Phụ).
Để bắt đầu tìm hiểu Foreign Key Constraints là gì thì chúng ta sẽ cùng tạo 1 cơ sở dữ liệu blog bao gồm 2 bảng posts và comments
Ở bảng posts chúng ta sẽ tạo 1 cột title với Type là Varchar và lenght là 255, cột này thì mình sẽ không cho NULL
Bảng comments thì mình sẽ thêm cột body và post_id.
Tại sao lại thêm post_id thì các bạn có thể hiểu đơn giản là ở 1 bài viết thì chúng ta có thể có comments cho bài viết và chúng ta phải biết được comments nào đc dùng cho bài posts nào
Chúng ta sẽ nhập dữ liệu cho 2 bảng ví dụ như sau
Như chúng ta thấy thì khi mình đổi post_id sang 99 thì dữ liệu vẫn đc save. Lý do là do chúng ta chưa có ràng buộc cho Foreign Key nhưng như vậy thì sẽ không tạo được tính chính xác cho dữ liệu
Khi chúng ta chạy thêm lệnh
Khi đó chúng ta sẽ có ràng buộc có thể xem như sau
Và điều đó có nghĩa là gì ? Là khi chúng ta chuyển post_id sang 1 ids không có ở bảng post thì việc thay đổi dữ liệu sẽ bị sai và việc nhập liệu sẽ không được. Điều này sẽ đảm bảo chính xác cho dữ liệu
Và các ràng buộc cũng có các options để thực hiện ví dụ như on delete cascade khi bạn sử dụng thêm options này thì khi chúng ta thực hiện xóa dữ liệu ở bảng có chứa khóa chính cụ thế ở đây là post thì dữ liệu ở bảng comments cũng đc xóa đồng thời
Khi mình xóa dữ liệu ở bảng posts
Cùng kiểm tra lại dữ liệu ở bảng comments thì chúng ta cũng thấy dữ liệu được xóa đồng thời
Ngoài cascade thì cũng có thêm những lựa chọn như restrict, no action, …. Ngoài lựa chọn on delete thì còn lựa chọn on update sẽ thực hiện khi chúng ta update dữ liệu ở bảng chứa khóa chính, và lựa chọn on update này hay được sử dụng hơn trong thực tế.
Giờ chúng ta có thể quay lại cơ sở dữ liệu đã import ở bài 1 để tham khảo thêm về các ràng buộc và Khóa Chính, Khóa Phụ được sử dụng
Việc hiểu đúng về các khái niệm cơ bản sẽ giúp chúng ta thiết lập được 1 cơ sở dữ liệu đầy đủ và chính xác với những yêu cầu thực tế trong khi làm việc. Ở các bài sau mình sẽ giới thiệu đến các bạn những khái niệm khác nhé !!!
Nguồn: viblo.asia