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
quelle
Antworten:
Vielleicht hat er das aus einem guten Grund getan, wie zum Beispiel aus Performances oder ROI? .
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.
quelle
(id, tag, value)
undINSERT
neunzig 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.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.
quelle
Ä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
quelle
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
quelle
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.
quelle
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.
quelle
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:
Teile und genieße.
quelle
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.
quelle
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.
quelle
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.)
quelle
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.
quelle