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 āĻāϰ āĻāĻāĻāĻŋ āύāϤā§āύ āĻāύāϏā§āĻāϞā§āĻļāύā§āϰ āĻāύā§āϝ āĻĄāĻžāĻāĻžāĻŦā§āϏ āϤā§āϰāĻŋ āĻāϰā§āĻāĻŋ Ubuntu 14.04. ĐĐžŅĐģĐĩ ĐŊаŅŅŅОКĐēи ĐŊĐĩĐēĐžŅĐžŅŅŅ ĐŋаŅаĐŧĐĩŅŅОв в postgresql.conf Ņ ĐˇĐ°ĐŋŅŅŅиĐģ psql āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āϏā§āĻā§āϰāĻŋāĻĒā§āĻāĨ¤ EAV āĻĢāϰā§āĻŽā§ āĻĄā§āĻāĻž āĻāĻĒāϏā§āĻĨāĻžāĻĒāύ āĻāϰāĻžāϰ āĻāύā§āϝ āύāĻŋāĻŽā§āύāϞāĻŋāĻāĻŋāϤ āĻā§āĻŦāĻŋāϞāĻā§āϞāĻŋ āϤā§āϰāĻŋ āĻāϰāĻž āĻšāϝāĻŧā§āĻāĻŋāϞ:
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 āĻ āĻŦāĻā§āĻā§āĻā§ āĻāĻāĻāĻŋ āϏāĻŽā§āĻĒāϤā§āϤāĻŋāϰ āĻŽāĻžāύ āĻāĻĒāĻĄā§āĻ āĻāϰāϤ⧠āĻāĻŽāĻžāĻĻā§āϰ āĻĢāĻžāĻāĻļāύāĻāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤ⧠āĻšāĻŦā§ , āĻāĻŦāĻ āĻāĻāĻāĻŋ JSONB āĻ āĻŦāĻā§āĻā§āĻ āĻšāĻŋāϏāĻžāĻŦā§ āĻāĻŽāĻžāĻĻā§āϰ āύāϤā§āύ āĻŽāĻžāύ āĻĒāĻžāϏ āĻāϰāĻž āĻāĻāĻŋāϤāĨ¤ āϝāĻžāĻāĻšā§āĻ, āĻāĻŽāĻžāĻĻā§āϰ āĻā§āύ āĻļāύāĻžāĻā§āϤāĻāĻžāϰā§āĻā§ āĻāĻā§ āĻĨā§āĻā§ āĻāĻžāύāĻžāϰ āĻĻāϰāĻāĻžāϰ āύā§āĻāĨ¤ EAV āĻāĻĻāĻžāĻšāϰāĻŖā§āϰ āĻĻāĻŋāĻā§ āϤāĻžāĻāĻŋāϝāĻŧā§, āĻāĻĒāĻĄā§āĻāĻāĻŋ āϏāĻŽā§āĻĒāĻžāĻĻāύ āĻāϰāĻžāϰ āĻāύā§āϝ āĻāĻŽāĻžāĻĻā§āϰ entity_id āĻāĻŦāĻ entity_attribute_id āĻāĻāϝāĻŧāĻ āĻāĻžāύāϤ⧠āĻšāĻŦā§āĨ¤ āĻāĻĒāύāĻŋ āϝāĻĻāĻŋ āĻ āĻŦāĻā§āĻā§āĻā§āϰ āύāĻžāĻŽā§āϰ āĻāĻĒāϰ āĻāĻŋāϤā§āϤāĻŋ āĻāϰ⧠āĻāĻāĻāĻŋ 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-āĻāϰ āĻāύā§āϝ āĻĒā§āϰāϝāĻŧā§āĻāύā§āϝāĻŧ āϝā§āĻāĻĻāĻžāύāĻā§āϞāĻŋ āϏā§āĻā§ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤ⧠āĻĒāĻžāϰ⧠āύāĻž (āĻŦāĻŋāĻĻā§āĻļā§ āĻā§ āĻā§āώā§āϤā§āϰāĻā§āϞāĻŋāĻā§ āϏā§āĻāĻŋāϤ āĻāϰāĻž āĻšāϝāĻŧāύāĻŋ)āĨ¤ āĻāϰ āĻĒāϰ⧠āĻāĻŽāĻŋ 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
