2009-01-13 20 views
11

Tại sao ai đó sử dụng kiểu dữ liệu số (12, 0) cho cột ID số nguyên đơn giản? Nếu bạn có một lý do tại sao điều này là tốt hơn so với int hoặc bigint tôi muốn nghe nó.Có lý do nào về số thay vì int trong T-SQL không?

Chúng tôi không thực hiện bất kỳ phép tính nào trên cột này, nó chỉ đơn giản là một ID được sử dụng cho liên kết khóa ngoài.

Tôi đang biên soạn danh sách các lỗi lập trình và các vấn đề về hiệu suất về sản phẩm và tôi muốn chắc chắn rằng chúng không làm điều này vì một lý do logic nào đó. Nếu bạn theo liên kết này: http://msdn.microsoft.com/en-us/library/ms187746.aspx

... bạn có thể thấy rằng số (12, 0) sử dụng 9 byte dung lượng lưu trữ và giới hạn 12 chữ số, có tổng cộng 2 nghìn tỷ số nếu bạn bao gồm phủ định. TẠI SAO một người sẽ sử dụng điều này khi họ có thể sử dụng một bigint và nhận được 10 triệu lần số lượng nhiều hơn một byte lưu trữ ít hơn. Hơn nữa, vì điều này đang được sử dụng như một ID sản phẩm, 4 tỷ số của một int chuẩn sẽ là quá đủ.

Vì vậy, trước khi tôi lấy các ngọn đuốc và dĩa sân - hãy cho tôi biết những gì họ sẽ nói trong phòng thủ của họ?

Và không, tôi không thực hiện một thỏa thuận lớn nào cả, có hàng trăm vấn đề như thế này trong phần mềm, và tất cả đều gây ra vấn đề hiệu suất lớn và sử dụng quá nhiều không gian trong cơ sở dữ liệu. Và chúng tôi đã trả hơn một triệu đô cho cái crap này ... nên tôi rất coi trọng.

Trả lời

13

Có lẽ họ đã quen với việc làm việc với Oracle?

Tất cả các loại số bao gồm int được chuẩn hóa thành một biểu diễn đơn tiêu chuẩn trong số tất cả các nền tảng.

+3

Boom phát nổ :) Dường như phiên bản cũ của cơ sở dữ liệu này là Oracle. – Jasmine

1

Trong ví dụ của bạn, tôi không thể nghĩ ra bất kỳ lý do hợp lý nào khiến bạn không sử dụng INT. Tôi biết có lẽ lý do cho việc sử dụng khác của số, nhưng không phải trong trường hợp này.

-1

Theo: http://doc.ddart.net/mssql/sql70/da-db_1.htm

thập phân

Cố định chính xác và quy mô dữ liệu số từ -10^38 -1 qua 10^38 -1.

số

Đồng nghĩa với số thập phân.

int

Integer (số nguyên) dữ liệu từ -2^31 (-2.147.483.648) thông qua 2^31-1 (2,147,483,647).

Không thể biết nếu có lý do gì cho chúng sử dụng số thập phân, vì chúng tôi không có mã để xem xét.

+0

Tỷ lệ lẻ tham chiếu đến ints là "số nguyên" khi chúng được phép là số âm. – recursive

+0

Số âm là số nguyên - chúng không có phần phân số. Chúng không phải là "đếm số" bởi hầu hết các định nghĩa, nhưng chúng là toàn bộ. – Jasmine

+0

http://en.wikipedia.org/wiki/Whole_number – GEOCHET

6

Có nhiều lý do để sử dụng số - ví dụ - dữ liệu tài chính và các nội dung khác cần phải chính xác đến một số thập phân nhất định. Tuy nhiên đối với ví dụ bạn trích dẫn ở trên, một int đơn giản sẽ làm.

Có lẽ các lập trình viên cẩu thả làm việc, những người không biết cách thiết kế cơ sở dữ liệu?

0

Trong một số cơ sở dữ liệu, sử dụng dấu thập phân (10,0) tạo trường được đóng gói chiếm ít không gian hơn. Tôi biết có rất nhiều bảng xung quanh công việc của tôi sử dụng nó. Họ có thể đã có cùng một loại suy nghĩ ở đây, nhưng bạn đã đi đến các tài liệu và chứng minh rằng là không chính xác.Nhiều hơn khả năng, tôi sẽ nói rằng nó sẽ đun sôi xuống đến một trường hợp "đó là cách chúng tôi đã luôn luôn thực hiện nó, bởi vì ai đó một lần nói nó là tốt hơn".

1

Trước khi bạn thực hiện quá nghiêm túc, yêu cầu lưu trữ dữ liệu cho mỗi hàng hoặc tập hợp các hàng cho mặt hàng này là gì?

Quan sát của bạn là chính xác, nhưng có thể bạn không muốn trình bày nó quá mạnh nếu bạn giảm dung lượng từ 5000 byte xuống 4090 byte chẳng hạn.

