Mein Mitarbeiter hat eine SQL-Tabelle mit 96 Spalten erstellt


23

Hier sind wir im Jahr 2010, Software-Ingenieure mit 4 oder 5 Jahren oder Erfahrung, die noch Tabellen mit 96 Fracking-Spalten entwerfen.

Ich sagte ihm, es wird ein Albtraum.
Ich habe ihm gezeigt, dass wir Ordnungszahlen verwenden müssen, um MySQL mit C # zu verbinden.
Ich erklärte, dass Tabellen mit mehr Spalten als Zeilen ein großer Geruch sind.

Trotzdem bekomme ich das "So wird es einfacher".

Was sollte ich tun?

BEARBEITEN *

Diese Tabelle enthält Daten von Sensoren.
Wir haben Sensor 1 mit
Dynamic_D1X
Dynamic_D1Y
[...]

Dynamic_D6X
Dynamic_D6Y
[...]

EDIT2 *

Nun, ich habe diesen Job endlich verlassen. Dies ist ein Zeichen dafür, dass der andere Programmierer monatelang dunkel wird. Dies ist ein weiteres Zeichen dafür, dass das Management nicht erkennt, dass dies ein Problem ist


5
Ugh, könnte genauso gut das dunkle Zeitalter sein. Wann lernen die Leute den Umgang mit Datenbanken?
ChaosPandion

49
Was ist deine Alternative? Sie können sich nicht nur über ein Problem ärgern, wenn Sie keine Lösung haben.
TGnat 25.10.10

1
Ich bin gespannt, was in jeder Zeile gespeichert ist.
MetalMikester

1
@ChaosPandion, erst lange nach dem Einsatz traditioneller Datenbanken ist selbst ein Designgeruch.
instanceofTom

3
Nun, er hat Ihre Datenbank eindeutig überarbeitet. Wir hatten früher eine Datenbank mit einer einzigen Tabelle mit nur 4 varchar-Spalten: CLASS, OBJECT, ATTRIBUTE, VALUE. Alle Daten passen dort hinein. Schlag das! :)
Lukas Eder

Antworten:


32

Vielleicht hat er das aus einem guten Grund getan, wie zum Beispiel aus Performances oder ROI? .

Das Beste ist, ihm Fragen zu stellen. Mit einem gewissen "Warum" werden Sie ihm sicherlich klar machen, dass er sich wahrscheinlich von selbst irrt (wenn er es wirklich ist).

Ich selbst hatte einen Fall, der nicht mit Leistungen, sondern mit dem Return on Investment (ROI) zusammenhängt. Ich hatte eine Tabelle mit Objekten, die für jede Stunde der Woche einen bestimmten Wert hatten (168 Stunden pro Woche). Wir hatten die Wahl, eine ObjectHour-Tabelle zu erstellen, die den Wert, aber auch einen Schlüssel für das Objekt und die Tages- und Stundenzahl enthält. Wir hatten aber auch die Möglichkeit, die 168-Werte richtig in die Reihe zu setzen. Wahrscheinlich gefällt dir, was dein Kollege getan hat.

Die Entwickler schätzten beide Lösungen. Die einfache Lösung (168 Spalten) war viel billiger als das gut gestaltete Gegenstück. Zum genau gleichen Ergebnis für den Kunden.

Wir haben uns für die einfache / billigste Lösung entschieden, um unsere Bemühungen auf wichtigere Dinge wie Sicherheit zu konzentrieren.

Wir werden in Zukunft viele Möglichkeiten haben, dies zu verbessern. Time-to-Market hatte für uns damals Priorität.


3
Ich stimme zu - ohne zusätzlichen Kontext zum Warum ist die Anzahl der Spalten wirklich egal. Möglicherweise sind 96 Dinge zu verfolgen ... oder er verwendet zusätzliche Spalten für 'Arrays' von Daten (name_1, name_2), die in andere Tabellen aufgeteilt werden sollten.
GroßmeisterB

Oh, Sie erinnern mich an eine Sache ... Ich werde sie meiner Antwort hinzufügen

1
"normalisiert" bedeutet nicht unbedingt "gut gestaltet". Ich würde die Denormalisierung, die Sie hier beschreiben, als eine perfekte Designentscheidung ansehen.

1
Ich stimme voll und ganz mit @GrandmasterB überein. Die Anzahl der Spalten kann nicht unabhängig beurteilt werden. Es gibt Zeiten, in denen sehr viele verwandte Daten über eine einzelne Sache gespeichert werden müssen. Was sollen die Leute tun? Erstellen Sie eine Tagged-Data-Tabelle (id, tag, value)und INSERTneunzig ungerade Zeilen? Wenn die Informationen zu einer Tabelle gehören und berechtigt sind, bleibt die Spalte erhalten, es sei denn, dies verursacht ein fürchterliches Leistungsproblem.
Orbling

+1 Denormalisierung ist für bestimmte Anwendungen erforderlich. Ich würde argumentieren, dass Datenbanken keine Tabellen sind. Nur weil sie ein ähnliches Tabellenformat haben, müssen Datenbanken nicht unbedingt für den Menschen lesbar sein. Sie sind ein Daten-Back-End-Speicher und sollten als solche behandelt werden.
Evan Plaice

