Sollte ich einen int oder einen long für den Primärschlüssel in einem Entity-Framework-Modell verwenden

7

Ich schreibe eine MVC5 Internet-Anwendung und ich habe eine Frage über das ID-Feld für ein Modell.

Soll ich ein int oder ein long für die ID in einem Modell verwenden? Ich spreche über das Feld, das für den Primärschlüssel verwendet wird? Ist ein int genug, wenn die Datenbank 100.000 Datensätze enthält? Ist ein int in c # anders als ein int in einer SQL-Datenbank?

Vielen Dank im Voraus

    
user3736648 21.07.2014, 03:46
quelle

3 Antworten

2

Beide sind in Ordnung. Es hängt davon ab, wie viele Datensätze in einer Tabelle enthalten sind. Int erlaubt nur 2 * 10 ^ 9 Datensätze pro Tabelle.

Wenn Sie sicher sind, dass 2 * 10 ^ 9 genug ist, verwenden Sie int als Schlüssel.

Aber: Wenn es eine winzige Chance gibt, dass die Anzahl der Datensätze mehr als 2 * 10 ^ 9 beträgt, verwenden Sie das Long. Wenn Sie keine Ahnung haben, wie viele Datensätze Sie haben, verwenden Sie lange.

    
Dmitriy Finozhenok 21.07.2014, 03:55
quelle
24

Mit einem Typ INT , beginnend bei 1, erhalten Sie über 2 Milliarden mögliche Zeilen - das sollte für die überwiegende Mehrheit der Fälle mehr als ausreichend sein. Mit BIGINT bekommst du ungefähr 922 Billiarden (922 mit 15 Nullen - 922'000 Milliarden) - genug für dich?

Wenn Sie INT IDENTITY bei 1 beginnen und eine Zeile pro Sekunde rund um die Uhr einfügen, benötigen Sie 66,5 Jahre , bevor Sie die 2 Milliarden erreichen begrenzen ....

Wenn Sie BIGINT IDENTITY verwenden ( BIGINT in T-SQL ist als long oder Int64 in .NET-Sprachen definiert), beginnend mit 1, und Sie fügen eintausend Zeilen pro Sekunde ein , du brauchst 292 Millionen Jahre , bevor du die Grenze von 922 Billiarden erreicht hast ....

Lesen Sie mehr darüber (mit allen verfügbaren Optionen) in der MSDN-Onlinedokumentation .

    
marc_s 21.07.2014 04:16
quelle
5

Sowohl C # als auch SQL haben die gleiche Definition für int . Dies ist ein ganzzahliger Datentyp, der von -2^31 zu 2^31 - 1 (2.147.483.647, wenn Sie bevorzugen) geht.

Wie Sie sehen können, könnten Ihre 100.000 Datensätze mehr als 20.000 mal in einem int Platz finden, also ja , Sie werden in Ihrem aktuellen Szenario in Ordnung sein.

A long würde sich jedoch in ein bigint in sql übersetzen (es gibt keine "long" per se), und der Wert wird bei 2^63 - 1 begrenzt.

    
Pierre-Luc Pineault 21.07.2014 04:09
quelle