[SQL] Cho em hỏi về ráng khóa chính khóa ngoại trong sql
Chào mọi người ạ! Em có được học về Sql Server và Mysql nhưng em có thắc mắc về liên kết bảng khóa chính khóa ngoại. Mọi người cho em hỏi là trường hợp nào thì mình cần liên kết bảng khóa chính khóa ngoại trong sql, trường hợp nào thì ko ạ? Vì em thấy khi ko liên kết bảng khóa chính khóa ngoại thì minh vẫn có thể truy xuất thông tin các bảng mà. Vậy hà cớ gì lại sinh ra liên kết bảng khóa chính khóa ngoại? Mong mọi người giải đáp giúp em. Cám ơn nhiều ạ!
3 CÂU TRẢ LỜI
Theo mình thấy thì trong các dự án thực tế, nhiều dự án sẽ chỉ khởi tạo quan hệ giữa các bảng trong model, chứ hiếm khi liên kết trực tiếp vì sẽ gây ra rất nhiều khó khăn trong quá trình thêm, sửa dữ liệu.
- Một field được set làm khóa chính cho table để định danh duy nhất cho một record, giá trị của field đấy sẽ không được trùng lặp. Nên thường là field đấy sẽ là Number và tự động tăng. Và thường là ID của record.
- Khóa ngoại: Dùng để thể hiện mỗi quan hệ giữa các thực thể trong hệ quản trị cơ sở dữ liệu quan hệ. Ví dụ như: Một student chỉ thuộc một lớp học, muốn biết student nào học lớp nào sau khi lưu vào database thì mình cần biểu diễn quan hệ này bằng cách lưu thêm
ID
của lớp học(class_id)
vào bảngStudents
. Khi đó thì mỗi record sẽ có 1 fieldclass_id
để xác định, hay trong trường hợp này anh em hay truyền miệng nhau câu thần trú là lấy khóa chính làm khóa ngoại. Tùy vào mối quan hệ kiểu 1-n, n-n mà khóa ngoại sẽ được lưu ở những cách khác nhau nhé bạn.
Sử dụng khóa ngoại sẽ giúp bạn tiện truy vấn ở những câu truy vấn phức tạp trong thực tế và tạo ràng buộc quan hệ giữa các thực thế trong hệ quản trị cơ sở dữ liệu quan hệ. Chẳng hạn như bạn sẽ không thể thực hiện query để xóa Lớp học khi trong database, lớp học đã có học sinh (xác định thông qua khóa ngoại).
ví dụ nhé, có ông bảng role và bảng user, bảng 1 role có nhiều user và ở đây tôi chỉ cho user có 1 role thôi, nếu ở đây không có khóa ngoại? tức không map thằng user vs thằng role thì ông lấy role của thằng user đó thế nào? có mỗi liên hệ nào ở đây? và giờ ông muốn lấy list các user có cùng 1 role thì lấy như nào nếu 2 bảng không có sự liên kết