Ilja: MySQL Performance bei großen Tabellen (viele Felder leer)

Beitrag lesen

yo,

Ich habe mir jetzt überlegt, die "Kalender" Tabelle so aufzubauen, das eben Datum und Vorlagen ID als Felder vorhanden sind, aber zusätzlich noch alle Felder die auch in der Tabelle "Vorlagen" sind. Wird eine Vorlage nicht geändert, so werden diese Felder einfach leer gelassen und nur die ID eingetragen, wird die Vorlage in einem Punkt geändert, so wird keine Vorlagen ID eingetragen sondern alle anderen Felder.

du gehst den falschen weg. erst einmal solltest du das datendesign für deine zwecke ordentlich designen. was du dort oben machen willst ist der falsche weg. einen gutes daten-design zu entfernen ist in vielen fällen recht schwierig, wo meiner meinung nach selbst viele fachbücherversagen.

es gibt unter anderen einen fehler, den viele machen, nämlich dinge die gleich aussehen, müssen nicht gleich sein. hört sich erst mal komisch an, aber dahinter steckt, dass man nach abhängigkeiten modelliert. und in diese beliebte falle bist du meiner meinung nach getreten. die einträge in den kalender haben keine abhängigkeiten zu den vorlagen. sprich du solltest "immer" die werte in der kalender tabelle speichern und "nie" die werte aus der vorlage. ich würde die vorlagen_id ganz rausnehmen, vielleicht höchtens drinne lassen, um zu wissen, welche vorlage er für die einträge nun benutzt hat. aber letztlich ist es egal. es zählen die werte im kalender.

als beispiel der unabhängigkeit: wenn du später mal in den vorlagen werte ändern willst, dann sollte sich ja nicht die werte in den kalendern ändern. das können ja durchaus auch kalendereinträge sien, die in der vergangenheit liegen. das würde sie aber tun, wenn du über den fremdschlüssel die werte ausliesst. sicherlich könnte man jetzt einen workaround ausdenken, indem man verbietet, eine vorlage jemals zu verändern. aber das ist der falsche weg.

und was die performance-problematik angeht, erst mal anaylisieren, ob es den überhaupt engpässe gibt, bevor man reagiert.

Ilja