Christian Kruse: View mit Index

Beitrag lesen

Hallo Email,

ich möchte das nicht mit dir diskutieren, da dich das eigentlich eh nicht interessiert. Ich möchte aber, dass eventuelle Leser sich über eines im Klaren sind:

explain
                SELECT
                    a.ent as entity,
                    b.val as datetime,
                    c.val as nickname,
                    d.val as body,
                    e.val as parent,
                    f.val as root,
                    g.val as subject,
                    h.val as thread,
                    i.val as timestamp,
                    j.val as threadroot
                FROM forum a
                JOIN forum b using(ent,att)
                JOIN forum c using(ent)
                JOIN forum d using(ent)
                JOIN forum e using(ent)
                JOIN forum f using(ent)
                JOIN forum g using(ent)
                JOIN forum h using(ent)
                JOIN forum i using(ent)
                JOIN forum j using(ent)
                WHERE b.att = 'datetime'
                AND c.att = 'nickname'
                AND d.att = 'body'
                AND e.att = 'parent'
                AND f.att = 'root'
                AND g.att = 'subject'
                AND h.att = 'thread'
                AND i.att = 'timestamp'
                AND j.att = 'threadroot'
                and h.val = 91761

Dieses Datenbank-Layout ist ein Anti-Pattern. Es bringt viele Probleme mit sich für eine Flexibilität, die man höchstwahrscheinlich nie brauchen wird. Von Performance-Problemen (auf einmal sind einfache INSERTs oder UPDATEs eine Menge Queries, auslesen ergibt so SQL-Monster wie oben zitiert, die DB kann kaum noch Annahmen darüber treffen wie zu optimieren ist, Indizes verlieren ihre Spezifität, die Datenmenge wächst enorm) über die Integrität der Daten (Fremdschlüssel, Constraints, Checks - auf einmal wird alles zu einem Problem. Im Grunde kann man nichtmal sicherstellen, dass alle Objekte einem bestimmten Schema entsprechen). Reporting wird ein echtes Problem. Für jede Spalte, die ich hinzufüge, kommt ein weiterer JOIN dazu.

Argh. Ich bekomme Kopfschmerzen.

Es kann Gründe geben, warum man ein EAV-Design (Entity-Attribute-Value) tatsächlich benötigt, die sind jedoch sehr selten und man ist bei modernen Datenbanken dann idR immer noch besser mit JSON-Spalten aufgehoben.

Don't do this at home, kids!

LG,
CK