@Matt Sheppard:
Nói rằng bạn có một bảng của khách hàng. Chắc chắn bạn không muốn khách hàng tồn tại trong bảng nhiều lần, hoặc nhiều sự nhầm lẫn sẽ xảy ra trong toàn bộ bộ phận bán hàng và hậu cần của bạn (đặc biệt là nếu nhiều hàng về khách hàng chứa thông tin khác nhau).
Vì vậy, bạn có một mã định danh khách hàng xác định duy nhất khách hàng và bạn chắc chắn rằng số nhận dạng đó được khách hàng biết (trong hóa đơn), để khách hàng và nhân viên dịch vụ khách hàng có một tài liệu tham khảo chung trong trường hợp họ cần liên lạc. Để đảm bảo không có hồ sơ khách hàng trùng lặp, bạn thêm một ràng buộc duy nhất vào bảng, thông qua khóa chính trên mã định danh khách hàng hoặc thông qua ràng buộc KHÔNG NULL + UNIQUE trên cột số nhận dạng khách hàng.
Tiếp theo, vì một số lý do (mà tôi không thể nghĩ ra), bạn được yêu cầu thêm một cột GUID vào bảng khách hàng và biến nó thành khóa chính. Nếu cột số nhận dạng khách hàng hiện không còn đảm bảo duy nhất, bạn sẽ yêu cầu sự cố trong tương lai trong toàn tổ chức vì GUID sẽ luôn là duy nhất.
Một số "kiến trúc sư" có thể nói với bạn rằng "ồ, nhưng chúng tôi xử lý các ràng buộc về tính duy nhất của khách hàng thực sự trong tầng ứng dụng của chúng tôi!". Đúng. Thời trang liên quan đến ngôn ngữ lập trình mục đích chung đó và (đặc biệt) các khung trung cấp thay đổi mọi lúc, và nói chung sẽ không bao giờ tồn tại ngoài cơ sở dữ liệu của bạn. Và có một cơ hội rất tốt là một lúc nào đó bạn sẽ cần truy cập vào cơ sở dữ liệu mà không cần thông qua ứng dụng hiện tại. == Rắc rối. (Nhưng may mắn thay, bạn và "kiến trúc sư" đã qua lâu, vì vậy bạn sẽ không ở đó để dọn dẹp mớ hỗn độn.) Nói cách khác: Đừng duy trì các ràng buộc rõ ràng trong cơ sở dữ liệu (và trong các tầng khác, nếu bạn có thời gian).
Nói cách khác: Có thể có lý do chính đáng để thêm các cột GUID vào các bảng, nhưng vui lòng không bị cám dỗ để làm giảm tham vọng của bạn về tính nhất quán trong thông tin thực (== không phải GUID).