2015-10-10 13 views
5

Vấn đề của tôi là về khóa tự nhiên và số nguyên auto_increment làm khóa chính. Ví dụ: Tôi có các bảng ABA_B_relation. A và B có thể là một số đối tượng và A_B_realtion ghi lại nhiều mối quan hệ của nhiều A và B.phím tự nhiên so với phím auto_increment làm khóa chính

Cả A và B đều có id duy nhất toàn cầu của riêng chúng, chẳng hạn như UUID. UUID có sẵn cho người dùng, điều này có nghĩa là người dùng có thể truy vấn A hoặc B theo UUID.

Có hai cách để thiết kế khóa chính của bảng.

  1. sử dụng số nguyên auto_increment. A_B_relation tham chiếu số nguyên là FK.
  2. sử dụng UUID. A_B_relation tham chiếu UUID dưới dạng FK.

Ví dụ: người dùng muốn truy vấn tất cả thông tin của B liên kết với UUID A by A.

Đối với trường hợp đầu tiên, dòng chảy truy vấn là thế này:

First, query A's integer primary key by UUID from `A`. 

And then, query all the B's integer primary key from `A_B_relation`. 

At last, query all the B's info from `B`. 

Đối với trường hợp thứ hai, dòng chảy như sau:

Query all the B's UUID from the `A_B_relation` by A's UUID. 

Query all the B's info from `B`. 

Vì vậy, tôi nghĩ rằng, trường hợp thứ hai là thuận tiện hơn . Thê nay đung không? sự thiếu hụt của trường hợp sau là gì?

Trả lời

4

Theo ý kiến ​​thuận tiện của tôi về việc sử dụng khóa tự nhiên của phím tăng tự động phụ thuộc vào giải pháp chương trình bạn đang cung cấp. Cả hai phương pháp đều có ưu và nhược điểm. Vì vậy, giải pháp tốt nhất là hiểu cả hai loại khóa chính xác, phân tích loại giải pháp kinh doanh nào bạn đang cố gắng cung cấp và chọn loại khóa chính thích hợp.

Khóa tự nhiên là cột hoặc một nhóm cột mà chúng tôi có thể dùng để nhận dạng duy nhất bản ghi trong bảng. Các cột này chứa dữ liệu thực có mối quan hệ với phần còn lại của các cột trong bảng.

Auto-tăng lên chính, còn gọi là thay thế chìa khóa là một cột bảng duy nhất chứa giá trị số độc đáo mà có thể được sử dụng để nhận diện một hàng duy nhất của dữ liệu trong một bảng. Các giá trị này được tạo vào thời gian chạy khi bản ghi được chèn vào bảng và không có mối quan hệ với phần còn lại của dữ liệu của hàng. Ưu điểm chính của việc sử dụng các khóa tự nhiên là nó có ý nghĩa riêng và đòi hỏi ít tham gia hơn với các bảng khác, nếu như chúng ta sử dụng khóa thay thế, chúng ta cần tham gia vào một bảng khóa ngoài để nhận được kết quả chìa khóa tự nhiên.
Nhưng nói rằng chúng tôi không thể nhận được tất cả các dữ liệu cần thiết từ bảng duy nhất và phải tham gia với một bảng khác để có được tất cả các dữ liệu cần thiết. Sau đó, thuận tiện để sử dụng khóa thay thế thay vì khóa tự nhiên vì phần lớn các khóa tự nhiên là các chuỗi và kích thước lớn hơn các khóa thay thế và sẽ mất nhiều thời gian hơn để tham gia các bảng sử dụng các giá trị lớn hơn.

Khóa tự nhiên có ý nghĩa riêng. Vì vậy, khi nói đến việc tìm kiếm hồ sơ, việc sử dụng các khóa tự nhiên trên các khóa thay thế sẽ thuận lợi hơn. Nhưng nói với thời gian thay đổi logic chương trình của chúng ta và chúng ta phải thay đổi giá trị khóa tự nhiên.Điều này sẽ khó khăn và sẽ gây ra một hiệu ứng thác trên tất cả các mối quan hệ khóa ngoại. Chúng tôi có thể khắc phục vấn đề này bằng cách sử dụng khóa thay thế. Vì khóa thay thế không có mối quan hệ với phần còn lại của các giá trị của một hàng, các thay đổi của logic sẽ không ảnh hưởng đến khóa thay thế.

Tương tự như vậy, khi tôi thấy sự tiện lợi và sự bất tiện khi sử dụng khóa thay thế hoặc khóa tự nhiên hoàn toàn dựa trên giải pháp bạn đang cung cấp.

Các vấn đề liên quan