๋ฉ”์‹ ์ € ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(1๋ถ€): ๊ธฐ๋ณธ ํ”„๋ ˆ์ž„์›Œํฌ ์„ค๊ณ„

๋ฉ”์‹ ์ € ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ฒ˜์Œ๋ถ€ํ„ฐ ์„ค๊ณ„ํ•˜๋Š” ์˜ˆ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋น„์ฆˆ๋‹ˆ์Šค ์š”๊ตฌ ์‚ฌํ•ญ์„ ํŠน์ • ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฐฉ๋ฒ•.

๋ฉ”์‹ ์ € ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(1๋ถ€): ๊ธฐ๋ณธ ํ”„๋ ˆ์ž„์›Œํฌ ์„ค๊ณ„
์šฐ๋ฆฌ์˜ ๊ธฐ๋ฐ˜์€ ๊ทธ๋ ‡๊ฒŒ ํฌ์ง€๋„ ๋ถ„์‚ฐ๋˜์ง€๋„ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. VKontakte์ฒ˜๋Ÿผ ๋˜๋Š” Badoo, ๊ทธ๋Ÿฌ๋‚˜ "๊ทธ๋ž˜์„œ"์˜€์ง€๋งŒ ์ข‹์•˜์Šต๋‹ˆ๋‹ค. ๊ธฐ๋Šฅ์ ์ด๊ณ  ๋น ๋ฅด๋ฉฐ ํ•˜๋‚˜์˜ ์„œ๋ฒ„์— ์ ํ•ฉ PostgreSQL - ์˜ˆ๋ฅผ ๋“ค์–ด ์ธก๋ฉด ์–ด๋”˜๊ฐ€์— ๋ณ„๋„์˜ ์„œ๋น„์Šค ์ธ์Šคํ„ด์Šค๋ฅผ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์ƒค๋”ฉ, ๋ณต์ œ ๋ฐ ์ง€๋ฆฌ์  ๋ถ„์‚ฐ ์‹œ์Šคํ…œ ๋ฌธ์ œ๋Š” ๋‹ค๋ฃจ์ง€ ์•Š๊ณ  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋‚ด๋ถ€์˜ ํšŒ๋กœ ์†”๋ฃจ์…˜์— ์ค‘์ ์„ ๋‘˜ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

1๋‹จ๊ณ„: ์ผ๋ถ€ ๋น„์ฆˆ๋‹ˆ์Šค ์„ธ๋ถ€์‚ฌํ•ญ

์šฐ๋ฆฌ๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ์ถ”์ƒ์ ์œผ๋กœ ๋””์ž์ธํ•˜์ง€ ์•Š๊ณ  ํ™˜๊ฒฝ์— ํ†ตํ•ฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ธฐ์—… ์†Œ์…œ ๋„คํŠธ์›Œํฌ. ์ฆ‰, ์šฐ๋ฆฌ ์ง์›๋“ค์€ ๋‹จ์ง€ "์„œ์‹ ์„ ์ฃผ๊ณ ๋ฐ›๋Š”" ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ํŠน์ • ๋น„์ฆˆ๋‹ˆ์Šค ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋งฅ๋ฝ์—์„œ ์„œ๋กœ ์†Œํ†ตํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋น„์ฆˆ๋‹ˆ์Šค์˜ ์ž„๋ฌด๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?.. ๊ฐœ๋ฐœ ๋ถ€์„œ์žฅ์ธ Vasily์˜ ์˜ˆ๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

  • "Nikolai, ์ด ์ž‘์—…์„ ์œ„ํ•ด์„œ๋Š” ์˜ค๋Š˜ ํŒจ์น˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค!"
    ์ด๋Š” ์„œ์‹ ์ด ์ผ๋ถ€ ์ƒํ™ฉ์—์„œ ์ˆ˜ํ–‰๋  ์ˆ˜ ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋ฌธ์„œ.
  • โ€œ์ฝœ์•ผ, ์˜ค๋Š˜ ์ €๋…์— ๋„ํƒ€์— ๊ฐˆ ๊ฑฐ์•ผ?โ€
    ์ฆ‰, ํ•œ ์Œ์˜ ๋Œ€ํ™” ์ƒ๋Œ€๋ผ๋„ ๋™์‹œ์— ์˜์‚ฌ์†Œํ†ต์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์–‘ํ•œ ์ฃผ์ œ์—.
  • โ€œํ”ผํ„ฐ, ๋‹ˆ์ฝœ๋ผ์ด, ์ฒจ๋ถ€ ํŒŒ์ผ์—์„œ ์ƒˆ ์„œ๋ฒ„ ๊ฐ€๊ฒฉํ‘œ๋ฅผ ์ฐพ์•„๋ณด์„ธ์š”.โ€
    ๋”ฐ๋ผ์„œ ํ•˜๋‚˜์˜ ๋ฉ”์‹œ์ง€์—๋Š” ์—ฌ๋Ÿฌ ์ˆ˜์‹ ์ž. ์ด ๊ฒฝ์šฐ ๋ฉ”์‹œ์ง€์—๋Š” ๋‹ค์Œ์ด ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฒจ๋ถ€ ํŒŒ์ผ.
  • โ€œ์„ธ๋ฉด์•„, ๋„ˆ๋„ ์ข€ ๋ด๋ด.โ€
    ๊ทธ๋ฆฌ๊ณ  ๊ธฐ์กด ์„œ์‹ ์„ ์ž‘์„ฑํ•  ๊ธฐํšŒ๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ƒˆ ํšŒ์›์„ ์ดˆ๋Œ€ํ•˜๋‹ค.

