Die vertikale Tabelle - auch bekannt als Entity-Attribut-Value Anti-Pattern - wird immer ein Problem, manchmal sehr kurz nachdem es in die Praxis umgesetzt wurde. Wenn Sie dies noch nicht getan haben, schauen Sie sich an, was Joe Celko über diese Taktik zu sagen hat, und Sie werden noch mehr Beweise dafür sehen, wie problematisch dieser Ansatz ist. Ich höre hier auf, denn Sie sind die kluge Person, die wusste, dass Sie zu dieser Seite kommen sollten, und nicht die schuldige, aber gut gemeinte Partei, die die EAV-Tabelle in Ihrer Datenbank verübt hat.
Die Optionen für den Umgang mit diesem Tabellentyp sind nicht schön, und wie Sie gesagt haben, werden sie immer schlechter, je mehr Daten für Produktionsabfragen benötigt werden.
Erstellen Sie eine deklarierte globale temporäre Tabelle (DGTT), die nicht angemeldet ist, und erhält festgeschriebene Zeilen, und es verwenden, um die horizontale Version der EAV Tabelleninhalte zu inszenieren. DGTTs sind gut für diese Art von Datenschaufeln, da sie keinen Protokollierungsaufwand verursachen.
Verwenden Sie die traditionellen CASE- und MAX() - Gruppierungen, wie in der vorherigen Empfehlung gezeigt. Das Problem besteht darin, dass sich die Abfrage jedes Mal ändert, wenn ein neuer TYPE in Ihre EAV-Tabelle eingefügt wird.
Verwenden Sie die SQL-XML-Veröffentlichungsfunktionen von DB2, um die vertikalen Daten in XML zu konvertieren. Hier ist ein Beispiel, das mit den Tabellen- und Spaltennamen arbeiten Sie zur Verfügung gestellten:
WITH t(id, type, value) as (
VALUES (1,10,111), (1,14,222), (2,10,333), (2,25,444)
)
SELECT
XMLSERIALIZE(CONTENT
XMLELEMENT(NAME "outer",
XMLATTRIBUTES(id AS "id"),
XMLAGG(XMLELEMENT(NAME attr ,
XMLATTRIBUTES(type as "typeid"), value) ORDER BY type)
) AS VARCHAR(1024)
)
FROM t as t group by id;
Der Vorteil des SQL-XML-Ansatzes besteht darin, dass neue von der EAV-Tabelle behandelten Werte nicht Erfordert ein Neuschreiben der SQL, die die Werte umschreibt.
Ich glaube, das ist allgemein bekannt als Schwenk – dplante