2014-07-21 15 views
7

Sto scrivendo un'applicazione Internet MVC5 e ho una domanda sul campo id per un modello.Devo usare un int o un long per la chiave primaria in un modello di entità modello

Devo usare un int o un long per l'id in un modello? Sto parlando del campo che viene utilizzato per la chiave primaria? È abbastanza int se il database ha 100.000 di record? Un int in C# è diverso da un int in un database SQL?

Grazie in anticipo

+0

Si noti che se la proprietà della chiave primaria della propria classe Code First è di tipo 'long', potrebbe essere necessario aggiungere la proprietà' [Chiave] 'DataAnnotation alla proprietà –

risposta

2

Entrambi sono OK. Dipende dal numero di record presenti in una tabella. Int consente solo 2 * 10^9 record per tabella.

Se si è certi, che 2 * 10^9 è sufficiente, utilizzare int come chiave.

Ma: Se c'è una piccola possibilità che il conteggio dei record sia superiore a 2 * 10^9, utilizzare il lungo. Se non hai idea di quanti record avrai, usa molto.

+0

La dimensione non è 2 * 10^9, è 2^31 –

+2

@Erik Funkenbusch: 2^10 = 1024 È circa 10^3. 2^31 = 2 * 2^9. Quindi è circa 2 * (10^3)^3 = 2 * 10^9 –

5

Sia C# e SQL hanno la stessa definizione di una int, che è un tipo di dati integrato che va dalla -2^31 a 2^31 - 1 (2,147,483,647, se si preferisce).

Come si può vedere, i vostri 100,000s di dischi potrebbero adattarsi più di 20.000 volte in un int, così si, sarete bene nel vostro scenario attuale.

Un long però si tradurrebbe in un bigint in SQL (non c'è "lungo" di per sé), e le calotte di valore a 2^63 - 1.

24

Con un tipo INT, a partire da 1, si ottiene oltre 2 miliardi righe possibili - che dovrebbe essere più che sufficiente per la stragrande maggioranza dei casi. Con BIGINT, ottieni approssimativamente 922 quadrilioni (922 con 15 zeri - 922'000 miliardi) - abbastanza per te ??

Se si utilizza un INT IDENTITY a partire da 1, e si inserisce una riga ogni secondo, tutto il giorno, è necessario 66,5 anni prima di colpire il limite di 2 miliardi ....

Se utilizzare un BIGINT IDENTITY (BIGINT in T-SQL è definita come long o Int64 in linguaggi .NET) a partire da 1, e si inserisce mille righe ogni secondo, è necessario un capogiro 292 milioni anni prima di colpire il Limite di 922 quadrilioni ...

Maggiori informazioni (con tutte le opzioni disponibili) nello MSDN Books Online.