{"id":55011,"date":"2020-01-10T00:00:00","date_gmt":"2020-01-09T21:00:00","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/bd-messendzhera-ch-1-proektiruem-karkas-bazy"},"modified":"2020-02-18T14:03:05","modified_gmt":"2020-02-18T11:03:05","slug":"bd-messendzhera-ch-1-proektiruem-karkas-bazy","status":"publish","type":"post","link":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/bd-messendzhera-ch-1-proektiruem-karkas-bazy","title":{"rendered":"S\u00f5numite andmebaas (osa 1): projekteerime andmebaasi struktuuri","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Kuidas saab \u00e4ritegevuse n\u00f5uded konkreetseteks andmestruktuurdeks t\u00f5lkida, kasutades n\u00e4iteks \"nullist\" saadud andmebaasi projekteerimist s\u00f5numivahetuseks.<\/p>\n<ul>\n<li>Osa 1: projekteerime andmebaasi karkassi<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/483170\/\">Osa 2: sektsioneerime \u00abelus\u00bb<\/a><\/noindex><\/li>\n<\/ul>\n<p>\n<img decoding=\"async\" alt=\"S\u00f5numite andmebaas (osa 1): projekteerime andmebaasi struktuuri\" src=\"\/wp-content\/uploads\/2020\/01\/d4e85052405da3f6580e4e931c292079.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nMeie andmebaas ei saa olema nii ulatuslik ja jaotatud, <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/vk\/blog\/342570\/\">nagu VKontakte<\/a><\/noindex> v\u00f5i <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/oleg-bunin\/blog\/340976\/\">Badoo<\/a><\/noindex>, vaid pigem \"et oleks\", aga siiski h\u00e4sti \u2014 funktsionaalne, kiire ja <b>mahtuks \u00fchele serverile.<\/b> PostgreSQL \u2014 et saaksime k\u00e4ivitada eraldi teenuse eksemplari kuskil k\u00f5rval, n\u00e4iteks.<\/p>\n<p>Seega ei k\u00e4sitle me shardimise, replikatsiooni ja geograafiliste s\u00fcsteemide k\u00fcsimusi, vaid keskendume skeemilistele lahendustele andmebaasi sees.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Samm 1: Veidi \u00e4rispetsiifikat.<\/h2>\n<p>\nMeie s\u00f5numivahetust projekteerime mitte abstraktselt, vaid integreerime ettev\u00f5tte sotsiaalv\u00f5rku. <noindex><a rel=\"nofollow\" href=\"https:\/\/sbis.ru\/help\/work_in\/sms\/\">See t\u00e4hendab, et inimesed ei \"lihtsalt suhtle\", vaid suhtlevad omavahel teatud \u00e4ri\u00fclesannete t\u00e4itmise kontekstis.<\/a><\/noindex>. Millised \u00e4ri\u00fclesanded on? Vaatame n\u00e4iteks Vassili n\u00e4itel \u2014 arendusosakonna juhti.<\/p>\n<p>\"Nikolai, selle \u00fclesande jaoks on t\u00e4na juba vajalik patch!\"<\/p>\n<ul>\n<li><i>See t\u00e4hendab, et suhtlemine v\u00f5ib toimuma n\u00e4iteks mingis kontekstis<\/i><br \/>\n\"Kola, l\u00e4hme t\u00e4na \u00f5htul Dota m\u00e4ngima?\" <b>dokument<\/b>.<\/li>\n<li><i>See t\u00e4hendab, et isegi \u00fche paarikese vestluses v\u00f5ib suhtlemine samal ajal toimuda.<\/i><br \/>\n\u0422\u043e \u0435\u0441\u0442\u044c \u0434\u0430\u0436\u0435 \u0443 \u043e\u0434\u043d\u043e\u0439 \u043f\u0430\u0440\u044b \u0441\u043e\u0431\u0435\u0441\u0435\u0434\u043d\u0438\u043a\u043e\u0432 \u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043c\u043e\u0436\u0435\u0442 \u0432\u0435\u0441\u0442\u0438\u0441\u044c <b>erinevate teemadega<\/b>.<\/li>\n<li><i>\u201ePetr, Nikolai, vaadake manuses uusi serveri hindu.\u201c<\/i><br \/>\n\u00dchel s\u00f5numil v\u00f5ib olla <b>mitu saajat<\/b>. Samuti v\u00f5ib s\u00f5num sisaldada <b>manustatud faile<\/b>.<\/li>\n<li><i>\u201eSemen, ka sina vaata seda.\u201c<\/i><br \/>\nJa peab olema v\u00f5imalus juba olemasolevasse vestlusse <b>kaasa kutsuda uus osaleja<\/b>.<\/li>\n<\/ul>\n<p>\nPeatume praegu sellel nimekirjal \u201eilmselgetest\u201c vajadustest.<\/p>\n<blockquote><p>Ilma rakenduslikke erip\u00e4rasid \u00fclesande ja selle kehtestatud piirangute m\u00f5istmata on praktiliselt v\u00f5imatu projekteerida <b>t\u00f5husat<\/b> andmebaasi skeemi selle lahendamiseks.<\/p><\/blockquote>\n<p><\/p>\n<h2>2. samm: minimaalne loogiline skeem<\/h2>\n<p>\nSkeemiliselt tundub k\u00f5ik v\u00e4ga sarnane e-kirjadevahetusele \u2014 traditsioonilisele \u00e4rivahendile. Jah, \u201ealgtude\u201c paljud \u00e4ri\u00fclesanded n\u00e4evad v\u00e4lja sarnased, seega on ka nende lahendamiseks vajalikud t\u00f6\u00f6riistad struktuurselt sarnased.<\/p>\n<p>Kinnitatame juba saadud loogilise suhete skeemi. Arusaamise lihtsustamiseks meie mudelisse kasutame k\u00f5ige primitiivsemaid kuvamisviise <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/ER-%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C\">ER-mudeleid<\/a><\/noindex> ilma UML v\u00f5i IDEF-m\u00e4rkuste keerukusteta:<\/p>\n<p><img decoding=\"async\" alt=\"S\u00f5numite andmebaas (osa 1): projekteerime andmebaasi struktuuri\" src=\"\/wp-content\/uploads\/2020\/01\/75d0b3cf9e5a44ae3e243449fa406fbc.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMeie n\u00e4ites on tegelane, dokument ja faili binaarne \"keha\" \"v\u00e4listest\" \u00fcksustest, mis eksisteerivad iseseisvalt ilma meie teenuseta. Seet\u00f5ttu tajume neid edaspidi kui m\u00f5ningaid linke \"kuidas iganes\", kasutades UUID-d.<\/p>\n<blockquote><p>Joonistage <b>skeeme nii lihtsalt kui v\u00f5imalik<\/b> \u2014 enamiku nende jaoks, kellele te neid n\u00e4itate, ei ole UML\/IDEF lugemise eksperdid. Kuid \u2014 kindlasti joonistage.<\/p><\/blockquote>\n<p><\/p>\n<h2>Samm 3: Joonistame tabelite struktuuri<\/h2>\n<p>\n<b class=\"spoiler_title\">Tabelite ja v\u00e4ljade nimedest<\/b>K 'vene' tabeli ja v\u00e4ljade nimede suhtes v\u00f5ib suhtuda erinevalt, kuid see on maits k\u00fcsimus. Kuna <noindex><a rel=\"nofollow\" href=\"https:\/\/tensor.ru\/about\/career\/vacancies\">meil 'Tensoris'<\/a><\/noindex> ei ole v\u00e4lismaalaste arendajaid, ja PostgreSQL v\u00f5imaldab meil nime anda isegi hierogl\u00fc\u00fcfidega, kui need <u>on jutum\u00e4rkides<\/u>, siis eelistame nimetada objekte \u00fcheselt m\u00f5istetavalt, et v\u00e4ltida t\u00f5lgenduste erinevusi.<br \/>\nKuna s\u00f5numeid kirjutab meil mitu inimest korraga, v\u00f5ivad m\u00f5ned neist seda teha <u>offline-re\u017eiimis<\/u>, siis k\u00f5ige lihtsam variant on <b>kasutada UUID-d identifikaatoritena<\/b> mitte ainult v\u00e4listes \u00fcksustes, vaid ka k\u00f5igi objektide jaoks meie teenuses. T\u00e4iendavaks plussiks on see, et neid saab genereerida isegi kliendi poolel \u2014 see aitab meil s\u00f5numite saatmist toetada l\u00fchiajalise andmebaasi k\u00e4ttesaamatuse korral, ja kokkup\u00f5rke t\u00f5en\u00e4osus on \u00e4\u00e4rmiselt madal.<\/p>\n<p>Meie andmebaasi t\u00f6\u00f6versioon tabelite struktuur n\u00e4eb v\u00e4lja j\u00e4rgmine:<br \/>\n<b class=\"spoiler_title\">Tabelid: RU<\/b><\/p>\n<pre><code class=\"sql\">LOOJA TABEL \"Teema\"(\n  \"Teema\"\n    uuid\n      PEAMISED V\u00d5TME\n, \"Dokument\"\n    uuid\n, \"Pealkiri\"\n    tekst\n);\n\nLOOJA TABEL \"S\u00f5num\"(\n  \"S\u00f5num\"\n    uuid\n      PEAMISED V\u00d5TME\n, \"Teema\"\n    uuid\n, \"Autor\"\n    uuid\n, \"Kuup\u00e4evAeg\"\n    timestamp\n, \"Tekst\"\n    tekst\n);\n\nLOOJA TABEL \"Aadressaat\"(\n  \"S\u00f5num\"\n    uuid\n, \"Isik\"\n    uuid\n, PEAMISED V\u00d5TME(\"S\u00f5num\", \"Isik\")\n);\n\nLOOJA TABEL \"Fail\"(\n  \"Fail\"\n    uuid\n      PEAMISED V\u00d5TME\n, \"S\u00f5num\"\n    uuid\n, \"BLOB\"\n    uuid\n, \"Nimi\"\n    tekst\n);<\/code><\/pre>\n<p>\n<b class=\"spoiler_title\">Tabelid : EN<\/b><\/p>\n<pre><code class=\"sql\">LOOJA TABEL teema(\n  teema\n    uuid\n      PEAMISED V\u00d5TME\n, dokument\n    uuid\n, pealkiri\n    tekst\n);\n\nLOOJA TABEL s\u00f5num(\n  s\u00f5num\n    uuid\n      PEAMISED V\u00d5TME\n, teema\n    uuid\n, autor\n    uuid\n, dt\n    timestamp\n, keha\n    tekst\n);\n\nLOOJA TABEL s\u00f5num_aadressaat(\n  s\u00f5num\n    uuid\n, isik\n    uuid\n, PEAMISED V\u00d5TME(s\u00f5num, isik)\n);\n\nLOOJA TABEL s\u00f5num_fail(\n  fail\n    uuid\n      PEAMISED V\u00d5TME\n, s\u00f5num\n    uuid\n, sisu\n    uuid\n, failinimi\n    tekst\n);<\/code><\/pre>\n<p><\/p>\n<blockquote><p>Lihtsaim viis formaadi kirjeldamiseks on alustada suhete graafist <b>tabelitest, mis ei viita<\/b> mingile teisele.<\/p><\/blockquote>\n<p><\/p>\n<h2>Samm 4: Selgitame v\u00e4lja mitte ilmsed vajadused<\/h2>\n<p>\nOleme projekteerinud andmebaasi, kuhu on suurep\u00e4rane kirjutada ja <i><b>kuidagi<\/b><\/i> lugeda.<\/p>\n<p>Pange end meie teenuse kasutaja olukorda \u2014 mida me sooviksime selle abil teha?<\/p>\n<ul>\n<li><i>Viimased s\u00f5numid<\/i><br \/>\nSee <b>kronoloogiliselt j\u00e4rjestatud<\/b> \u043f\u043e \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u0430\u043c \u0440\u0435\u0435\u0441\u0442\u0440 \u00ab\u043c\u043e\u0438\u0445\u00bb \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439. \u0413\u0434\u0435 \u044f \u043e\u0434\u0438\u043d \u0438\u0437 \u0430\u0434\u0440\u0435\u0441\u0430\u0442\u043e\u0432, \u0433\u0434\u0435 \u044f \u0430\u0432\u0442\u043e\u0440, \u0433\u0434\u0435 \u043c\u043d\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043b\u0438, \u0430 \u044f \u043d\u0435 \u043e\u0442\u0432\u0435\u0442\u0438\u043b, \u0433\u0434\u0435 \u043d\u0435 \u043e\u0442\u0432\u0435\u0442\u0438\u043b\u0438 \u043c\u043d\u0435, &#8230;<\/li>\n<li><i>Vestluse osalejad<\/i><br \/>\nKes on \u00fcldse selles pikale veninud vestluses osalised?<\/li>\n<\/ul>\n<p>\nMeie struktuur v\u00f5imaldab lahendada m\u00f5lemat \u00fclesannet \u201e\u00fcldiselt\u201c, kuid kiiresti - ei. Probleem on selles, et esimese \u00fclesande raames sortimise jaoks <b>pole v\u00f5imalik luua indeksi<\/b>, mis sobib igale osalejale (ja tuleb v\u00e4lja v\u00f5tta k\u00f5ik salvestised), ning teise \u00fclesande lahendamiseks on vajalik <b>v\u00e4lja v\u00f5tta k\u00f5ik s\u00f5numid<\/b> teema kohta.<\/p>\n<blockquote><p>Ette n\u00e4htud kasutajaprobleemid v\u00f5ivad t\u00f5siselt kahjustada <b>tulemusi<\/b>.<\/p><\/blockquote>\n<p><\/p>\n<h2>Samm 5: M\u00f5istlik denormaalimine<\/h2>\n<p>\nM\u00f5lemad meie probleemid aitavad lahendada t\u00e4iendavad tabelid, kuhu me kavatseme <b>duplitseerida osa andmeid<\/b>, mis on vajalik nendele \u00fclesannetele vastavate indeksite moodustamiseks.<br \/>\n<img decoding=\"async\" alt=\"S\u00f5numite andmebaas (osa 1): projekteerime andmebaasi struktuuri\" src=\"\/wp-content\/uploads\/2020\/01\/f136a9904518b05bca74cc2b9c2f01b2.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b class=\"spoiler_title\">Tabelid: RU<\/b><\/p>\n<pre><code class=\"sql\">Loo tabel \"S\u00f5numiteRegister\"(\n  \"Omanik\"\n    uuid\n, \"RegistriT\u00fc\u00fcp\"\n    smallint\n, \"Kuup\u00e4evAeg\"\n    timestamp\n, \"S\u00f5num\"\n    uuid\n, PRIMARY KEY(\"Omanik\", \"RegistriT\u00fc\u00fcp\", \"S\u00f5num\")\n);\nLoo indeks \"S\u00f5numiteRegister\"(\"Omanik\", \"RegistriT\u00fc\u00fcp\", \"Kuup\u00e4evAeg\" DESC);\n\nLoo tabel \"TeemaOsaleja\"(\n  \"Teema\"\n    uuid\n, \"Isik\"\n    uuid\n, PRIMARY KEY(\"Teema\", \"Isik\")\n);<\/code><\/pre>\n<p>\n<b class=\"spoiler_title\">Tabelid : EN<\/b><\/p>\n<pre><code class=\"sql\">Loo tabel message_registry(\n  owner\n    uuid\n, registry\n    smallint\n, dt\n    timestamp\n, message\n    uuid\n, PRIMARY KEY(owner, registry, message)\n);\nLoo indeks message_registry(owner, registry, dt DESC);\n\nLoo tabel theme_participant(\n  theme\n    uuid\n, person\n    uuid\n, PRIMARY KEY(theme, person)\n);<\/code><\/pre>\n<p>\nSiin rakendasime kahte t\u00fc\u00fcpilist l\u00e4henemist, mida kasutatakse abitaabelite loomisel:<\/p>\n<ul>\n<li><b>Kirjete paljundamine<\/b><br \/>\nLoome \u00fche algse s\u00f5numi p\u00f5hjal mitu j\u00e4rgmise kirje varianti eri registrites erinevatele omanikele \u2014 nii saatjale kui ka saajale. N\u00fc\u00fcd sobitub iga register indeksisse, sest t\u00fc\u00fcpiliselt tahame n\u00e4ha ainult esimest lehte.<\/li>\n<li><b>Kirjete unikaalsus<\/b><br \/>\nIga s\u00f5numi saatmise korral antud teemas piisab, et kontrollida, kas selline kirje juba eksisteerib. Kui ei, siis lisame selle meie \"s\u00f5naraamatusse\".<\/li>\n<\/ul>\n<p>\nJ\u00e4rgmises artikli osas r\u00e4\u00e4gime <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/483170\/\">sektsioonide rakendamine<\/a><\/noindex> meie andmebaasi struktuuri.<br \/>\n<br \/>Allikas: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/483176\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0432\u0435\u0441\u0442\u0438 \u0431\u0438\u0437\u043d\u0435\u0441-\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u00ab\u0441 \u043d\u0443\u043b\u044f\u00bb \u0431\u0430\u0437\u044b \u0434\u043b\u044f \u043c\u0435\u0441\u0441\u0435\u043d\u0434\u0436\u0435\u0440\u0430. \u0427\u0430\u0441\u0442\u044c 1: \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u0443\u0435\u043c \u043a\u0430\u0440\u043a\u0430\u0441 \u0431\u0430\u0437\u044b \u0427\u0430\u0441\u0442\u044c 2: \u0441\u0435\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u0443\u0435\u043c \u00ab\u043d\u0430\u0436\u0438\u0432\u0443\u044e\u00bb \u041d\u0430\u0448\u0430 \u0431\u0430\u0437\u0430 \u0431\u0443\u0434\u0435\u0442 \u043d\u0435 \u0442\u0430\u043a\u043e\u0439 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u043d\u043e\u0439 \u0438 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439, \u043a\u0430\u043a \u0443 \u0412\u041a\u043e\u043d\u0442\u0430\u043a\u0442\u0435 \u0438\u043b\u0438 Badoo, \u0430 \u00ab\u0447\u0442\u043e\u0431\u044b \u0431\u044b\u043b\u043e\u00bb, \u043d\u043e \u0431\u044b\u043b\u043e \u0445\u043e\u0440\u043e\u0448\u043e \u2014 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e, \u0431\u044b\u0441\u0442\u0440\u043e \u0438 \u0443\u043c\u0435\u0449\u0430\u043b\u043e\u0441\u044c \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435 PostgreSQL \u2014 \u0447\u0442\u043e\u0431\u044b [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-55011","post","type-post","status-publish","format-standard","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0432\u0435\u0441\u0442\u0438 \u0431\u0438\u0437\u043d\u0435\u0441-\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u00ab\u0441 \u043d\u0443\u043b\u044f\u00bb \u0431\u0430\u0437\u044b \u0434\u043b\u044f \u043c\u0435\u0441\u0441\u0435\u043d\u0434\u0436\u0435\u0440\u0430. \u0427\u0430\u0441\u0442\u044c 1: \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u0443\u0435\u043c \u043a\u0430\u0440\u043a\u0430\u0441 \u0431\u0430\u0437\u044b \u0427\u0430\u0441\u0442\u044c 2: \u0441\u0435\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u0443\u0435\u043c \u00ab\u043d\u0430\u0436\u0438\u0432\u0443\u044e\u00bb \u041d\u0430\u0448\u0430 \u0431\u0430\u0437\u0430 \u0431\u0443\u0434\u0435\u0442 \u043d\u0435 \u0442\u0430\u043a\u043e\u0439 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u043d\u043e\u0439 \u0438 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439, \u043a\u0430\u043a \u0443 \u0412\u041a\u043e\u043d\u0442\u0430\u043a\u0442\u0435 \u0438\u043b\u0438 Badoo, \u0430 \u00ab\u0447\u0442\u043e\u0431\u044b \u0431\u044b\u043b\u043e\u00bb, \u043d\u043e \u0431\u044b\u043b\u043e \u0445\u043e\u0440\u043e\u0448\u043e \u2014 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e, \u0431\u044b\u0441\u0442\u0440\u043e \u0438 \u0443\u043c\u0435\u0449\u0430\u043b\u043e\u0441\u044c \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435 PostgreSQL \u2014 \u0447\u0442\u043e\u0431\u044b\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/bd-messendzhera-ch-1-proektiruem-karkas-bazy\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"et_EE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0411\u0414 \u043c\u0435\u0441\u0441\u0435\u043d\u0434\u0436\u0435\u0440\u0430 (\u0447.1): \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u0443\u0435\u043c \u043a\u0430\u0440\u043a\u0430\u0441 \u0431\u0430\u0437\u044b | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0432\u0435\u0441\u0442\u0438 \u0431\u0438\u0437\u043d\u0435\u0441-\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u00ab\u0441 \u043d\u0443\u043b\u044f\u00bb \u0431\u0430\u0437\u044b \u0434\u043b\u044f \u043c\u0435\u0441\u0441\u0435\u043d\u0434\u0436\u0435\u0440\u0430. \u0427\u0430\u0441\u0442\u044c 1: \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u0443\u0435\u043c \u043a\u0430\u0440\u043a\u0430\u0441 \u0431\u0430\u0437\u044b \u0427\u0430\u0441\u0442\u044c 2: \u0441\u0435\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u0443\u0435\u043c \u00ab\u043d\u0430\u0436\u0438\u0432\u0443\u044e\u00bb \u041d\u0430\u0448\u0430 \u0431\u0430\u0437\u0430 \u0431\u0443\u0434\u0435\u0442 \u043d\u0435 \u0442\u0430\u043a\u043e\u0439 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u043d\u043e\u0439 \u0438 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439, \u043a\u0430\u043a \u0443 \u0412\u041a\u043e\u043d\u0442\u0430\u043a\u0442\u0435 \u0438\u043b\u0438 Badoo, \u0430 \u00ab\u0447\u0442\u043e\u0431\u044b \u0431\u044b\u043b\u043e\u00bb, \u043d\u043e \u0431\u044b\u043b\u043e \u0445\u043e\u0440\u043e\u0448\u043e \u2014 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e, \u0431\u044b\u0441\u0442\u0440\u043e \u0438 \u0443\u043c\u0435\u0449\u0430\u043b\u043e\u0441\u044c \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435 PostgreSQL \u2014 \u0447\u0442\u043e\u0431\u044b\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/bd-messendzhera-ch-1-proektiruem-karkas-bazy\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-01-09T21:00:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-18T11:03:05+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Messengeri andmebaas (osa 1): projekteerime andmebaasi karkassi | ProHoster","description":"Kuidas t\u00f5lkida \u00e4rin\u00f5uded konkreetseteks andmestruktuurideks, kasutades n\u00e4itena andmebaasi projekteerimist \"nullist\" messengeri jaoks. Osa 1: projekteerime andmebaasi karkassi. Osa 2: teeme sektsioneerimist \"otse\". Meie andmebaas ei ole nii mahukas ja jaotatud kui VKontakte v\u00f5i Badoo, vaid lihtsalt, et see oleks, kuid ikka hea \u2013 funktsionaalne, kiire ja mahuks \u00fchele PostgreSQL serverile \u2013 et","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/bd-messendzhera-ch-1-proektiruem-karkas-bazy","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"et_EE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0411\u0414 \u043c\u0435\u0441\u0441\u0435\u043d\u0434\u0436\u0435\u0440\u0430 (\u0447.1): \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u0443\u0435\u043c \u043a\u0430\u0440\u043a\u0430\u0441 \u0431\u0430\u0437\u044b | ProHoster","og:description":"\u041a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0432\u0435\u0441\u0442\u0438 \u0431\u0438\u0437\u043d\u0435\u0441-\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u00ab\u0441 \u043d\u0443\u043b\u044f\u00bb \u0431\u0430\u0437\u044b \u0434\u043b\u044f \u043c\u0435\u0441\u0441\u0435\u043d\u0434\u0436\u0435\u0440\u0430. \u0427\u0430\u0441\u0442\u044c 1: \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u0443\u0435\u043c \u043a\u0430\u0440\u043a\u0430\u0441 \u0431\u0430\u0437\u044b \u0427\u0430\u0441\u0442\u044c 2: \u0441\u0435\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u0443\u0435\u043c \u00ab\u043d\u0430\u0436\u0438\u0432\u0443\u044e\u00bb \u041d\u0430\u0448\u0430 \u0431\u0430\u0437\u0430 \u0431\u0443\u0434\u0435\u0442 \u043d\u0435 \u0442\u0430\u043a\u043e\u0439 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u043d\u043e\u0439 \u0438 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439, \u043a\u0430\u043a \u0443 \u0412\u041a\u043e\u043d\u0442\u0430\u043a\u0442\u0435 \u0438\u043b\u0438 Badoo, \u0430 \u00ab\u0447\u0442\u043e\u0431\u044b \u0431\u044b\u043b\u043e\u00bb, \u043d\u043e \u0431\u044b\u043b\u043e \u0445\u043e\u0440\u043e\u0448\u043e \u2014 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e, \u0431\u044b\u0441\u0442\u0440\u043e \u0438 \u0443\u043c\u0435\u0449\u0430\u043b\u043e\u0441\u044c \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435 PostgreSQL \u2014 \u0447\u0442\u043e\u0431\u044b","og:url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/bd-messendzhera-ch-1-proektiruem-karkas-bazy","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-01-09T21:00:00+00:00","article:modified_time":"2020-02-18T11:03:05+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"55011","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-24 13:30:15","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 17:27:13","updated":"2026-01-24 13:30:15"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/55011","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=55011"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/55011\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=55011"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=55011"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=55011"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}