Portál AbcLinuxu, 10. května 2025 12:42
zjednodušeně: tabulka atributy (id, typ, nazev, id_hodnota) tabulka hodnota_int (id, hodnota) tabulka hodnota_varchar (id, hodnota) pokud bych to spojil, mohu dostat následující data: +-----------+------------------+--------------------+ | nazev | hodnota_int | hodnota_varchar | +-----------+------------------+--------------------+ | atribut1 | 233 | NULL | | atribut4 | 2332 | NULL | | atribut1 | NULL | textova | +-----------+------------------+--------------------+Je jasné, že pokud budu chtít řadit podle atributu atribut1, tak mám smůlu, protože je jednou typu int a jednou varchar. Řešení je ukládat si do tabulky atributy váhy jednotlivých hodnot řazení (přidat nový sloupec sort). Už jsem to v jednom schématu viděl, otázka je, jak tu hodnotu počítat? Není nějaký normalizovaný postup, pokud budu řadit najednou varchar, datetime, int a decimal?
Ahoj
V teorii databazi se moc nevyznam, ale kdyz muze atribut byt jednou cislo a jindy retezec, tak je IMHO nekde neco spatne.
A pokud ne, tak co neco takoveho:
case atributy.typ when int then convert(varchar...) when datetime then convert (varchar...) . . .Teda jestli to mysql umi
Dejv
case ... convert
ukladat do toho sloupce. A razeni budes mit podle retezce. Taky to neni zrovna ukazka rychlosti, ale asi rychlejsi, nez convert
bude třeba 096 větší než 94Nebude
kdyz muze atribut byt jednou cislo a jindy retezec, tak je IMHO nekde neco spatne
ale neznam detaily a predpokladam, ze vis, co delas
+-----------+------------------+--------------------+ | nazev | hodnota_int | hodnota_varchar | +-----------+------------------+--------------------+ | atribut1 | 233 | NULL | | atribut4 | 2332 | NULL | | atribut1 | NULL | textova | +-----------+------------------+--------------------+ nebo +-----------+------------------+ | nazev | hodnota_int | +-----------+------------------+ | atribut1 | 233 | | atribut4 | 2332 | +-----------+------------------+ a +-----------+--------------------+ | nazev | hodnota_varchar | +-----------+--------------------+ | atribut1 | textova | +-----------+--------------------+ které potom při dotazu spojuji?Pokud budu chtít použít nějaké vícenásobné where condition, tak stejně budu muset spojovat tabulku "samu do sebe", ale u řídké mi odpadne spojování na další vrstvě. Mě osobně připadá výhodnější ta řídká tabulka, ale zaráží mě, že jsem takové řešení u žádného EAV modelu neviděl. Nebo se ta data získávají přes UNION těch tabulek (tzn. mám pak sloupec s kombinací datových typů)?
Vyhledávání v datech bude mnohem rychlejšíPro řídké tabulky bych si tím nebyl tak jistý. Tam bych volil spíš sloupec s XML.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.