sql >> Databáze >  >> RDS >> PostgreSQL

Je možné pojmenovat sloupce výsledků SQL z řádků v jiné tabulce? (Postgres)

Toto je založeno na zásadním nedorozumění vnitřního fungování Postgresu a designů EAV .

Pokud nemáte stovky různých polí nebo dynamickou sadu typů atributů, použijte jedinou tabulku se všemi sloupci - kromě normalizace databáze . Sloupce bez hodnoty jsou vyplněny NULL .
Nulové úložiště je velmi levné , zabírající 1 bit na sloupec v tabulce pro nulovou bitmapu, obvykle přidělené v jednotkách 8 bajtů pro pokrytí 64 sloupců. Viz:

Samostatný řádek pro single další atribut zabírá nejméně dalších 36 bajtů .

4  bytes item identifier
23 bytes heap tuple header
1  byte  padding
8  bytes minimum row data size

Obvykle více, kvůli vycpávání a další režii.

Musely by existovat stovky různých, řídce osídlených sloupců, než by se takový nepraktický design EAV mohl vyplatit – a hstore nebo jsonb v Postgresu 9.4 by bylo na to lepší řešení . Pro váš návrh a jestli mezi tím není téměř žádný prostor tam bylo, pravděpodobně byste používali enum pro typ.

Dotazy jsou přitom složitější a dražší. Jsme tady v úzkých.

Místo toho použijte rozložení tabulky, jako je toto:

CREATE TABLE users (
   users_id serial PRIMARY KEY
 , salutation text
 , given_name text
 , surname text
 , alias text
 ... (many) more columns
);

CREATE TABLE address (
   address_id serial PRIMARY KEY
 , users_id int REFERENCES users
 , city text  -- or separate TABLE city incl region_id etc. ...
 , region_id int REFERENCES region
 , address  text
 ... (many) more columns
);

Úzce související odpověď s dalšími radami:



  1. SQL Server:Dotazujte se rychle, ale pomalu z procedury

  2. Jak dosáhnete toho, aby SQLAlchemy přepsala MySQL při aktualizaci CURRENT_TIMESTAMP

  3. Předání uživatelem definovaného seznamu z režimu spánku do uložené procedury Oracle

  4. Jak převést výsledky dotazu SQL do html tabulky se specifickým formátem