Wie viele Spalten sind zu viele Spalten?
Habe ich bemerkt, dass viele Leute hier zitieren-Tabellen mit 20+ (ich habe gesehen, so viel wie 55) Spalten in einer Tabelle. Nun, ich behaupte nicht, ein Datenbank-design-Experte, aber ich habe immer gehört, dass dies ist eine schreckliche Praxis. Wenn ich sehe das ich in der Regel schlagen Aufspaltung in zwei Tabellen mit einer eins-zu-eins-Beziehung: die eine enthält die meisten Häufig verwendeten Daten, den anderen für die am wenigsten Häufig verwendeten Daten. Obwohl zur gleichen Zeit, gibt es das mögliche Problem der Leistung (weniger Verknüpfungen und so). Also meine Frage ist:
Wenn es um wirklich GROßE scale-Datenbanken, ist es tatsächlich ein Vorteil, dass eine große Anzahl der Spalten, die, trotz der Tatsache, dass dies führt in der Regel zu viele NULL-Werte?
Das ist mehr ein performance-hit: vielen Spalten mit vielen Nullen, oder weniger Spalten mit vielen JOINs?
InformationsquelleAutor der Frage Stephen Collins | 2010-07-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Entwurf der Tabelle hängt von der Entität, die es braucht, um zu speichern. Wenn alle Daten zusammen gehört, dann 50 Spalten (oder sogar 100) könnte es sein, das richtige zu tun.
So lange, wie der Tisch ist normalisiertes gibt keine Faustregel in Bezug auf Größe, abgesehen von Datenbank-Funktionen und die Notwendigkeit zur Optimierung.
InformationsquelleAutor der Antwort Oded
Wenn Sie fühlen, dass es keinen Sinn mehr macht, oder ist rechts eine weitere Spalte hinzufügen.
In der Regel abhängig von der Anwendung.
InformationsquelleAutor der Antwort graham.reeds
Ich Stimme mit Oded. Ich habe gesehen, Tabellen mit 500 Spalten in Ihnen, und alle Spalten, die in Ihnen waren an der richtigen Stelle. Denken Sie nur an die Anzahl der Fakten, die man sich wünschen könnte zu speichern, über eine alltägliche Objekt, und Sie werden bald sehen, warum.
Wenn es beweist, unbequem, wählen Sie alle Spalten, oder um anzugeben, welche Spalten auswählen, wenn Sie interessiert sind, nur ein kleiner Teil von Ihnen, können Sie feststellen, es lohnt sich, zu definieren, eine Ansicht.
InformationsquelleAutor der Antwort Brian Hooper
Meiner Erfahrung nach ist es besser, weniger verbindet als diese neigen dazu, allzu oft insbesondere in der großen Datenbank. So lange, wie Sie Ihre Datenbank-Tabellen sind entworfen, um zu speichern juristischen Person (Schüler, Lehrer und so weiter) das sollte ok sein. So, dies wird dargestellt als ein Objekt in der Sie den code später. Also, wenn Sie split, die Entität zu mehreren Tabellen, die Sie verwenden, mehrere Verknüpfungen, um zu füllen Sie Ihr Objekt später. Auch wenn Sie mit ORM zu generieren data-access-layer (wie Linq in .Net) generiert separate Klassen für jede Tabelle (natürlich mit einer Beziehung zwischen Ihnen, aber immer noch) und dies wird schwieriger sein, zu verwenden.
Andere Sache ist, dass Sie angeben können, welche Spalten zurückgegeben, die in Ihrer Abfrage, und dies reduziert die Daten, die übergeben wird, für Ihre Anwendung, aber wenn Sie benötigen, sogar eine einzelne Spalte aus einer anderen Tabelle, die Sie zu tun haben, die mitmachen. Und in den meisten Fällen haben Sie so viele Spalten, dann ist die Wahrscheinlichkeit einer großen Menge von gespeicherten Daten in die db hoch. Also das beitreten würde, Schaden mehr, als die Null-Werte.
Jedes Projekt, das ich gearbeitet habe ist anders, deshalb sollte man die balance finden für jede Geschichte.
InformationsquelleAutor der Antwort Thea
odbc hat ein Zeichen limit von 8000 .... damit ist eine physikalische Grenze, jenseits der die Dinge sehr frustrierend sein.
Arbeitete ich an einem Tisch, hatte 138 Spalten .. es war schrecklich geschrieben und hätte sich normalisiert. Obwohl dieser Datenbank scheinen für die Erstellung von jemand Fragen, warum gibt es Konventionen, die in Datenbank-design und der Entscheidung, um zu testen, Sie alle auf einmal.
Sehr breit abgeflacht Tabellen ist ziemlich Häufig, wenn man in den data-warehousing-und reporting-Server. Sie sind nur viel schneller und bedeuten, dass Sie nicht haben, um speichern Sie Ihre Datenbank entirley im ram für die Leistung.
InformationsquelleAutor der Antwort John Nicholas
Es ist rein hängt davon ab, Daten, die Sie speichern, werden die Indizes, die Sie machen und so weiter. Niemand kann sicherstellen, dass Sie, dass man arbeitet besser als der andere, ohne zu wissen, was Sie speichern. Im Allgemeinen Normalisierung Regeln "Gewalt" trennen Sie Daten in verschiedene Tabellen und Benutzer-Schlüssel, wenn Sie eine große Tabelle, aber ich bin nicht einverstanden, dass es IMMER besser abschneidet, als eine große Tabelle. Sie können am Ende mit 6-7-Ebene schließt sich in Dutzenden von Abfragen, die manchmal Fehler verursachen, weil es viel mehr Möglichkeiten zum erstellen einer Fehlermeldung in größeren Abfragen, die in einfachen.
Wenn Sie post einige Anforderungen, was Sie tun, vielleicht können wir Ihnen helfen mit der Gestaltung der DB richtig.
InformationsquelleAutor der Antwort eugeneK
Es auch sehr, hängt vom Anwendungsfall für Ihren Tisch. Wenn Sie möchten, optimieren Sie für das Lesen dann könnte es eine gute Idee sein, um es zu halten alle zusammen an einem Tisch.
In der NO-SQL-Welt (cassandra/hbase zum Beispiel) gibt es keine Einschränkungen auf die Anzahl der Spalten und es ist eigentlich als eine gute Praxis zu haben, viele Spalten. Dies kommt auch aus der Art, wie es gespeichert ist (keine Lücken). Wert während der Untersuchung.
InformationsquelleAutor der Antwort Albert
Dass zu viele Spalten die Ergebnisse in eine Menge Nullen (bösen) und einen unhandlichen Objekt der Tabelle zugeordnet ist. Dies schadet der Lesbarkeit in der IDE und erschwert die Wartung (Erhöhung der Entwicklungskosten). Wenn Sie brauchen schnell liest in einigen Fällen mit denormalisierten Tabellen z.B. ausschließlich für Berichte oder Abfragen (suchen Sie nach "CQRS" - Muster). Ja, "Person" hat eine million Attribute, aber Sie können brechen diese monothilic Tabellen (design vorausgeht Normalisierung), um kleineren Unternehmen ("Adresse", "Telefon", "hobby"), anstatt das hinzufügen neuer Spalten für jeden neuen Anwendungsfall. Dass kleinere Objekte (Tabellen) bringt so viele Vorteile, Sie ermöglichen Dinge wie unit testing, OOP und SOLIDE Praktiken.
Auch, wie es hinsichtlich bündeln zahlreiche Spalten zu vermeiden, schließt sich, ich denke, dass die Leistungssteigerung durch die Vermeidung von joins verloren durch index-Pflege, unter der Annahme einer typischen Arbeitsbelastung von beiden liest und schreibt. Das hinzufügen von Indizes, die auf den Feldern zum Wohle der lese-Leistung könnte ein Hinweis auf ein Bedürfnis sich zu bewegen, diese Felder in einer eigenen Tabelle.
InformationsquelleAutor der Antwort awgtek
Ist es besser, eine einzelne Tabelle, wo Sie können, vermeiden Sie die Verwendung von joins während Abfragen, hängt davon ab, ob die Spalten sind von der gleichen Person oder anderen Entität.
Nehmen wir beispielsweise an, du machst einen Datenbank-design für die work-flow, wo einige Felder werden bearbeitet von junior Arbeitnehmer, und einige Felder, die von leitenden Beschäftigten. In diesem Fall ist es besser, alle Spalten in einer einzelnen Tabelle.
InformationsquelleAutor der Antwort user3470929