Trong một trong những bài học cuối cùng tại trường đại học (Tôi là sinh viên), giảng viên đã yêu cầu chúng tôi phát triển cơ sở dữ liệu (Máy chủ MySQL nếu có vấn đề) và ứng dụng khách nhỏ sẽ sử dụng cơ sở dữ liệu làm nguồn dữ liệu.
Một trong những yêu cầu là cột nhận dạng (là PK trong mỗi bảng) phải tuần tự, bởi vì đó là một thông lệ tốt (theo từ của giảng viên). Đó là, khi hàng của bảng bị xóa, PK phải được sử dụng lại trong các lần chèn tiếp theo. Tôi có kiến thức trung bình về RDBMS, PK và các cột định danh. Theo những gì tôi hiểu, cột nhận dạng đó chỉ là một cách để DB tự động tạo PK khi chèn hàng và không có gì nữa. Và giá trị cột danh tính sẽ không liên quan đến các thuộc tính hàng theo bất kỳ cách nào (miễn là nó không phải là khóa tự nhiên).
Yêu cầu này (cột nhận dạng tuần tự nghiêm ngặt) là đáng ngờ đối với tôi. Tôi đã cố gắng hỏi giảng viên điều gì sai nếu danh tính không tuần tự (với những khoảng trống gây ra bởi việc xóa), nhưng nhận được câu trả lời rất trừu tượng như "nó thuận tiện cho người dùng và hữu ích cho các quản trị viên DB duy trì cơ sở dữ liệu". Không có ví dụ cụ thể. Đối số "thuận tiện cho người dùng" nghe có vẻ ngớ ngẩn, bởi vì nó không có ý nghĩa gì trong lĩnh vực kinh doanh.
Vì vậy, tôi tò mò nếu những lý do này là có thật? Tôi chỉ có thể nghĩ về một trường hợp khi cột định danh được yêu cầu - khi không gian nhận dạng đã hết. Nhưng đây là vấn đề thiết kế nhiều hơn khi loại cột nhận dạng được chọn không chính xác, nói đơn giản int
thay vì bigint
hoặc uniqueidentifier
khi bảng chứa hàng tỷ hàng. Giả sử, một cột danh tính là một chỉ mục được nhóm: các khoảng trống trong cột danh tính có thể ảnh hưởng đến hiệu suất của chỉ mục không? Có thể có những lý do trong thế giới thực khác để tái tạo cột nhận dạng tự động sau mỗi lần xóa mà tôi không biết?
Cảm ơn trước!