์ง€๊ธˆ์€ "๋ช…๋ฐฑํ•œ" ์š”๊ตฌ ์‚ฌํ•ญ ๋ชฉ๋ก์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ์˜ ์ ์šฉ ์„ธ๋ถ€ ์‚ฌํ•ญ๊ณผ ๊ทธ์— ๋”ฐ๋ฅธ ์ œํ•œ ์‚ฌํ•ญ์„ ์ดํ•ดํ•˜์ง€ ๋ชปํ•œ ์ฑ„ ๋””์ž์ธ ์œ ํšจํ•œ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์Šคํ‚ค๋งˆ๋Š” ๊ฑฐ์˜ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

2๋‹จ๊ณ„: ์ตœ์†Œ ๋…ผ๋ฆฌ ํšŒ๋กœ

์ง€๊ธˆ๊นŒ์ง€๋Š” ๋ชจ๋“  ๊ฒƒ์ด ์ „ํ†ต์ ์ธ ๋น„์ฆˆ๋‹ˆ์Šค ๋„๊ตฌ์ธ ์ด๋ฉ”์ผ ์„œ์‹ ๊ณผ ๋งค์šฐ ์œ ์‚ฌํ•˜๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ, "์•Œ๊ณ ๋ฆฌ์ฆ˜์ ์œผ๋กœ" ๋งŽ์€ ๋น„์ฆˆ๋‹ˆ์Šค ๋ฌธ์ œ๋Š” ์„œ๋กœ ์œ ์‚ฌํ•˜๋ฏ€๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๋„๊ตฌ๋„ ๊ตฌ์กฐ์ ์œผ๋กœ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฏธ ์–ป์€ ์—”ํ„ฐํ‹ฐ ๊ด€๊ณ„์˜ ๋…ผ๋ฆฌ ๋‹ค์ด์–ด๊ทธ๋žจ์„ ์ˆ˜์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋ชจ๋ธ์„ ๋” ์‰ฝ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ฐ€์žฅ ์›์‹œ์ ์ธ ํ‘œ์‹œ ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ER ๋ชจ๋ธ UML ๋˜๋Š” IDEF ํ‘œ๊ธฐ๋ฒ•์˜ ๋ณต์žกํ•จ ์—†์ด:

๋ฉ”์‹ ์ € ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(1๋ถ€): ๊ธฐ๋ณธ ํ”„๋ ˆ์ž„์›Œํฌ ์„ค๊ณ„

