Một số điều mới đối với việc sử dụng cơ sở dữ liệu SQL tiêu chuẩn (hiện đang hoạt động với MySQL) Tôi chưa chạy qua nhiều cách sử dụng này.
Khi nào và tại sao nó hữu ích khi có các khóa âm (hoặc đúng hơn là được ký) lập chỉ mục một bảng?
Một số điều mới đối với việc sử dụng cơ sở dữ liệu SQL tiêu chuẩn (hiện đang hoạt động với MySQL) Tôi chưa chạy qua nhiều cách sử dụng này.
Khi nào và tại sao nó hữu ích khi có các khóa âm (hoặc đúng hơn là được ký) lập chỉ mục một bảng?
Câu trả lời:
Tất cả khóa chính là một giá trị mà chúng tôi đã xác định là giá trị cực kỳ quan trọng trong một bản ghi. Cho dù khóa đó là int đã ký, int không dấu, chuỗi, blob (thực ra, có giới hạn) hoặc UUID (hoặc bất kỳ tên nào ngày nay), thực tế vẫn tồn tại rằng đó là khóa và đó là điều quan trọng nhất
Vì chúng tôi không bị hạn chế chỉ sử dụng các số được định hướng tích cực cho các khóa của mình, nên có ý nghĩa khi xem xét rằng một số nguyên đã ký sẽ chỉ đạt ~ 2 tỷ, trong khi một số nguyên không dấu sẽ lên tới ~ 4 tỷ. Nhưng không có gì sai khi sử dụng int đã ký, đặt giá trị ban đầu là ~ -2 tỷ và đặt mức tăng của một. Sau ~ 2 tỷ hồ sơ, bạn sẽ đạt "không" và sau đó bạn sẽ tiếp tục ~ 2 tỷ.
Về lý do tại sao có "khóa âm" trong một bảng sẽ hữu ích, đó là câu hỏi tương tự như "tại sao có khóa trong bảng" lại hữu ích. "Giá trị" của khóa không có tác động đến trạng thái của khóa đó. Một chìa khóa là một chìa khóa là một chìa khóa.
Điều quan trọng là nếu khóa là hợp lệ.
Về lý do tại sao sẽ hữu ích khi cho phép các khóa âm, tôi có thể đề xuất một số lý do:
Điều gì sẽ xảy ra nếu bạn muốn chỉ ra lợi nhuận trong hệ thống bán hàng là số đơn đặt hàng bán hàng âm, khớp với số đơn đặt hàng bán tích cực, do đó làm cho mối tương quan trở nên dễ dàng (điều này là ngây thơ và được thiết kế kém, nhưng nó sẽ hoạt động theo nghĩa "bảng tính").
Điều gì sẽ xảy ra nếu bạn muốn có một bảng người dùng và chỉ ra rằng những người có số âm được kiểm soát bởi hệ thống (SO thực hiện điều này, cho người dùng nguồn cấp dữ liệu trò chuyện).
Tôi có thể tiếp tục, nhưng thực sự lý do duy nhất tại sao con số âm là quan trọng là nếu bạn hoặc tôi gán tầm quan trọng cho nó. Bên cạnh đó, không có lý do tuyệt vời nào cho giá trị của một khóa có bất kỳ ảnh hưởng nào đến chính khóa đó.
Nếu chúng ta đang nói về các cột nhận dạng hoặc số tự động, thì giá trị đó sẽ không có ý nghĩa. (đôi khi, theo như người dùng trò chuyện của SO được chú ý bởi drachenstern, điều mà tôi đã làm trước đây)
Tuy nhiên, nhìn chung bạn sẽ mất một nửa phạm vi của mình nếu bạn đang sử dụng các số nguyên đã ký.
Xem: Phải làm gì khi một trường trong bảng tiếp cận với số nguyên 32 bit được ký hoặc không dấu tối đa?
Một ví dụ khác: Trong các kịch bản sao chép nhỏ, sử dụng các giá trị âm cho một trang web và tích cực cho một trang web khác cung cấp một số kiến thức ngầm về nguồn của bất kỳ hàng nào.
NOT FOR REPLICATION
mà bạn biết không?
Không phải tất cả các hệ thống cơ sở dữ liệu thậm chí còn hỗ trợ các kiểu số nguyên không dấu, MSSQL là một trong những kiểu không có. Trong các trường hợp này, các giá trị âm có thể có trong các trường khóa số nguyên chỉ vì chúng có thể có trong loại (bạn có thể sử dụng các quy tắc hoặc trình kích hoạt để chặn chúng, như trong ví dụ này , nhưng có lẽ không cần thêm chi phí cho việc thực thi các quy tắc đó vào mỗi giao / cập nhật).
Đối với cơ sở dữ liệu có liên quan, giá trị thực của khóa chính không quan trọng miễn là nó là duy nhất trong bảng. Đối với nó -42 và 42 chỉ là hai số khác nhau theo cùng một cách 42 và 69 - nghĩa là sẽ chỉ được truyền vào tính tiêu cực hoặc không có giá trị bởi mã của bạn.
Không hỗ trợ các loại số nguyên không dấu có lẽ là một quyết định thiết kế dựa trên việc giảm độ phức tạp - tức là không muốn hai loại số nguyên 32 bit khác nhau lo lắng về việc kiểm tra phạm vi khi gán giá trị giữa chúng. Nó không giới hạn số lượng chỉ mục có thể có trong trường tăng tự động bắt đầu từ 0 hoặc 1 đến một nửa những gì có thể có trong loại không dấu (~ 2e9 thay vì ~ 4e9) nhưng đây hiếm khi là một vấn đề quan trọng (nếu bạn có thể cần Dù sao, một số giá trị chính có độ lớn mà bạn có thể đã sử dụng cho loại 64 bit, đặc biệt là nếu sử dụng kiến trúc 64 bit trong đó các giá trị đó được xử lý không kém hiệu quả sau đó là 32 bit) mặc dù nếu bạn có thể muốn phạm vi đầy đủ và cần để bám vào 32-bit vì lý do không gian, bạn có thể bắt đầu gia tăng ở -2,147,483,647.