2014-07-21 31 views
7

Piszę aplikację internetową MVC5 i mam pytanie dotyczące pola id dla modelu.Należy użyć int lub long dla klucza podstawowego w modelu struktury encji

Czy powinienem użyć znaku int lub long dla identyfikatora w modelu? Mówię o polu, które jest używane dla klucza podstawowego? Czy int jest wystarczający, jeśli baza danych zawiera 100 000 rekordów? Czy int in C# różni się od int w bazie danych SQL?

Z góry dziękuję

+0

Należy pamiętać, że jeśli podstawową właściwością klucza pierwszej klasy kodu jest typ "długi", może być konieczne dodanie "[Klucz]" DataAnnotation do właściwości –

Odpowiedz

2

Obie są w porządku. To zależy od tego, ile rekordów będzie w tabeli. Int pozwala tylko 2 * 10^9 rekordów na tabelę.

Jeśli jesteś pewien, że 2 * 10^9 jest wystarczające, użyj int jako klucza.

Ale: Jeśli istnieje niewielka szansa, że ​​liczba rekordów będzie większa niż 2 * 10^9, należy użyć dłuższej. Jeśli nie masz pojęcia, ile rekordów będziesz mieć, używaj długo.

+0

Rozmiar nie jest 2 * 10^9, to jest 2^31 –

+2

@Erik Funkenbusch: 2^10 = 1024 To około 10^3. 2^31 = 2 * 2^9. Dlatego jest to około 2 * (10^3)^3 = 2 * 10^9 –

5

Zarówno C# i SQL mają taką samą definicję dla int, który jest integralną typ danych, który idzie z -2^31 do 2^31 - 1 (2,147,483,647 jeśli wolisz).

Jak widać, twoje 100,000s zapisów zmieściłoby się ponad 20.000 razy w int, więc tak, będzie w porządku w swojej obecnej sytuacji.

A long będzie jednak tłumaczyć na bigint w sql (nie ma "długo" per se), a wartości maksymalne na 2^63 - 1.

24

Z typem INT, począwszy od 1, otrzymujesz ponad 2 miliardy możliwych wierszy - to powinno być więcej niż wystarczające dla zdecydowanej większości przypadków. Z numerem BIGINT otrzymujesz w przybliżeniu 922 kwadrylion (922 z 15 zerami - 922'000 miliardów) - wystarczy dla ciebie?

Jeśli używasz INT IDENTITY zaczynając od 1, a po włożeniu jeden wiersz co drugi, przez całą dobę, trzeba 66,5 roku zanim trafisz 2000000000 graniczną ....

jeśli używać BIGINT IDENTITY (BIGINT w T-SQL jest zdefiniowany jako long lub Int64 w językach .NET), począwszy od 1, a po włożeniu tysiąc wierszy co drugi, trzeba zadziwiające 292 mln lat przed hit 922 quadrillion limit ....

Przeczytaj więcej na ten temat (ze wszystkimi dostępnymi opcjami) w numerze MSDN Books Online.