์ด ์˜ˆ์—์„œ ํŒŒ์ผ์˜ ์‚ฌ๋žŒ, ๋ฌธ์„œ ๋ฐ ๋ฐ”์ด๋„ˆ๋ฆฌ "๋ณธ๋ฌธ"์€ ์„œ๋น„์Šค ์—†์ด ๋…๋ฆฝ์ ์œผ๋กœ ์กด์žฌํ•˜๋Š” "์™ธ๋ถ€" ์—”ํ„ฐํ‹ฐ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์šฐ๋ฆฌ๋Š” ๋ฏธ๋ž˜์— ์ด๋ฅผ UUID์˜ "์–ด๋”˜๊ฐ€" ๋งํฌ๋กœ ์ธ์‹ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๋‹ค ๊ฐ€๋Šฅํ•œ ํ•œ ๊ฐ„๋‹จํ•œ ๋‹ค์ด์–ด๊ทธ๋žจ - ๋‹น์‹ ์ด ๋ณด์—ฌ์ค„ ์‚ฌ๋žŒ๋“ค์˜ ๋Œ€๋ถ€๋ถ„์€ UML/IDEF ์ฝ๊ธฐ ์ „๋ฌธ๊ฐ€๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ผญ ๊ทธ๋ ค๋ณด์„ธ์š”.

3๋‹จ๊ณ„: ํ…Œ์ด๋ธ” ๊ตฌ์กฐ ์Šค์ผ€์น˜

ํ…Œ์ด๋ธ” ๋ฐ ํ•„๋“œ ์ด๋ฆ„ ์ •๋ณดํ•„๋“œ์™€ ํ…Œ์ด๋ธ”์˜ "๋Ÿฌ์‹œ์•„์–ด" ์ด๋ฆ„์€ ๋‹ค๋ฅด๊ฒŒ ์ทจ๊ธ‰๋  ์ˆ˜ ์žˆ์ง€๋งŒ ์ด๋Š” ์ทจํ–ฅ์˜ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์—ฌ๊ธฐ ํ…์„œ์—์„œ ์™ธ๊ตญ ๊ฐœ๋ฐœ์ž๋Š” ์—†์œผ๋ฉฐ PostgreSQL์—์„œ๋Š” ์ƒํ˜• ๋ฌธ์ž๋กœ๋„ ์ด๋ฆ„์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ์˜ดํ‘œ๋กœ ๋‘˜๋Ÿฌ์‹ธ์—ฌ ์žˆ์Šต๋‹ˆ๋‹ค, ๊ทธ๋Ÿฐ ๋‹ค์Œ ๋ถˆ์ผ์น˜๊ฐ€ ์—†๋„๋ก ๊ฐ์ฒด์˜ ์ด๋ฆ„์„ ๋ช…ํ™•ํ•˜๊ณ  ๋ช…ํ™•ํ•˜๊ฒŒ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค.
๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ๋™์‹œ์— ์šฐ๋ฆฌ์—๊ฒŒ ๋ฉ”์‹œ์ง€๋ฅผ ์“ฐ๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๋“ค ์ค‘ ์ผ๋ถ€๋Š” ์ด๋Ÿฐ ์ผ์„ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜คํ”„๋ผ์ธ, ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ์˜ต์…˜์€ UUID๋ฅผ ์‹๋ณ„์ž๋กœ ์‚ฌ์šฉ ์™ธ๋ถ€ ์—”ํ„ฐํ‹ฐ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์„œ๋น„์Šค ๋‚ด๋ถ€์˜ ๋ชจ๋“  ๊ฐœ์ฒด์—๋„ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ํด๋ผ์ด์–ธํŠธ ์ธก์—์„œ๋„ ์ƒ์„ฑ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ผ์‹œ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ณ  ์ถฉ๋Œ ๊ฐ€๋Šฅ์„ฑ์ด ๋งค์šฐ ๋‚ฎ์„ ๋•Œ ๋ฉ”์‹œ์ง€ ์ „์†ก์„ ์ง€์›ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ดˆ์•ˆ ํ…Œ์ด๋ธ” ๊ตฌ์กฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
ํ…Œ์ด๋ธ” : RU

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
);

ํ…Œ์ด๋ธ”: KO

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๋‹จ๊ณ„: ์Šค๋งˆํŠธ ๋น„์ •๊ทœํ™”

