Yêu cầu thg 7 16, 2020 2:42 CH 600 0 5
  • 600 0 5
0

Có cần/nên tạo primary key cho mysql table

Chia sẻ
  • 600 0 5

Hôm nay mình có nhận 1 project nâng cấp website do đồng chí coder cũ đã thay sim đổi số. Check qua db thì mình thấy ko có table nào dc tạo primary key. Mọi khi mình làm thì đều tạo thêm 1 field id dùng để làm primary key nên hơi bất ngờ khi gặp db này.

Anh em nào pro sql cho mình hỏi thăm là có nhất thiết phải tạo primary key hay ko?

5 CÂU TRẢ LỜI


Đã trả lời thg 7 16, 2020 5:15 CH
+5

Trường khóa chính trong bảng là một trường không NULL, được đánh index, được đảm bảo unique và giúp các bản ghi của bảng khác có thể tham chiếu đến qua khóa ngoại.

Nếu bảng không có trường nào là khóa chính, không những bạn bỏ lỡ khả năng truy vấn nhanh hơn nhờ index, mà cũng có nghĩa khả năng cao trong cơ sở dữ liệu của bạn không có ràng buộc quan hệ nào. Vì vậy, cơ sở dữ liệu của bạn có cơ hội xảy ra dị thường.

Ví dụ, bạn có một bảng users liên kết 1-nhiều bảng khác là articles. Khi bạn xóa đi một người dùng trong users, nhưng các articles của người dùng đó vẫn không bị xóa, mà lại tham chiếu đến một cái id người dùng không hề tồn tại (?!)

Vì vậy, bạn LUÔN LUÔN NÊN tạo khóa chính (thường tên là id) cho mọi bảng.

Chia sẻ
Đã trả lời thg 7 16, 2020 3:14 CH
+2

Theo mình thì không nhất thiết phải đánh forgin key nhưng phải đánh primary key bởi vì primary key là khóa chính trong bảng là một trường không NULL, được đánh index, được đảm bảo unique và giúp các bản ghi của bảng khác có thể tham chiếu đến qua khóa ngoại.

Chia sẻ
Đã trả lời thg 7 17, 2020 2:20 SA
0

Nếu bạn k đánh PK thì có 2 trường hợp xảy ra. -> MySQL sẽ tự động tìm trường unique, not null để dùng làm PK -> Nếu k có trường nào thỏa mãn thì sẽ tạo 1 implicit PK

Tùy vào trường hợp để đánh thôi bạn. Nếu bạn k cần truy cập qua ID thì không đánh cũng chả sao.

Chia sẻ
Đã trả lời thg 7 17, 2020 2:35 SA
0

mình thấy thì mình nên tạo thêm primary key nhé để một trường trong một bảng mà nhận diện một cách duy nhất mỗi hàng/bản ghi trong một bảng dữ liệu và giúp cho việc truy vấn dữ liệu đến các bảng quan hệ sẽ dễ dàng hơn và nhanh hơn

Chia sẻ
Đã trả lời thg 7 17, 2020 3:51 SA
0

Như bạn thấy thì con project mà bạn tiếp nhận nó vẫn có thể chạy khi mà trong các bảng không có primary key => không nhất thiết phải tạo primary key.

Tuy nhiên, khi sử dụng primary key thì bạn có thể dễ dàng xử lý truy vấn cũng như là quan hệ giữa các bảng (1-n, n-n), ...

Chia sẻ
Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí