Opravdu hodně strukturovaná data - EAV rubrika: Databáze: SQL

9 Taco
položil/-a 27.3.2014

Volně navážu na jinou otázku.

Mějme klasický příklad eshopového zboží.

  • Tabulka product, kam ukládáme například telefon nokia, počítač apple, monitor HP, hokejka, polohrubá mouka
  • Tabulka category, pro typ produktu: telefon, počítač, monitor.
  • Budeme chtít u každého produktu evidovat i různé atributy: telefon {výdrž, barva displeje, rozměry}, počítač {RAM, HDD}, monitor {uhlopříčka, rozlišení}, hokejka {materiál, velikost}, mouka {množství, červi}.
  • Budeme podle těchto atributů chtít vytvořit systém filtrování, vyhledávání, nějaké statistiky atd.
  • Chceme použít relační databázi (PostgreSQL, Oracle, MSSql).

Jak by vypadalo ideální schema pro uložení těch atributů, a proč?

Dík.

odkaz
6 coolmip
odpověděl/-a 30.3.2014

Odporucam pouzit postgres a datove typy hstore alebo json, pripadne kombinaciu oboch.
Vytvoris tabulku:

CREATE TABLE products (
  id serial PRIMARY KEY,
  name varchar,
  attributes hstore
);

A potom insert:

INSERT INTO products (name, attributes) VALUES (
 'pocitac',
 'Grafika    => "Nvidia 4400",
  ram     => 368,
  monitor => dell'
 );

Select

SELECT name, hstore_to_json(attributes) as attributes
FROM products
WHERE attributes->'ram'= '368'

Asi najvacsia vyhoda je index nad hstore, takze sa to naozaj tvari ako samostatne stlpce. Daju sa spravit aj ciastocne indexy, takzr napriklad:

Create index on products using gist (attributes) where attributes ? Ram

Tento index zaindexuje vsetky riadky ktore maju atribut ram.

Komentáře

  • coolmip : Este som objavil aj toto: http://thebuild.com/presentations/pg-as-nosql-pgday-fosdem-2013.pdf Budem to musiet ukazat kolegom, lebo ja som bol za hstore a oni za mongo... 30.3.2014
  • Stefano : V tom odkaze to vyzera ze PG je s hstore vykonejsia ako MongoDB. Mongo sa ale da velmi jednoducho skalovat takze bude vykonnejsi. 30.3.2014
  • podhy : hstore má v současné verzi postgresu jednu nevýhodu a to, že se nedá zanořovat (nevím jestli byste to v tomto případě potřeboval). V postgres 9.4 to už půjde navíc zde bude i JSONb. 30.3.2014
  • coolmip : Ano 9.4 vyzera super ale este nieje stable. Takisto sa tesim na podporu jsonu v 9.4 ale bez podpori indexov (gin a gist) stale vyhrava hstore ak sa nepletiem.... 30.3.2014
  • Kit : @podhy: Zanořování už je příliš daleko od principu relačních databází. Je lepší si vystačit s hstore nebo aplikaci zgruntu předělat na XML. 30.3.2014
  • pavel.stehule : @JSONB má podporu indexů, a dá se vyzkoušet v devel verzi - a asi bych se nebál nad develem Postgresu prototypovat - RC bude někdy v srpnu. 30.3.2014

Pro zobrazení všech 7 odpovědí se prosím přihlaste:

Rychlé přihlášení přes sociální sítě:

Nebo se přihlaste jménem a heslem:

Zadejte prosím svou e-mailovou adresu.
Zadejte své heslo.