{"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\/sq\/blog\/administrirovanie\/bd-messendzhera-ch-1-proektiruem-karkas-bazy","title":{"rendered":"Baza e t\u00eb dh\u00ebnave e mesazherit (pjesa 1): projektojm\u00eb skeletin e baz\u00ebs","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Si mund t\u00eb shnd\u00ebrrohen k\u00ebrkesat e biznesit n\u00eb struktura konkrete t\u00eb t\u00eb dh\u00ebnave, duke marr\u00eb si shembull projektimin \u00abnga e para\u00bb t\u00eb nj\u00eb baze t\u00eb dh\u00ebnash p\u00ebr nj\u00eb mesazher.<\/p>\n<ul>\n<li>Pjesa 1: projektojm\u00eb skeletin e baz\u00ebs<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/483170\/\">Pjesa 2: e segmentojm\u00eb \u00ablive\u00bb<\/a><\/noindex><\/li>\n<\/ul>\n<p>\n<img decoding=\"async\" alt=\"Baza e t\u00eb dh\u00ebnave e mesazherit (pjesa 1): projektojm\u00eb skeletin e baz\u00ebs\" src=\"\/wp-content\/uploads\/2020\/01\/d4e85052405da3f6580e4e931c292079.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nBaza jon\u00eb nuk do t\u00eb jet\u00eb aq e madhe dhe e shp\u00ebrndar\u00eb, <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/vk\/blog\/342570\/\">si te VKontakte<\/a><\/noindex> ose <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/oleg-bunin\/blog\/340976\/\">Badoo<\/a><\/noindex>, por mjaftuesh\u00ebm e mir\u00eb \u2014 funksionale, e shpejt\u00eb dhe <b>q\u00eb t\u00eb funksionoj\u00eb n\u00eb nj\u00eb server t\u00eb vet\u00ebm<\/b> PostgreSQL \u2014 q\u00eb, p\u00ebr shembull, t\u00eb mund t\u00eb vendoset nj\u00eb instanc\u00eb e ve\u00e7uar e sh\u00ebrbimit diku nga pala tjet\u00ebr.<\/p>\n<p>Prandaj nuk do t\u00eb trajtojm\u00eb \u00e7\u00ebshtjet e sharding, replikimit dhe sistemeve t\u00eb shp\u00ebrndara gjeografikisht, por do t\u00eb p\u00ebrqendrohemi te zgjidhjet skematike brenda DB.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Hapi 1: Pak specifik\u00eb biznesi<\/h2>\n<p>\nSistemin ton\u00eb t\u00eb mesazheve nuk do ta projektojm\u00eb n\u00eb m\u00ebnyr\u00eb abstrakte, por do ta integrojm\u00eb n\u00eb mjedisin e nj\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/sbis.ru\/help\/work_in\/sms\/\">rrjeti social korporativ<\/a><\/noindex>. Kjo do t\u00eb thot\u00eb se njer\u00ebzit te ne nuk \u00abthjesht shk\u00ebmbejn\u00eb mesazhe\u00bb, por komunikojn\u00eb mes tyre n\u00eb kontekstin e zgjidhjes s\u00eb detyrave t\u00eb caktuara t\u00eb biznesit.<\/p>\n<p>Po \u00e7far\u00eb lloj detyrash ka biznesi?.. Le ta shohim n\u00eb shembullin e Vasilit \u2014 drejtues i departamentit t\u00eb zhvillimit.<\/p>\n<ul>\n<li><i>\u00abNikolai, p\u00ebr k\u00ebt\u00eb detyr\u00eb patch-i duhet q\u00eb sot!\u00bb<\/i><br \/>\nKjo do t\u00eb thot\u00eb se korrespondenca mund t\u00eb zhvillohet n\u00eb kontekstin e nj\u00eb <b>dokumenti<\/b>.<\/li>\n<li><i>\u00abKolja, a luajm\u00eb DotA n\u00eb mbr\u00ebmje?\u00bb<\/i><br \/>\nPra, edhe mes t\u00eb nj\u00ebjtit \u00e7ift bashk\u00ebbiseduesish komunikimi mund t\u00eb zhvillohet nj\u00ebkoh\u00ebsisht <b>mbi tema t\u00eb ndryshme<\/b>.<\/li>\n<li><i>\u00abPjetr, Nikolai, shikoni n\u00eb attachment list\u00ebn e \u00e7mimeve p\u00ebr serverin e ri.\u00bb<\/i><br \/>\nPra, nj\u00eb mesazh mund t\u00eb ket\u00eb <b>disa marr\u00ebs<\/b>. Nd\u00ebrkoh\u00eb, mesazhi mund t\u00eb p\u00ebrmbaj\u00eb <b>skedar\u00eb t\u00eb bashk\u00ebngjitur<\/b>.<\/li>\n<li><i>\u00abSemjon, hidhi edhe ti nj\u00eb sy.\u00bb<\/i><br \/>\nDhe duhet t\u00eb ekzistoj\u00eb mund\u00ebsia q\u00eb n\u00eb nj\u00eb korrespondenc\u00eb tashm\u00eb ekzistuese <b>t\u00eb ftohet nj\u00eb pjes\u00ebmarr\u00ebs i ri<\/b>.<\/li>\n<\/ul>\n<p>\nLe t\u00eb ndalemi p\u00ebr momentin te kjo list\u00eb nevojash \u00abt\u00eb qarta\u00bb.<\/p>\n<blockquote><p>Pa kuptuar specifik\u00ebn praktike t\u00eb detyr\u00ebs dhe kufizimet q\u00eb ajo vendos, t\u00eb projektohet nj\u00eb <b>efikase<\/b> skem\u00eb DB p\u00ebr zgjidhjen e saj \u00ebsht\u00eb praktikisht e pamundur.<\/p><\/blockquote>\n<p><\/p>\n<h2>Hapi 2: Skema minimale logjike<\/h2>\n<p>\nN\u00eb aspektin skematik, p\u00ebr momentin gjith\u00e7ka ngjan shum\u00eb me korrespondenc\u00ebn email \u2014 nj\u00eb mjet tradicional p\u00ebr zhvillimin e biznesit. Po, n\u00eb aspektin \u00abalgoritmik\u00bb shum\u00eb detyra biznesi i ngjajn\u00eb nj\u00ebra-tjetr\u00ebs, prandaj edhe mjetet p\u00ebr zgjidhjen e tyre do t\u00eb ken\u00eb struktur\u00eb t\u00eb ngjashme.<\/p>\n<p>Le t\u00eb fiksojm\u00eb skem\u00ebn logjike t\u00eb marr\u00ebdh\u00ebnieve mes entiteteve q\u00eb kemi marr\u00eb deri tani. P\u00ebr ta b\u00ebr\u00eb modelin ton\u00eb m\u00eb t\u00eb leht\u00eb p\u00ebr t\u2019u kuptuar, do t\u00eb p\u00ebrdorim variantin m\u00eb t\u00eb thjesht\u00eb t\u00eb paraqitjes s\u00eb nj\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/ER-%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C\">ER-modeli<\/a><\/noindex> pa nd\u00ebrlikime me notacionet UML ose IDEF:<\/p>\n<p><img decoding=\"async\" alt=\"Baza e t\u00eb dh\u00ebnave e mesazherit (pjesa 1): projektojm\u00eb skeletin e baz\u00ebs\" src=\"\/wp-content\/uploads\/2020\/01\/75d0b3cf9e5a44ae3e243449fa406fbc.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nN\u00eb shembullin ton\u00eb, personi, dokumenti dhe \u201ctrupi\u201d binar i skedarit jan\u00eb entitete \u201ct\u00eb jashtme\u201d q\u00eb ekzistojn\u00eb m\u00eb vete edhe pa sh\u00ebrbimin ton\u00eb. Prandaj, m\u00eb tej do t\u2019i trajtojm\u00eb thjesht si disa referenca \u201cdiku\u201d sipas UUID.<\/p>\n<blockquote><p>Vizatojini <b>skemat sa m\u00eb thjesht t\u00eb jet\u00eb e mundur<\/b> \u2014 shumica e atyre q\u00eb do t\u2019ua tregoni nuk jan\u00eb ekspert\u00eb n\u00eb leximin e UML\/IDEF. Por vizatojini patjet\u00ebr.<\/p><\/blockquote>\n<p><\/p>\n<h2>Hapi 3: Skicojm\u00eb struktur\u00ebn e tabelave<\/h2>\n<p>\n<b class=\"spoiler_title\">P\u00ebr emrat e tabelave dhe fushave<\/b>Mund t\u00eb kesh q\u00ebndrime t\u00eb ndryshme ndaj emrave \u201crus\u00eb\u201d t\u00eb fushave dhe tabelave, por kjo \u00ebsht\u00eb \u00e7\u00ebshtje shijeje. Meq\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/tensor.ru\/about\/career\/vacancies\">te ne n\u00eb \u201cTensor\u201d<\/a><\/noindex> nuk ka zhvillues t\u00eb huaj, nd\u00ebrsa PostgreSQL na lejon t\u2019u japim emra qoft\u00eb edhe me hieroglife, n\u00ebse ato <u>vendosen n\u00eb thonj\u00ebza<\/u>, ne preferojm\u00eb t\u2019i em\u00ebrtojm\u00eb objektet qart\u00eb dhe pa m\u00ebdyshje, q\u00eb t\u00eb mos ket\u00eb interpretime t\u00eb ndryshme.<br \/>\nMeqen\u00ebse mesazhet te ne i shkruajn\u00eb shum\u00eb njer\u00ebz nj\u00ebkoh\u00ebsisht, disa prej tyre madje mund ta b\u00ebjn\u00eb k\u00ebt\u00eb <u>n\u00eb regjim offline<\/u>, ndaj varianti m\u00eb i thjesht\u00eb \u00ebsht\u00eb <b>t\u00eb p\u00ebrdorim UUID si identifikues<\/b> jo vet\u00ebm p\u00ebr entitetet e jashtme, por edhe p\u00ebr t\u00eb gjitha objektet brenda sh\u00ebrbimit ton\u00eb. Madje ato mund t\u00eb gjenerohen edhe n\u00eb an\u00ebn e klientit \u2014 kjo do t\u00eb na ndihmoj\u00eb t\u00eb mb\u00ebshtesim d\u00ebrgimin e mesazheve gjat\u00eb munges\u00ebs afatshkurt\u00ebr t\u00eb disponueshm\u00ebris\u00eb s\u00eb DB-s\u00eb, nd\u00ebrsa gjasat p\u00ebr kolizion jan\u00eb jasht\u00ebzakonisht t\u00eb vogla.<\/p>\n<p>Struktura paraprake e tabelave n\u00eb baz\u00ebn ton\u00eb do t\u00eb duket k\u00ebshtu:<br \/>\n<b class=\"spoiler_title\">Tabelat : RU<\/b><\/p>\n<pre><code class=\"sql\">CREATE TABLE \"\u0422\u0435\u043c\u0430\"(\n  \"\u0422\u0435\u043c\u0430\"\n    uuid\n      PRIMARY KEY\n, \"\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\"\n    uuid\n, \"\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\"\n    text\n);\n\nCREATE TABLE \"\u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435\"(\n  \"\u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435\"\n    uuid\n      PRIMARY KEY\n, \"\u0422\u0435\u043c\u0430\"\n    uuid\n, \"\u0410\u0432\u0442\u043e\u0440\"\n    uuid\n, \"\u0414\u0430\u0442\u0430\u0412\u0440\u0435\u043c\u044f\"\n    timestamp\n, \"\u0422\u0435\u043a\u0441\u0442\"\n    text\n);\n\nCREATE TABLE \"\u0410\u0434\u0440\u0435\u0441\u0430\u0442\"(\n  \"\u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435\"\n    uuid\n, \"\u041f\u0435\u0440\u0441\u043e\u043d\u0430\"\n    uuid\n, PRIMARY KEY(\"\u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435\", \"\u041f\u0435\u0440\u0441\u043e\u043d\u0430\")\n);\n\nCREATE TABLE \"\u0424\u0430\u0439\u043b\"(\n  \"\u0424\u0430\u0439\u043b\"\n    uuid\n      PRIMARY KEY\n, \"\u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435\"\n    uuid\n, \"BLOB\"\n    uuid\n, \"\u0418\u043c\u044f\"\n    text\n);<\/code><\/pre>\n<p>\n<b class=\"spoiler_title\">Tabelat : EN<\/b><\/p>\n<pre><code class=\"sql\">CREATE TABLE theme(\n  theme\n    uuid\n      PRIMARY KEY\n, document\n    uuid\n, title\n    text\n);\n\nCREATE TABLE message(\n  message\n    uuid\n      PRIMARY KEY\n, theme\n    uuid\n, author\n    uuid\n, dt\n    timestamp\n, body\n    text\n);\n\nCREATE TABLE message_addressee(\n  message\n    uuid\n, person\n    uuid\n, PRIMARY KEY(message, person)\n);\n\nCREATE TABLE message_file(\n  file\n    uuid\n      PRIMARY KEY\n, message\n    uuid\n, content\n    uuid\n, filename\n    text\n);<\/code><\/pre>\n<p><\/p>\n<blockquote><p>M\u00eb e thjeshta gjat\u00eb p\u00ebrshkrimit t\u00eb formatit \u00ebsht\u00eb t\u00eb filloni ta \u201cshpalosni\u201d grafikun e lidhjeve <b>nga tabelat q\u00eb nuk referojn\u00eb<\/b> vet\u00eb ask\u00ebnd.<\/p><\/blockquote>\n<p><\/p>\n<h2>Hapi 4: P\u00ebrcaktojm\u00eb nevojat jo t\u00eb dukshme<\/h2>\n<p>\nKa mbaruar, e projektuam baz\u00ebn, ku mund t\u00eb shkruhet shum\u00eb mir\u00eb dhe <i><b>disi<\/b><\/i> t\u00eb lexohet.<\/p>\n<p>Le ta v\u00ebm\u00eb veten n\u00eb vendin e p\u00ebrdoruesit t\u00eb sh\u00ebrbimit ton\u00eb \u2014 \u00e7far\u00eb do t\u00eb d\u00ebshironim t\u00eb b\u00ebnim me ndihm\u00ebn e tij?<\/p>\n<ul>\n<li><i>Mesazhet e fundit<\/i><br \/>\nKy <b>i renditur kronologjikisht<\/b> sipas kritereve t\u00eb ndryshme regjistri i \"mesazheve t\u00eb mia\". Ku jam nj\u00eb nga marr\u00ebsit, ku jam autori, ku m\u00eb kan\u00eb shkruar, por nuk kam p\u00ebrgjigjur, ku nuk m\u00eb kan\u00eb p\u00ebrgjigjur, ...<\/li>\n<li><i>Pjes\u00ebmarr\u00ebsit e korrespondenc\u00ebs<\/i><br \/>\nKush merr pjes\u00eb n\u00eb k\u00ebt\u00eb bised\u00eb kaq t\u00eb gjat\u00eb?<\/li>\n<\/ul>\n<p>\nStruktura jon\u00eb na lejon t\u2019i zgjidhim t\u00eb dyja k\u00ebto detyra \"n\u00eb parim\", por jo shpejt. Problemi \u00ebsht\u00eb se p\u00ebr renditjen brenda detyr\u00ebs s\u00eb par\u00eb <b>\u00ebsht\u00eb e pamundur t\u00eb krijohet nj\u00eb indeks<\/b>, i p\u00ebrshtatsh\u00ebm p\u00ebr secilin pjes\u00ebmarr\u00ebs (dhe do t\u00eb duhet t\u00eb nxirren t\u00eb gjitha regjistrimet), nd\u00ebrsa p\u00ebr zgjidhjen e s\u00eb dyt\u00ebs duhet <b>t\u00eb nxirren absolutisht t\u00eb gjitha mesazhet<\/b> sipas tem\u00ebs.<\/p>\n<blockquote><p>Detyrat e paparashikuara t\u00eb p\u00ebrdoruesve mund t\u2019i v\u00ebn\u00eb nj\u00eb <b>kryq t\u00eb madh performanc\u00ebs<\/b>.<\/p><\/blockquote>\n<p><\/p>\n<h2>Hapi 5: Denormalizim i arsyesh\u00ebm<\/h2>\n<p>\nT\u00eb dyja problemet tona mund t\u00eb zgjidhen me tabela shtes\u00eb, n\u00eb t\u00eb cilat do t\u00eb <b>dublojm\u00eb nj\u00eb pjes\u00eb t\u00eb t\u00eb dh\u00ebnave<\/b>, t\u00eb nevojshme p\u00ebr t\u00eb nd\u00ebrtuar mbi to indekse q\u00eb i p\u00ebrshtaten detyrave tona.<br \/>\n<img decoding=\"async\" alt=\"Baza e t\u00eb dh\u00ebnave e mesazherit (pjesa 1): projektojm\u00eb skeletin e baz\u00ebs\" src=\"\/wp-content\/uploads\/2020\/01\/f136a9904518b05bca74cc2b9c2f01b2.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b class=\"spoiler_title\">Tabelat : RU<\/b><\/p>\n<pre><code class=\"sql\">CREATE TABLE \"\u0420\u0435\u0435\u0441\u0442\u0440\u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439\"(\n  \"\u0412\u043b\u0430\u0434\u0435\u043b\u0435\u0446\"\n    uuid\n, \"\u0422\u0438\u043f\u0420\u0435\u0435\u0441\u0442\u0440\u0430\"\n    smallint\n, \"\u0414\u0430\u0442\u0430\u0412\u0440\u0435\u043c\u044f\"\n    timestamp\n, \"\u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435\"\n    uuid\n, PRIMARY KEY(\"\u0412\u043b\u0430\u0434\u0435\u043b\u0435\u0446\", \"\u0422\u0438\u043f\u0420\u0435\u0435\u0441\u0442\u0440\u0430\", \"\u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435\")\n);\nCREATE INDEX ON \"\u0420\u0435\u0435\u0441\u0442\u0440\u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439\"(\"\u0412\u043b\u0430\u0434\u0435\u043b\u0435\u0446\", \"\u0422\u0438\u043f\u0420\u0435\u0435\u0441\u0442\u0440\u0430\", \"\u0414\u0430\u0442\u0430\u0412\u0440\u0435\u043c\u044f\" DESC);\n\nCREATE TABLE \"\u0423\u0447\u0430\u0441\u0442\u043d\u0438\u043a\u0422\u0435\u043c\u044b\"(\n  \"\u0422\u0435\u043c\u0430\"\n    uuid\n, \"\u041f\u0435\u0440\u0441\u043e\u043d\u0430\"\n    uuid\n, PRIMARY KEY(\"\u0422\u0435\u043c\u0430\", \"\u041f\u0435\u0440\u0441\u043e\u043d\u0430\")\n);<\/code><\/pre>\n<p>\n<b class=\"spoiler_title\">Tabelat : EN<\/b><\/p>\n<pre><code class=\"sql\">CREATE TABLE 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);\nCREATE INDEX ON message_registry(owner, registry, dt DESC);\n\nCREATE TABLE theme_participant(\n  theme\n    uuid\n, person\n    uuid\n, PRIMARY KEY(theme, person)\n);<\/code><\/pre>\n<p>\nK\u00ebtu kemi p\u00ebrdorur dy qasje tipike q\u00eb zbatohen gjat\u00eb krijimit t\u00eb tabelave ndihm\u00ebse:<\/p>\n<ul>\n<li><b>Shum\u00ebzimi i regjistrimeve<\/b><br \/>\nNga nj\u00eb regjistrim burimor i mesazhit formojm\u00eb menj\u00ebher\u00eb disa regjistrime pasuese n\u00eb lloje t\u00eb ndryshme regjistrash p\u00ebr pronar\u00eb t\u00eb ndrysh\u00ebm \u2014 si p\u00ebr d\u00ebrguesin, ashtu edhe p\u00ebr marr\u00ebsin. K\u00ebshtu, secili regjist\u00ebr tashm\u00eb mb\u00ebshtetet te nj\u00eb indeks, sepse n\u00eb skenarin tipik do t\u00eb duam t\u00eb shohim vet\u00ebm faqen e par\u00eb.<\/li>\n<li><b>Unifikimi i regjistrimeve<\/b><br \/>\nSa her\u00eb d\u00ebrgohet nj\u00eb mesazh brenda nj\u00eb teme t\u00eb caktuar, mjafton t\u00eb kontrollohet n\u00ebse nj\u00eb regjistrim i till\u00eb ekziston tashm\u00eb. N\u00ebse jo, e shtojm\u00eb n\u00eb \"fjalorin\" ton\u00eb.<\/li>\n<\/ul>\n<p>\nN\u00eb pjes\u00ebn tjet\u00ebr t\u00eb artikullit do t\u00eb flasim p\u00ebr <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/483170\/\">zbatimin e particionimit<\/a><\/noindex> n\u00eb struktur\u00ebn e baz\u00ebs son\u00eb t\u00eb t\u00eb dh\u00ebnave.<br \/>\n<br \/>Burimi: <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 5.0.2 - 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\" \/>\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\/sq\/blog\/administrirovanie\/bd-messendzhera-ch-1-proektiruem-karkas-bazy\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"sq_AL\" \/>\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\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sq\/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\udd47Baza e t\u00eb dh\u00ebnave p\u00ebr mesenxherin (pjesa 1): projektojm\u00eb skeletin e baz\u00ebs | ProHoster","description":"Si mund t\u00eb p\u00ebrkthehen k\u00ebrkesat e biznesit n\u00eb struktura konkrete t\u00eb t\u00eb dh\u00ebnave, duke marr\u00eb si shembull projektimin \"nga e para\" t\u00eb nj\u00eb baze p\u00ebr nj\u00eb mesenxher. Pjesa 1: projektojm\u00eb skeletin e baz\u00ebs","canonical_url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/bd-messendzhera-ch-1-proektiruem-karkas-bazy","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sq_AL","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","og:url":"https:\/\/prohoster.info\/sq\/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","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/55011","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/comments?post=55011"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/55011\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media?parent=55011"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/categories?post=55011"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/tags?post=55011"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}