Чӣ тавр шумо метавонед бо истифода аз намунаи тарҳрезии пойгоҳи додаҳои паёмнависӣ аз сифр, талаботи тиҷоратро ба сохторҳои мушаххаси додаҳо тарҷума кунед.
- Қисми 1: тарҳрезии чаҳорчӯбаи асосӣ

Пойгоҳи мо он қадар калон ва паҳн нахоҳад шуд, ё , балки "то ки он буд", аммо он хуб буд - функсионалӣ, зуд ва дар як сервер мувофиқат кунед PostgreSQL - ба тавре ки шумо метавонед як мисоли алоҳидаи хидматро дар ҷое дар паҳлӯ ҷойгир кунед, масалан.
Аз ин рӯ, мо ба масъалаҳои тақсимкунӣ, такрорӣ ва системаҳои геотақсимшуда дахл нахоҳем кард, балки ба ҳалли схемаҳо дар дохили пойгоҳи додаҳо тамаркуз хоҳем кард.
Қадами 1: Баъзе мушаххасоти тиҷорат
Мо паёмнависии худро ба таври абстрактӣ тарҳрезӣ намекунем, балки онро ба муҳит ҳамгиро мекунем . Яъне, одамони мо на «факат мукотиба мекунанд», балки бо хамдигар дар доираи халли баъзе проблемахои тичоратй алока мекунанд.
Ва дар назди корхона чй гуна вазифахо гузошта шудаанд?.. Ба мисоли сардори шуъбаи ободонй Василий назар меандозем.
- «Николай, барои ин вазифа имруз пачка даркор!
Ин маънои онро дорад, ки мукотиба метавонад дар заминаи баъзе гузаронида шавад ҳуҷҷат. - "Коля, шумо ин бегоҳ ба Дота меравед?"
Яъне, ҳатто як ҷуфт ҳамсӯҳбат метавонад ҳамзамон муошират кунад дар мавзуъхои гуногун. - "Питер, Николай, ба замима барои рӯйхати нархҳои сервери нав нигаред."
Ҳамин тавр, як паём метавонад дошта бошад якчанд гирандагон. Дар ин ҳолат, паём метавонад дар бар гирад Файлҳои замимашуда. - — Семён, хам як назар кун.
Ва бояд имкони ворид шудан ба мукотибаи мавҷуда вуҷуд дошта бошад аъзои навро даъват кунед.
Биёед ҳоло дар бораи ин рӯйхати ниёзҳои "аён" истодагарӣ кунем.
Бе дарки мушаххасоти татбиқшавандаи мушкилот ва маҳдудиятҳои ба он додашуда, тарҳрезӣ самаранок схемаи пойгоҳи додаҳо барои ҳалли он қариб ғайриимкон аст.
Қадами 2: Схемаи минималии мантиқӣ
То ба ҳол, ҳама чиз ба мукотибаи почтаи электронӣ хеле монанд аст - як воситаи анъанавии тиҷорат. Бале, «алгоритмӣ» бисёр масъалаҳои тиҷоратӣ ба ҳамдигар монанданд, аз ин рӯ воситаҳои ҳалли онҳо аз ҷиҳати сохтор шабеҳ хоҳанд буд.
Биёед диаграммаи мантиқии аллакай ба даст овардаи муносибатҳои субъектҳоро ислоҳ кунем. Барои осонтар фаҳмидани модели мо, мо варианти ибтидоии намоишро истифода мебарем бе мушкилии аломатҳои UML ё IDEF:

Дар мисоли мо, шахс, ҳуҷҷат ва "ҷасади" бинарии файл объектҳои "берунӣ" мебошанд, ки мустақилона бидуни хидмати мо вуҷуд доранд. Аз ин рӯ, мо онҳоро дар оянда ҳамчун баъзе истинодҳои "дар ҷое" аз ҷониби 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
);Ҷадвалҳо: EN
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: Denormalization Smart
Ҳарду мушкилоти мо бо ҷадвалҳои иловагӣ ҳал карда мешаванд, ки мо дар он хоҳем буд нусхаи қисми маълумот, зарур аст, ки дар руи онхо индексхои ба вазифахои мо мувофикро ташкил кунем.

Ҷадвалҳо: RU
CREATE TABLE "РеестрСообщений"(
"Владелец"
uuid
, "ТипРеестра"
smallint
, "ДатаВремя"
timestamp
, "Сообщение"
uuid
, PRIMARY KEY("Владелец", "ТипРеестра", "Сообщение")
);
CREATE INDEX ON "РеестрСообщений"("Владелец", "ТипРеестра", "ДатаВремя" DESC);
CREATE TABLE "УчастникТемы"(
"Тема"
uuid
, "Персона"
uuid
, PRIMARY KEY("Тема", "Персона")
);Ҷадвалҳо: EN
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)
);Дар ин ҷо мо ду равиши маъмулиро ҳангоми сохтани ҷадвалҳои ёрирасон истифода кардем:
- Сабтҳои зиёд
Бо истифода аз як сабти паёми ибтидоӣ, мо дар намудҳои гуногуни реестрҳо барои соҳибони гуногун - ҳам барои ирсолкунанда ва ҳам барои қабулкунанда якчанд сабтҳои минбаъда эҷод мекунем. Аммо ҳар як регистр ҳоло ба индекс рост меояд - дар ниҳоят, дар як ҳолати маъмулӣ, мо танҳо саҳифаи аввалро дидан мехоҳем. - Сабтҳои беназир
Ҳар дафъае, ки шумо дар доираи як мавзӯи мушаххас паём мефиристед, барои тафтиш кардан кифоя аст, ки оё чунин сабт аллакай вуҷуд дорад. Агар не, онро ба «лугат»-и мо илова кунед.
Дар қисми навбатии мақола мо дар бораи он сӯҳбат хоҳем кард ба сохтори базаи мо ворид кунед.
Манбаъ: will.com
