{"id":78198,"date":"2020-04-17T13:42:37","date_gmt":"2020-04-17T11:42:37","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/denormalizacziya-baz-dannyh-erp-sistem-i-ee-vliyanie-na-razvitie-po-otkryvaem-tavernu-na-tortuge"},"modified":"2020-04-17T13:42:37","modified_gmt":"2020-04-17T11:42:37","slug":"denormalizacziya-baz-dannyh-erp-sistem-i-ee-vliyanie-na-razvitie-po-otkryvaem-tavernu-na-tortuge","status":"publish","type":"post","link":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/denormalizacziya-baz-dannyh-erp-sistem-i-ee-vliyanie-na-razvitie-po-otkryvaem-tavernu-na-tortuge","title":{"rendered":"Denormalizacja baz danych system\u00f3w ERP i jej wp\u0142yw na rozw\u00f3j oprogramowania: otwieramy tawern\u0119 na Tortudze","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Cze\u015b\u0107! Nazywam si\u0119 Andriej Sienionow, jestem starszym analitykiem w Sportmaster. W tym po\u015bcie chcia\u0142bym poruszy\u0107 kwesti\u0119 denormalizacji baz danych system\u00f3w ERP. Rozwa\u017cymy og\u00f3lne warunki oraz konkretny przyk\u0142ad \u2014 powiedzmy, \u017ce b\u0119dzie to wspania\u0142a tawerna-monopolista dla pirat\u00f3w i marynarzy. W kt\u00f3rej pirat\u00f3w i marynarzy nale\u017cy obs\u0142ugiwa\u0107 w r\u00f3\u017cny spos\u00f3b, bowiem ich wyobra\u017cenia o pi\u0119knie i wzorce konsumpcyjne r\u00f3\u017cni\u0105 si\u0119 znacznie. <\/p>\n<p>Jak sprawi\u0107, aby wszyscy byli zadowoleni? Jak nie zwariowa\u0107 projektuj\u0105c i utrzymuj\u0105c taki system? Co zrobi\u0107, gdy do tawerny zaczynaj\u0105 przychodzi\u0107 nie tylko znani piraci i marynarze?<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/sportmaster_lab\/blog\/497550\/\"><img decoding=\"async\" alt=\"Denormalizacja baz danych system\u00f3w ERP i jej wp\u0142yw na rozw\u00f3j oprogramowania: otwieramy tawern\u0119 na Tortudze\" src=\"\/wp-content\/uploads\/2020\/04\/bd0ccbfa3e3649aac20631e09fcb5b16.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p>Wszystko pod kontrol\u0105. Ale zacznijmy od pocz\u0105tku.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>1. Ograniczenia i za\u0142o\u017cenia<\/h2>\n<p>\nWszystko, co przedstawiono, dotyczy tylko relacyjnych baz danych. Dobrze opisane, r\u00f3wnie\u017c w Internecie, skutki denormalizacji w postaci anomalii modyfikacji, usuwania i wstawiania nie s\u0105 rozwa\u017cane. Poza publikacj\u0105 pozostaj\u0105 przypadki, w kt\u00f3rych denormalizacja jest czym\u015b powszechnym, z klasycznymi przyk\u0142adami: seria i numer paszportu, data i czas i tak dalej.<\/p>\n<p>W po\u015bcie u\u017cywane s\u0105 intuicyjne i praktyczne definicje normalnych form, bez odniesie\u0144 do termin\u00f3w matematycznych. Tak, jak mog\u0105 by\u0107 stosowane do badania rzeczywistych proces\u00f3w biznesowych (BP) i projektowania oprogramowania przemys\u0142owego.<\/p>\n<p>Istnieje opinia, \u017ce projektowanie hurtowni danych, narz\u0119dzi do tworzenia raport\u00f3w i um\u00f3w integracyjnych (w kt\u00f3rych u\u017cywane jest tabelaryczne przedstawienie informacji), r\u00f3\u017cni si\u0119 od projektowania baz danych system\u00f3w ERP tym, \u017ce wygoda konsumpcji i zastosowanie \u015bwiadomej denormalizacji mog\u0105 mie\u0107 priorytet nad ochron\u0105 integralno\u015bci danych. Zgadzam si\u0119 z t\u0105 opini\u0105, a to, co b\u0119dzie opisane poni\u017cej, odnosi si\u0119 wy\u0142\u0105cznie do modeli danych g\u0142\u00f3wnych i danych transakcyjnych system\u00f3w ERP.<\/p>\n<p>Wyja\u015bnienie norm normalnych zosta\u0142o przedstawione na przyk\u0142adzie zrozumia\u0142ym dla wi\u0119kszo\u015bci czytelnik\u00f3w w codziennym \u017cyciu. Jednak jako ilustracj\u0119 w punktach 4-5 celowo u\u017cyto wyra\u017anie \u201ewymy\u015blonego\u201d zadania. Je\u015bli tego nie zrobimy i we\u017amiemy jaki\u015b podr\u0119cznikowy przyk\u0142ad, na przyk\u0142ad t\u0119 sam\u0105 model dotycz\u0105c\u0105 przechowywania zam\u00f3wienia z p. 2, mo\u017cemy znale\u017a\u0107 si\u0119 w sytuacji, w kt\u00f3rej uwaga czytelnika zostanie odwr\u00f3cona od proponowanego rozk\u0142adu procesu w model, na jego osobiste do\u015bwiadczenie i postrzeganie tego, jak powinny by\u0107 budowane procesy i modele przechowywania danych w IS. Innymi s\u0142owy, we\u017amy dw\u00f3ch wykwalifikowanych analityk\u00f3w IT, niech jeden \u015bwiadczy us\u0142ugi logistyk\u00f3w przewo\u017c\u0105cych pasa\u017cer\u00f3w, a drugi \u2014 logistyk\u00f3w przewo\u017c\u0105cych maszyny do produkcji mikrochip\u00f3w. Popro\u015bcie ich, aby bez wcze\u015bniejszego om\u00f3wienia automatyzowanych BPs, stworzyli model danych do przechowywania informacji o przylotach kolejowych. <\/p>\n<p>Istnieje niezerowe prawdopodobie\u0144stwo, \u017ce w przedstawionych modelach znajdziecie nie tylko zauwa\u017calnie r\u00f3\u017cny zestaw atrybut\u00f3w, ale tak\u017ce niezgodne zestawy encji, poniewa\u017c ka\u017cdy analityk b\u0119dzie opiera\u0142 si\u0119 na znanych mu procesach i zadaniach. I w takiej sytuacji nie mo\u017cna powiedzie\u0107, kt\u00f3ry model jest \u201eprawid\u0142owy\u201d, poniewa\u017c nie ma kryterium oceny.<\/p>\n<h2>2. Normy normalne<\/h2>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/habrastorage.org\/webt\/mz\/vc\/ex\/mzvcexxqfzhzyybzk8zvbndmtcc.png\"><img decoding=\"async\" alt=\"Denormalizacja baz danych system\u00f3w ERP i jej wp\u0142yw na rozw\u00f3j oprogramowania: otwieramy tawern\u0119 na Tortudze\" src=\"\/wp-content\/uploads\/2020\/04\/e2d3fc5656b59671648511b0a0e5f7b9.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p><b>Pierwsza norma normalna bazy danych<\/b> wymaga atomowo\u015bci wszystkich atrybut\u00f3w. <br \/>\nW szczeg\u00f3lno\u015bci, je\u015bli obiekt A posiada atrybuty niekluczowe a i b, takie \u017ce c=f(a,b) i w tabeli opisuj\u0105cej obiekt A przechowujesz warto\u015b\u0107 atrybutu c, to w bazie danych naruszona jest pierwsza norma normalna. Na przyk\u0142ad, je\u015bli w specyfikacji zam\u00f3wienia wskazano ilo\u015b\u0107, kt\u00f3rej jednostki miary zale\u017c\u0105 od typu produktu: w jednym przypadku mog\u0105 to by\u0107 sztuki, w innym litry, w trzecim pakiety sk\u0142adaj\u0105ce si\u0119 ze sztuk (w modelu powy\u017cej Good_count_WR), to w bazie danych naruszona jest atomowo\u015b\u0107 atrybut\u00f3w. W tym przypadku, aby okre\u015bli\u0107, jak powinien wygl\u0105da\u0107 zestaw tabel w specyfikacji zam\u00f3wienia, potrzebne jest docelowe opisanie procesu pracy w IS, a poniewa\u017c procesy mog\u0105 by\u0107 r\u00f3\u017cne, to i \u201eprawid\u0142owych\u201d wersji mo\u017ce by\u0107 wiele.<\/p>\n<p><b>Druga norma normalna bazy danych<\/b> wymaga przestrzegania pierwszej formy oraz osobnej tabeli dla ka\u017cdej encji odnosz\u0105cej si\u0119 do procesu pracy w IS. Je\u015bli w jednej tabeli istniej\u0105 zale\u017cno\u015bci z=f1(a) i d=f2(b) oraz brak zale\u017cno\u015bci z=f3(b), to w tabeli naruszona jest druga normalna forma. W powy\u017cszym przyk\u0142adzie w tabeli \u201eZam\u00f3wienie\u201d nie istnieje zale\u017cno\u015b\u0107 mi\u0119dzy zam\u00f3wieniem a adresem. Zmie\u0144 nazwisko ulicy lub miasta, a nie wp\u0142ynie to na istotne atrybuty zam\u00f3wienia. <\/p>\n<p><b>Trzecia normalna forma bazy danych<\/b> wymaga przestrzegania drugiej normalnej formy i braku zale\u017cno\u015bci funkcyjnych mi\u0119dzy atrybutami r\u00f3\u017cnych encji. To zasada mo\u017ce by\u0107 sformu\u0142owana tak: \u201ewszystko, co mo\u017ce by\u0107 obliczone, powinno by\u0107 obliczone\u201d. Innymi s\u0142owy, je\u015bli istniej\u0105 dwa obiekty A i B. W tabeli przechowuj\u0105cej atrybuty obiektu A wyst\u0119puje atrybut C, obiekt B ma atrybut b, taki, \u017ce istnieje c=f4(b), to narusza to trzeci\u0105 normaln\u0105 form\u0119. W poni\u017cszym przyk\u0142adzie atrybut \u201eIlo\u015b\u0107 sztuk\u201d (Total_count_WR) w rekordzie zam\u00f3wienia wyra\u017anie mo\u017ce narusza\u0107 trzeci\u0105 normaln\u0105 form\u0119.<\/p>\n<h2>3. Moje podej\u015bcie do stosowania normalizacji<\/h2>\n<p>\n1. Tylko celowy, automatyzowany proces biznesowy mo\u017ce dostarczy\u0107 analitykowi kryteria do identyfikacji encji i atrybut\u00f3w przy tworzeniu modelu przechowywania danych. Stworzenie modelu procesu jest warunkiem koniecznym do stworzenia normalnego modelu danych.<\/p>\n<p>2. Osi\u0105gni\u0119cie trzeciej normalnej formy w \u015bcis\u0142ym sensie mo\u017ce nie by\u0107 zasadne w praktyce tworzenia system\u00f3w ERP przy spe\u0142nieniu cz\u0119\u015bci lub wszystkich nast\u0119puj\u0105cych warunk\u00f3w:<\/p>\n<ul>\n<li>procesy automatyzowane rzadko ulegaj\u0105 zmianom, <\/li>\n<li>terminy na badania i rozw\u00f3j s\u0105 napi\u0119te, <\/li>\n<li>wymagania dotycz\u0105ce integralno\u015bci danych s\u0105 relatywnie niskie (potencjalne b\u0142\u0119dy w oprogramowaniu przemys\u0142owym nie prowadz\u0105 do utraty pieni\u0119dzy ani klient\u00f3w przez zamawiaj\u0105cego oprogramowanie)<\/li>\n<li>itp.<\/li>\n<\/ul>\n<p>\nW opisanych warunkach koszty identyfikacji, opisu cyklu \u017cycia niekt\u00f3rych obiekt\u00f3w i ich atrybut\u00f3w mog\u0105 by\u0107 nieuzasadnione z punktu widzenia efektywno\u015bci ekonomicznej.<\/p>\n<p>3. Jakiekolwiek konsekwencje denormalizacji modelu danych w ju\u017c stworzonym IS mog\u0105 by\u0107 zminimalizowane poprzez dok\u0142adne badanie kodu i testowanie.<\/p>\n<p>4. Denormalizacja to spos\u00f3b przenoszenia nak\u0142ad\u00f3w pracy z etapu badania \u017ar\u00f3de\u0142 danych i projektowania proces\u00f3w biznesowych na etap rozwoju, z okresu wdro\u017cenia na okres rozwoju systemu.<\/p>\n<p>5. Do trzeciej postaci normalnej bazy danych warto d\u0105\u017cy\u0107, je\u015bli:<\/p>\n<ul>\n<li>Kierunek zmian automatyzowanych proces\u00f3w biznesowych jest trudny do przewidzenia.<\/li>\n<li>W zespole wdro\u017ceniowym i\/lub rozwojowym wyst\u0119puje s\u0142abo przenikalny podzia\u0142 pracy.<\/li>\n<li>Systemy wchodz\u0105ce w kr\u0105g integracyjny rozwijaj\u0105 si\u0119 wed\u0142ug w\u0142asnych plan\u00f3w.<\/li>\n<li>Niesp\u00f3jno\u015b\u0107 danych mo\u017ce prowadzi\u0107 do utraty klient\u00f3w lub pieni\u0119dzy przez firm\u0119.<\/li>\n<\/ul>\n<p>\n6. Projektowanie modelu danych powinno by\u0107 realizowane przez analityka wy\u0142\u0105cznie w kontek\u015bcie modeli docelowego procesu biznesowego i procesu w systemie informacyjnym. Je\u015bli projektowaniem modelu danych zajmuje si\u0119 programista, musi on g\u0142\u0119boko zg\u0142\u0119bi\u0107 dziedzin\u0119, aby w szczeg\u00f3lno\u015bci rozumie\u0107 r\u00f3\u017cnic\u0119 mi\u0119dzy warto\u015bciami atrybut\u00f3w \u2014 jest to niezb\u0119dny warunek wydzielenia atomowych atrybut\u00f3w. W ten spos\u00f3b przejmuje na siebie funkcje, kt\u00f3re nie s\u0105 mu przypisane.<\/p>\n<h2>4 Zadanie ilustruj\u0105ce<\/h2>\n<p>\nZa\u0142\u00f3\u017cmy, \u017ce masz ma\u0142\u0105 zrobotyzowan\u0105 tawern\u0119 w porcie. Tw\u00f3j segment rynku to marynarze i piraci, kt\u00f3rzy przybywaj\u0105 do portu i potrzebuj\u0105 odpoczynku. Marynarzom sprzedajesz herbat\u0119 z tymiankiem, a piratom rum i kostne grzebienie do czesania brody. Obs\u0142ug\u0105 w tawernie zajmuje si\u0119 robot-hostess i robot-barman. Dzi\u0119ki wysokiej jako\u015bci i niskim cenom wypar\u0142e\u015b wszystkich konkurent\u00f3w, wi\u0119c ka\u017cdy, kto schodzi z okr\u0119tu, przychodzi do twojej tawerny, kt\u00f3ra jest jedyn\u0105 w porcie.<\/p>\n<p>Zestaw system\u00f3w informacyjnych tawerny sk\u0142ada si\u0119 z nast\u0119puj\u0105cego oprogramowania: <\/p>\n<ul>\n<li>System wczesnego ostrzegania o kliencie, rozpoznaj\u0105cy jego kategori\u0119 na podstawie charakterystycznych cech.<\/li>\n<li>System zarz\u0105dzania robotami-hostess i robotami-barmanami.<\/li>\n<li>System zarz\u0105dzania magazynem i dostaw\u0105 do punktu sprzeda\u017cy.<\/li>\n<li>System zarz\u0105dzania relacjami z dostawcami.<\/li>\n<\/ul>\n<p>\nProces:<\/p>\n<p>System wczesnego ostrzegania rozpoznaje osoby schodz\u0105ce z okr\u0119tu. Je\u015bli osoba jest g\u0142adko ogolona, system uznaje j\u0105 za marynarza, je\u015bli u osoby stwierdzono brod\u0119, uznaje j\u0105 za pirata.<\/p>\n<p>Wchodz\u0105c do tawerny, go\u015b\u0107 s\u0142yszy od robota-hostessy powitanie zgodne z jego kategori\u0105, na przyk\u0142ad: \u201eHo-ho-ho, szanowny piracie, prosz\u0119 przej\u015b\u0107 do stolika nr\u2026\"<\/p>\n<p>Go\u015b\u0107 podchodzi do sto\u0142u, gdzie robot barman ju\u017c przygotowa\u0142 dla niego produkty zgodnie z kategori\u0105. Robot barman przekazuje informacje do systemu magazynowego, \u017ce kolejna partia dostawy powinna zosta\u0107 zwi\u0119kszona, a system zarz\u0105dzania magazynem na podstawie pozosta\u0142ych zapas\u00f3w tworzy zam\u00f3wienie na zakupy.<\/p>\n<p>Niech system wczesnego ostrzegania zosta\u0142 opracowany przez wasze wewn\u0119trzne IT, program zarz\u0105dzania robotami barowymi stworzy\u0142 zewn\u0119trzny wykonawca specjalnie dla waszego biznesu. A systemy do zarz\u0105dzania magazynem i relacjami z dostawcami s\u0105 dostosowanymi rozwi\u0105zaniami pude\u0142kowymi z rynku.<\/p>\n<h2>5. Przyk\u0142ady denormalizacji i jej wp\u0142yw na rozw\u00f3j oprogramowania<\/h2>\n<p>\nProjektuj\u0105c proces biznesowy, ankietowani eksperci z bran\u017cy jednog\u0142o\u015bnie stwierdzili, \u017ce na ca\u0142ym \u015bwiecie piraci pij\u0105 rum i czesz\u0105 swoje brody ko\u015bcianymi grzebieniami, a marynarze pij\u0105 herbat\u0119 z tymiankiem i zawsze s\u0105 dobrze ogoleni. <\/p>\n<p>Pojawia si\u0119 s\u0142ownik typ\u00f3w klient\u00f3w z dwoma warto\u015bciami: 1 - piraci, 2 - marynarze, wsp\u00f3lny dla ca\u0142ego kontekstu informacyjnego firmy. <\/p>\n<p>System powiadamiania o kliencie natychmiast zapisuje wynik przetwarzania obrazu jako identyfikator (ID) rozpoznanego klienta i jego typ: marynarza lub pirata. <\/p>\n<p>ID rozpoznanego obiektu<br \/>\nKategoria klienta<\/p>\n<p>100500<br \/>\nPirata<\/p>\n<p>100501<br \/>\nPirata<\/p>\n<p>100502<br \/>\nMarynarza<\/p>\n<p>Jeszcze raz zwr\u00f3\u0107my uwag\u0119, \u017ce<\/p>\n<p>1. Nasi marynarze to w rzeczywisto\u015bci ogoleni ludzie<br \/>\n2. Nasi piraci to w rzeczywisto\u015bci brodaci ludzie<\/p>\n<p>Jakie w tym przypadku problemy nale\u017cy rozwi\u0105za\u0107, aby nasza struktura d\u0105\u017cy\u0142a do trzeciej postaci normalnej:<\/p>\n<ul>\n<li>naruszenie atomowo\u015bci atrybutu - Kategoria klienta<\/li>\n<li>mieszanie analizowanego faktu i wniosk\u00f3w w jednej tabeli <\/li>\n<li>zarejestrowana zale\u017cno\u015b\u0107 funkcjonalna mi\u0119dzy atrybutami r\u00f3\u017cnych encji. <\/li>\n<\/ul>\n<p>\nW znormalizowanej wersji uzyskaliby\u015bmy dwie tabele: <\/p>\n<ul>\n<li>wynik rozpoznawania w postaci zestawu ustalonych cech,<\/li>\n<\/ul>\n<p><\/p>\n<p>ID rozpoznanego obiektu<br \/>\nOw\u0142osienie na twarzy<\/p>\n<p>100500<br \/>\nTak<\/p>\n<p>100501<br \/>\nTak<\/p>\n<p>100502<br \/>\nNie<\/p>\n<p><\/p>\n<ul>\n<li>wynik okre\u015blenia typu klienta jako aplikacja wbudowanej w system logiki do interpretacji ustalonych cech<\/li>\n<\/ul>\n<p>ID rozpoznanego obiektu<br \/>\nID identyfikacji<br \/>\nKategoria klienta<\/p>\n<p>100500<br \/>\n100001<br \/>\nPirata<\/p>\n<p>100501<br \/>\n100002<br \/>\nPirata<\/p>\n<p>100502<br \/>\n100003<br \/>\nMarynarza<\/p>\n<p>Jak znormalizowana organizacja przechowywania danych mo\u017ce u\u0142atwi\u0107 rozw\u00f3j kompleksu system\u00f3w informacyjnych? Za\u0142\u00f3\u017cmy, \u017ce nagle pojawiaj\u0105 si\u0119 nowi klienci. Niech to b\u0119d\u0105 japo\u0144scy piraci, kt\u00f3rzy mog\u0105 nie mie\u0107 brody, ale chodz\u0105 z papug\u0105 na ramieniu, oraz piraci-ekolodzy, kt\u00f3rych \u0142atwo rozpozna\u0107 po niebieskim profilu Grety na lewej piersi. <\/p>\n<p>Piraci-ekolodzy, naturalnie, nie mog\u0105 korzysta\u0107 z ko\u015bcianych grzebieni i wymagaj\u0105 odpowiednika wykonanego z przetworzonego plastikowego materia\u0142u morskiego.<\/p>\n<p>Musisz dostosowa\u0107 algorytmy dzia\u0142ania program\u00f3w zgodnie z nowymi danymi wej\u015bciowymi. Gdyby zasady normalizacji zosta\u0142y zastosowane, musia\u0142by\u015b tylko w niekt\u00f3rych systemach uzupe\u0142ni\u0107 dane wej\u015bciowe dla niekt\u00f3rych ga\u0142\u0119zi proces\u00f3w oraz stworzy\u0107 nowe ga\u0142\u0119zie tylko w tych przypadkach i w tych systemach informacyjnych, gdzie ma znaczenie ow\u0142osienie na twarzy. Jednak, poniewa\u017c zasady nie zosta\u0142y zastosowane, musisz przeanalizowa\u0107 ca\u0142y kod, w ca\u0142ym zakresie, gdzie u\u017cywane s\u0105 warto\u015bci s\u0142ownika typ\u00f3w klient\u00f3w i jednoznacznie ustali\u0107, \u017ce w jednym przypadku algorytm powinien uwzgl\u0119dni\u0107 dzia\u0142alno\u015b\u0107 zawodow\u0105 klienta, a w innym cechy fizyczne. <\/p>\n<p>W formie, kt\u00f3ra <b><i>d\u0105\u017cy <\/i><\/b>do znormalizowanej, otrzymaliby\u015bmy dwie tabele z danymi operacyjnymi oraz dwa s\u0142owniki:<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habrastorage.org\/webt\/qn\/pq\/g4\/qnpqg4idbhbsqejhnryzfuilhhy.png\"><img decoding=\"async\" alt=\"Denormalizacja baz danych system\u00f3w ERP i jej wp\u0142yw na rozw\u00f3j oprogramowania: otwieramy tawern\u0119 na Tortudze\" src=\"\/wp-content\/uploads\/2020\/04\/eea87da839171e8a3a42db0618972124.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<ul>\n<li>wynik rozpoznawania w postaci zestawu ustalonych cech,<\/li>\n<\/ul>\n<p><\/p>\n<p>ID rozpoznanego obiektu<br \/>\nGreta na lewej piersi<br \/>\nPtak na ramieniu<br \/>\nOw\u0142osienie na twarzy<\/p>\n<p>100510<br \/>\n1<br \/>\n1<br \/>\n1<\/p>\n<p>100511<br \/>\n0<br \/>\n0<br \/>\n1<\/p>\n<p>100512<\/p>\n<p>1<br \/>\n0<\/p>\n<ul>\n<li>wynik okre\u015blenia typu klienta (niech to b\u0119dzie widok u\u017cytkownika, w kt\u00f3rym wy\u015bwietlane s\u0105 opisy z s\u0142ownik\u00f3w)<\/li>\n<\/ul>\n<p>\nCzy odkryta denormalizacja oznacza, \u017ce systemy nie b\u0119d\u0105 mog\u0142y by\u0107 dostosowane do nowych warunk\u00f3w? Oczywi\u015bcie, \u017ce nie. Gdyby wszystkie systemy informacyjne by\u0142y tworzone przez jeden zesp\u00f3\u0142 z zerow\u0105 rotacj\u0105 kadrow\u0105, rozw\u00f3j by\u0142by dobrze udokumentowany, a informacje w zespole przekazywane bez strat, wymagane zmiany mog\u0142yby by\u0107 wprowadzone z nieznacznymi nak\u0142adami wysi\u0142ku. Ale je\u015bli wr\u00f3cimy do pierwotnych za\u0142o\u017ce\u0144 problemu, tylko na wydruk protoko\u0142\u00f3w wsp\u00f3lnych dyskusji zetrze si\u0119 1,5 klawiatury, a jeszcze 0,5 na opracowanie procedur zakupu.<\/p>\n<p>W podanym powy\u017cej przyk\u0142adzie naruszone s\u0105 wszystkie trzy normalne formy, spr\u00f3bujmy narusza\u0107 je oddzielnie.<\/p>\n<p><b>Naruszenie pierwszej normalnej formy:<\/b><\/p>\n<p>Za\u0142\u00f3\u017cmy, \u017ce towary na tw\u00f3j magazyn s\u0105 dostarczane przez dostawc\u00f3w osobi\u015bcie, przy u\u017cyciu jednej 1,5-tonowej furgonetki, kt\u00f3ra nale\u017cy do twojej tawerny. Rozmiar twoich zam\u00f3wie\u0144 jest na tyle ma\u0142y w por\u00f3wnaniu do obrot\u00f3w dostawc\u00f3w, \u017ce s\u0105 one zawsze realizowane jeden do jednego, bez oczekiwania na wykonanie. Czy w takim przypadku konieczne s\u0105 osobne tabele: pojazdy, typy pojazd\u00f3w, czy trzeba rozdziela\u0107 plan i rzeczywisto\u015b\u0107 w twoich zam\u00f3wieniach realizowanych przez dostawc\u00f3w?<\/p>\n<p>Tylko wyobra\u017a sobie, ile \u201ezb\u0119dnych\u201d po\u0142\u0105cze\u0144 b\u0119d\u0105 musieli napisa\u0107 twoi programi\u015bci, je\u015bli do opracowania programu wykorzystaj\u0105 poni\u017cszy model.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habrastorage.org\/webt\/bz\/js\/gf\/bzjsgfs0fephwjwqx8xdvunrgva.png\"><img decoding=\"async\" alt=\"Denormalizacja baz danych system\u00f3w ERP i jej wp\u0142yw na rozw\u00f3j oprogramowania: otwieramy tawern\u0119 na Tortudze\" src=\"\/wp-content\/uploads\/2020\/04\/7309871d1ecc5c1ceb4f077ea4afebff.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p>Za\u0142\u00f3\u017cmy, \u017ce podj\u0119li\u015bmy decyzj\u0119, i\u017c proponowana struktura jest zbyt skomplikowana, dla naszego przypadku rozdzielanie planu i rzeczywisto\u015bci w zapisie zam\u00f3wienia to zb\u0119dna informacja, a stworzona specyfikacja zam\u00f3wienia jest przerysowywana na podstawie wynik\u00f3w przyj\u0119cia dostarczonego towaru, sporadyczne b\u0142\u0119dy i dostarczenie towaru z\u0142ej jako\u015bci s\u0105 rozwi\u0105zywane poza systemem informatycznym.<br \/>\nI pewnego dnia widzisz, jak ca\u0142y hall tawerny wype\u0142nia si\u0119 oburzonymi i zaniedbanymi piratami. Co si\u0119 sta\u0142o? <\/p>\n<p>Okaza\u0142o si\u0119, \u017ce wraz z rozwojem twojego biznesu ros\u0142o r\u00f3wnie\u017c spo\u017cycie. Kiedy\u015b podj\u0119to decyzj\u0119 zarz\u0105dcz\u0105, \u017ce je\u015bli furgonetka by\u0142a przeci\u0105\u017cona pod wzgl\u0119dem obj\u0119to\u015bci i\/lub wagi, co zdarza\u0142o si\u0119 bardzo rzadko, dostawca priorytetowo traktowa\u0142 za\u0142adunek na rzecz napoj\u00f3w. <\/p>\n<p>Niedostarczony towar trafia\u0142 do nast\u0119pnego zam\u00f3wienia i odchodzi\u0142 w nowym kursie, a posiadanie minimalnego stanu magazynowego w tawernie pozwala\u0142o nie zauwa\u017ca\u0107 przypadk\u00f3w przekroczenia normy.<\/p>\n<p>W porcie zamkn\u0105\u0142 si\u0119 ostatni konkurent, a przypadek prze\u0142adowania furgonetki, omini\u0119ty przez priorytetyzacj\u0119 opart\u0105 na za\u0142o\u017ceniu o wystarczalno\u015bci minimalnego stanu magazynowego i okresowym niedo\u0142adowaniu \u015brodka transportu, sta\u0142 si\u0119 powszechn\u0105 praktyk\u0105. Stworzony system b\u0119dzie idealnie dzia\u0142a\u0142 zgodnie z wbudowanymi w niego algorytmami i b\u0119dzie pozbawiony jakiejkolwiek mo\u017cliwo\u015bci \u015bledzenia systematycznego niewykonywania zam\u00f3wie\u0144 planowych. Tylko zepsuta reputacja i niezadowoleni klienci mog\u0105 odkry\u0107 problem.<\/p>\n<p>Uwa\u017cny czytelnik z pewno\u015bci\u0105 zauwa\u017cy\u0142, \u017ce zam\u00f3wiona ilo\u015b\u0107 w specyfikacji zam\u00f3wienia (T_ORDER_SPEC) w sekcji 2 i w sekcji 5 mo\u017ce odpowiada\u0107 lub nie odpowiada\u0107 wymaganiu pierwszej formy normalnej. Wszystko zale\u017cy od tego, czy przy wybranym asortymencie towar\u00f3w r\u00f3\u017cne jednostki miary mog\u0105 znajdowa\u0107 si\u0119 w tym samym polu. <\/p>\n<p><b>Naruszenie drugiej formy normalnej:<\/b><\/p>\n<p>W miar\u0119 jak rosn\u0105 twoje potrzeby, nabywasz inne \u015brodki transportu r\u00f3\u017cnych rozmiar\u00f3w. W opisanym powy\u017cej kontek\u015bcie stworzenie katalogu \u015brodk\u00f3w transportu zosta\u0142o uznane za nadmiarowe, w rezultacie wszystkie algorytmy obs\u0142uguj\u0105ce potrzeby dostaw i magazyn\u00f3w traktuj\u0105 transport \u0142adunku od dostawcy do magazynu jako wyjazd wy\u0142\u0105cznie 1,5-tonowej furgonetki. Tak wi\u0119c, wraz z zakupem nowych \u015brodk\u00f3w transportu i tak tworzysz katalog \u015brodk\u00f3w transportu, ale przy modyfikacji b\u0119dziesz musia\u0142 przeanalizowa\u0107 ca\u0142y kod, kt\u00f3ry odnosi si\u0119 do transportu \u0142adunku, aby ustali\u0107, czy w ka\u017cdym konkretnym miejscu nie zak\u0142adano odniesie\u0144 do charakterystyk tego konkretnego samochodu, z kt\u00f3rego zaczyna\u0142 si\u0119 biznes.<\/p>\n<p><b>Naruszenie trzeciej formy normalnej:<\/b><\/p>\n<p>W pewnym momencie zaczynasz tworzy\u0107 program lojalno\u015bciowy, pojawia si\u0119 zapis sta\u0142ego klienta. Po co na przyk\u0142ad traci\u0107 czas na tworzenie materialnych prezentacji, kt\u00f3re przechowuj\u0105 zsumowane dane dotycz\u0105ce sprzeda\u017cy dla pojedynczego klienta, kt\u00f3re mo\u017cna wykorzysta\u0107 w raportowaniu i przesy\u0142aniu do system\u00f3w analitycznych, skoro na etapie uruchamiania programu lojalno\u015bciowego wszystko, co interesuje klienta, mo\u017cna umie\u015bci\u0107 w samym zapisie klienta? I rzeczywi\u015bcie, na pierwszy rzut oka, nie ma ku temu sensu. Ale za ka\u017cdym razem, gdy tw\u00f3j biznes b\u0119dzie \u0142\u0105czy\u0142, na przyk\u0142ad, nowe kana\u0142y sprzeda\u017cy, w\u015br\u00f3d twoich analityk\u00f3w musi by\u0107 kto\u015b, kto przypomni sobie, \u017ce istnieje taki atrybut agregacyjny. <\/p>\n<p>Projektuj\u0105c ka\u017cdy nowy proces, powiedzmy sprzeda\u017c w internecie, sprzeda\u017c poprzez dystrybutor\u00f3w po\u0142\u0105czonych z og\u00f3lnym systemem lojalno\u015bciowym, kto\u015b musi mie\u0107 na uwadze, \u017ce wszystkie nowe procesy powinny na poziomie kodu zapewnia\u0107 integralno\u015b\u0107 danych. Dla przemys\u0142owej bazy danych z tysi\u0105cem tabel wydaje si\u0119 to ma\u0142o wykonalnym zadaniem.<\/p>\n<p>Do\u015bwiadczony programista wie, jak rozwi\u0105za\u0107 wszystkie wymienione powy\u017cej problemy, ale moim zdaniem zadaniem do\u015bwiadczonego analityka jest zapobieganie im.<\/p>\n<p>Chc\u0119 podzi\u0119kowa\u0107 za cenne uwagi przy przygotowywaniu publikacji dla g\u0142\u00f3wnego programisty Jewgienija Jaruchina.<\/p>\n<h2>Literatura<\/h2>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/post\/254773\/\">https:\/\/habr.com\/en\/post\/254773\/<\/a><\/noindex><br \/>\nConnolly Thomas, Begg Caroline. Bazy danych. Projektowanie, wdra\u017canie i utrzymanie. Teoria i praktyka.<br \/>\n<br \/>\u0179r\u00f3d\u0142o: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/sportmaster_lab\/blog\/497550\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0410\u043d\u0434\u0440\u0435\u0439 \u0421\u0435\u043c\u0435\u043d\u043e\u0432, \u044f \u0441\u0442\u0430\u0440\u0448\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a \u0432 \u0421\u043f\u043e\u0440\u0442\u043c\u0430\u0441\u0442\u0435\u0440. \u0412 \u044d\u0442\u043e\u043c \u043f\u043e\u0441\u0442\u0435 \u044f \u0445\u043e\u0447\u0443 \u043f\u043e\u0434\u043d\u044f\u0442\u044c \u0432\u043e\u043f\u0440\u043e\u0441 \u0434\u0435\u043d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445 ERP-\u0441\u0438\u0441\u0442\u0435\u043c. \u041c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043e\u0431\u0449\u0438\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u044f, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u2014 \u0441\u043a\u0430\u0436\u0435\u043c, \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u0430\u044f \u0442\u0430\u0432\u0435\u0440\u043d\u0430-\u043c\u043e\u043d\u043e\u043f\u043e\u043b\u0438\u0441\u0442 \u0434\u043b\u044f \u043f\u0438\u0440\u0430\u0442\u043e\u0432 \u0438 \u043c\u043e\u0440\u044f\u043a\u043e\u0432. \u0412 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043f\u0438\u0440\u0430\u0442\u043e\u0432 \u0438 \u043c\u043e\u0440\u044f\u043a\u043e\u0432 \u043d\u0430\u0434\u043e \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u0442\u044c \u043f\u043e-\u0440\u0430\u0437\u043d\u043e\u043c\u0443, \u0438\u0431\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043e \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u043e\u043c \u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0435 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u044b \u0443 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":78199,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-78198","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0410\u043d\u0434\u0440\u0435\u0439 \u0421\u0435\u043c\u0435\u043d\u043e\u0432, \u044f \u0441\u0442\u0430\u0440\u0448\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a \u0432 \u0421\u043f\u043e\u0440\u0442\u043c\u0430\u0441\u0442\u0435\u0440. \u0412 \u044d\u0442\u043e\u043c \u043f\u043e\u0441\u0442\u0435 \u044f \u0445\u043e\u0447\u0443 \u043f\u043e\u0434\u043d\u044f\u0442\u044c \u0432\u043e\u043f\u0440\u043e\u0441 \u0434\u0435\u043d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445 ERP-\u0441\u0438\u0441\u0442\u0435\u043c.\" \/>\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\/pl\/blog\/administrirovanie\/denormalizacziya-baz-dannyh-erp-sistem-i-ee-vliyanie-na-razvitie-po-otkryvaem-tavernu-na-tortuge\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"pl_PL\" \/>\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\u0414\u0435\u043d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445 ERP-\u0441\u0438\u0441\u0442\u0435\u043c \u0438 \u0435\u0435 \u0432\u043b\u0438\u044f\u043d\u0438\u0435 \u043d\u0430 \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u0435 \u041f\u041e: \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u0442\u0430\u0432\u0435\u0440\u043d\u0443 \u043d\u0430 \u0422\u043e\u0440\u0442\u0443\u0433\u0435 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0410\u043d\u0434\u0440\u0435\u0439 \u0421\u0435\u043c\u0435\u043d\u043e\u0432, \u044f \u0441\u0442\u0430\u0440\u0448\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a \u0432 \u0421\u043f\u043e\u0440\u0442\u043c\u0430\u0441\u0442\u0435\u0440. \u0412 \u044d\u0442\u043e\u043c \u043f\u043e\u0441\u0442\u0435 \u044f \u0445\u043e\u0447\u0443 \u043f\u043e\u0434\u043d\u044f\u0442\u044c \u0432\u043e\u043f\u0440\u043e\u0441 \u0434\u0435\u043d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445 ERP-\u0441\u0438\u0441\u0442\u0435\u043c.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/denormalizacziya-baz-dannyh-erp-sistem-i-ee-vliyanie-na-razvitie-po-otkryvaem-tavernu-na-tortuge\" \/>\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-04-17T11:42:37+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-04-17T11:42:37+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\udd47Denormalizacja baz danych system\u00f3w ERP i jej wp\u0142yw na rozw\u00f3j oprogramowania: otwieramy tawern\u0119 na Tortudze | ProHoster","description":"Cze\u015b\u0107! Nazywam si\u0119 Andriej Siemionow, jestem starszym analitykiem w Sportmaster. W tym po\u015bcie chc\u0119 poruszy\u0107 kwesti\u0119 denormalizacji baz danych system\u00f3w ERP.","canonical_url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/denormalizacziya-baz-dannyh-erp-sistem-i-ee-vliyanie-na-razvitie-po-otkryvaem-tavernu-na-tortuge","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pl_PL","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\u0414\u0435\u043d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445 ERP-\u0441\u0438\u0441\u0442\u0435\u043c \u0438 \u0435\u0435 \u0432\u043b\u0438\u044f\u043d\u0438\u0435 \u043d\u0430 \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u0435 \u041f\u041e: \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u0442\u0430\u0432\u0435\u0440\u043d\u0443 \u043d\u0430 \u0422\u043e\u0440\u0442\u0443\u0433\u0435 | ProHoster","og:description":"\u041f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0410\u043d\u0434\u0440\u0435\u0439 \u0421\u0435\u043c\u0435\u043d\u043e\u0432, \u044f \u0441\u0442\u0430\u0440\u0448\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a \u0432 \u0421\u043f\u043e\u0440\u0442\u043c\u0430\u0441\u0442\u0435\u0440. \u0412 \u044d\u0442\u043e\u043c \u043f\u043e\u0441\u0442\u0435 \u044f \u0445\u043e\u0447\u0443 \u043f\u043e\u0434\u043d\u044f\u0442\u044c \u0432\u043e\u043f\u0440\u043e\u0441 \u0434\u0435\u043d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445 ERP-\u0441\u0438\u0441\u0442\u0435\u043c.","og:url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/denormalizacziya-baz-dannyh-erp-sistem-i-ee-vliyanie-na-razvitie-po-otkryvaem-tavernu-na-tortuge","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-04-17T11:42:37+00:00","article:modified_time":"2020-04-17T11:42:37+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"78198","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":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 17:03:32","updated":"2022-09-30 18:32:54","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/78198","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/comments?post=78198"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/78198\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media\/78199"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media?parent=78198"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/categories?post=78198"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/tags?post=78198"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}