2008-11-06 37 views
15

Tôi có một bảng tiết kiệm một số giới hạn tài khoản như người dùng. Đối với hầu hết các hàng, giá trị này sẽ là một số nguyên. Tuy nhiên, tôi cũng sẽ cần hỗ trợ lưu trữ không giới hạn (vô hạn) làm giá trị. Điều này có vẻ ngớ ngẩn nhưng có một giá trị số nguyên phổ biến đại diện không giới hạn (vô hạn)? Tôi muốn giữ các giá trị như số nguyên.Trình bày không giới hạn trong cơ sở dữ liệu với kiểu dữ liệu số

+0

sẽ là số nguyên. Trong phạm vi nào? Tích cực? –

+0

nếu bạn thực sự cần phải kéo dài khái niệm này (mà bạn có thể không) bạn có thể tạo một ENUM để ý nghĩa của bất kỳ giá trị đặc biệt nếu rõ ràng cho bất cứ ai đi qua nó – ldgorman

Trả lời

24
  • sử dụng không
  • sử dụng -1
  • sử dụng rỗng

tôi thích null, trừ lĩnh vực này là không nullable, sau đó tôi thích không, trừ khi không một giới hạn hợp lệ, sau đó tôi thích -1, trừ khi -1 là giá trị hợp lệ, trong trường hợp này bạn cần một trường khác (ví dụ: một trường bit) để biểu thị 'không giới hạn'.

+1

Hm. Zero và -1 là thành viên của tập hợp các số nguyên. Và null (không có dữ liệu) có thể là một giá trị hợp lệ rồi. Xác định lại các giá trị nổi tiếng để có ý nghĩa đặc biệt mới là khó hiểu và thường không khôn ngoan. –

+1

không, nó có thể có ý nghĩa. rõ ràng phạm vi bình thường mà anh ta nói đến không phải là tập hợp các số nguyên, nó sẽ là tập hợp các số nguyên không âm. vì bạn rõ ràng không thể đặt giới hạn -1 người dùng, thì rõ ràng là nó có giá trị đặc biệt. phương pháp này cũng được sử dụng trong nhiều ngôn ngữ lập trình. – nickf

+0

@ [fixme.myopenid.com]: đã đồng ý, nhưng tôi đoán trong trường hợp này là toàn bộ các giá trị số nguyên không được sử dụng, vì chúng ta đang nói về giới hạn tài khoản. Trong trường hợp đó, bạn sẽ muốn có một giá trị sentinel (http://en.wikipedia.org/wiki/Sentinel_value), đó là tốt. Miễn là nó được ghi lại! –

4

Vâng, nếu bạn đang truy cập cơ sở dữ liệu của bạn từ .NET, các kiểu số nguyên có thành viên cố định là MaxValue và MinValue. Đôi khi chúng ta sử dụng chúng để thể hiện vô cùng. Tất nhiên, những giá trị này không có ý nghĩa đặc biệt trong RDBMS của bạn ...

+0

"Định nghĩa lại giếng các giá trị đã biết để có ý nghĩa đặc biệt mới là khó hiểu và thường không khôn ngoan "Bạn có nghĩa là, như xác định lại MinValue và MaxValue? LOL! ;-) –

+2

Tôi nghĩ điều đó có nghĩa là MaxValue thực sự là giới hạn thực tế, vậy tại sao không sử dụng nó? – tvanfosson

3

Là một số nguyên, vô cùng sẽ khó. Một vài tùy chọn:

1) -1, với logic chương trình tương ứng coi đó là vô hạn (và giả định rằng giá trị âm không thực sự hợp lệ).

2) Cột phụ giữ cờ cho biết hữu hạn/vô hạn.

5

Bạn thực sự không thể có số lượng tài khoản vô hạn vì không có số lượng người vô hạn. Trong thực tế, bạn thực sự bị giới hạn số lượng tài khoản mà bạn có thể có (nếu bạn chọn lưu trữ giá trị trong một cột cơ sở dữ liệu) vì bất kỳ cơ chế lưu trữ hữu hạn nào cho những thứ có thể đếm được đều có giới hạn. Tôi muốn đề xuất, với @Tor Haugen, cách tốt nhất để làm điều này là sử dụng giới hạn áp đặt bởi hệ thống (bất kể số nguyên tối đa hoặc ngôn ngữ của bạn cung cấp). Bằng cách đó bạn sẽ không phải lo lắng về bất kỳ trường hợp đặc biệt nào cho các so sánh của bạn. Ngoài ra, tôi muốn sử dụng một ràng buộc cơ sở dữ liệu để ngăn chặn lưu trữ các giá trị âm trong trường. Một số nguyên 64 bit chắc chắn sẽ giữ một số đủ lớn để thực tế không giới hạn cho ứng dụng của bạn.

0

Tôi không nghĩ có giải pháp hoàn hảo. Vì vậy, ở đây đi đề nghị của tôi:

Tạo các hằng số đại diện cho các giá trị tối đa có thể được lưu trữ trong cơ sở dữ liệu của bạn và coi chúng là "Vô cùng".

http://dev.mysql.com/doc/refman/5.0/en/numeric-types.html#integer-types

Giới hạn
+1

Tôi đã suy nghĩ để làm tương tự, nhưng đó là năm 2016, chúng ta không có bất cứ điều gì tốt hơn chưa: D –

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