Ojiṣẹ database (apakan 1): nse ipilẹ ilana

Bii o ṣe le tumọ awọn ibeere iṣowo sinu awọn ẹya data kan pato nipa lilo apẹẹrẹ ti ṣiṣẹda ibi ipamọ data ojiṣẹ lati ibere.

Ojiṣẹ database (apakan 1): nse ipilẹ ilana
Ipilẹ wa kii yoo tobi ati pinpin, bi VKontakte tabi Badoo, ṣugbọn "ki o je", sugbon o je dara - iṣẹ-, sare ati ki o fit lori ọkan server PostgreSQL - ki o le ran apẹẹrẹ lọtọ ti iṣẹ naa si ibikan ni ẹgbẹ, fun apẹẹrẹ.

Nitorinaa, a kii yoo fi ọwọ kan awọn ọran ti sharding, ẹda-iwe ati awọn eto pinpin-ilẹ, ṣugbọn yoo dojukọ awọn solusan iyika inu data data.

Igbesẹ 1: Diẹ ninu awọn pato iṣowo

A kii yoo ṣe apẹrẹ fifiranṣẹ wa lainidi, ṣugbọn yoo ṣepọ rẹ sinu agbegbe ajọ awujo nẹtiwọki. Iyẹn ni pe, awọn eniyan wa ko “ṣe ibaamu nikan,” ṣugbọn ibasọrọ pẹlu ara wọn ni ipo ti yanju awọn iṣoro iṣowo kan.

Ati kini awọn iṣẹ-ṣiṣe ti iṣowo kan?... Jẹ ki a wo apẹẹrẹ ti Vasily, ori ti ẹka idagbasoke.

  • "Nikolai, fun iṣẹ-ṣiṣe yii a nilo alemo kan loni!"
    Eyi tumọ si pe ifọrọranṣẹ le ṣee ṣe ni ipo ti diẹ ninu iwe aṣẹ.
  • "Kolya, ṣe iwọ yoo lọ si Dota ni aṣalẹ yii?"
    Iyẹn ni, paapaa ọkan bata ti interlocutors le ṣe ibaraẹnisọrọ ni nigbakannaa lori orisirisi ero.
  • "Peter, Nikolay, wo ninu asomọ fun atokọ owo fun olupin tuntun."
    Nitorinaa, ifiranṣẹ kan le ni orisirisi awọn olugba. Ni idi eyi, ifiranṣẹ le ni ninu Awọn faili ti o somọ.
  • "Semyon, tun wo."
    Ati pe aye yẹ ki o wa lati tẹ sinu iwe-ifiweranṣẹ ti o wa tẹlẹ pe a titun omo egbe.

Jẹ ki a gbe lori atokọ yii ti awọn iwulo “hande” fun bayi.

Laisi agbọye awọn pato ti a lo ti iṣoro naa ati awọn idiwọn ti a fun ni, apẹrẹ munadoko Eto data lati yanju o jẹ fere soro.

Igbesẹ 2: Pọọku Logic Circuit

Titi di isisiyi, ohun gbogbo n ṣiṣẹ ni iru pupọ si ifọrọranṣẹ imeeli - irinṣẹ iṣowo ibile kan. Bẹẹni, “algorithmically” ọpọlọpọ awọn iṣoro iṣowo jọra si ara wọn, nitorinaa awọn irinṣẹ lati yanju wọn yoo jẹ iru igbekalẹ.

Jẹ ki a ṣatunṣe aworan atọka ọgbọn ti o ti gba tẹlẹ ti awọn ibatan nkan. Lati jẹ ki awoṣe wa rọrun lati ni oye, a yoo lo aṣayan ifihan akọkọ julọ Awọn awoṣe ER laisi awọn ilolu ti UML tabi awọn akiyesi IDEF:

Ojiṣẹ database (apakan 1): nse ipilẹ ilana

Ninu apẹẹrẹ wa, eniyan, iwe ati alakomeji “ara” faili jẹ awọn nkan “ita” ti o wa ni ominira laisi iṣẹ wa. Nitorinaa, a yoo jiroro ni akiyesi wọn ni ọjọ iwaju bi diẹ ninu awọn ọna asopọ “ibikan” nipasẹ UUID.

Yiya awọn aworan atọka bi o rọrun bi o ti ṣee - Pupọ julọ awọn eniyan ti iwọ yoo fihan wọn kii ṣe amoye ni kika UML/IDEF. Ṣugbọn rii daju lati fa.

Igbesẹ 3: Ṣiṣe apẹrẹ tabili

