TL; DR: JSONB āĻā§āĻ¯āĻŧā§āĻ°āĻŋ āĻĒāĻžāĻ°āĻĢāĻ°āĻŽā§āĻ¯āĻžāĻ¨ā§āĻ¸āĻā§ āĻ¤ā§āĻ¯āĻžāĻ āĻ¨āĻž āĻāĻ°ā§āĻ āĻĄāĻžāĻāĻžāĻŦā§āĻ¸ āĻ¸ā§āĻāĻŋāĻŽāĻž āĻŦāĻŋāĻāĻžāĻļāĻā§ āĻŦā§āĻ¯āĻžāĻĒāĻāĻāĻžāĻŦā§ āĻ¸āĻšāĻ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĨ¤
āĻā§āĻŽāĻŋāĻāĻž
āĻāĻ¸ā§āĻ¨ āĻāĻāĻāĻŋ āĻ°āĻŋāĻ˛ā§āĻļāĻ¨āĻžāĻ˛ āĻĄāĻžāĻāĻžāĻŦā§āĻ¸ā§āĻ° (āĻĄāĻžāĻāĻžāĻŦā§āĻ¸) āĻŦāĻŋāĻļā§āĻŦā§āĻ° āĻĒā§āĻ°āĻžāĻā§āĻ¨āĻ¤āĻŽ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°ā§āĻ° āĻā§āĻˇā§āĻ¤ā§āĻ°ā§ āĻ¸āĻŽā§āĻāĻŦāĻ¤ āĻāĻāĻāĻŋ āĻā§āĻ˛āĻžāĻ¸āĻŋāĻ āĻāĻĻāĻžāĻšāĻ°āĻŖ āĻĻā§āĻāĻ¯āĻŧāĻž āĻ¯āĻžāĻ: āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻāĻāĻŋ āĻ¸āĻ¤ā§āĻ¤āĻž āĻāĻā§ āĻāĻŦāĻ āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻ āĻ¸āĻ¤ā§āĻ¤āĻžāĻ° āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻŦā§āĻļāĻŋāĻˇā§āĻā§āĻ¯ (āĻā§āĻŖāĻžāĻŦāĻ˛ā§) āĻ¸āĻāĻ°āĻā§āĻˇāĻŖ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§āĨ¤ āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻ¸āĻŦ āĻĻā§āĻˇā§āĻāĻžāĻ¨ā§āĻ¤ā§ āĻāĻāĻ āĻŦā§āĻļāĻŋāĻˇā§āĻā§āĻ¯ā§āĻ° āĻ¸ā§āĻ āĻ¨āĻžāĻ āĻĨāĻžāĻāĻ¤ā§ āĻĒāĻžāĻ°ā§ āĻāĻŦāĻ āĻāĻŦāĻŋāĻˇā§āĻ¯āĻ¤ā§ āĻāĻ°āĻ āĻŦā§āĻļāĻŋāĻˇā§āĻā§āĻ¯ āĻ¯ā§āĻ āĻāĻ°āĻž āĻšāĻ¤ā§ āĻĒāĻžāĻ°ā§āĨ¤
āĻāĻ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻžāĻāĻŋ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ āĻāĻ°āĻžāĻ° āĻ¸āĻŦāĻā§āĻ¯āĻŧā§ āĻ¸āĻšāĻ āĻāĻĒāĻžāĻ¯āĻŧ āĻšāĻ˛ āĻĒā§āĻ°āĻ¤āĻŋāĻāĻŋ āĻ¸āĻŽā§āĻĒāĻ¤ā§āĻ¤āĻŋāĻ° āĻŽāĻžāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻĄāĻžāĻāĻžāĻŦā§āĻ¸ āĻā§āĻŦāĻŋāĻ˛ā§ āĻāĻāĻāĻŋ āĻāĻ˛āĻžāĻŽ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻž āĻāĻŦāĻ āĻāĻāĻāĻŋ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻ¸āĻ¤ā§āĻ¤āĻž āĻĻā§āĻˇā§āĻāĻžāĻ¨ā§āĻ¤ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ā§āĻ¯āĻŧāĻā§āĻ˛āĻŋ āĻĒā§āĻ°āĻŖ āĻāĻ°āĻžāĨ¤ āĻĻāĻžāĻ°ā§āĻŖ! āĻ¸āĻŽāĻ¸ā§āĻ¯āĻž āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻā§... āĻ¯āĻ¤āĻā§āĻˇāĻŖ āĻ¨āĻž āĻāĻĒāĻ¨āĻžāĻ° āĻā§āĻŦāĻŋāĻ˛ā§ āĻ˛āĻā§āĻˇ āĻ˛āĻā§āĻˇ āĻ°ā§āĻāĻ°ā§āĻĄ āĻ°āĻ¯āĻŧā§āĻā§ āĻāĻŦāĻ āĻāĻĒāĻ¨āĻžāĻā§ āĻāĻāĻāĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻ°ā§āĻāĻ°ā§āĻĄ āĻ¯ā§āĻ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§āĨ¤
EAV āĻĒā§āĻ¯āĻžāĻāĻžāĻ°ā§āĻ¨ āĻŦāĻŋāĻŦā§āĻāĻ¨āĻž āĻāĻ°ā§āĻ¨ (
āĻ¯āĻžāĻāĻšā§āĻ, āĻ¯āĻĻāĻŋ āĻāĻāĻž āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻ° āĻāĻŋāĻā§ āĻāĻžāĻ°āĻžāĻĒ āĻĻāĻŋāĻ āĻ¨āĻž āĻĨāĻžāĻā§ āĻ¤āĻŦā§ āĻāĻŽāĻŋ āĻāĻ āĻĒā§āĻ¸ā§āĻāĻāĻŋ āĻ˛āĻŋāĻāĻŦ āĻ¨āĻžāĨ¤ āĻ¸ā§āĻ¤āĻ°āĻžāĻ, āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ, āĻĒā§āĻ°āĻ¤āĻŋāĻāĻŋ 1āĻāĻŋ āĻŦā§āĻļāĻŋāĻˇā§āĻā§āĻ¯āĻ¯ā§āĻā§āĻ¤ āĻāĻ āĻŦāĻž āĻāĻāĻžāĻ§āĻŋāĻ āĻ¸āĻ¤ā§āĻ¤āĻž āĻĒā§āĻ¤ā§, āĻā§āĻ¯ā§āĻ¯āĻŧāĻžāĻ°ā§āĻ¤ā§ 2āĻāĻŋ āĻ¯ā§āĻāĻĻāĻžāĻ¨ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨: āĻĒā§āĻ°āĻĨāĻŽāĻāĻŋ āĻŦā§āĻļāĻŋāĻˇā§āĻā§āĻ¯ āĻā§āĻŦāĻŋāĻ˛ā§āĻ° āĻ¸āĻžāĻĨā§ āĻāĻāĻāĻŋ āĻ¯ā§āĻāĻĻāĻžāĻ¨, āĻĻā§āĻŦāĻŋāĻ¤ā§āĻ¯āĻŧāĻāĻŋ āĻŽāĻžāĻ¨ āĻā§āĻŦāĻŋāĻ˛ā§āĻ° āĻ¸āĻžāĻĨā§ āĻāĻāĻāĻŋ āĻ¯ā§āĻāĻĻāĻžāĻ¨āĨ¤ āĻ¯āĻĻāĻŋ āĻāĻāĻāĻŋ āĻ¸āĻ¤ā§āĻ¤āĻžāĻ° 2āĻāĻŋ āĻŦā§āĻļāĻŋāĻˇā§āĻā§āĻ¯ āĻĨāĻžāĻā§, āĻ¤āĻžāĻšāĻ˛ā§ 4āĻāĻŋ āĻ¯ā§āĻāĻĻāĻžāĻ¨ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨! āĻāĻĒāĻ°āĻ¨ā§āĻ¤ā§, āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻŦā§āĻļāĻŋāĻˇā§āĻā§āĻ¯ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖāĻ¤ āĻ¸ā§āĻā§āĻ°āĻŋāĻ āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻ¸āĻāĻ°āĻā§āĻˇāĻŖ āĻāĻ°āĻž āĻšāĻ¯āĻŧ, āĻ¯āĻžāĻ° āĻĢāĻ˛ā§ āĻĢāĻ˛āĻžāĻĢāĻ˛ āĻāĻŦāĻ WHERE āĻā§āĻ˛āĻ āĻāĻāĻ¯āĻŧā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻžāĻāĻĒ āĻāĻžāĻ¸ā§āĻāĻŋāĻ āĻšāĻ¯āĻŧāĨ¤ āĻāĻĒāĻ¨āĻŋ āĻ¯āĻĻāĻŋ āĻ
āĻ¨ā§āĻ āĻĒā§āĻ°āĻļā§āĻ¨ āĻ˛ā§āĻā§āĻ¨, āĻ¤āĻžāĻšāĻ˛ā§ āĻ°āĻŋāĻ¸ā§āĻ°ā§āĻ¸ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°ā§āĻ° āĻā§āĻˇā§āĻ¤ā§āĻ°ā§ āĻāĻāĻŋ āĻŦā§āĻļ āĻ
āĻĒāĻāĻ¯āĻŧāĨ¤
āĻāĻ āĻ¸ā§āĻ¸ā§āĻĒāĻˇā§āĻ āĻ¤ā§āĻ°ā§āĻāĻŋāĻā§āĻ˛āĻŋ āĻ¸āĻ¤ā§āĻ¤ā§āĻŦā§āĻ, āĻāĻ āĻ§āĻ°āĻ¨ā§āĻ° āĻ¸āĻŽāĻ¸ā§āĻ¯āĻžāĻā§āĻ˛āĻŋ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ EAV āĻĻā§āĻ°ā§āĻāĻāĻžāĻ˛ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻā§āĨ¤ āĻāĻā§āĻ˛āĻŋ āĻ
āĻ¨āĻŋāĻŦāĻžāĻ°ā§āĻ¯ āĻ¤ā§āĻ°ā§āĻāĻŋ āĻāĻŋāĻ˛ āĻāĻŦāĻ āĻāĻ° āĻā§āĻ¯āĻŧā§ āĻāĻžāĻ˛ āĻŦāĻŋāĻāĻ˛ā§āĻĒ āĻāĻ° āĻāĻŋāĻ˛ āĻ¨āĻžāĨ¤
āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻ¤āĻžāĻ°āĻĒāĻ° āĻĒā§āĻ¸ā§āĻāĻā§āĻ°ā§āĻāĻ¸āĻāĻŋāĻāĻāĻ˛-āĻ āĻāĻāĻāĻŋ āĻ¨āĻ¤ā§āĻ¨ "āĻĒā§āĻ°āĻ¯ā§āĻā§āĻ¤āĻŋ" āĻāĻĒāĻ¸ā§āĻĨāĻŋāĻ¤ āĻšāĻ¯āĻŧā§āĻāĻŋāĻ˛...
PostgreSQL 9.4 āĻĻāĻŋāĻ¯āĻŧā§ āĻļā§āĻ°ā§ āĻāĻ°ā§, JSON āĻŦāĻžāĻāĻ¨āĻžāĻ°āĻŋ āĻĄā§āĻāĻž āĻ¸āĻā§āĻāĻ¯āĻŧ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ JSONB āĻĄā§āĻāĻž āĻāĻžāĻāĻĒ āĻ¯ā§āĻ āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻāĻŋāĻ˛āĨ¤ āĻ¯āĻĻāĻŋāĻ āĻāĻ āĻŦāĻŋāĻ¨ā§āĻ¯āĻžāĻ¸ā§ JSON āĻ¸āĻā§āĻāĻ¯āĻŧ āĻāĻ°āĻ¤ā§ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖāĻ¤ āĻĒā§āĻ˛ā§āĻāĻ¨ āĻā§āĻā§āĻ¸āĻ JSON-āĻāĻ° āĻ¤ā§āĻ˛āĻ¨āĻžāĻ¯āĻŧ āĻāĻāĻā§ āĻŦā§āĻļāĻŋ āĻāĻžāĻ¯āĻŧāĻāĻž āĻāĻŦāĻ āĻ¸āĻŽāĻ¯āĻŧ āĻ˛āĻžāĻā§, āĻāĻāĻŋāĻ¤ā§ āĻ āĻĒāĻžāĻ°ā§āĻļāĻ¨ āĻāĻ°āĻž āĻ āĻ¨ā§āĻ āĻĻā§āĻ°ā§āĻ¤āĨ¤ JSONB āĻāĻāĻžāĻĄāĻŧāĻžāĻ āĻāĻ¨ā§āĻĄā§āĻā§āĻ¸āĻŋāĻ āĻ¸āĻŽāĻ°ā§āĻĨāĻ¨ āĻāĻ°ā§, āĻ¯āĻž āĻĒā§āĻ°āĻļā§āĻ¨āĻā§āĻ˛āĻŋāĻā§ āĻāĻ°āĻ āĻĻā§āĻ°ā§āĻ¤ āĻāĻ°ā§ āĻ¤ā§āĻ˛ā§āĨ¤
JSONB āĻĄā§āĻāĻž āĻāĻžāĻāĻĒ āĻāĻŽāĻžāĻĻā§āĻ° āĻ¸āĻ¤ā§āĻ¤āĻž āĻā§āĻŦāĻŋāĻ˛ā§ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻāĻāĻāĻŋ JSONB āĻāĻ˛āĻžāĻŽ āĻ¯ā§āĻ āĻāĻ°ā§ āĻāĻāĻŋāĻ˛ EAV āĻĒā§āĻ¯āĻžāĻāĻžāĻ°ā§āĻ¨āĻā§ āĻĒā§āĻ°āĻ¤āĻŋāĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻāĻ°āĻ¤ā§ āĻĻā§āĻ¯āĻŧ, āĻĄāĻžāĻāĻžāĻŦā§āĻ¸ āĻĄāĻŋāĻāĻžāĻāĻ¨āĻā§ āĻŦā§āĻ¯āĻžāĻĒāĻāĻāĻžāĻŦā§ āĻ¸āĻ°āĻ˛ āĻāĻ°ā§āĨ¤ āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻ āĻ¨ā§āĻā§ āĻ¯ā§āĻā§āĻ¤āĻŋ āĻĻā§āĻ¨ āĻ¯ā§ āĻāĻāĻŋ āĻāĻ¤ā§āĻĒāĻžāĻĻāĻ¨āĻļā§āĻ˛āĻ¤āĻž āĻšā§āĻ°āĻžāĻ¸ā§āĻ° āĻ¸āĻžāĻĨā§ āĻšāĻāĻ¯āĻŧāĻž āĻāĻāĻŋāĻ¤... āĻ¤āĻžāĻ āĻāĻŽāĻŋ āĻāĻ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻāĻŋ āĻ˛āĻŋāĻā§āĻāĻŋāĨ¤
āĻāĻāĻāĻŋ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻĄāĻžāĻāĻžāĻŦā§āĻ¸ āĻ¸ā§āĻ āĻāĻĒ āĻāĻ°āĻž āĻšāĻā§āĻā§
āĻāĻ āĻ¤ā§āĻ˛āĻ¨āĻžāĻ° āĻāĻ¨ā§āĻ¯, āĻāĻŽāĻŋ $9.5 āĻŦāĻŋāĻ˛ā§āĻĄā§ PostgreSQL 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 āĻāĻāĻžāĻ¨ā§ āĻāĻŋāĻ¤ā§āĻā§! āĻāĻŽāĻ°āĻž JSONB āĻ āĻŦāĻā§āĻā§āĻ āĻĨā§āĻā§ āĻā§āĻā§āĻ¸āĻ āĻŽāĻžāĻ¨ āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻ°āĻ āĻĒā§āĻ¤ā§ JSON ->> āĻ āĻĒāĻžāĻ°ā§āĻāĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻŋāĨ¤ @> āĻ āĻĒāĻžāĻ°ā§āĻāĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ 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 EAV āĻāĻ° āĻā§āĻ¯āĻŧā§ āĻ
āĻ¨ā§āĻ āĻĻā§āĻ°ā§āĻ¤ (> 50000-x) āĻ¯āĻĻāĻŋ āĻāĻĒāĻ¨āĻŋ āĻ¸ā§āĻā§ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ¨āĻž āĻāĻ°ā§āĻ¨, āĻāĻĒāĻ°ā§ āĻāĻ˛ā§āĻ˛āĻŋāĻāĻŋāĻ¤ āĻāĻžāĻ°āĻŖā§āĨ¤ āĻ¯āĻāĻ¨ āĻāĻŽāĻ°āĻž āĻĒā§āĻ°āĻžāĻĨāĻŽāĻŋāĻ āĻā§āĻā§āĻ˛āĻŋāĻ° āĻ¸āĻžāĻĨā§ āĻāĻ˛āĻžāĻŽāĻā§āĻ˛āĻŋāĻā§ āĻ¸ā§āĻā§ āĻāĻ°āĻŋ, āĻ¤āĻāĻ¨ āĻĒāĻžāĻ°ā§āĻĨāĻā§āĻ¯ āĻĒā§āĻ°āĻžāĻ¯āĻŧ āĻ
āĻĻā§āĻļā§āĻ¯ āĻšāĻ¯āĻŧā§ āĻ¯āĻžāĻ¯āĻŧ, āĻ¤āĻŦā§ JSONB āĻāĻāĻ¨āĻ EAV āĻĨā§āĻā§ 1,3 āĻā§āĻŖ āĻĻā§āĻ°ā§āĻ¤āĨ¤ āĻŽāĻ¨ā§ āĻ°āĻžāĻāĻŦā§āĻ¨ āĻ¯ā§ JSONB āĻāĻ˛āĻžāĻŽā§āĻ° āĻ¸ā§āĻā§ āĻāĻāĻžāĻ¨ā§ āĻā§āĻ¨ āĻĒā§āĻ°āĻāĻžāĻŦ āĻ¨ā§āĻ āĻāĻžāĻ°āĻŖ āĻāĻŽāĻ°āĻž āĻŽā§āĻ˛ā§āĻ¯āĻžāĻ¯āĻŧāĻ¨ā§āĻ° āĻŽāĻžāĻ¨āĻĻāĻŖā§āĻĄā§ āĻ¸āĻŽā§āĻĒāĻ¤ā§āĻ¤āĻŋ āĻāĻ˛āĻžāĻŽ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻāĻŋ āĻ¨āĻžāĨ¤
āĻ¸āĻŽā§āĻĒāĻ¤ā§āĻ¤āĻŋ āĻŽāĻžāĻ¨ā§āĻ° āĻāĻĒāĻ° āĻāĻŋāĻ¤ā§āĻ¤āĻŋ āĻāĻ°ā§ āĻĄā§āĻāĻž āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻāĻ¨ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯, āĻāĻŽāĻ°āĻž āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻāĻŋāĻ¤ āĻĢāĻ˛āĻžāĻĢāĻ˛ (āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻ¸ā§āĻā§āĻ˛) āĻĒāĻžāĻ:
āĻāĻĒāĻ¨āĻŋ āĻ˛āĻā§āĻˇā§āĻ¯ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨ āĻ¯ā§ JSONB āĻāĻŦāĻžāĻ° āĻ¸ā§āĻā§ āĻāĻžāĻĄāĻŧāĻžāĻ EAV āĻāĻ° āĻā§āĻ¯āĻŧā§ āĻĻā§āĻ°ā§āĻ¤ āĻāĻžāĻ āĻāĻ°ā§, āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻ¯āĻāĻ¨ EAV āĻ¸ā§āĻā§ āĻ¸āĻš, āĻāĻāĻŋ āĻāĻāĻ¨āĻ JSONB āĻāĻ° āĻā§āĻ¯āĻŧā§ āĻĻā§āĻ°ā§āĻ¤ āĻāĻžāĻ āĻāĻ°ā§āĨ¤ āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻ¤āĻžāĻ°āĻĒāĻ° āĻāĻŽāĻŋ āĻĻā§āĻā§āĻāĻŋ āĻ¯ā§ JSONB āĻĒā§āĻ°āĻļā§āĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻ¸āĻŽāĻ¯āĻŧ āĻāĻāĻ āĻāĻŋāĻ˛, āĻāĻāĻŋ āĻāĻŽāĻžāĻā§ āĻāĻŋāĻāĻāĻāĻ¨ āĻ¸ā§āĻāĻāĻā§āĻ˛āĻŋ āĻāĻžāĻ āĻāĻ°ā§ āĻ¨āĻž āĻāĻ āĻŦāĻŋāĻˇāĻ¯āĻŧāĻāĻŋāĻ¤ā§ āĻĒā§āĻ°āĻ°ā§āĻāĻŋāĻ¤ āĻāĻ°ā§āĻāĻŋāĻ˛āĨ¤ āĻĻā§āĻļā§āĻ¯āĻ¤ āĻāĻĒāĻ¨āĻŋ āĻ¯āĻāĻ¨ āĻāĻ¨āĻŦāĻšā§āĻ˛ āĻŦā§āĻļāĻŋāĻˇā§āĻā§āĻ¯ āĻ¸āĻš āĻāĻāĻāĻŋ āĻāĻ˛āĻžāĻŽā§ āĻāĻāĻāĻŋ āĻāĻŋāĻāĻāĻāĻ¨ āĻ¸ā§āĻāĻ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§āĻ¨, āĻāĻāĻŋ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻ
āĻ¨ā§āĻ¤āĻ°ā§āĻā§āĻā§āĻ¤ āĻ
āĻĒāĻžāĻ°ā§āĻāĻ° @> āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻāĻžāĻ°ā§āĻ¯āĻāĻ° āĻšāĻ¯āĻŧāĨ¤ āĻāĻŽāĻŋ āĻāĻāĻŋ āĻāĻāĻāĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻĒāĻ°ā§āĻā§āĻˇāĻžāĻ¯āĻŧ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§āĻāĻŋ āĻāĻŦāĻ āĻāĻāĻŋ āĻ¸āĻŽāĻ¯āĻŧā§āĻ° āĻāĻĒāĻ° āĻāĻāĻāĻŋ āĻŦāĻŋāĻļāĻžāĻ˛ āĻĒā§āĻ°āĻāĻžāĻŦ āĻĢā§āĻ˛ā§āĻā§: āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° 0,153ms! āĻāĻāĻŋ EAV āĻĨā§āĻā§ 15000 āĻā§āĻŖ āĻĻā§āĻ°ā§āĻ¤ āĻāĻŦāĻ ->> āĻ
āĻĒāĻžāĻ°ā§āĻāĻ°ā§āĻ° āĻā§āĻ¯āĻŧā§ 25000 āĻā§āĻŖ āĻĻā§āĻ°ā§āĻ¤āĨ¤
āĻāĻŽāĻŋ āĻŽāĻ¨ā§ āĻāĻ°āĻŋ āĻāĻāĻž āĻ¯āĻĨā§āĻˇā§āĻ āĻĻā§āĻ°ā§āĻ¤ āĻāĻŋāĻ˛!
āĻĄāĻžāĻāĻžāĻŦā§āĻ¸ āĻā§āĻŦāĻŋāĻ˛ā§āĻ° āĻāĻāĻžāĻ°
āĻāĻ¸ā§āĻ¨ āĻāĻāĻ¯āĻŧ āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻ° āĻāĻ¨ā§āĻ¯ āĻā§āĻŦāĻŋāĻ˛ā§āĻ° āĻāĻāĻžāĻ° āĻ¤ā§āĻ˛āĻ¨āĻž āĻāĻ°āĻŋāĨ¤ psql-āĻ āĻāĻŽāĻ°āĻž āĻāĻŽāĻžāĻ¨ā§āĻĄ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻā§āĻŦāĻŋāĻ˛ āĻāĻŦāĻ āĻāĻ¨āĻĄā§āĻā§āĻ¸ā§āĻ° āĻāĻāĻžāĻ° āĻĻā§āĻāĻžāĻ¤ā§ āĻĒāĻžāĻ°āĻŋ dti+
EAV āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻ° āĻāĻ¨ā§āĻ¯, āĻā§āĻŦāĻŋāĻ˛ā§āĻ° āĻāĻāĻžāĻ° āĻĒā§āĻ°āĻžāĻ¯āĻŧ 3068 MB āĻāĻŦāĻ āĻŽā§āĻ 3427 GB āĻāĻ° āĻāĻ¨ā§āĻ¯ 6,43 MB āĻĒāĻ°ā§āĻ¯āĻ¨ā§āĻ¤ āĻ¸ā§āĻā§āĨ¤ JSONB āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻāĻŋ āĻā§āĻŦāĻŋāĻ˛ā§āĻ° āĻāĻ¨ā§āĻ¯ 1817 MB āĻāĻŦāĻ āĻ¸ā§āĻāĻāĻā§āĻ˛āĻŋāĻ° āĻāĻ¨ā§āĻ¯ 318 MB āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§, āĻ¯āĻž 2,08 GBāĨ¤ āĻāĻāĻž 3 āĻā§āĻŖ āĻāĻŽ āĻ¸āĻā§āĻ°āĻŋāĻ¯āĻŧ āĻāĻāĻ! āĻāĻ āĻ¤āĻĨā§āĻ¯āĻāĻŋ āĻāĻŽāĻžāĻā§ āĻāĻāĻā§ āĻ
āĻŦāĻžāĻ āĻāĻ°ā§āĻā§ āĻāĻžāĻ°āĻŖ āĻāĻŽāĻ°āĻž āĻĒā§āĻ°āĻ¤āĻŋāĻāĻŋ JSONB āĻ
āĻŦāĻā§āĻā§āĻā§ āĻ¸āĻŽā§āĻĒāĻ¤ā§āĻ¤āĻŋāĻ° āĻ¨āĻžāĻŽ āĻ¸āĻāĻ°āĻā§āĻˇāĻŖ āĻāĻ°āĻŋāĨ¤
āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻ¤āĻžāĻ°āĻĒāĻ°āĻ, āĻ¸āĻāĻā§āĻ¯āĻžāĻā§āĻ˛āĻŋ āĻ¨āĻŋāĻā§āĻĻā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻĨāĻž āĻŦāĻ˛ā§: EAV-āĻ¤ā§ āĻāĻŽāĻ°āĻž āĻĒā§āĻ°āĻ¤āĻŋ āĻ ā§āĻ¯āĻžāĻā§āĻ°āĻŋāĻŦāĻŋāĻāĻ āĻŽāĻžāĻ¨ āĻĒā§āĻ°āĻ¤āĻŋ 2āĻāĻŋ āĻĒā§āĻ°ā§āĻŖāĻ¸āĻāĻā§āĻ¯āĻž āĻŦāĻŋāĻĻā§āĻļā§ āĻā§ āĻ¸āĻāĻ°āĻā§āĻˇāĻŖ āĻāĻ°āĻŋ, āĻ¯āĻžāĻ° āĻĢāĻ˛ā§ āĻ āĻ¤āĻŋāĻ°āĻŋāĻā§āĻ¤ āĻĄā§āĻāĻž 8 āĻŦāĻžāĻāĻ āĻšāĻ¯āĻŧāĨ¤ āĻāĻĒāĻ°āĻ¨ā§āĻ¤ā§, EAV āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ¸āĻŽā§āĻĒāĻ¤ā§āĻ¤āĻŋ āĻŽāĻžāĻ¨ āĻĒāĻžāĻ ā§āĻ¯ āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻ¸āĻāĻ°āĻā§āĻˇāĻŖ āĻāĻ°ā§, āĻ¯āĻāĻ¨ JSONB āĻ āĻā§āĻ¯āĻ¨ā§āĻ¤āĻ°ā§āĻŖāĻāĻžāĻŦā§ āĻ¯ā§āĻāĻžāĻ¨ā§ āĻ¸āĻŽā§āĻāĻŦ āĻ¸āĻāĻā§āĻ¯āĻžāĻ¸ā§āĻāĻ āĻāĻŦāĻ āĻŦā§āĻ˛āĻŋāĻ¯āĻŧāĻžāĻ¨ āĻŽāĻžāĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻŦā§, āĻĢāĻ˛ā§ āĻāĻāĻāĻŋ āĻā§āĻ āĻĒāĻĻāĻāĻŋāĻšā§āĻ¨ āĻšāĻŦā§āĨ¤
āĻĢāĻ˛āĻžāĻĢāĻ˛
āĻ¸āĻžāĻŽāĻā§āĻ°āĻŋāĻāĻāĻžāĻŦā§, āĻāĻŽāĻŋ āĻŽāĻ¨ā§ āĻāĻ°āĻŋ JSONB āĻĢāĻ°ā§āĻŽā§āĻ¯āĻžāĻā§ āĻ¸āĻ¤ā§āĻ¤āĻžāĻ° āĻŦā§āĻļāĻŋāĻˇā§āĻā§āĻ¯āĻā§āĻ˛āĻŋ āĻ¸āĻāĻ°āĻā§āĻˇāĻŖ āĻāĻ°āĻž āĻāĻĒāĻ¨āĻžāĻ° āĻĄāĻžāĻāĻžāĻŦā§āĻ¸ āĻĄāĻŋāĻāĻžāĻāĻ¨ āĻāĻŦāĻ āĻŦāĻāĻžāĻ¯āĻŧ āĻ°āĻžāĻāĻž āĻ āĻ¨ā§āĻ āĻ¸āĻšāĻ āĻāĻ°ā§ āĻ¤ā§āĻ˛āĻ¤ā§ āĻĒāĻžāĻ°ā§āĨ¤ āĻāĻĒāĻ¨āĻŋ āĻ¯āĻĻāĻŋ āĻ āĻ¨ā§āĻāĻā§āĻ˛āĻŋ āĻā§āĻ¯āĻŧā§āĻ°āĻŋ āĻāĻžāĻ˛āĻžāĻ¨, āĻ¤āĻžāĻšāĻ˛ā§ āĻ¸āĻ¤ā§āĻ¤āĻžāĻ° āĻŽāĻ¤ā§ āĻāĻāĻ āĻā§āĻŦāĻŋāĻ˛ā§ āĻ¸āĻŦāĻāĻŋāĻā§ āĻ°āĻžāĻāĻž āĻāĻ¸āĻ˛ā§ āĻāĻ°āĻ āĻĻāĻā§āĻˇāĻ¤āĻžāĻ° āĻ¸āĻžāĻĨā§ āĻāĻžāĻ āĻāĻ°āĻŦā§āĨ¤ āĻāĻŦāĻ āĻāĻāĻŋ āĻĄā§āĻāĻžāĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻŽāĻŋāĻĨāĻ¸ā§āĻā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻā§ āĻ¸āĻšāĻ āĻāĻ°ā§ āĻ¤ā§āĻ˛ā§ āĻ¤āĻž āĻāĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§ āĻāĻāĻāĻŋ āĻĒā§āĻ˛āĻžāĻ¸, āĻ¤āĻŦā§ āĻĢāĻ˛āĻ¸ā§āĻŦāĻ°ā§āĻĒ āĻĄāĻžāĻāĻžāĻŦā§āĻ¸āĻāĻŋ āĻāĻ˛āĻŋāĻāĻŽā§āĻ° 3 āĻā§āĻŖ āĻā§āĻāĨ¤
āĻāĻāĻžāĻĄāĻŧāĻžāĻ, āĻ¸āĻŽā§āĻĒāĻžāĻĻāĻŋāĻ¤ āĻĒāĻ°ā§āĻā§āĻˇāĻžāĻ° āĻāĻĒāĻ° āĻāĻŋāĻ¤ā§āĻ¤āĻŋ āĻāĻ°ā§, āĻāĻŽāĻ°āĻž āĻāĻĒāĻ¸āĻāĻšāĻžāĻ°ā§ āĻāĻ¸āĻ¤ā§ āĻĒāĻžāĻ°āĻŋ āĻ¯ā§ āĻāĻ°ā§āĻŽāĻā§āĻˇāĻŽāĻ¤āĻž āĻā§āĻˇāĻ¤āĻŋ āĻā§āĻŦāĻ āĻ¨āĻāĻŖā§āĻ¯āĨ¤ āĻāĻŋāĻā§ āĻā§āĻˇā§āĻ¤ā§āĻ°ā§, JSONB EAV āĻāĻ° āĻā§āĻ¯āĻŧā§āĻ āĻĻā§āĻ°ā§āĻ¤, āĻāĻāĻŋāĻā§ āĻāĻ°āĻ āĻāĻžāĻ˛ āĻāĻ°ā§ āĻ¤ā§āĻ˛ā§āĨ¤ āĻ¯āĻžāĻāĻšā§āĻ, āĻāĻ āĻŦā§āĻā§āĻāĻŽāĻžāĻ°ā§āĻāĻāĻŋ āĻ
āĻŦāĻļā§āĻ¯āĻ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻĻāĻŋāĻāĻā§ āĻāĻāĻžāĻ° āĻāĻ°ā§ āĻ¨āĻž (āĻ¯ā§āĻŽāĻ¨ āĻā§āĻŦ āĻŦāĻĄāĻŧ āĻ¸āĻāĻā§āĻ¯āĻ āĻŦā§āĻļāĻŋāĻˇā§āĻā§āĻ¯ āĻ¸āĻš āĻ¸āĻ¤ā§āĻ¤āĻž, āĻŦāĻŋāĻĻā§āĻ¯āĻŽāĻžāĻ¨ āĻĄā§āĻāĻžāĻ° āĻŦā§āĻļāĻŋāĻˇā§āĻā§āĻ¯ā§āĻ° āĻ¸āĻāĻā§āĻ¯āĻžāĻ¯āĻŧ āĻāĻ˛ā§āĻ˛ā§āĻāĻ¯ā§āĻā§āĻ¯ āĻŦā§āĻĻā§āĻ§āĻŋ,...), āĻ¤āĻžāĻ āĻ¸ā§āĻā§āĻ˛āĻŋāĻā§ āĻā§āĻāĻžāĻŦā§ āĻāĻ¨ā§āĻ¨āĻ¤ āĻāĻ°āĻž āĻ¯āĻžāĻ¯āĻŧ āĻ¸ā§ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻāĻĒāĻ¨āĻžāĻ° āĻ¯āĻĻāĻŋ āĻā§āĻ¨āĻ āĻĒāĻ°āĻžāĻŽāĻ°ā§āĻļ āĻĨāĻžāĻā§ , āĻŽāĻ¨ā§āĻ¤āĻŦā§āĻ¯ā§ āĻā§āĻĄāĻŧā§ āĻ¨āĻŋāĻ°ā§āĻĻā§āĻŦāĻŋāĻ§āĻžāĻ¯āĻŧ āĻĻāĻ¯āĻŧāĻž āĻāĻ°ā§!
āĻāĻ¤ā§āĻ¸: www.habr.com