TL; DR: JSONB ืงืขื ืขื ืืืืขืจ ืคืึทืจืคึผืึธืฉืขืืขืจื ืื ืึทื ืืืืืงืืื ื ืคืื ืืึทืืึทืืืืก ืกืืฉืขืืึท ืึธื ืกืึทืงืจืึทืคืืืกืื ื ืึธื ืคึฟืจืขื ืคืึธืจืฉืืขืืื ื.
ืืงืืื
ืืึธืืืจ ืืขืื ืึท ืงืืึทืกืืฉ ืืืึทืฉืคึผืื ืคืื ืืืกืืึธืืข ืืืื ืขืจ ืคืื ืื ืึธืืืืึทืกื ื ืืฆื ืงืึทืกืขืก ืืื ืืขืจ ืืืขืื ืคืื ืึท ืจืืืืืฉืึทื ืึทื ืืึทืืึทืืืืก (ืืึทืืึทืืืืก): ืืืจ ืืึธืื ืึทื ืขื ืืืื, ืืื ืืืจ ืืึทืจืคึฟื ืฆื ืจืึทืืขืืืขื ืืืืขืจ ืคึผืจืึธืคึผืขืจืืืขืก (ืึทืืจืืืืึทืฅ) ืคืื ืืขื ืขื ืืืื. ืึธืืขืจ ื ืื ืึทืืข ืื ืกืืึทื ืกืื ืงืขื ืืึธืื ืื ืืขืืืข ืืึทื ื ืคืื ืคึผืจืึธืคึผืขืจืืืขืก, ืืื ืืขืจ ืคึผืจืึธืคึผืขืจืืืขืก ืงืขื ืืืื ืฆืืืขืืขืื ืืื ืืขืจ ืฆืืงืื ืคึฟื.
ืื ืืืืึทืกื ืืืขื ืฆื ืกืึธืืืืข ืืขื ืคึผืจืึธืืืขื ืืื ืฆื ืฉืึทืคึฟื ืึท ืืืึทื ืืื ืื ืืึทืืึทืืืืก ืืืฉ ืคึฟืึทืจ ืืขืืขืจ ืคืึทืจืืึธื ืืืขืจื, ืืื ืคืฉืื ืคึผืืึธืืืืจื ืื ืืืึธืก ืืขื ืขื ืืืจืฃ ืคึฟืึทืจ ืึท ืกืคึผืขืฆืืคืืฉ ืขื ืืืื ืืืึทืฉืคึผืื. ืืจืืืก! ืคึผืจืึธืืืขื ืกืึทืืืื ... ืืื ืืืื ืืืฉ ืึผืืื ืืืืืึทื ื ืคืื ืจืขืงืึธืจืืก ืืื ืืืจ ืืึทืจืคึฟื ืฆื ืืืืื ืึท ื ืืึทืข ืจืขืงืึธืจื.
ืืึทืืจืึทืืื ืื EAV ืืืกืืขืจ (
ืึธืืขืจ, ืืื ืืืึธืื ื ืืฉื ืฉืจืืึทืื ืืขื ืคึผืึธืกืื ืืืื ืขืก ืืขื ืขื ื ืืฉื ืขืืืขืืข ืืึทืื ืกืืืื ืฆื ืื EVA ืฆืืืึทื ื. ืึทืืื, ืคึฟืึทืจ ืืืึทืฉืคึผืื, ืฆื ืงืจืืื ืืืื ืขืจ ืึธืืขืจ ืืขืจ ืขื ืืืืื ืืืึธืก ืืึธืื 1 ืึทืืจืืืืื ืืขืืขืจ, 2 ืืืฉืืื ืฅ ืืขื ืขื ืคืืจืืื ืื ืืื ืื ืึธื ืคึฟืจืขื: ืืขืจ ืขืจืฉืืขืจ ืืื ืึท ืคืึทืจืืื ืื ืืื ืื ืึทืืจืืืืื ืืืฉ, ืื ืจืืข ืืื ืึท ืคืึทืจืืื ืื ืืื ืื ืืืึทืืืขืก ืืืฉ. ืืืื ืึท ืขื ืืืื ืืื 2 ืึทืืจืืืืืฅ, 4 ืืืฉืืื ืฅ ืืขื ืขื ืืืจืฃ! ืึทืืืืืืึธื ืึทืืื, ืึทืืข ืึทืืจืืืืืฅ ืืขื ืขื ืืืคึผืืงืื ืกืืึธืจื ืืื ืกืืจืื ืืก, ืืืึธืก ืจืขืืืืืืื ืืื ืืืคึผ ืงืึทืกืืื ื ืคึฟืึทืจ ืื ืจืขืืืืืึทื ืืื ืื WHERE ืคึผืื ืงื. ืืืื ืืืจ ืฉืจืืึทืื ืึท ืคึผืืึทืฅ ืคืื ืคึฟืจืืื, ืืึธืก ืืื ืืึทื ืฅ ืืืืกืืคืึทื ืืื ืืขืจืืื ืขื ืคืื ืืืื ื ืืฆื.
ืืจืึธืฅ ืื ืงืืึธืจ ืืื ืืขืจ ืืึธื ืืืกืึธืจื, EAV ืืื ืืึทื ื ืฉืืื ืืขื ืืฆื ืฆื ืกืึธืืืืข ืื ืืืืคึผืก ืคืื ืคึผืจืึธืืืขืืก. ืืืก ืืขื ืขื ืืขืืืขื ืืึทืฉืขืจื ืฉืึธืจืืงืึธืืื ืืก, ืืื ืขืก ืืื ืคืฉืื ืงืืื ืืขืกืขืจ ืื ืืขืจ ืืจืืจื.
ืึธืืขืจ ืืขืืึธืื ืึท ื ืืึทืข "ืืขืื ืึธืืึธืืืข" ืืื ืืจืืืก ืืื PostgreSQL ...
ืกืืึทืจืืื ื ืืื PostgreSQL 9.4, ืื JSONB ืืึทืื ืืืคึผ ืืื ืฆืืืขืืขืื ืฆื ืงืจืึธื JSON ืืืื ืขืจื ืืึทืื. ืืึธืืฉ ืกืืึธืจืื ื JSON ืืื ืืขื ืคึฟืึธืจืืึทื ืืืคึผืืงืื ื ืขืื ืึท ืืืกื ืืขืจ ืคึผืืึทืฅ ืืื ืฆืืื ืืื ืงืืึธืจ ืืขืงืกื JSON, ืืืจืืคืืจื ืึทืคึผืขืจืืืฉืึทื ื ืืืืฃ ืขืก ืืื ืคืื ืคืึทืกืืขืจ. JSONB ืืืื ืฉืืืฆื ืื ืืขืงืกืื ื, ืืืึธืก ืืืื ืคึฟืจืืื ืืคืืื ืคืึทืกืืขืจ.
ืื JSONB ืืึทืื ืืืคึผ ืึทืืึทืื ืืื ืื ืฆื ืคืึทืจืืืึทืื ืื ืงืึทืืืขืจืกืึทื EAV ืืืกืืขืจ ืืืจื ืึทืืื ื ืืืืื ืืืื JSONB ืืืึทื ืฆื ืืื ืืืขืจ ืขื ืืืื ืืืฉ, ืืื ืืืืขืจ ืกืืืคึผืืึทืคืืืื ื ืืึทืืึทืืืืก ืคึผืืึทื. ืึธืืขืจ ืคืืืข ืืขื ืื ืึทื ืืึธืก ืืึธื ืืืื ืืืืืืื ืืื ืึท ืคืึทืจืงืืขื ืขืจื ืืื ืคึผืจืึธืืืึทืงืืืืืึทืื... ืืขืจืคึฟืึทืจ ืืึธื ืืื ืืขืฉืจืืื ืืขื ืึทืจืืืงื.
ืืึทืฉืืขืืืงื ืึท ืคึผืจืึธืืข ืืึทืืึทืืืืก
ืคึฟืึทืจ ืืขื ืคืึทืจืืืืึทื, ืืื ืืืฉืืคื ืื ืืึทืืึทืืืืก ืืืืฃ ืึท ืคืจืืฉ ืื ืกืืึทืืืจืื ื ืคืื PostgreSQL 9.5 ืืืืฃ ืื ืืืืขื ืคืื $ 80
CREATE TABLE entity (
id SERIAL PRIMARY KEY,
name TEXT,
description TEXT
);
CREATE TABLE entity_attribute (
id SERIAL PRIMARY KEY,
name TEXT
);
CREATE TABLE entity_attribute_value (
id SERIAL PRIMARY KEY,
entity_id INT REFERENCES entity(id),
entity_attribute_id INT REFERENCES entity_attribute(id),
value TEXT
);
ืื ืืขืจ ืืื ืึท ืืืฉ ืืื ืื ืืขืืืข ืืึทืื ืืืขื ืืืื ืกืืึธืจื, ืึธืืขืจ ืืื ืึทืืจืืืืืฅ ืืื ืึท JSONB ืืืคึผ ืืืึทื - ืคึผืจืึธืคึผืขืจืืืขืก.
CREATE TABLE entity_jsonb (
id SERIAL PRIMARY KEY,
name TEXT,
description TEXT,
properties JSONB
);
ืขืก ืงืืงื ืคืื ืกืืืคึผืืขืจ, ืฆื ื ืื? ืืขืจื ืึธื ืขืก ืืื ืฆืืืขืืขืื ืฆื ืื ืขื ืืืื ืืืฉื (ืขื ืืืื & entity_jsonb) 10 ืืืืืึธื ืจืขืงืึธืจืืก, ืืื ืึทืงืึธืจืืื ืืื, ืื ืืืฉ ืืื ืืขืืืขื ืึธื ืืขืคืืื ืืื ืื ืืขืืืข ืืึทืื ื ืืฆื ืื EAV ืืืกืืขืจ ืืื ืืขืจ ืฆืืืึทื ื ืืื ืึท JSONB ืืืึทื - entity_jsonb.properties. ืืืื, ืืืจ ืืืงืืืขื ืขืืืขืืข ืคืึทืจืฉืืืขื ืข ืืึทืื ืืืืคึผืก ืฆืืืืฉื ืื ืืื ืฆืข ืืึทื ื ืคืื ืคึผืจืึธืคึผืขืจืืืขืก. ืืืึทืฉืคึผืื ืืึทืื:
{
id: 1
name: "Entity1"
description: "Test entity no. 1"
properties: {
color: "red"
lenght: 120
width: 3.1882420
hassomething: true
country: "Belgium"
}
}
ืึทืืื ืืืฆื ืืืจ ืืึธืื ืื ืืขืืืข ืืึทืื ืคึฟืึทืจ ืืืืืข ืึธืคึผืฆืืขืก. ืืื ืก ืึธื ืืืืื ืงืึทืืคึผืขืจืื ื ืืืคึผืืึทืืึทื ืฅ ืืื ืึทืจืืขื!
ืคืึทืจืคึผืึธืฉืขืืขืจื ืืืื ืคึผืืึทื
ืขืก ืืื ืืขืืืขื ืคืจืืขืจ ืกืืืืืื ืึทื ืื ืืึทืืึทืืืืก ืคึผืืึทื ืืื ืืขืืืขื ืืืืขืจ ืกืืืคึผืืึทืคืืื: ืืืื ืืืฉ, ืืืจื ื ืืฆื ืึท JSONB ืืืึทื ืคึฟืึทืจ ืคึผืจืึธืคึผืขืจืืืขืก, ืึทื ืฉืืึธื ืคืื ื ืืฆื ืืจืื ืืืฉื ืคึฟืึทืจ EAV. ืืืขืจ ืืื ืืื ืืึธืก ืฉืคืืืื ืืื ืจืืงืืืขืก? ืืขืจืืืึทื ืืืงืื ืืขื ืคืื ืืืื ืขื ืืืื ืคืึทืจืืึธื ืงืืงื ืืื ืืึธืก:
-- EAV
UPDATE entity_attribute_value
SET value = 'blue'
WHERE entity_attribute_id = 1
AND entity_id = 120;
-- JSONB
UPDATE entity_jsonb
SET properties = jsonb_set(properties, '{"color"}', '"blue"')
WHERE id = 120;
ืืื ืืืจ ืงืขื ืขื ืืขื, ืื ืืขืฆืืข ืืงืฉื ืืื ื ืืฉื ืกืืืคึผืืขืจ. ืฆื ืืขืจืืืึทื ืืืงื ืื ืืืขืจื ืคืื ืึท ืคืึทืจืืึธื ืืื ืึท JSONB ืืืืคืขืฅ ืืืจ ืืึธืื ืฆื ื ืืฆื ืื ืคึฟืื ืงืฆืืข
ืืืฆื ืืึธืื ืืื ืื ืืืืกืงืืืึทืื ืื ืขื ืืืื ืืืึธืก ืืืจ ืคึผืื ืงื ืืขืจืืืึทื ืืืงื ืืืืืจื ืืืืฃ ืืืื ื ืืึทืข ืงืึธืืืจ:
-- EAV
SELECT e.name
FROM entity e
INNER JOIN entity_attribute_value eav ON e.id = eav.entity_id
INNER JOIN entity_attribute ea ON eav.entity_attribute_id = ea.id
WHERE ea.name = 'color' AND eav.value = 'blue';
-- JSONB
SELECT name
FROM entity_jsonb
WHERE properties ->> 'color' = 'blue';
ืืื ืืจืึทืืื ืืืจ ืงืขื ืขื ืฉืืืืขื ืึทื ืื ืจืืข ืืืื ืขืจ ืืื ืงืืจืฆืขืจ (ืงืืื ืคืึทืจืืื ืื!), ืืื ืืขืจืืืขืจ ืืขืจ ืืืื ืขืืืืืง. JSONB ืืืื ืก ืืึธ! ืืืจ ื ืืฆื ืื JSON ->> ืึธืคึผืขืจืึทืืึธืจ ืฆื ืืึทืงืืืขื ืื ืงืึธืืืจ ืืื ืึท ืืขืงืกื ืืืขืจื ืคืื ืึท JSONB ืืืืคืขืฅ. ืขืก ืืื ืืืื ืึท ืฆืืืืื ืืืขื ืฆื ืืขืจืืจืืืื ืื ืืขืืืข ืจืขืืืืืึทื ืืื ืื JSONB ืืึธืืขื ื ืืฆื ืื @> ืึธืคึผืขืจืึทืืึธืจ:
-- JSONB
SELECT name
FROM entity_jsonb
WHERE properties @> '{"color": "blue"}';
ืืึธืก ืืื ืึท ืืืกื ืืขืจ ืงืึธืืคึผืืืฆืืจื: ืืืจ ืงืึธื ืืจืึธืืืจื ืืืื ืื JSON ืืืืคืขืฅ ืืื ืืืึทื ืคึผืจืึธืคึผืขืจืืืขืก ืืืึทื ืึผืืื ืึท ืืืืคืขืฅ ืืืึธืก ืืื ืจืขืื ืคืื ืื @> ืึธืคึผืขืจืึทืืึธืจ. ืืืืื ืืงืขืจ ืืืื ืขืืืืืง, ืืขืจ ืคึผืจืึธืืืงืืืื (ืืขื ืืืืืืขืจ).
ืืึธืืืจ ืืึทืื ืื ื ืืฆื ืคืื JSONB ืืคืืื ืืจืื ืืขืจ ืืืขื ืืืจ ืืึทืจืคึฟื ืฆื ืกืขืืขืงืืืจื ืงืืืคื ืคึผืจืึธืคึผืขืจืืืขืก ืืื ืึทืืึธื. ืืึธืก ืืื ืืื ืื JSONB ืฆืืืึทื ื ืืึทืงืข ืงืืื ืืื: ืืืจ ืคืฉืื ืืืืกืงืืืึทืื ืคึผืจืึธืคึผืขืจืืืขืก ืืื ื ืึธื ืฉืคืืืื ืืื ืืื ืืืขืจ ืจืขืืืืืึทื ืฉืืขืื ืึธื ืื ื ืืื ืคึฟืึทืจ ืืืฉืืื ืฅ:
-- JSONB
SELECT name
, properties ->> 'color'
, properties ->> 'country'
FROM entity_jsonb
WHERE id = 120;
ืืื EAV ืืืจ ืืืขื ืืึทืจืคึฟื 2 ืืืฉืืื ืฅ ืคึฟืึทืจ ืืขืืขืจ ืคืึทืจืืึธื ืืืจ ืืืืื ืฆื ืคืจืขืื. ืืื ืืืื ืืืื ืื ื, ืื ืืืืื ืงืืืืจืื ืืืืึทืื ืึท ืืจืืืก ืกืืืคึผืืึทืคืืงืืืฉืึทื ืืื ืืึทืืึทืืืืก ืคึผืืึทื. ืืขื ืืขืจ ืืืืฉืคืืื ืคืื ืืื ืฆื ืฉืจืืึทืื JSONB ืงืืืืจืื, ืืืื ืืื
ืืืฆื ืขืก ืืื ืฆืืื ืฆื ืจืขืื ืืืขืื ืคืึธืจืฉืืขืืื ื.
ืคืึธืจืฉืืขืืื ื
ืฆื ืคืึทืจืืืืึทืื ืคืึธืจืฉืืขืืื ื ืืื ืืขืืืืื ื
ืื ืืึทืื ืืขืจืืืึทื ืืืงื ืืขืืืืื ืื ืคืืืืขื ืืข ืจืขืืืืืึทืื ืืื ืืขืจืืื ืขื ืคืื ืฆืืื (ืืื ืืื). ืืึทืืขืจืงืื ื ืึทื ืื ืืืึธื ืืื ืืึธืืึทืจืืืืืืง:
ืืืจ ืืขื ืึทื JSONB ืืื ืคืื (> 50000-x) ืคืึทืกืืขืจ ืืื EAV ืืืื ืืืจ ืืึธื ื ืื ื ืืฆื ืื ืืขืงืกืื, ืคึฟืึทืจ ืื ืกืืื ืืืืื. ืืืขื ืืืจ ืืื ืืขืงืก ืฉืคืืืื ืืื ืขืจืฉืืืง ืงืื, ืื ืืืืืง ืึผืืขื ืคืืจืฉืืืื ืื, ืึธืืขืจ JSONB ืืื ื ืึธื 1,3 ืืื ืคืึทืกืืขืจ ืืื EAV. ืืึทืืขืจืงืื ื ืึทื ืืขืจ ืืื ืืขืงืก ืืืืฃ ืื JSONB ืืืึทื ืืื ืงืืื ืืืืจืงืื ื ืืึธ ืืื ื ืืืจ ืืึธื ื ืื ื ืืฆื ืื ืคืึทืจืืึธื ืืืึทื ืืื ืื ืืคืฉืืฆืื ื ืงืจืืืืืจืืึท.
ืคึฟืึทืจ ืกืึทืืขืงืืื ื ืืึทืื ืืืืืจื ืืืืฃ ืคืึทืจืืึธื ืืืขืจื, ืืืจ ืืึทืงืืืขื ืื ืคืืืืขื ืืข ืจืขืืืืืึทืื (ื ืึธืจืืึทื ืืืึธื):
ืืืจ ืงืขื ื ืืึทืืขืจืงื ืึทื JSONB ืืืืืขืจ ืึทืจืืขื ืคืึทืกืืขืจ ืืื EAV ืึธื ืื ืืขืงืกืื, ืึธืืขืจ ืืืขื EAV ืืื ืื ืืขืงืกืื, ืขืก ื ืึธื ืึทืจืืขื ืคืึทืกืืขืจ ืืื JSONB. ืึธืืขืจ ืืขืืึธืื ืืื ืืขืืขื ืึทื ืื ืฆืืื ืคึฟืึทืจ JSONB ืงืืืืจืื ืืขื ืขื ืื ืืขืืืข, ืืึธืก ืืึธื ืืืจ ืืขืคึฟืืจื ืฆื ืื ืคืึทืงื ืึทื GIN ืื ืืขืงืกืื ืืึธื ื ืื ืึทืจืืขื. ืืฉืืขืืช ืืืขื ืืืจ ื ืืฆื ืึท GIN ืืื ืืขืงืก ืืืืฃ ืึท ืืืึทื ืืื ืคึผืึทืคึผืืึทืืืืืึทื ืคึผืจืึธืคึผืขืจืืืขืก, ืขืก ื ืขืื ืืืืจืงืื ื ืืืืื ืืืขื ืืืจ ื ืืฆื ืื ืึทืจืืึทื ื ืขืืขื ืึธืคึผืขืจืึทืืึธืจ @>. ืืื ืืขืืืืื ื ืืึธืก ืืื ืึท ื ืืึทืข ืคึผืจืึธืืข ืืื ืขืก ืืื ืึท ืจืืืืง ืคึผืจืึทื ืืืืฃ ืืขืจ ืฆืืื: ืืืืื 0,153ms! ืืึธืก ืืื 15000 ืืื ืคืึทืกืืขืจ ืืื EAV ืืื 25000 ืืื ืคืึทืกืืขืจ ืืื ืื ->> ืึธืคึผืขืจืึทืืึธืจ.
ืืื ืืจืึทืืื ืขืก ืืื ืืขืืืขื ืฉื ืขื ืืขื ืื!
ืืึทืืึทืืึทืกืข ืืืฉ ืืจืืืก
ืืื ืก ืคืึทืจืืืืึทืื ืื ืืืฉ ืกืืืขืก ืคึฟืึทืจ ืืืืืข ืึทืคึผืจืึธืืืฉืื. ืืื psql ืืืจ ืงืขื ืขื ืืืืึทืื ืื ืืจืืืก ืคืื ืึทืืข ืืืฉื ืืื ืื ืืขืงืกืื ื ืืฆื ืื ืืึทืคึฟืขื dti+
ืคึฟืึทืจ ืื EAV ืฆืืืึทื ื, ืืืฉ ืกืืืขืก ืืขื ืขื ืึทืจืื 3068 ืืขืืืืืืื ืืื ืื ืืขืงืกืื ืึทืจืืืฃ ืฆื 3427 ืืขืืืืืืื ืคึฟืึทืจ ืึท ืืึทื ืฅ ืคืื 6,43 ืืืืืืืื. ืื JSONB ืฆืืืึทื ื ื ืืฆื 1817 MB ืคึฟืึทืจ ืื ืืืฉ ืืื 318 MB ืคึฟืึทืจ ืื ืื ืืขืงืกืื, ืืืึธืก ืืื 2,08 GB. ืขืก ืืืจื ืก ืืืืก 3 ืืื ืืืืื ืืงืขืจ! ืืขืจ ืคืึทืงื ืกืึทืคึผืจืืืื ืืืจ ืึท ืืืกื ืืืืึทื ืืืจ ืงืจืึธื ืคืึทืจืืึธื ื ืขืืขื ืืื ืืขืืขืจ JSONB ืืืืคืขืฅ.
ืึธืืขืจ ื ืึธื, ืื ื ืืืขืจื ืจืขืื ืคึฟืึทืจ ืืื: ืืื EAV ืืืจ ืงืจืึธื 2 ืื ืืึทืืืฉืขืจ ืคืจืขืื ืงืื ืคึผืขืจ ืึทืืจืืืืื ืืืขืจื, ืจืืืึทืืืื ื ืืื 8 ืืืืขืก ืคืื ื ืึธื ืืึทืื. ืึทืืืืืืึธื ืึทืืื, EAV ืกืืึธืจื ืึทืืข ืคืึทืจืืึธื ืืืึทืืืขืก ืืื ืืขืงืกื, ืืฉืขืช JSONB ืืืขื ื ืืฆื ื ืืืขืจืืง ืืื ืืืืืึทื ืืืึทืืืขืก ืื ืขืจืืขื ืืื ืืขืืืขื, ืจืืืึทืืืื ื ืืื ืึท ืงืืขื ืขืจืขืจ ืฉืคึผืืจ.
ืจืขืืืืืึทืื ืคืื
ืงืืืืขืืืืง, ืืื ืืจืึทืืื ืฉืคึผืึธืจื ืขื ืืืื ืคึผืจืึธืคึผืขืจืืืขืก ืืื JSONB ืคึฟืึธืจืืึทื ืงืขื ืขื ืืึทืื ืืืืืื ืื ื ืืื ืืืื ืืืื ืื ื ืืืื ืืึทืืึทืืืืก ืคืื ืืจืื ืืขืจ. ืืืื ืืืจ ืืืืคื ืึท ืคึผืืึทืฅ ืคืื ืคึฟืจืืื, ืืึทืืื ืึทืืฅ ืืื ืืขืจ ืืขืืืืงืขืจ ืืืฉ ืืื ืื ืขื ืืืื ืืืขื ืึทืงืฉืื ืึทืจืืขื ืืขืจ ืืคืืฉืึทื ืืื. ืืื ืืขืจ ืคืึทืงื ืึทื ืืึธืก ืกืืืคึผืืึทืคืืื ืื ืื ืืขืจืึทืงืฉืึทื ืฆืืืืฉื ืืึทืื ืืื ืฉืืื ืึท ืคึผืืืก, ืึธืืขืจ ืื ืจืืืึทืืืื ื ืืึทืืึทืืืืก ืืื 3 ืืื ืงืืขื ืขืจืขืจ ืืื ืืึทื ื.
ืืืื, ืืืืืจื ืืืืฃ ืื ืืืจืืืขืงืึธืื ืืขืกืฅ, ืืืจ ืงืขื ืขื ืคืึทืจืขื ืืืงื ืึทื ืื ืคืึธืจืฉืืขืืื ื ืืึธืกืกืขืก ืืขื ืขื ืืืืขืจ ื ืืฉืืืง. ืืื ืขืืืขืืข ืงืึทืกืขืก, JSONB ืืื ืืคืืื ืคืึทืกืืขืจ ืืื EAV, ืืืึธืก ืืืื ืขืก ืืคืืื ืืขืกืขืจ. ืึธืืขืจ, ืืขืจ ืืขื ืืฉืืึทืจืง ืคืื ืงืืจืก ืืื ื ืืฉื ืืขืงื ืึทืืข ืึทืกืคึผืขืงืฅ (ืืืฉื ืขื ืืืืื ืืื ืึท ืืืืขืจ ืืจืืืก ื ืืืขืจ ืคืื ืคึผืจืึธืคึผืขืจืืืขืก, ืึท ืืึทืืืืืืง ืคืึทืจืืจืขืกืขืจื ืืื ืื ื ืืืขืจ ืคืื ืคึผืจืึธืคึผืขืจืืืขืก ืคืื ืืืืืกืืื ื ืืึทืื, ...), ืึทืืื ืืืื ืืืจ ืืึธืื ืงืืื ืคึฟืืจืืืืื ืืืืฃ ืืื ืฆื ืคึฟืึทืจืืขืกืขืจื ืืื , ืืืืข ืคืืื ืคืจืื ืฆื ืืึธืื ืืื ืื ืืึทืืขืจืงืื ืืขื!
ืืงืืจ: www.habr.com