Általános táblák

Valamiért most WordPress-t kellett turnálnom, és észrevettem, hogy van egy postmeta nevezetű táblája, ami egy amolyan általános tábla.
Vagyis igazi struktúrája nincs, nagyjából egy primitív hash-táblának vagy egy dictionary-nek felel meg: kulcs-érték párokat tárol. Természetesen egy-egy posthoz rendelve, tehát így néz ki:

post_id, meta_key, meta_value

Egy ilyen tábla nagyszerűen használható például paraméterek, vagy pár plusz mező tárolásához, amit nem szeretnénk az eredeti táblához közvetlenül hozzáadni.

Viszont amit most meg kellett néznem az volt, hogy egy plugin miért lassult le. A válasz egyértelmű volt: mert mindent ebben a táblában tárolt. Nem volt egy alaptáblája sem, pedig egyértelmű struktúrát lehetett volna létrehozni rá.

Ezért miután az adatok elértek egy nagyságrendet, már nehéz volt a listázás ebből a táblából. Nem csak nehéz volt, hanem lassú is. Ezt biztosan nem DBA tervezte.

Az ilyen általános táblák arra valók, hogy vagy rendszerszinten fix értékeket tároljunk benne (ahogy már említettem a paramétereket), vagy egy meglevő táblát egészítsünk ki néhány mezővel, amit nem szeretnénk az eredeti táblába betenni. A hangsúly pedig a néhány mezőn van.

Dolgoztam olyan alkalmazáson is régebben ami szintén nagyon sok mindent tárolt így. Akkor még nem volt pivot lehetőség, és hasonlók, hanem egy monstre SQL lekérdezést hegesztgettünk, ami ebből az általános táblából kidobott egy kamu-táblát szerkezettel, tartalommal.