ืืื ืืืจ ืงืขื ืขื ืืืืขืจืืขืฆื ืืขืฉืขืคื ืจืขืงืืืืจืขืืขื ืฅ ืืื ืกืคึผืขืฆืืคืืฉ ืืึทืื ืกืืจืึทืงืืฉืขืจื ื ืืฆื ืื ืืืืฉืคึผืื ืคืื ืืืืืื ืื ื ืึท ืฉืืื ืืึทืืึทืืืืก ืคึฟืื ืงืจืึทืฆื.
- ืืืื 1: ืืืืืื ืื ื ืื ืืึทืืข ืจืึทื
ืืืื 2: ืกืขืงืฉืึทื "ืคึฟืึทืจ ื ืืฅ"
ืืื ืืืขืจ ืืึทืืข ืืืขื ื ืืฉื ืืืื ืึทืืื ืืจืืืก ืืื ืคืื ืื ืืขืจืืขืืืืื,
ืืขืจืืืขืจ, ืืืจ ืืืขืื ื ืืฉื ืึธื ืจืืจื ืื ืืฉืื ืคืื ืฉืึทืจืืื ื, ืจืขืคึผืืึทืงืืืฉืึทื ืืื ืืขืึธ-ืคืึทืจืฉืคึผืจืืืื ืกืืกืืขืืขื, ืึธืืขืจ ืืืจ ืืืขืื ืคืึธืงืืก ืืืืฃ ืงืจืืึทื ืกืึทืืืฉืึทื ื ืืื ืื ืืึทืืึทืืืืก.
ืฉืจืื 1: ืขืืืขืืข ืืขืฉืขืคื ืกืคึผืขืกืืคืืงืก
ืืืจ ืืืขืื ื ืืฉื ืคึผืืึทื ืืื ืืืขืจ ืืขืกืืืืฉืื ื ืึทืืกืืจืึทืงืืื, ืึธืืขืจ ืืืขื ืืืกืฉืืืืขื ืขืก ืืื ืื ืกืืืืืืข
ืืื ืืืึธืก ืืขื ืขื ืื ืืึทืกืงืก ืคืื ืึท ืืขืฉืขืคื?.. ืืึธืืืจ ืงืืงื ืืื ืืขื ืืืึทืฉืคึผืื ืคืื ืืืึทืกืืื, ืืขืจ ืืืืคึผื ืคืื ืืขืจ ืึทื ืืืืืงืืื ื ืึธืคึผืืืืืื ื.
- "ื ืืงืึธืืึทื, ืคึฟืึทืจ ืื ืึทืจืืขื ืืืจ ืืึทืจืคึฟื ืึท ืืึทืืข ืืืึทื ื!"
ืืขื ืืืื ืึทื ืงืึธืจืขืกืคึผืึธื ืืขื ืฅ ืงืขื ืขื ืืืื ืืขืคืืจื ืืื ืืขื ืงืึธื ืืขืงืกื ืคืื ืขืืืขืืข ืืขืจ ืืึธืงืืืขื ื. - "ืงืึธืืืึท, ืืืกื ืืืจ ืืขืืื ืืขื ืฆื ืืึธืืึท ืืขื ืึธืืื ื?"
ืึทื ืืื, ืืคืืื ืืืื ืคึผืึธืจ ืคืื ืื ืืขืจืืึทืงืืึทืืขืจื ืงืขื ืขื ืืืขืจืืขืื ืกืืืืึทืืืืื ืืึทืกืื ืืืืฃ ืคืืจืฉืืืขื ืข ืืขืืขืก. - "ืคืขืืจืืก, ื ืืงืึธืืืึท, ืงืืง ืืื ืื ืึทืืึทืืฉืืึทื ื ืคึฟืึทืจ ืื ืคึผืจืืึทื ืจืฉืืื ืคึฟืึทืจ ืื ื ืืึทืข ืกืขืจืืืขืจ."
ืึทืืื, ืืืื ืึธื ืืึธื ืงืขื ืขื ืืึธืื ืขืืืขืืข ืจืืกืืคึผืืึทื ืฅ. ืืื ืืขื ืคืึทื, ืืขืจ ืึธื ืืึธื ืงืขื ืึทื ืืืึทืืื ืึทืืึทืืฉื ืืขืงืขืก. - "ืกืขืืืึธื, ืงืืง ืืืื."
ืืื ืขืก ืืึธื ืืืื ืึท ืืขืืขืื ืืืื ืฆื ืึทืจืืึทื ืืื ืืืืืกืืื ื ืงืึธืจืขืกืคึผืึธื ืืขื ืฅ ืคืึทืจืืขืื ืึท ื ืืึท ืืืืืืื.
ืืื ืก ืืืืื ืขื ืืืืฃ ืืขื ืจืฉืืื ืคืื "ืงืืึธืจืขืืืืืง" ืืืืขืจืคืขื ืืฉื ืคึฟืึทืจ ืืืฆื.
ืึธื ืคืืจืฉืืื ื ืื ืืขืืืขื ืื ืกืคึผืขืกืืคืืงืก ืคืื ืื ืคึผืจืึธืืืขื ืืื ืื ืืืืืืืืฉืึทื ื ืืขืืขืื ืฆื ืขืก, ืคึผืืึทื ืขืคืขืงืืืื ืืึทืืึทืืืืก ืกืืฉืขืืึท ืฆื ืกืึธืืืืข ืขืก ืืื ืึผืืขื ืืืืืขืืืขื.
ืฉืจืื 2: ืืื ืืืึทื ืืึธืืืง ืงืจืืึทื
ืืื ืืืฆื, ืึทืืฅ ืึทืจืืขื ืืืืขืจ ืขื ืืขื ืฆื E- ืืจืืื ืงืึธืจืขืกืคึผืึธื ืืขื ืฅ - ืึท ืืจืืืืฆืืื ืขืื ืืขืฉืขืคื ืืขืฆืืึทื. ืืึธ, "ืึทืืืึธืจืืืืืงืื" ืคืืืข ืืขืฉืขืคื ืคึผืจืึธืืืขืืก ืืขื ืขื ืขื ืืขื ืฆื ืืขืืขืจ ืื ืืขืจืขืจ, โโืืขืจืืืขืจ ืื ืืืฉืืจืื ืคึฟืึทืจ ืกืึทืืืืื ื ืืื ืืืขื ืืืื ืกืืจืึทืงืืฉืขืจืึทืื ืขื ืืขื.
ืืื ืก ืคืึทืจืจืืืื ืื ืฉืืื ืืืงืืืขื ืืึทืืืฉืืงืึทื ืืืึทืืจืึทืืข ืคืื โโืขื ืืืื ืืืฆืืื ืืขื. ืฆื ืืึทืื ืืื ืืืขืจ ืืึธืืขื ืืจืื ืืขืจ ืฆื ืคึฟืึทืจืฉืืืื, ืืืจ ืืืขืื ื ืืฆื ืื ืืขืจืกื ืคึผืจืืืืืืื ืึทืจืืืกืืืืึทืื ืึธืคึผืฆืืข
ืืื ืืื ืืืขืจ ืืืึทืฉืคึผืื, ืืขืจ ืืขื ืืฉ, ืืึธืงืืืขื ื ืืื ืืืื ืขืจื "ืืืฃ" ืคืื ืืขืจ ืืขืงืข ืืขื ืขื "ืคืื ืืจืืืกื ืืืง" ืขื ืืืืื ืืืึธืก ืขืงืกืืกืืืจื ืื ืืืคึผืขื ืืึทื ืืื ืึธื ืืื ืืืขืจ ืืื ืกื. ืืขืจืืืขืจ, ืืืจ ืืืขืื ืคืฉืื ืืขื ืืื ืืื ืืขืจ ืฆืืงืื ืคึฟื ืืื ืขืืืขืืข ืืื ืงืก "ืขืจืืขืฅ" ืืืจื UUID.
ืฆืืขื ืืืืึทืืจืึทืื ืืื ืคึผืฉืื ืืื ืืขืืืขื - ืจืืึฟ ืคืื ืื ืืขื ืืฉื ืืืจ ืืืขื ืืืืึทืื ืืื ืืขื ืขื ื ืืฉื ืขืงืกืคึผืขืจืฅ ืืื ืืืืขื ืขื UML/IDEF. ืึธืืขืจ ืืืื ืืืืขืจ ืฆื ืฆืืขื.
ืืจืขืื 3: ืกืงืขืืฉืื ื ืื ืืืฉ ืกืืจืืงืืืจ
ืืืขืื ืืืฉ ืืื ืคืขืื ื ืขืืขืืื "ืจืืกืืฉืข" ื ืขืืขื ืคืื ืคืขืืืขืจ ืืื ืืืฉื ืงืขื ืขื ืืืื ืืืืื ืืื ืึทื ืืขืจืฉ, ืึธืืขืจ ืืึธืก ืืื ืึท ืขื ืื ืคืื ืืขืฉืืึทืง. ืืืืึทื ืื
ืืื ื ืคืืืข ืืขื ืืฉื ืฉืจืืึทืื ืึทืจืืืงืืขื ืฆื ืืื ืื ืืื ืึทืืึธื, ืขืืืขืืข ืคืื โโืืื ืงืขื ืืคืืื ืืึธื ืืึธืก ืึธืคืคืืื ืข, ืืขืืึธืื ืืขืจ ืกืืืคึผืืึทืกื ืึธืคึผืฆืืข ืืื ื ืืฆื UUIDs ืืื ืืืขื ืืืคืืขืจืก ื ืื ืืืืื ืคึฟืึทืจ ืคืื ืืจืืืกื ืืืง ืขื ืืืืื, ืึธืืขืจ ืืืื ืคึฟืึทืจ ืึทืืข ืึทืืืืฉืขืงืฅ ืืื ืืื ืืืขืจ ืืื ืกื. ืืขืจืฆื, ืืื ืงืขื ืขื ืืืื ืืืฉืขื ืขืจืืืืึทื ืืคืืื ืืืืฃ ืื ืงืืืขื ื ืืืึทื - ืืึธืก ืืืขื ืืขืืคึฟื ืืื ืื ืฉืืืฆื ืฉืืงื ืึทืจืืืงืืขื ืืืขื ืื ืืึทืืึทืืืืก ืืื ืืขืืคึผืขืจืขืจืึทืื ืึทื ืึทืืืืืืึทืืึทื ืืื ืื ืืืงืขืืืืึธืึธื ืคืื ืึท ืฆืื ืืืคืฉืืืืก ืืื ืืึธืจ ื ืืืขืจืืง.
ืืขืจ ืคึผืืึทื ืืืฉ ืกืืจืืงืืืจ ืืื ืืื ืืืขืจ ืืึทืืึทืืืืก ืืืขื ืงืืงื ืืื ืืึธืก:
ืืืฉื: ืจื
CREATE TABLE "ะขะตะผะฐ"(
"ะขะตะผะฐ"
uuid
PRIMARY KEY
, "ะะพะบัะผะตะฝั"
uuid
, "ะะฐะทะฒะฐะฝะธะต"
text
);
CREATE TABLE "ะกะพะพะฑัะตะฝะธะต"(
"ะกะพะพะฑัะตะฝะธะต"
uuid
PRIMARY KEY
, "ะขะตะผะฐ"
uuid
, "ะะฒัะพั"
uuid
, "ะะฐัะฐะัะตะผั"
timestamp
, "ะขะตะบัั"
text
);
CREATE TABLE "ะะดัะตัะฐั"(
"ะกะพะพะฑัะตะฝะธะต"
uuid
, "ะะตััะพะฝะฐ"
uuid
, PRIMARY KEY("ะกะพะพะฑัะตะฝะธะต", "ะะตััะพะฝะฐ")
);
CREATE TABLE "ะคะฐะนะป"(
"ะคะฐะนะป"
uuid
PRIMARY KEY
, "ะกะพะพะฑัะตะฝะธะต"
uuid
, "BLOB"
uuid
, "ะะผั"
text
);
ืืืฉื: ืขื
CREATE TABLE theme(
theme
uuid
PRIMARY KEY
, document
uuid
, title
text
);
CREATE TABLE message(
message
uuid
PRIMARY KEY
, theme
uuid
, author
uuid
, dt
timestamp
, body
text
);
CREATE TABLE message_addressee(
message
uuid
, person
uuid
, PRIMARY KEY(message, person)
);
CREATE TABLE message_file(
file
uuid
PRIMARY KEY
, message
uuid
, content
uuid
, filename
text
);
ืื ืกืืืคึผืืึทืกื ืืึทื ืืืขื ืืืกืงืจืืืืื ื ืึท ืคึฟืึธืจืืึทื ืืื ืฆื ืึธื ืืืืื "ืึทื ืืืืื ืืื ื" ืื ืงืฉืจ ืืจืึทืคืืง ืคืื ืืืฉื ืืืึธืก ืืขื ืขื ื ืืฉื ืจืขืคืขืจืึทื ืกื ืืื ืฆื ืงืืื ืขื.
ืืจืขืื 4: ืืขืคึฟืื ืขื ืืื ื ืื-ืงืืึธืจืขืืืืืง ืืืืขืจืคืขื ืืฉื
ืึทื ืก ืขืก, ืืืจ ืืึธืื ืืืืืื ื ืึท ืืึทืืึทืืืืก ืืื ืืืึธืก ืืืจ ืงืขื ืขื ืฉืจืืึทืื ืืืฉืืืืืขืก ืืื ืขืคืขืก ืฆื ืืืืขื ืขื.
ืืึธืืืจ ืืื ืฉืืขืื ืืื ืื ืฉืื ืคืื ืืขืจ ืืึทื ืืฆืขืจ ืคืื ืืื ืืืขืจ ืืื ืกื - ืืืึธืก ืืึธื ืืืจ ืืืขืื ืฆื ืืึธื ืืื ืืื?
- ืืขืฆืืข ืึทืจืืืงืืขื
ืขืก ืืจืึธื ืึธืืึธืืืฉ ืืืืกืืขืฉืืขืื ืึท ืจืขืืืกืืจื ืคืื "ืืืื" ืึทืจืืืงืืขื ืืืืืจื ืืืืฃ ืคืึทืจืฉืืื ืงืจืืืืืจืืึท. ืืื ืืื ืืื ืืืื ืขืจ ืคืื ืื ืจืืกืืคึผืืึทื ืฅ, ืืื ืืื ืืื ืืขืจ ืืืืจ, ืืื ืืื ืืขืฉืจืืื ืฆื ืืืจ ืืื ืืื ืืื ื ืืฉื ืืขืขื ืืคืขืจื, ืืื ืืื ืืึธืื ื ืืฉื ืืขืขื ืืคืขืจื ืืืจ, ... - ืคึผืึทืจืืืกืึทืคึผืึทื ืฅ ืคืื ืื ืงืึธืจืขืกืคึผืึธื ืืขื ืฅ
ืืืขืจ ืืื ืืคืืื ืคึผืึทืจืืืกืึทืคึผืืืืื ื ืืื ืืขื ืืึทื ื, ืืึทื ื ืฉืืืขืก?
ืืื ืืืขืจ ืกืืจืืงืืืจ ืึทืืึทืื ืืื ืื ืฆื ืกืึธืืืืข ืืืืืข ืื ืคืจืืืืขืืขื "ืืื ืึทืืืขืืืื," ืึธืืขืจ ื ืืฉื ืืขืฉืืืื ื. ืื ืคึผืจืึธืืืขื ืืื ืึทื ืคึฟืึทืจ ืกืึธืจืืื ื ืื ืืขืจ ืขืจืฉืืขืจ ืึทืจืืขื ื ืื ืืขืงืขื ื ืฆื ืฉืึทืคึฟื ืืื ืืขืงืก, ืคึผืึทืกืืง ืคึฟืึทืจ ืืขืืขืจ ืคืื ืื ืคึผืึทืจืืืกืึทืคึผืึทื ืฅ (ืืื ืืืจ ืืืขื ืืึธืื ืฆื ืขืงืกืืจืึทืงื ืึทืืข ืื ืจืขืงืึธืจืืก), ืืื ืฆื ืกืึธืืืืข ืื ืจืืข ืืืจ ืืึทืจืคึฟื ืขืงืกืืจืึทืงื ืึทืืข ืึทืจืืืงืืขื ืืืืฃ ืืขื ืืขืืข.
ืึทื ืื ืืขื ืืื ืืึทื ืืฆืขืจ ืืึทืกืงืก ืืื ืฉืืขืื ืืจืืืกื ืงืจืืึทื ืืืืฃ ืคึผืจืึธืืืึทืงืืืืืืื.
ืฉืจืื 5: ืกืืึทืจื ืืขื ืึธืจืืึทืืืืึทืืืึธื
ืืืืืข ืคืื โโืืื ืืืขืจ ืคึผืจืึธืืืขืืก ืืืขื ืืืื ืกืึทืืืื ืืืจื ื ืึธื ืืืฉื ืืื ืืืึธืก ืืืจ ืืืขืื ืืืคึผืืืงืึทื ืืืื ืคืื ืื ืืึทืื, ื ืืืืืง ืฆื ืคืึธืจืขื ืืืืฃ ืืื ืื ืืืกืื ืคึผืึทืกืืง ืคึฟืึทืจ ืืื ืืืขืจ ืืึทืกืงืก.
ืืืฉื: ืจื
CREATE TABLE "ะ ะตะตัััะกะพะพะฑัะตะฝะธะน"(
"ะะปะฐะดะตะปะตั"
uuid
, "ะขะธะฟะ ะตะตัััะฐ"
smallint
, "ะะฐัะฐะัะตะผั"
timestamp
, "ะกะพะพะฑัะตะฝะธะต"
uuid
, PRIMARY KEY("ะะปะฐะดะตะปะตั", "ะขะธะฟะ ะตะตัััะฐ", "ะกะพะพะฑัะตะฝะธะต")
);
CREATE INDEX ON "ะ ะตะตัััะกะพะพะฑัะตะฝะธะน"("ะะปะฐะดะตะปะตั", "ะขะธะฟะ ะตะตัััะฐ", "ะะฐัะฐะัะตะผั" DESC);
CREATE TABLE "ะฃัะฐััะฝะธะบะขะตะผั"(
"ะขะตะผะฐ"
uuid
, "ะะตััะพะฝะฐ"
uuid
, PRIMARY KEY("ะขะตะผะฐ", "ะะตััะพะฝะฐ")
);
ืืืฉื: ืขื
CREATE TABLE message_registry(
owner
uuid
, registry
smallint
, dt
timestamp
, message
uuid
, PRIMARY KEY(owner, registry, message)
);
CREATE INDEX ON message_registry(owner, registry, dt DESC);
CREATE TABLE theme_participant(
theme
uuid
, person
uuid
, PRIMARY KEY(theme, person)
);
ืืึธ ืืืจ ืืึธืื ืืขืืืขื ืื ืฆืืืื ืืืคึผืืฉ ืึทืคึผืจืึธืืืฉืื ืืขื ืืฆื ืืืขื ืงืจืืืืืื ื ืึทืืืืืืขืจื ืืืฉื:
- ืืึทืืืึทืคึผืืืืื ื ืจืขืงืึธืจืืก
ื ืืฆื ืืืื ืขืจืฉื ืึธื ืืึธื ืจืขืงืึธืจื, ืืืจ ืืึทืื ืขืืืขืืข ื ืึธืืืืื-ืึทืจืืืฃ ืจืขืงืึธืจืืก ืืื ืคืึทืจืฉืืืขื ืข ืืืืคึผืก ืคืื ืจืขืืืฉืืกืืขืจื ืคึฟืึทืจ ืคืึทืจืฉืืืขื ืข ืึธืื ืขืจื - ืืืืืข ืคึฟืึทืจ ืื ืึธืคึผืฉืืงืขืจ ืืื ืคึฟืึทืจ ืื ืืึทืงืืืขืจ. ืืืขืจ ืืขืืขืจ ืคืื ืื ืจืขืืืฉืืกืืขืจื ืืืฆื ืคืืื ืืืืฃ ืื ืืื ืืขืงืก - ื ืึธื ืึทืืข, ืืื ืึท ืืืคึผืืฉ ืคืึทื, ืืืจ ืืืขืื ืืืขืื ืฆื ืืขื ืืืืื ืืขืจ ืขืจืฉืืขืจ ืืืึทื. - ืืื ืฆืืง ืจืขืงืึธืจืืก
ืืขืืขืจ ืืึธื ืืืจ ืฉืืงื ืึท ืึธื ืืึธื ืืื ืึท ืกืคึผืขืฆืืคืืฉ ืืขืืข, ืขืก ืืื ืืขื ืื ืฆื ืงืึธื ืืจืึธืืืจื ืฆื ืึทืืึท ืึท ืคึผืึธืืืฆืืข ืืื ืฉืืื ืขืงืกืืกืืืจื. ืืืื ื ืื, ืืืื ืขืก ืฆื ืืื ืืืขืจ "ืืืขืจืืขืจืืื".
ืืื ืืขืจ ืืืืึทืืขืจ ืืืื ืคืื ืืขื ืึทืจืืืงื ืืืจ ืืืขืื ืจืขืื ืืืขืื
ืืงืืจ: www.habr.com