17

Leider betrachtet ein durchschnittlicher Entwickler relationale Datenbanken immer noch als große flache Dateien. Der einzige Weg, wie sie besser werden, ist, wenn jemand die Verantwortung übernimmt und mit gutem Beispiel vorangeht. Erst kürzlich leitete ich eine umfassende Neugestaltung eines wichtigen Schemas in unserer Datenbank und folgte den üblichen relationalen Praktiken. Plötzlich waren unsere gespeicherten Prozeduren eleganter und alle richtigen Indizes schienen zu passen, als wären sie dafür geboren. Der ego-orientierte Entwickler wird Ihnen niemals ohne Beweise glauben.


2
Manchmal braucht es Beweise, um jemanden zu überzeugen, der bereits überzeugt ist, dass er Recht hat. +1
Chris

1
"Ja wirklich?" Der durchschnittliche Entwickler macht das? Huch.
Webbiedave

Vielleicht sind große flache Dateien das, was sie überhaupt brauchen;)?
Job

nicht unbedingt Ego, aber warum solltest du wechseln? Das neue Zeug muss wesentlich besser sein, um die Zeit und den Aufwand, die damit verbunden sind, zu "bezahlen".

-1 Es gibt durchaus triftige Gründe für die Verwendung einer denormalisierten Datentabelle. Was wäre zum Beispiel, wenn Sie es auf viele Server verteilen müssten, weil das Dataset zu groß geworden wäre oder wenn Sie eine extrem kurze Zugriffszeit benötigen (Verabschieden Sie sich von der Verwendung von Joins).
Evan Plaice

11

Ähnliches wurde bereits weiter oben diskutiert StackOverflow .

