Array von Ganzzahlwerten in SQL Server speichern

7

Ich möchte ein Array von Integer-Werten in einer SQL-Datenbanktabelle (SQLServer 2005) speichern, wenn möglich mit einer einzelnen Spalte.

Das Integer-Array hat eine Länge von 7560 Werten.

Ich verwende eine Objektdatasource, der Datentyp sollte mit den generierten Parametern eines Tableadapters kompatibel sein.

danke für die Hilfe:)

    
spoekes 27.10.2010, 12:11
quelle

4 Antworten

15

Sie haben mindestens zwei Möglichkeiten:

  • Speichern Sie es als kommagetrennte Liste von Werten.
  • Verwenden Sie eine separate Tabelle und speichern Sie einen Wert pro Zeile, wobei ein Fremdschlüssel auf Ihre Tabelle verweist.

Wenn Sie Ihre Datenbank normalisieren möchten, sollten Sie die zweite Option wählen.

    
Mark Byers 27.10.2010, 12:15
quelle
5

Tue es richtig: 1NF schreibt keine wiederholenden Werte vor. Jedes Element in Ihrem vorgeschlagenen 7560-Element-Array gehört in eine eigene Zeile.

Indem Sie jedes Element in eine eigene Zeile setzen, geben Sie dem RDBMS die Möglichkeit, Dinge zu tun, die es sonst nicht tun kann, z. B .: Statistiken für das Set berechnen, jedes Element auf Domain-Regeln überprüfen, Unterschiede zwischen zwei Sets berechnen, Zähl- / Auswahlsätze, die einige Merkmale teilen.

  

Ich werde mit Millionen von Zeilen enden (vielleicht mehr als 50 Millionen). Ich bin nicht sicher, ob die Datenbank das ohne Leistungsprobleme behandeln kann.

Das sind nicht besonders viele, und Sie werden nicht die ganze Zeit mit allen 50 Millionen zu tun haben müssen. Berechnen Sie selbst, wie viele Zugriffe benötigt werden, um einen Binärbaum zu durchsuchen, um einen Datensatz in einer Milliarde zu finden. Die Antwort mag Sie überraschen.

    
James K. Lowden 28.10.2010 03:39
quelle
0

Nur wenn Sie müssen! Sie können problemlos eine weitere Tabelle erstellen, die einen Fremdschlüssel zurück zu Ihrer Tabelle und eine int-Spalte enthält.

Wenn Sie darauf bestehen, es in SQL Server als Spalte zu speichern, müssen Sie den Spaltentyp IMAGE oder VARBINARY (MAX) verwenden, da Ihre Datenlänge 8 KB überschreitet. Dies speichert jedes int als 4-Byte-Binärwert.

Was ist Objektdatenquelle?

    
Aliostad 27.10.2010 12:15
quelle
0

Ich würde es im koma-separierten Wert speichern, wenn die Daten NICHT mit einer anderen Tabelle verknüpft sind (Beispiel, Werte, die Sie irgendwie verarbeiten wollen), wenn sie (Produkte in einer Rechnung zum Beispiel) sind, sollten Sie eine andere erstellen Tabelle mit einem Fremdschlüssel.

Greating

    
RedArcCoder 01.05.2015 18:10
quelle