Bạn không muốn thổi độ tin cậy của bạn bằng cách đưa điều này lên và cho họ biết rằng mọi khoản tiết kiệm có thể đo lường đều không đáng kể. ("Tất nhiên, nhiều nhân viên ít kinh nghiệm của chúng tôi cũng mắc phải sai lầm tương tự.")

Bạn có thể điền vào các khoảng trống này không?

with the data type change, we use 
    ____ bytes of disk space instead of ____ 
    ____ ms per query instead of ____ 
    ____ network bandwidth instead of ____ 
    ____ network latency instead of ____ 

Đó là loại điều sẽ mang đến cho bạn sự tín nhiệm.

+1

Vì mã ID này được sao chép trên nhiều bảng, được sử dụng trong các truy vấn của API và được sử dụng để nối, nó không chỉ đơn giản là tiết kiệm một byte cho mỗi hàng - đó là vấn đề lưu dữ liệu trong các chỉ mục, tối ưu hóa các kết nối, giảm chi phí mạng, v.v ... – Jasmine

+1

Chính xác. Định lượng đó và bạn sẽ có một trường hợp mạnh mẽ cho quyết định của bạn. những phản đối tôi tạo ra chỉ là những ví dụ về những phản đối mà bạn có thể nghe thấy, và nên sẵn sàng trả lời. –

0

Có thể họ dành rất nhiều thời gian trong MS Access và xem 'Số' thường xuyên và chỉ tìm ra, một số của nó, tại sao không sử dụng số?

Dựa trên những phát hiện của bạn, có vẻ như họ không phải là chuyên gia tối ưu hóa và chỉ không biết. Tôi tự hỏi nếu họ sử dụng các công cụ tạo lược đồ và chỉ dựa vào chúng quá nhiều.

Tôi tự hỏi làm thế nào hiệu quả một chỉ số trên một giá trị thập phân (ngay cả khi quy mô 0 được thiết lập) cho một khóa chính so sánh với một giá trị nguyên nguyên. Giống như Mark H. nói, khác với yếu tố chỉ mục, kịch bản cụ thể này có thể không phát triển cơ sở dữ liệu R THNG nhiều, nhưng nếu bạn đang tìm kiếm đạn, tôi nghĩ bạn đã tìm thấy một số để làm cho họ bớt.

+0

Tôi có rất nhiều sai lầm để chỉ ra - loại mà tôi chắc chắn. Điều này chỉ đến như một bất ngờ đó là một trong những "phải có một lý do cho" loại điều này. I E. nó kỳ lạ đến nỗi nó phải có mục đích. – Jasmine

3

Ứng dụng này bạn đang tìm kiếm bao nhiêu tuổi?

Trước SQL Server 2000 không có vấn đề gì. Có lẽ nó chỉ là một cái gì đó đã làm cho nó từ phát hành để phát hành trong nhiều năm mà không bị thay đổi hoặc lược đồ cơ sở dữ liệu đã được sao chép từ một ứng dụng đã cũ này?!?

+0

Nó là mới kể từ SQL 2000. Tuy nhiên, có thể cơ sở dữ liệu dựa trên một số thiết kế cũ hơn - nhưng điều đó có nghĩa là họ đã bán cho chúng tôi thứ gì đó không phải là những gì họ nói. – Jasmine

0

Trong trích dẫn của bạn, số thập phân cho thấy độ chính xác từ 1-9 khi sử dụng 5 byte. Cột của bạn dường như có 12,0 - sử dụng 4 byte dung lượng lưu trữ - giống như số nguyên.

Hơn nữa, INT, datatype có thể đi đến một sức mạnh của 31: -2^31 (-2.147.483.648) để 2^31-1 (2.147.483.647)

Trong khi thập phân là lớn hơn nhiều đến 38: - 10^38 +1 đến 10^38 - 1

Vì vậy, người tạo phần mềm đã thực sự cung cấp nhiều hơn trong khi sử dụng cùng một lượng không gian lưu trữ.

Bây giờ, với những kiến ​​thức cơ bản, người tạo phần mềm thực sự tự giới hạn chỉ 12 số hoặc 123,456,789,012 (chỉ là ví dụ cho người giữ chỗ không phải là số tối đa). Nếu họ sử dụng INT họ không thể quy mô cột này - nó sẽ đi lên đến 31 chữ số đầy đủ. Có lẽ có lý do kinh doanh để giới hạn cột này và các cột được liên kết thành 12 chữ số.

Một INT là INT, trong khi DECIMAL là vô hướng.

Hy vọng điều này sẽ hữu ích.

PS: Đối số số nguyên là: A) Tổng số là 0..infinity B) Đếm (Natural) con số này 1..infinity C) Số nguyên được vô cực (âm) .. vô cực (tích cực) D) Tôi sẽ không trích dẫn WikiANYTHING cho bất cứ điều gì. Thôi nào, dùng một nguồn thật! Cũng có thể là http://MyPersonalMathCite.com

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