Bunachar sonraí Messenger (cuid 1): dearadh an bhunchreat

Conas is féidir leat riachtanais ghnó a aistriú go struchtúir sonraí ar leith ag baint úsáide as an sampla de dhearadh bunachar sonraí teachtairí ón tús.

Bunachar sonraí Messenger (cuid 1): dearadh an bhunchreat
Ní bheidh ár mbonn chomh mór agus a dháileadh, cosúil le VkontakteBadoo, ach "ionas go raibh", ach bhí sé go maith - feidhmiúil, tapa agus oiriúnach ar fhreastalaí amháin PostgreSQL - ionas gur féidir leat sampla ar leith den tseirbhís a imscaradh áit éigin ar an taobh, mar shampla.

Mar sin, ní thabharfaimid aird ar na saincheisteanna a bhaineann le bearrtha, macasamhlú agus córais geo-dháilte, ach díreoimid ar réitigh chiorcaid laistigh den bhunachar sonraí.

Céim 1: Roinnt sonraí gnó

Ní dhearfaimid ár dteachtaireachtaí go teibí, ach déanfaimid iad a chomhtháthú leis an gcomhshaol líonra sóisialta corparáideach. Is é sin le rá, ní “chomhfhreagraíonn ár ndaoine amháin,” ach déanann siad cumarsáid lena chéile i gcomhthéacs fadhbanna áirithe gnó a réiteach.

Agus cad iad na cúraimí atá ar ghnó?.. Breathnaímid ar shampla Vasily, ceann na roinne forbartha.

  • “Nikolai, teastaíonn paiste uainn inniu don tasc seo!”
    Ciallaíonn sé seo gur féidir comhfhreagras a dhéanamh i gcomhthéacs roinnt doiciméad.
  • “Kolya, an bhfuil tú ag dul go Dota tráthnóna inniu?”
    Is é sin, is féidir fiú péire idirghabhálaithe amháin cumarsáid a dhéanamh go comhuaineach ar ábhair éagsúla.
  • “Féach Peadar, a Nikolay, sa cheangaltán don liosta praghsanna don fhreastalaí nua.”
    Mar sin, is féidir teachtaireacht amháin a bheith acu roinnt faighteoirí. Sa chás seo, d'fhéadfadh go mbeadh an teachtaireacht Comhaid ceangailte.
  • "Semyon, féach freisin."
    Agus ba cheart go mbeadh deis ann dul i mbun comhfhreagrais atá ann cheana féin cuireadh a thabhairt do bhall nua.

A ligean ar dwell ar an liosta seo de "soiléir" riachtanais do anois.

Gan tuiscint a fháil ar shainiúlachtaí feidhme na faidhbe agus na teorainneacha a thugtar di, dearadh éifeachtach scéimre bunachar sonraí a réiteach go bhfuil sé beagnach dodhéanta.

Céim 2: Ciorcad Loighic Íosta

Go dtí seo, oibríonn gach rud amach an-chosúil le comhfhreagras ríomhphoist - uirlis ghnó traidisiúnta. Sea, tá go leor fadhbanna gnó “algartamacha” cosúil lena chéile, mar sin beidh na huirlisí chun iad a réiteach cosúil le struchtúr.

Déanaimis an léaráid loighciúil a fuarthas cheana féin de chaidrimh eintitis a shocrú. Chun ár múnla a dhéanamh níos éasca le tuiscint, úsáidfimid an rogha taispeána is primitive Samhlacha ER gan aimhréidh na nodaireachta UML nó IDEF:

Bunachar sonraí Messenger (cuid 1): dearadh an bhunchreat

Inár sampla, is aonáin “seachtracha” duine, doiciméad agus “comhlacht” dhénártha an chomhaid atá ann go neamhspleách gan ár seirbhís. Mar sin, beimid ag breathnú orthu sa todhchaí mar naisc “áit éigin” le UUID.

Tarraing léaráidí chomh simplí agus is féidir - ní saineolaithe ar léamh UML/IDEF iad formhór na ndaoine a thaispeánfaidh tú dóibh. Ach a bheith cinnte a tharraingt.

Céim 3: Sceitseáil an struchtúr tábla