๋‘ ๊ฐ€์ง€ ๋ฌธ์ œ ๋ชจ๋‘ ์ถ”๊ฐ€ ํ…Œ์ด๋ธ”์„ ํ†ตํ•ด ํ•ด๊ฒฐ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ์˜ ์ผ๋ถ€๊ฐ€ ์ค‘๋ณต๋จ, ์šฐ๋ฆฌ ์ž‘์—…์— ์ ํ•ฉํ•œ ์ƒ‰์ธ์„ ํ˜•์„ฑํ•˜๋Š” ๋ฐ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
๋ฉ”์‹ ์ € ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(1๋ถ€): ๊ธฐ๋ณธ ํ”„๋ ˆ์ž„์›Œํฌ ์„ค๊ณ„

ํ…Œ์ด๋ธ” : RU

CREATE TABLE "ะ ะตะตัั‚ั€ะกะพะพะฑั‰ะตะฝะธะน"(
  "ะ’ะปะฐะดะตะปะตั†"
    uuid
, "ะขะธะฟะ ะตะตัั‚ั€ะฐ"
    smallint
, "ะ”ะฐั‚ะฐะ’ั€ะตะผั"
    timestamp
, "ะกะพะพะฑั‰ะตะฝะธะต"
    uuid
, PRIMARY KEY("ะ’ะปะฐะดะตะปะตั†", "ะขะธะฟะ ะตะตัั‚ั€ะฐ", "ะกะพะพะฑั‰ะตะฝะธะต")
);
CREATE INDEX ON "ะ ะตะตัั‚ั€ะกะพะพะฑั‰ะตะฝะธะน"("ะ’ะปะฐะดะตะปะตั†", "ะขะธะฟะ ะตะตัั‚ั€ะฐ", "ะ”ะฐั‚ะฐะ’ั€ะตะผั" DESC);

CREATE TABLE "ะฃั‡ะฐัั‚ะฝะธะบะขะตะผั‹"(
  "ะขะตะผะฐ"
    uuid
, "ะŸะตั€ัะพะฝะฐ"
    uuid
, PRIMARY KEY("ะขะตะผะฐ", "ะŸะตั€ัะพะฝะฐ")
);

ํ…Œ์ด๋ธ”: KO

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)
);

์—ฌ๊ธฐ์„œ๋Š” ๋ณด์กฐ ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ๋‘ ๊ฐ€์ง€ ์ผ๋ฐ˜์ ์ธ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์ ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

  • ๋ ˆ์ฝ”๋“œ ๊ณฑํ•˜๊ธฐ
    ํ•˜๋‚˜์˜ ์ดˆ๊ธฐ ๋ฉ”์‹œ์ง€ ๋ ˆ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์–‘ํ•œ ์†Œ์œ ์ž(๋ฐœ์‹ ์ž์™€ ์ˆ˜์‹ ์ž ๋ชจ๋‘)์— ๋Œ€ํ•ด ๋‹ค์–‘ํ•œ ์œ ํ˜•์˜ ๋ ˆ์ง€์Šคํ„ฐ์— ์—ฌ๋Ÿฌ ํ›„์† ๋ ˆ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด์ œ ๊ฐ ๋ ˆ์ง€์Šคํ„ฐ๋Š” ์ธ๋ฑ์Šค์— ์†ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ ์ผ๋ฐ˜์ ์ธ ๊ฒฝ์šฐ์—๋Š” ์ฒซ ๋ฒˆ์งธ ํŽ˜์ด์ง€๋งŒ ๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ณ ์œ ํ•œ ๊ธฐ๋ก
    ํŠน์ • ์ฃผ์ œ์— ๋Œ€ํ•œ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ผ ๋•Œ๋งˆ๋‹ค ํ•ด๋‹น ํ•ญ๋ชฉ์ด ์ด๋ฏธ ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ "์‚ฌ์ „"์— ์ถ”๊ฐ€ํ•˜์‹ญ์‹œ์˜ค.

์ด ๊ธฐ์‚ฌ์˜ ๋‹ค์Œ ๋ถ€๋ถ„์—์„œ ์šฐ๋ฆฌ๋Š” ํŒŒํ‹ฐ์…”๋‹ ๊ตฌํ˜„ ์šฐ๋ฆฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๊ตฌ์กฐ์—.

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€