Nipa tabili ati awọn orukọ aayeAwọn orukọ "Russian" ti awọn aaye ati awọn tabili le ṣe itọju yatọ si, ṣugbọn eyi jẹ ohun itọwo. Nitori awọn nibi ni Tensor ko si awọn olupilẹṣẹ ajeji, ati PostgreSQL gba wa laaye lati fun awọn orukọ paapaa ni awọn hieroglyphs, ti wọn ba paade ni avvon, lẹhinna a fẹ lati lorukọ awọn nkan lainidi ati kedere ki ko si awọn iyatọ.
Níwọ̀n bí ọ̀pọ̀ èèyàn ti ń kọ̀wé sí wa lẹ́ẹ̀kan náà, àwọn kan lára ​​wọn lè ṣe èyí pàápàá offline, lẹhinna aṣayan ti o rọrun julọ ni lo UUID bi idamo kii ṣe fun awọn nkan ita nikan, ṣugbọn fun gbogbo awọn nkan inu iṣẹ wa. Pẹlupẹlu, wọn le ṣe ipilẹṣẹ paapaa ni ẹgbẹ alabara - eyi yoo ṣe iranlọwọ fun wa lati ṣe atilẹyin fifiranṣẹ awọn ifiranṣẹ nigbati data data ko si fun igba diẹ, ati pe o ṣeeṣe ti ijamba jẹ kekere pupọ.

Eto tabili apẹrẹ ninu aaye data wa yoo dabi eyi:
Awọn tabili: 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
);

Awọn tabili: 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
);

Ohun ti o rọrun julọ nigbati o ba n ṣalaye ọna kika ni lati bẹrẹ “ṣii” aworan asopọ lati awọn tabili ti o ko ba wa ni itọkasi ara wọn si ẹnikan.

Igbesẹ 4: Wa awọn aini ti ko han gbangba

Iyẹn ni, a ti ṣe apẹrẹ data data ninu eyiti o le kọ ni pipe ati bakan ka.

Jẹ ki a fi ara wa sinu bata ti olumulo ti iṣẹ wa - kini a fẹ ṣe pẹlu rẹ?

  • Awọn ifiranṣẹ ikẹhin
    Eyi jẹ chronologically lẹsẹsẹ iforukọsilẹ ti awọn ifiranṣẹ “mi” ti o da lori ọpọlọpọ awọn ibeere. Nibo ni mo ti jẹ ọkan ninu awọn olugba, nibiti mo ti jẹ onkọwe, nibiti wọn ti kọwe si mi ti emi ko dahun, nibiti wọn ko da mi lohùn, ...
  • Olukopa ti awọn lẹta
    Tani paapaa n kopa ninu iwiregbe gigun, gigun yii?

Eto wa gba wa laaye lati yanju awọn iṣoro mejeeji “ni gbogbogbo,” ṣugbọn kii ṣe yarayara. Iṣoro naa ni pe fun yiyan laarin iṣẹ-ṣiṣe akọkọ lagbara lati ṣẹda atọka, o dara fun ọkọọkan awọn olukopa (ati pe iwọ yoo ni lati jade gbogbo awọn igbasilẹ), ati lati yanju ọkan keji ti o nilo jade gbogbo awọn ifiranṣẹ lori koko yii.

Awọn iṣẹ ṣiṣe olumulo airotẹlẹ le fi igboya agbelebu lori ise sise.

Igbesẹ 5: Smart Denormalization

Mejeji ti wa isoro yoo wa ni re nipa afikun tabili ninu eyi ti a yoo pidánpidán apa ti awọn data, pataki lati dagba lori wọn awọn atọka ti o yẹ fun awọn iṣẹ-ṣiṣe wa.
Ojiṣẹ database (apakan 1): nse ipilẹ ilana

Awọn tabili: RU

CREATE TABLE "РеестрСообщений"(
  "Владелец"
    uuid
, "ТипРеестра"
    smallint
, "ДатаВремя"
    timestamp
, "Сообщение"
    uuid
, PRIMARY KEY("Владелец", "ТипРеестра", "Сообщение")
);
CREATE INDEX ON "РеестрСообщений"("Владелец", "ТипРеестра", "ДатаВремя" DESC);

CREATE TABLE "УчастникТемы"(
  "Тема"
    uuid
, "Персона"
    uuid
, PRIMARY KEY("Тема", "Персона")
);

Awọn tabili: 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)
);

Nibi a ti lo awọn ọna aṣoju meji ti a lo nigba ṣiṣẹda awọn tabili iranlọwọ:

  • Awọn igbasilẹ isodipupo
    Lilo igbasilẹ ifiranṣẹ akọkọ kan, a ṣẹda ọpọlọpọ awọn igbasilẹ atẹle ni awọn oriṣi awọn iforukọsilẹ fun awọn oniwun oriṣiriṣi - mejeeji fun olufiranṣẹ ati fun olugba. Ṣugbọn ọkọọkan awọn iforukọsilẹ ni bayi ṣubu lori atọka - lẹhinna, ninu ọran aṣoju, a yoo fẹ lati rii nikan ni oju-iwe akọkọ.
  • Awọn igbasilẹ alailẹgbẹ
    Ni gbogbo igba ti o ba fi ifiranṣẹ ranṣẹ laarin koko-ọrọ kan pato, o to lati ṣayẹwo boya iru titẹ sii wa tẹlẹ. Ti kii ba ṣe bẹ, ṣafikun si “itumọ-itumọ” wa.

Ni awọn tókàn apa ti awọn article a yoo soro nipa imuse ti ipin sinu awọn be ti wa database.

orisun: www.habr.com

Fi ọrọìwòye kun