Maidir le tábla agus ainmneacha páirceIs féidir déileáil go héagsúil le hainmneacha "Rúisis" páirceanna agus táblaí, ach is ábhar blas é seo. Toisc go bhfuil an anseo ag Tensor níl aon fhorbróirí eachtracha ann, agus ligeann PostgreSQL dúinn ainmneacha a thabhairt fiú i hieroglyphs, má tá siad faoi ​​iamh i Sleachta, ansin is fearr linn rudaí a ainmniú go soiléir agus go soiléir ionas nach mbeidh aon neamhréireachtaí ann.
Ós rud é go scríobhann go leor daoine teachtaireachtaí chugainn ag an am céanna, féadfaidh cuid acu é seo a dhéanamh fiú as líne, ansin is é an rogha is simplí bain úsáid as UUIDanna mar aitheantóirí ní hamháin d'eintitis sheachtracha, ach freisin do gach réad laistigh dár seirbhís. Thairis sin, is féidir iad a ghiniúint fiú ar thaobh an chliaint - cabhróidh sé seo linn tacú le teachtaireachtaí a sheoladh nuair nach bhfuil an bunachar sonraí ar fáil go sealadach, agus go bhfuil an dóchúlacht go dtarlóidh imbhualadh thar a bheith íseal.

Beidh cuma mar seo ar an dréachtstruchtúr tábla inár mbunachar sonraí:
Táblaí: 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
);

Táblaí: GA

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

Is é an rud is simplí agus tú ag cur síos ar fhormáid ná tosú ar an ngraf naisc a “scaoileadh”. ó tháblaí nach ndéantar tagairt dóibh iad féin do dhuine ar bith.

Céim 4: Faigh amach riachtanais nach bhfuil soiléir

Sin é, tá bunachar sonraí deartha againn inar féidir leat scríobh go foirfe agus ar bhealach éigin le léamh.

Cuirimis muid féin i mbróga úsáideoir ár seirbhíse - cad ba mhaith linn a dhéanamh leis?

  • Teachtaireachtaí deireanacha
    Tá sé curtha in eagar go croineolaíoch clár teachtaireachtaí “mo” bunaithe ar chritéir éagsúla. Áit a bhfuil mé ar dhuine de na faighteoirí, áit ar mise an t-údar, áit ar scríobh siad chugam agus nár fhreagair mé, áit nár fhreagair siad mé, ...
  • Rannpháirtithe an chomhfhreagrais
    Cé atá rannpháirteach fiú sa chomhrá fada fada seo?

Ligeann ár struchtúr dúinn an dá fhadhb seo a réiteach “go ginearálta,” ach ní go tapa. Is í an fhadhb atá ann le haghaidh sórtáil laistigh den chéad tasc in ann innéacs a chruthú, oiriúnach do gach ceann de na rannpháirtithe (agus beidh ort na taifid go léir a bhaint as), agus an dara ceann a theastaíonn uait a réiteach sliocht gach teachtaireacht ar an ábhar seo.

Seans go gcuirfí trom ar thascanna úsáideora neamhbheartaithe cros ar tháirgiúlacht.

Céim 5: Denormalization Cliste

Déanfar an dá fhadhb atá againn a réiteach le táblaí breise ina ndéanfaimid cuid de na sonraí a dhúbailt, is gá chun innéacsanna oiriúnacha dár dtascanna a fhoirmiú orthu.
Bunachar sonraí Messenger (cuid 1): dearadh an bhunchreat

Táblaí: RU

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

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

Táblaí: GA

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

Anseo tá dhá chur chuige tipiciúil curtha i bhfeidhm againn a úsáidtear agus táblaí cúnta á gcruthú:

  • Taifid a iolrú
    Ag baint úsáide as taifead teachtaireachta tosaigh amháin, cruthaímid roinnt taifead leantacha i gcineálacha éagsúla clár d'úinéirí éagsúla - don seoltóir agus don fhaighteoir araon. Ach titeann gach ceann de na cláir ar an innéacs anois - tar éis an tsaoil, i gcás tipiciúil, beidh muid ag iarraidh a fheiceáil ach an chéad leathanach.
  • Taifid uathúla
    Gach uair a sheolann tú teachtaireacht laistigh d’ábhar ar leith, is leor a sheiceáil an bhfuil iontráil den sórt sin ann cheana féin. Mura bhfuil, cuir lenár “bhfoclóir” é.

Sa chéad chuid eile den alt beidh muid ag caint faoi críochdheighilt a chur i bhfeidhm isteach i struchtúr ár mbunachar sonraí.

Foinse: will.com

Add a comment