Speichern Sie ein Zahlenfeld im Datenbankfeld
Kontext: SQL Server 2008, C#
Habe ich ein array von ganzen zahlen (0-10 Elemente). Daten nicht oft ändern, aber ist oft abgerufen.
Konnte ich erstellen einer separaten Tabelle zu speichern, die zahlen, aber aus irgendeinem Grund fühlt es sich wie, dass wäre nicht optimal.
Frage #1: Lagere ich mein array in eine separate Tabelle? Bitte geben Sie Gründe für die eine oder andere Weise.
Frage #2: (unabhängig davon, was die Antwort auf F#1 ist), was ist der "beste" Weg, um zu speichern int[] in Datenbank Feld? XML? JSON? CSV?
EDIT:
Etwas hintergrund: zahlen, die gespeichert werden, sind nur einige Koeffizienten, die sich nicht beteiligen, in jeder Beziehung, und sind immer als ein array (d.h. niemals ein Wert abgerufen wird oder isoliert verwendet werden).
InformationsquelleAutor der Frage THX-1138 | 2011-03-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den "besten" Weg zum speichern von Daten in einer Datenbank ist der Weg, der am ehesten an die Vorgänge, die durchgeführt werden sollen, und die eine, die macht die Pflege am einfachsten. Es ist diese spätere Anforderung, die sollte Sie führen, um eine normierte Lösung, was bedeutet, dass die Speicherung der ganzen zahlen in einer Tabelle mit einer Beziehung. Darüber hinaus einfacher zu aktualisieren, ist es einfacher für den nächsten Entwickler, der kommt, nachdem Sie zu verstehen, was und wie die Informationen gespeichert sind.
InformationsquelleAutor der Antwort Thomas
Separaten Tabelle, die normalisiert
Nicht als XML oder json , aber getrennte zahlen in separaten Zeilen
Egal, was Sie denken, es ist der beste Weg. Sie können mir später danken,
InformationsquelleAutor der Antwort gbn
Speichern Sie es als ein JSON-array, aber wissen, dass alle Zugriffe werden nun für die gesamte array - keine individuelle lese - /Schreibvorgänge auf spezifische Koeffizienten.
In unserem Fall, wir speichern Sie als json-array. Wie Sie Ihre Falle, es gibt keine Beziehung zwischen den einzelnen array-zahlen - array nur dann Sinn machen, als eine Einheit und als eine Einheit es hat eine Beziehung mit anderen Spalten in der Tabelle. Durch die Art und Weise, alles andere IST normalisiert. Ich Vergleiche es so: Wenn Sie wollten, um zu speichern eine 10-byte-chunk, würden Sie es speichern, verpackt in einer einzigen Spalte vom Datentyp VARBINARY(10). Würden Sie nicht die Splitter in 10 bytes, speichern jeweils in einer Spalte VARBINARY(1) und dann Nähen Sie zusammen mit einem Fremdschlüssel. Ich meine, Sie könnte - aber es würde keinen Sinn ergeben.
SIE als Entwickler müssen verstehen, wie 'monolithische' , array von int ' s wirklich ist.
InformationsquelleAutor der Antwort DeepSpace101
Einer separaten Tabelle wäre die "normalisierte" Weg, dies zu tun. Und es ist auf lange Sicht besser, wahrscheinlich, weil Sie nicht haben, zu analysieren, wird der Wert der Spalte wird zum extrahieren der einzelnen integer.
Wenn Sie möchten, könnten Sie eine XML-Spalte um die Daten zu speichern, zu.
Spalten mit geringer Dichte kann eine weitere option für Sie, zu.
Wenn Sie möchten, halten Sie es wirklich einfach, könnte man einfach die Werte einzugrenzen:
10;2;44;1
InformationsquelleAutor der Antwort Josh M.
Denke ich, da Sie sprechen von sql server, die anzeigt, dass Ihre app kann eine datengetriebene Anwendung. Wenn das der Fall ist würde ich halten auf jeden Fall halten Sie das array in der Datenbank eine separate Tabelle mit einem Datensatz für jeden Wert. Es wird normalisiert und optimiert für retreival. Auch wenn Sie nur ein paar Werte in das array, das Sie vielleicht brauchen, um zu kombinieren, dass die Daten mit anderen retreived Daten, die notwendig sein kann, "sich" mit der array-Werte. In dem Fall sql ist optimiert für die mit Indizes, foreign keys, etc. (normalisiert).
Dass gesagt wird, können Sie immer die Festplatte code 10-Werte in Ihrem code und speichern Sie die round-trip-für die DB, wenn Sie nicht brauchen, um die Werte zu ändern. Es hängt davon ab, wie Ihre Anwendung funktioniert und was dieses array wird verwendet.
InformationsquelleAutor der Antwort AGoodDisplayName
Ich Stimme mit all den anderen über die besten eine separate normalisierte Tabelle. Aber wenn Sie darauf bestehen, dass es alle in der gleichen Tabelle, nicht das array in nur einer Spalte. In erstellen Sie stattdessen die 10 Spalten und speichern Sie jedes array-Wert in einer anderen Spalte. Es wird speichern Sie die Analyse-und update-Probleme.
InformationsquelleAutor der Antwort Clodoaldo Neto