Im Allgemeinen gilt dies nicht für jede Entität , wenn eine Tabelle viele Spalten enthält . Andere Ausführungen sind ebenfalls möglich. Sprechen Sie mit Ihren Teammitgliedern und finden Sie heraus, welche Lösung in Abhängigkeit von der Datennormalisierung, der Lesbarkeit und Wartbarkeit des Codes (Einfügung von Anweisungen mit 96 auszufüllenden Attributen?), Den Auswirkungen auf die Leistung, wie oft neue Attribute (Spalten) hinzugefügt oder geändert werden könnten und wie dünn Die Daten sind (wie viele der 96 Spalten werden jemals gefüllt und wie viele bleiben NULL?) und Auswirkungen auf die Berichterstellung. Jeder Entwickler sollte in der Lage sein, seine Entwurfsentscheidungen angemessen zu begründen und nachzuweisen, dass der Kosten-Nutzen-Kompromiss (und ja, jede Entwurfsentscheidung ist ein Kompromiss) zu seinen Gunsten ist. Es liegt nicht in Ihrer Verantwortung, sich zu beschweren oder zu kritisieren, sondern Alternativen vorzuschlagen und sicherzustellen, dass diese Probleme durchdacht werden. unbedingt, dass Sie etwas falsch machen, aber es sollte auf jeden Fall einige rote Fahnen setzen, damit Sie sich das Design genau ansehen können. Manchmal ist ein großer Tisch die richtige Wahl, aber in vielen Fällen sind andere Alternativen sinnvoller. Beispielsweise besteht eine Option darin, den Speicher in zwei Tabellen zu unterteilen: eine Tabelle, die Ihre Entitäten identifiziert, und eine andere Tabelle, die effektiv einen Schlüssel- / Wertespeicher von Attributen darstellt, die diese Entitäten beschreiben (so dass Sie möglicherweise höchstens 96 Zeilen haben


1
Key Value Stores sind in Bezug auf Leistung und Abfragbarkeit fast immer die schlechteste Wahl.
HLGEM

8
Möchten Sie näher darauf eingehen?
Jewgenij Brikman

9

Ist es mit 96 Spalten normalisiert? Befriedigt es die 1., 2., 3. usw. NF?

Möglicherweise verfügen Sie über 96 separate Attribute für eine Entität.

Lassen Sie ihn andernfalls Joe Celko in Simple Talk vorlesen


5

Es kommt ganz darauf an.

Normalisierte / nicht normalisierte DB-Designs haben ihre Vor- und Nachteile.

Mein erstes DB-Design war eine normalisierte Sache von Schönheit. Es war flexibel und erweiterbar. Es war auch eine unglaubliche PITA für jeden außer mir, mit der ich mich auf Code-Ebene befassen musste, und es war eine milde PITA für mich.

Mein nächster Versuch war eine flache Struktur, und sie war (a) viel schneller und (b) viel einfacher zu programmieren. Und es wird keine große Aufgabe sein, später mehr zu normalisieren.

So mag es ein Geruch sein, aber einige andere DB-Designs haben ihre eigene reizvolle Reihe von Gerüchen.


+1 Um darauf hinzuweisen, dass es oft keinen richtigen Weg gibt.
Orbling

3

Lassen Sie ihn diesen Artikel über technische Schulden lesen . Wenn er sich dennoch dazu entschließt, so weiterzumachen, haben Sie zumindest eine konstruktive Stellungnahme abgegeben.


1

Betrachtet man den (bearbeiteten) Beitrag, so ist klar, dass es sich um eine schlecht denormalisierte Tabelle handelt. Was sollte man tun? Aus meiner Sicht haben Sie ein paar Möglichkeiten:

  1. Schreien Sie Ihren Kollegen an, um zu lernen, wie er seine Arbeit macht. Es ist unwahrscheinlich, dass es produktiv ist, wird aber wahrscheinlich andere Mitarbeiter davon überzeugen, sich nicht mit Ihnen herumzuschlagen. Ein Ruf als schreiender Wahnsinniger kann nützlich sein (frag mich nicht, woher ich das weiß).
  2. Schreien Sie Chef an, dass Mitarbeiter ein Idiot ist. Vorhersage einer Katastrophe und aktive Sabotage des Projekts. Schuld daran ist das Datenbankdesign, das von inkompetenten Mitarbeitern erstellt wurde. Kann direkt zu ... führen
  3. Verlassen. Am besten, wenn es Ihre Idee ist, aber # 2 kann zu einem unfreiwilligen Rücktritt führen. Versuchen Sie, die Knie nicht auf Asphalt / Beton / Kies abzukratzen, wenn Sie von einem wütenden Chef und / oder Kollegen aus dem Fenster geschleudert werden. (Beachten Sie, dass das vorherige Studium hier WICHTIG ist. Ihre Überlebenschancen verringern sich merklich, wenn sich das Büro des Chefs über dem Erdgeschoss befindet und Sie körperlich aus dem Fenster geschleudert werden. Planen Sie voraus !! )
  4. Viel trinken - oder nach Kalifornien ziehen und anzünden (vorausgesetzt, Prop. 19 (oder was auch immer) vergeht). Nichts wie ein paar Schüsse und ein Doobie, um die Sichtweise der Mitarbeiter zu verbessern (oder wie ich gehört habe). (Öffentliche Bekanntmachung: KIDS! Diese Leute sind Profis! Versuchen Sie das NICHT zu Hause!)

Teile und genieße.


Ich habe # 4 ausprobiert, aber jetzt ist es Montag und alles wird zurück sein, wenn ich den Arbeitsplatz erreiche =)
Eric

Lesen Sie Punkt eins. Upvoted. Lesen Sie Punkt zwei und heben Sie meine Meinung auf. Ernsthaft, Kumpel?
Zoran Pavlovic

0

Ich gehe davon aus, dass er eine Menge Code ausschneidet und einfügt, um mit dieser "neuen" Tabelle zu arbeiten.

In diesem Fall entstehen Ihnen wahrscheinlich keine zusätzlichen technischen Schulden. Er hat gerade seinen Anteil an den technischen Schulden aufgeteilt und ist möglicherweise auf dem Weg zu einer großen Vereinheitlichung der Dinge.

Wenn er über eine bewährte Methodik verfügt, die 96 Spalten erfordert, sollten Sie die tatsächlichen Vorteile einer anderen Vorgehensweise in diesem speziellen Fall in Betracht ziehen. Wenn es keine gibt, geben Sie ihm den Vorteil des Zweifels, aber erinnern Sie ihn daran, dass Sie das nächste Mal in der Planungsphase sein möchten, wenn er das macht, was wir alle für einen ziemlich blöden Schachzug halten.


0

Es hängt völlig von den Anwendungsfällen der Anwendung ab, die auf das Schema zugreifen soll, welcher Datenblock jeweils benötigt wird. In gewisser Weise könnte es das Tischdesign rechtfertigen.


0

Ich würde ihn in die Steinzeit schicken und ihn zwingen, Akten zu benutzen oder ihm zumindest den Umgang mit Klecksen beizubringen.

Wirklich, 96 Columns ... Das kann nicht richtig sein, je. Vielleicht würde ein ORM helfen. (Es sei denn, Sie benötigen Leistung, aber Sie können dann jemanden haben, der DB besser versteht, um damit umzugehen.)


0

Ich werde dafür bis in die Hölle herabgestuft, aber genau deshalb habe ich die Zuständigkeiten für Datenmodellierung und Software-Engineering in meinem Geschäft getrennt. Programmierer scheinen selten in Form von Mengen zu denken und konzentrieren sich stattdessen auf die Datennutzung (anstatt die 3. Normalform, die Indizierung oder andere Leistungsprobleme der Datenbank beizubehalten). Wir als Programmierer sind uns darüber hinaus in der Regel weniger einig, als wir aufgrund unserer Unerfahrenheit in Fragen der reinen Datenmodellierung / Architektur vielleicht sollten. IMHO, ich mag es, dass ich Datenarchitekten und Modellierer habe, die Anforderungen erfüllen, Tabellen / Prozesse / usw. erstellen und die Ausgaben mir überlassen.

Ohne die eigentlichen Gründe für dieses Design zu kennen (ich habe an Wettersensoren mit mehr als 96 verschiedenen numerischen Ausgaben gearbeitet = große Anzahl von Tabellenspalten) ... das scheint nur, als würde man ein Tier aus der Ruhe bringen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.