Tôi không thấy câu trả lời chỉ ra (điều mà tôi coi là) điểm thực sự cơ bản - cụ thể là khóa chính là thứ đảm bảo rằng bạn sẽ không nhận được hai mục nhập trong bảng cho cùng một thực thể trong thế giới thực (như được mô hình hóa trong cơ sở dữ liệu). Quan sát này giúp xác định đâu là lựa chọn tốt và đâu là lựa chọn không tốt cho khóa chính.
Ví dụ: trong một bảng tên và mã tiểu bang (Hoa Kỳ), tên hoặc mã có thể là khóa chính - chúng tạo thành hai khóa ứng cử viên khác nhau và một trong số chúng (thường là ngắn hơn - mã) được chọn làm khóa chính. Trong lý thuyết về các phụ thuộc hàm (và các phụ thuộc nối - 1NF đến 5NF - thì các khóa ứng viên là quan trọng hơn là một khóa chính.
Ví dụ ngược lại, tên người thường là một lựa chọn không tốt cho khóa chính. Có nhiều người sử dụng tên "John Smith" hoặc một số tên tương tự khác; thậm chí tính đến tên đệm (hãy nhớ: không phải ai cũng có - ví dụ như tôi thì không), có rất nhiều phạm vi để trùng lặp. Do đó, mọi người không sử dụng tên làm khóa chính. Họ phát minh ra các khóa nhân tạo như Số An sinh Xã hội (SSN) hoặc Số Nhân viên và sử dụng chúng để chỉ định cá nhân.
Một khóa chính lý tưởng là ngắn gọn, duy nhất, dễ nhớ và tự nhiên. Trong số các đặc điểm này, tính duy nhất là bắt buộc; phần còn lại phải linh hoạt với các ràng buộc của dữ liệu thế giới thực.
Do đó, khi nói đến việc xác định khóa chính của một bảng nhất định, bạn phải xem bảng đó đại diện cho những gì. Tập hợp hoặc tập hợp các giá trị cột nào trong bảng xác định duy nhất mỗi hàng trong bảng? Đó là những chìa khóa ứng cử viên. Bây giờ, nếu mỗi khóa ứng viên bao gồm 4 hoặc 5 cột, thì bạn có thể quyết định rằng những cột đó quá vụng về để tạo ra một khóa chính tốt (chủ yếu là do ngắn). Trong những trường hợp đó, bạn có thể giới thiệu khóa thay thế - một số được tạo nhân tạo. Rất thường xuyên (nhưng không phải luôn luôn) một số nguyên 32 bit đơn giản là đủ cho khóa thay thế. Sau đó, bạn chỉ định khóa đại diện này làm khóa chính.
Tuy nhiên, bạn vẫn phải đảm bảo rằng các khóa ứng viên khác (đối với khóa thay thế cũng là khóa ứng viên, cũng như khóa chính đã chọn) đều được duy trì dưới dạng mã định danh duy nhất - thông thường bằng cách đặt một ràng buộc duy nhất trên các tập hợp cột đó.
Đôi khi, mọi người cảm thấy khó khăn để xác định điều gì làm cho một hàng trở nên độc đáo, nhưng cần phải có điều gì đó để làm điều đó, bởi vì chỉ lặp lại một phần thông tin sẽ không làm cho nó đúng hơn nữa. Và nếu bạn không cẩn thận và nhận được hai (hoặc nhiều) hàng có mục đích lưu trữ cùng một thông tin và sau đó bạn cần cập nhật thông tin, sẽ có nguy cơ (đặc biệt nếu bạn sử dụng con trỏ) rằng bạn sẽ chỉ cập nhật một hàng hơn là mọi hàng, vì vậy các hàng không đồng bộ và không ai biết hàng nào chứa thông tin chính xác.
Đây là một quan điểm khá cứng rắn, ở một số khía cạnh.
Tôi không có vấn đề gì đặc biệt với việc sử dụng GUID khi chúng cần thiết, nhưng chúng có xu hướng lớn (như trong 16-64 byte) và chúng được sử dụng quá thường xuyên. Thường thì giá trị 4 byte hoàn toàn tốt là đủ. Sử dụng GUID trong đó giá trị 4 byte sẽ đủ làm lãng phí dung lượng đĩa và làm chậm truy cập vào dữ liệu được lập chỉ mục ngay cả vì có ít giá trị hơn trên mỗi trang chỉ mục, vì vậy chỉ mục sẽ sâu hơn và nhiều trang hơn phải được đọc để truy cập thông tin.