Tại sao các kiểu số nguyên không dấu có sẵn trong các nền tảng cơ sở dữ liệu hàng đầu?


15

Cơ sở dữ liệu thường rất tùy biến với các loại dữ liệu khác nhau và độ dài tùy chỉnh.

Điều này làm tôi ngạc nhiên, khi tôi cố gắng tìm kiếm cú pháp để sử dụng unsigned intcác loại mà chúng không có sẵn từ cả PostgreQuery và MS SQL Server. MySQL và Oracle dường như.

Điều này có vẻ như là một thiếu sót rõ ràng về phía họ - tùy chọn nước hoa tốt nhất tiếp theo là một dài / bigint, (số nguyên 8 byte), nhưng có thể hoàn toàn không cần thiết! Có ai biết lý do tại sao họ chọn không bao gồm hỗ trợ int không dấu?


2
Portable == tiêu chuẩn bắt buộc. Tiêu chuẩn C không chỉ định chiều rộng của số nguyên hoặc độ dài thông thường, chỉ là phạm vi tối thiểu của các số có thể biểu thị. Nền tảng với int 16bit là phổ biến tại một số điểm. 64 bit là có thể. 36 cũng vậy (dù đã tuyệt chủng). 24 xảy ra (DSP). Mức độ thường xuyên mà bạn có dữ liệu phù hợp trong 32 bit chứ không phải 31 bạn đã đo được rằng việc sử dụng các loại số thông thường mang lại cho bạn hiệu suất cao?
Mat

2
Cả SQL-Server và Postgres đều NUMERIC(10)cho phép số nguyên lên tới 9.999.999.999(và với một ràng buộc bạn có thể không cho phép các giá trị âm.)
ypercubeᵀᴹ

4
Vì một lý do: chúng không được chỉ định trong tiêu chuẩn SQL. Đối với một cuộc thảo luận dài hơn về Postgres hãy nhìn vào cuộc thảo luận này: postgresql.1045698.n5.nabble.com/... và điều này: postgresql.1045698.n5.nabble.com/...
a_horse_with_no_name


1
@Mat Không phải là hiệu suất mà tôi lo lắng, đó là 4 byte thêm x 153 triệu = ~ 612 MB bị lãng phí, các giá trị vượt quá 3 tỷ chứ không phải 4 tỷ. Một số (10) có số lần truy cập hiệu suất ngoài việc yêu cầu 9 byte dung lượng lưu trữ: msdn.microsoft.com/en-us/l
Library / ms187746.aspx

Câu trả lời:


14

Jim Hogg của Microsoft đã trả lời vấn đề này như sau:

Có những ưu và nhược điểm. Về mặt chuyên nghiệp, có vẻ như là một cách tốt để tránh một số lỗi - phải kiểm tra int (đã ký) có giá trị> 0. Và tôi cũng sẽ mạo hiểm rằng nhiều cách sử dụng int trong thực tế có liên quan đến số đếm không bao giờ bị âm . Về câu hỏi nhân đôi số lượng hàng tối đa? - đúng, nhưng tôi sẽ nói điều này ít hấp dẫn hơn.

Về mặt khuyết điểm ... việc trộn các loại đã ký / không dấu trong C hoặc C ++ có vẻ như nó đủ đơn giản. Nó không thể. Nó mở ra một bạt nhỏ của những sai lầm khó tìm - hầu hết là do các quy tắc phức tạp cho các chương trình khuyến mãi / mở rộng ngầm. SQL, than ôi, đã có một bộ quy tắc đúc phức tạp hơn nữa. Thêm ints không dấu, tôi sợ, sẽ làm chúng ta bối rối hơn nữa.

Tôi sẽ giữ gợi ý này trên sách. Nhưng, trong số tất cả các tính năng chúng tôi có thể / nên thêm, tính năng này, với sự tôn trọng, không nằm gần đầu danh sách đó.

Nguồn: Microsoft Connect

Tôi sẽ thêm đáng kể vào danh sách chuyên nghiệp và nhắc lại rằng công cụ SQL của họ đã thực hiện FAR những điều phức tạp hơn thế này và vì vậy nhóm của họ có thể xử lý sự phức tạp được thêm vào. Mặc dù tôi không đồng ý với tổng kết của họ, đây là lý do tại sao SQL Server không hỗ trợ các loại không dấu .

Liên kết Connect ban đầu được Martin Smith đăng trong phần bình luận câu hỏi.


3
"Làm chúng tôi bối rối hơn nữa" - có lẽ đề cập đến tất cả mọi người sử dụng SQL Server, không chỉ nhóm phát triển của riêng họ.
Oskar Berggren
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.