Khóa ngoại trong database có thực sự cần thiết?

Chào mọi người, hồi còn học ở trường khi học về sql thì e luôn được dậy rằng khi tạo database thì luôn phải tạo khóa ngoại cho nó luôn, nhưng khi e đi làm được 1 thời gian cụ thể là về web (laravel) thì e thấy leader trong team e thiết kế db mà không cần khóa ngoại, vậy cho e hỏi tại sao lại như thế ạ ?

Chắc học tập Github
Hỏi anh lead của bạn đi, xem tại sao lại không sử dụng :relieved:

6 Likes

Chỗ của mình thì việc cài khóa ngoại là bắt buộc, nó ảnh hưởng rất lớn đến tốc độ truy vấn.
Bạn nên hỏi anh leader của bạn tại sao lại không dùng khóa ngoại.

3 Likes

Bạn phải hỏi leader bạn có hàm ý gì đó, FK sẽ giúp query nhanh hơn
Bạn làm Laravel thì chắc cũng biết về migration
Về việc tạo FK không phải không cần, nhưng có thể tạm thời không cần
Như trường hợp project đang cần implement 1 feature và cần tạo 12 table chia cho 3 người làm
vậy 1 người làm 4 table

  • Dev A: table1, table2, table3, table4
  • Dev B: table5, table6, table7, table8
  • Dev C: table9, table10, table11, table12

ví dụ Dev A đang implement table1 cần khóa ngoại của table 5, table 6 nhưng thằng Dev B nó chưa làm xong và mình không có thời gian để chờ thằng Dev B làm xong hết rồi mình mới làm
nên cứ tạo Table và tạo association bỏ qua phần FK
khi feature đó ổn định ta sẽ tạo 1 migration để update FK và index cho tất cả table

4 Likes

Ràng buộc dữ liệu, integrity constaints, là cách thể hiện những quy tắc, quy ước trong công ty trên hệ thống máy tính. Khoá ngoại cũng là 1 dạng integrity constaints. Mấy ràng buộc dữ liệu này buộc người dùng không thể làm sai, nghĩa là người dùng cố tình làm sai thì hệ thống sẽ báo lỗi.

Do đó, nếu mọi người đều tuân theo quy tắc, quy trình thì cũng không nhất thiết phải quan tâm phần ràng buộc dữ liệu, hay khoá ngoại nói riêng. Dù gì integrity constraints cũng chỉ phục vụ cho các quy tắc của công ty, và được số hoá trong máy tính.

Mà mình đoán leader chắc cũng già rồi nhỉ, thường phần này chỉ thấy trong giáo trình cũ cũ nhắc đến.

6 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?