2012-07-25 61 views
1

簡單的問題。我有幾個不同的模型存儲在SQL數據庫中。一個圖像表記錄字節數據,大型多字段用戶數據表等。所有這些模型都需要主鍵。大多數初學者教程顯示id用於int的用法。這是標準和專業嗎?我覺得很奇怪,開始使用int,因爲長度可變,並從1開始:SASP.NET MVC模型id類型---最佳實踐

對不起,業餘的問題,但我無法找到通過谷歌這個問題的任何適當的材料。

+0

是什麼讓你說INT是「可變長度從1開始」? 鏈接到某種相關的問題:http://stackoverflow.com/questions/255569/sql-data-type-for-primary-key-sql-server – darkey 2012-07-25 07:37:07

+0

SQL Server的'INT IDENTITY'列默認爲'1'種子和' 1'增量。但是你可以[改變定義](http://msdn.microsoft.com/en-us/library/aa933196(v = sql.80)。aspx)通過聲明你的列'Id INT IDENTITY(seed,inc)' – Kivin 2012-07-25 08:00:15

+0

kivin,謝謝我記得種子SQL之前,但不知道如何從模型中做到這一點。 darkey我的意思是可變長度是數字的位數。我喜歡看到像0001,0234等Id,或者像guid猜測一樣。 – 2012-07-25 14:42:22

回答

1

關於使用INT或任何其他integral data type作爲主鍵或標識列沒有任何隱含的不專業。這取決於您的業務需求。在保持編程as simple as possible的利益,該INT數據類型是許多企業需要一個不錯的選擇:

  • 它能夠代表約2.1十億獨特的記錄。
  • 它在現代硬件中消耗最少的硬盤空間。
  • 對於SELECT s和UPDATE s很快。
  • 如果記錄數量有可能超過限制,那麼重構更大的積分就相當容易。 BIGINT可以處理比您可以放入數據庫更多的記錄。認真。

一個原因你可能不希望使用不可分割的主鍵:

  • 您可以使用一個Guid(或SQL服務器UNIQUEIDENTIFIER方面)的全球唯一性。換句話說,如果您將數據遷移到其他位置,則主鍵仍應是唯一的。
0

是的,int是行業標準。

甚至超越數據庫,我很少看到C#代碼uint或任何用於表示整數的其他變種。偶爾在陣列中使用byte。當int可能不足以涵蓋所有可能性時使用long

總是使用int的一個優點是您可以傳遞id變量而無需擔心在不同的整數類型之間進行轉換。

0

這是100%好,並廣泛使用。一些主鍵使用long,因爲它們的最大值較大。雖然在大多數情況下不是必需的。

0

Guid類型有時也用作ID。它具有一些好處,如固定長度,全球唯一性和不可預測性。還有一些問題,如搜索性能較差,難以記憶。