Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Tại sao chúng ta nên có một cột ID trong bảng người dùng?

Ngay cả khi tên người dùng của bạn là duy nhất, có một số lợi ích khi có thêm cột id thay vì sử dụng varchar làm khóa chính của bạn.

  • Một số người thích sử dụng cột số nguyên làm khóa chính, để dùng làm khóa thay thế không bao giờ cần thay đổi, ngay cả khi các cột khác có thể thay đổi. Mặc dù không có gì ngăn cản khóa chính tự nhiên cũng có thể thay đổi được, nhưng bạn phải sử dụng các ràng buộc khóa ngoại theo tầng để đảm bảo rằng khóa ngoại trong các bảng liên quan được cập nhật đồng bộ với bất kỳ thay đổi nào như vậy.

  • Khóa chính là số nguyên 32 bit thay vì varchar có thể tiết kiệm dung lượng. Lựa chọn giữa cột khóa ngoại int hoặc varchar trong mọi bảng khác tham chiếu đến bảng người dùng của bạn có thể là một lý do chính đáng.

  • Chèn vào chỉ mục khóa chính hiệu quả hơn một chút nếu bạn thêm các hàng mới vào cuối chỉ mục, so với việc chèn chúng vào giữa chỉ mục. Các chỉ mục trong bảng MySQL thường là cấu trúc dữ liệu B + Tree và bạn có thể nghiên cứu các chỉ mục này để hiểu cách chúng hoạt động.

  • Một số khuôn khổ ứng dụng thích quy ước rằng mọi bảng trong cơ sở dữ liệu của bạn có một cột khóa chính được gọi là id , thay vì sử dụng khóa tự nhiên hoặc khóa ghép. Việc tuân theo các quy ước như vậy có thể làm cho một số tác vụ lập trình đơn giản hơn.

Không có vấn đề nào trong số này là kẻ phá vỡ thỏa thuận. Và cũng có những lợi thế khi sử dụng khóa tự nhiên:

  • Nếu bạn tìm kiếm các hàng theo tên người dùng thường xuyên hơn so với tìm kiếm theo id, thì tốt hơn là nên chọn tên người dùng làm khóa chính và tận dụng khả năng lưu trữ được tổ chức theo chỉ mục của InnoDB. Đặt cột tra cứu chính của bạn làm khóa chính, nếu có thể, vì tra cứu khóa chính hiệu quả hơn trong InnoDB (bạn nên sử dụng InnoDB trong MySQL).

  • Như bạn đã nhận thấy, nếu bạn đã có một ràng buộc duy nhất đối với tên người dùng, thì việc giữ thêm một cột id mà bạn không cần đến sẽ rất lãng phí dung lượng lưu trữ.

  • Sử dụng khóa tự nhiên có nghĩa là các khóa ngoại chứa một giá trị mà con người có thể đọc được, thay vì một id số nguyên tùy ý. Điều này cho phép các truy vấn sử dụng giá trị khóa ngoại mà không cần phải tham gia trở lại bảng mẹ để có giá trị "thực".

Vấn đề là không có quy tắc nào áp dụng cho 100% các trường hợp. Tôi thường khuyên bạn nên mở các tùy chọn của mình và sử dụng các khóa tự nhiên, khóa ghép và khóa thay thế ngay cả trong một cơ sở dữ liệu duy nhất.

Tôi đề cập đến một số vấn đề về khóa thay thế trong chương "Bắt buộc phải có ID" trong cuốn sách của tôi Phản chất lượng SQL:Tránh cạm bẫy của lập trình cơ sở dữ liệu .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. LAST_INSERT_ID () trong một giao dịch có đáng tin cậy không?

  2. Phao hay số thập phân cho giá?

  3. Truy vấn SQL cho các thư gần đây nhất

  4. Giá trị trả về của các hàm được lưu trữ trong MyDAC

  5. mysql nhận chênh lệch thay vì SUM