{"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\/pt\/blog\/administrirovanie\/denormalizacziya-baz-dannyh-erp-sistem-i-ee-vliyanie-na-razvitie-po-otkryvaem-tavernu-na-tortuge","title":{"rendered":"Desnormaliza\u00e7\u00e3o de bancos de dados de sistemas ERP e seu impacto no desenvolvimento de software: abrindo uma taverna em Tortuga","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Ol\u00e1! Meu nome \u00e9 Andrei Semenov, sou analista s\u00eanior na Sportmaster. Neste post, quero levantar a quest\u00e3o da desnormaliza\u00e7\u00e3o de bancos de dados de sistemas ERP. Vamos considerar as condi\u00e7\u00f5es gerais, bem como um exemplo espec\u00edfico \u2014 digamos que ser\u00e1 uma maravilhosa taverna monopolista para piratas e marinheiros. Onde \u00e9 necess\u00e1rio atender piratas e marinheiros de maneiras diferentes, uma vez que suas concep\u00e7\u00f5es est\u00e9ticas e padr\u00f5es de consumo diferem significativamente. <\/p>\n<p>Como fazer todos ficarem satisfeitos? Como n\u00e3o enlouquecer projetando e mantendo um sistema assim? O que fazer se na taverna come\u00e7arem a chegar n\u00e3o apenas os habituais piratas e marinheiros?<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/sportmaster_lab\/blog\/497550\/\"><img decoding=\"async\" alt=\"Desnormaliza\u00e7\u00e3o de bancos de dados de sistemas ERP e seu impacto no desenvolvimento de software: abrindo uma taverna em Tortuga\" src=\"\/wp-content\/uploads\/2020\/04\/bd0ccbfa3e3649aac20631e09fcb5b16.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p>Tudo em ordem. Mas vamos por partes.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>1. Limita\u00e7\u00f5es e suposi\u00e7\u00f5es<\/h2>\n<p>\nTudo o que foi exposto refere-se apenas a bancos de dados relacionais. As consequ\u00eancias da desnormaliza\u00e7\u00e3o, bem como anomalias de modifica\u00e7\u00e3o, exclus\u00e3o e inser\u00e7\u00e3o, que est\u00e3o bem documentadas, incluindo na Internet, n\u00e3o s\u00e3o abordadas. Ficam fora da publica\u00e7\u00e3o os casos em que a desnormaliza\u00e7\u00e3o \u00e9 uma pr\u00e1tica comum, com exemplos cl\u00e1ssicos: s\u00e9rie e n\u00famero de passaporte, data e hora, entre outros.<\/p>\n<p>O post utiliza defini\u00e7\u00f5es claramente compreens\u00edveis e aplic\u00e1veis das formas normais, sem referenciar termos matem\u00e1ticos. Na forma como podem ser aplicadas \u00e0 an\u00e1lise de processos de neg\u00f3cios reais e ao projeto de software industrial.<\/p>\n<p>H\u00e1 uma opini\u00e3o de que o projeto de data warehouses, ferramentas para cria\u00e7\u00e3o de relat\u00f3rios e acordos de integra\u00e7\u00e3o (que utilizam representa\u00e7\u00e3o tabular da informa\u00e7\u00e3o), difere do projeto de bancos de dados de sistemas ERP na medida em que a conveni\u00eancia de uso e a aplica\u00e7\u00e3o de desnormaliza\u00e7\u00f5es conscientes podem ter prioridade sobre a prote\u00e7\u00e3o da integridade dos dados. Eu compartilho essa opini\u00e3o, e o que ser\u00e1 descrito a seguir refere-se exclusivamente a modelos de dados mestres e dados transacionais de sistemas ERP.<\/p>\n<p>A explica\u00e7\u00e3o das formas normais \u00e9 apresentada com um exemplo compreens\u00edvel para a maioria dos leitores. No entanto, como uma ilustra\u00e7\u00e3o clara, nos itens 4-5 foi deliberadamente utilizada uma tarefa acentuadamente \"inventada\". Se isso n\u00e3o for feito e um exemplo cl\u00e1ssico for utilizado, como o mesmo modelo de armazenamento de pedidos do item 2, pode-se chegar \u00e0 situa\u00e7\u00e3o em que a aten\u00e7\u00e3o do leitor \u00e9 desviado da decomposi\u00e7\u00e3o do processo em um modelo, para a experi\u00eancia pessoal e percep\u00e7\u00e3o de como os processos e modelos de armazenamento de dados em sistemas de informa\u00e7\u00e3o devem ser constru\u00eddos. Em outras palavras, pegue dois analistas de TI qualificados, um que presta servi\u00e7os a log\u00edsticos que transportam passageiros, e outro a log\u00edsticos que transportam m\u00e1quinas para a produ\u00e7\u00e3o de microchips. Pe\u00e7a a eles, sem discutir previamente os processos de neg\u00f3cios que podem ser automatizados, para criar um modelo de dados para armazenar informa\u00e7\u00f5es sobre um trajeto ferrovi\u00e1rio. <\/p>\n<p>H\u00e1 uma probabilidade n\u00e3o nula de que nos modelos propostos voc\u00ea encontre n\u00e3o apenas um conjunto de atributos visivelmente diferente, mas tamb\u00e9m conjuntos de entidades que n\u00e3o coincidem, porque cada analista se basear\u00e1 nos processos e tarefas com os quais est\u00e1 acostumado. E, em tal situa\u00e7\u00e3o, dizer qual modelo \u00e9 \"correto\" \u00e9 imposs\u00edvel, pois n\u00e3o h\u00e1 crit\u00e9rio de avalia\u00e7\u00e3o.<\/p>\n<h2>2. Formas Normais<\/h2>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/habrastorage.org\/webt\/mz\/vc\/ex\/mzvcexxqfzhzyybzk8zvbndmtcc.png\"><img decoding=\"async\" alt=\"Desnormaliza\u00e7\u00e3o de bancos de dados de sistemas ERP e seu impacto no desenvolvimento de software: abrindo uma taverna em Tortuga\" src=\"\/wp-content\/uploads\/2020\/04\/e2d3fc5656b59671648511b0a0e5f7b9.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p><b>A primeira forma normal do BD<\/b> exige a atomicidade de todos os atributos. <br \/>\nEm particular, se um objeto A possui atributos n\u00e3o-chave a e b, de modo que c=f(a,b) e na tabela que descreve o objeto A voc\u00ea armazena o valor do atributo c, ent\u00e3o a primeira forma normal est\u00e1 violada no BD. Por exemplo, se na especifica\u00e7\u00e3o do pedido \u00e9 indicado a quantidade, cujas unidades de medida dependem do tipo de produto: em um caso podem ser pe\u00e7as, no outro litros, e em um terceiro embalagens compostas por pe\u00e7as (no modelo acima Good_count_WR), ent\u00e3o a atomicidade dos atributos \u00e9 violada no BD. Neste caso, para dizer como deve ser o conjunto de tabelas na especifica\u00e7\u00e3o do pedido, \u00e9 necess\u00e1rio uma descri\u00e7\u00e3o alvo do processo de trabalho no sistema de informa\u00e7\u00e3o, e como os processos podem ser diferentes, tamb\u00e9m podem existir muitas vers\u00f5es \"corretas\".<\/p>\n<p><b>A segunda forma normal do BD<\/b> exige a conformidade com a primeira forma e uma tabela pr\u00f3pria para cada entidade relacionada ao processo de trabalho em SI. Se em uma tabela existem depend\u00eancias com=f1(a) e d=f2(b) e n\u00e3o h\u00e1 depend\u00eancia com=f3(b), ent\u00e3o a tabela viola a segunda forma normal. No exemplo acima, na tabela \"Pedido\", n\u00e3o h\u00e1 depend\u00eancia entre o pedido e o endere\u00e7o. Altere o nome da rua ou da cidade, e isso n\u00e3o ter\u00e1 nenhum impacto nos atributos essenciais do pedido. <\/p>\n<p><b>Terceira forma normal do BD<\/b> exige a conformidade com a segunda forma normal e a aus\u00eancia de depend\u00eancias funcionais entre atributos de diferentes entidades. Esta regra pode ser formulada assim: \"tudo que pode ser calculado deve ser calculado\". Em outras palavras, se existem dois objetos A e B. Na tabela que armazena os atributos do objeto A, \u00e9 manifestado o atributo C, e o objeto B tem um atributo b tal que existe c=f4(b), ent\u00e3o a terceira forma normal \u00e9 violada. No exemplo abaixo, o atributo \"Quantidade de itens\" (Total_count_WR) no registro do pedido claramente tende a violar a terceira forma normal.<\/p>\n<h2>3. Minha abordagem para a aplica\u00e7\u00e3o da normaliza\u00e7\u00e3o<\/h2>\n<p>\n1. Apenas o processo de neg\u00f3cios automatiz\u00e1vel direcionado pode fornecer ao analista crit\u00e9rios para identificar entidades e atributos ao criar o modelo de armazenamento de dados. A cria\u00e7\u00e3o de um modelo de processo \u00e9 uma condi\u00e7\u00e3o indispens\u00e1vel para a cria\u00e7\u00e3o de um modelo de dados normal.<\/p>\n<p>2. Alcan\u00e7ar a terceira forma normal em sentido estrito pode n\u00e3o ser vi\u00e1vel na pr\u00e1tica real de cria\u00e7\u00e3o de sistemas ERP, ao cumprir parte ou todas as seguintes condi\u00e7\u00f5es:<\/p>\n<ul>\n<li>processos automatizados raramente est\u00e3o sujeitos a mudan\u00e7as, <\/li>\n<li>os prazos para pesquisa e desenvolvimento est\u00e3o apertados, <\/li>\n<li>os requisitos de integridade dos dados s\u00e3o condicionalmente baixos (erros potenciais em software industrial n\u00e3o levam a perdas financeiras ou de clientes para o fornecedor de software)<\/li>\n<li>etc.<\/li>\n<\/ul>\n<p>\nNas condi\u00e7\u00f5es descritas, os custos para identificar e descrever o ciclo de vida de alguns objetos e seus atributos podem n\u00e3o ser justificados do ponto de vista da efici\u00eancia econ\u00f4mica.<\/p>\n<p>3. Quaisquer consequ\u00eancias da desnormaliza\u00e7\u00e3o do modelo de dados em um SI j\u00e1 criado podem ser contidas por meio de uma pesquisa cuidadosa do c\u00f3digo e testes.<\/p>\n<p>4. A desnormaliza\u00e7\u00e3o \u00e9 uma maneira de transferir o esfor\u00e7o de pesquisa das fontes de dados e o projeto do processo de neg\u00f3cios para a fase de desenvolvimento, do per\u00edodo de implementa\u00e7\u00e3o para o per\u00edodo de evolu\u00e7\u00e3o do sistema.<\/p>\n<p>5. \u00c9 desej\u00e1vel buscar a terceira forma normal do BD se:<\/p>\n<ul>\n<li>A dire\u00e7\u00e3o da mudan\u00e7a dos processos de neg\u00f3cios automatizados \u00e9 dif\u00edcil de prever<\/li>\n<li>Dentro da equipe de implementa\u00e7\u00e3o e\/ou desenvolvimento, existe uma divis\u00e3o de trabalho pouco perme\u00e1vel<\/li>\n<li>Os sistemas que fazem parte do contorno de integra\u00e7\u00e3o se desenvolvem segundo seus pr\u00f3prios planos<\/li>\n<li>A incoer\u00eancia de dados pode levar \u00e0 perda de clientes ou dinheiro pela empresa<\/li>\n<\/ul>\n<p>\n6. O projeto do modelo de dados deve ser realizado pelo analista apenas em rela\u00e7\u00e3o aos modelos do processo de neg\u00f3cios-alvo e do processo no SI. Se o desenvolvedor for respons\u00e1vel pelo projeto do modelo de dados, ele ter\u00e1 que se aprofundar na \u00e1rea tem\u00e1tica a ponto de, em particular, entender a diferen\u00e7a entre os valores dos atributos \u2014 uma condi\u00e7\u00e3o necess\u00e1ria para destacar atributos at\u00f4micos. Assim, ele assume fun\u00e7\u00f5es n\u00e3o inerentes.<\/p>\n<h2>4 Tarefa para ilustra\u00e7\u00e3o<\/h2>\n<p>\nSuponha que voc\u00ea tenha uma pequena taverna robotizada no porto. Seu segmento de mercado: marinheiros e piratas que chegam ao porto e precisam de descanso. Para os marinheiros, voc\u00ea vende ch\u00e1 de tomilho, e para os piratas, rum e pentes de osso para desembara\u00e7ar a barba. O servi\u00e7o na taverna \u00e9 realizado por um rob\u00f4-hostess e um rob\u00f4-barman. Devido \u00e0 alta qualidade e pre\u00e7os baixos, voc\u00ea eliminou todos os concorrentes, de modo que cada um que desce do navio vem \u00e0 sua taverna, que \u00e9 a \u00fanica no porto.<\/p>\n<p>O complexo de sistemas de informa\u00e7\u00e3o da taverna consiste no seguinte software: <\/p>\n<ul>\n<li>Sistema de alerta antecipado sobre o cliente, reconhecendo sua categoria por caracter\u00edsticas distintivas<\/li>\n<li>Sistema de gerenciamento de rob\u00f4s-hostess e rob\u00f4s-barmans<\/li>\n<li>Sistema de gerenciamento de estoque e entrega ao ponto de venda<\/li>\n<li>Sistema de gerenciamento de relacionamentos com fornecedores (SGRS)<\/li>\n<\/ul>\n<p>\nProcesso:<\/p>\n<p>O sistema de alerta antecipado reconhece as pessoas que descem do navio. Se a pessoa estiver bem barbeada, ela \u00e9 classificada como marinheiro; se a pessoa tiver barba, \u00e9 classificada como pirata.<\/p>\n<p>Ao entrar na taverna, o convidado ouve do rob\u00f4 hostess uma sauda\u00e7\u00e3o de acordo com sua categoria, por exemplo: \"Ho-ho-ho, estimado pirata, siga para a mesa n\u00ba...\"<\/p>\n<p>O convidado passa pela mesa especificada, onde o rob\u00f4-barman j\u00e1 preparou os itens de acordo com a categoria. O rob\u00f4-barman envia informa\u00e7\u00f5es para o sistema de estoque de que a pr\u00f3xima remessa de entrega deve ser aumentada, e o sistema de informa\u00e7\u00e3o de estoque, com base nos estoques dispon\u00edveis, gera um pedido de compra no SUOP.<\/p>\n<p>Suponha que o sistema de alerta antecipado tenha sido desenvolvido pela sua equipe interna de TI, e o programa de gerenciamento dos rob\u00f4s de bar tenha sido criado por um contratante externo especificamente para o seu neg\u00f3cio. J\u00e1 os sistemas de gerenciamento de estoque e relacionamento com fornecedores s\u00e3o solu\u00e7\u00f5es de prateleira personalizadas do mercado.<\/p>\n<h2>5. Exemplos de desnormaliza\u00e7\u00e3o e seu impacto no desenvolvimento de software<\/h2>\n<p>\nAo projetar o processo de neg\u00f3cios, os especialistas consultados da \u00e1rea declararam unanimemente que em todo o mundo os piratas bebem rum e pentear suas barbas com pentes de osso, enquanto os marinheiros bebem ch\u00e1 com tomilho e est\u00e3o sempre bem barbeados. <\/p>\n<p>Surge um cat\u00e1logo de tipos de clientes com dois valores: 1 - piratas, 2 - marinheiros, compartilhado por todo o contorno informacional da empresa. <\/p>\n<p>O sistema de alerta sobre o cliente imediatamente salva o resultado do processamento da imagem como um identificador (ID) do cliente reconhecido e seu tipo: marinheiro ou pirata. <\/p>\n<p>ID do objeto reconhecido<br \/>\nCategoria do cliente<\/p>\n<p>100500<br \/>\nPirata<\/p>\n<p>100501<br \/>\nPirata<\/p>\n<p>100502<br \/>\nMarinheiro<\/p>\n<p>Vamos destacar novamente que<\/p>\n<p>1. Nossos marinheiros s\u00e3o, na verdade, pessoas barbeadas<br \/>\n2. Nossos piratas s\u00e3o, na verdade, pessoas barbadas<\/p>\n<p>Quais problemas precisam ser resolvidos para que nossa estrutura busque a terceira forma normal:<\/p>\n<ul>\n<li>viola\u00e7\u00e3o da atomicidade do atributo - Categoria do cliente<\/li>\n<li>mistura do fato analisado e da conclus\u00e3o em uma \u00fanica tabela <\/li>\n<li>depend\u00eancia funcional registrada entre atributos de diferentes entidades. <\/li>\n<\/ul>\n<p>\nEm forma normalizada, ter\u00edamos duas tabelas: <\/p>\n<ul>\n<li>resultado do reconhecimento na forma de um conjunto de caracter\u00edsticas estabelecidas,<\/li>\n<\/ul>\n<p><\/p>\n<p>ID do objeto reconhecido<br \/>\nPelo facial<\/p>\n<p>100500<br \/>\nSim<\/p>\n<p>100501<br \/>\nSim<\/p>\n<p>100502<br \/>\nN\u00e3o<\/p>\n<p><\/p>\n<ul>\n<li>resultado da determina\u00e7\u00e3o do tipo de cliente como uma aplica\u00e7\u00e3o da l\u00f3gica embutida no SI para a interpreta\u00e7\u00e3o das caracter\u00edsticas estabelecidas<\/li>\n<\/ul>\n<p>ID do objeto reconhecido<br \/>\nID de identifica\u00e7\u00e3o<br \/>\nCategoria do cliente<\/p>\n<p>100500<br \/>\n100001<br \/>\nPirata<\/p>\n<p>100501<br \/>\n100002<br \/>\nPirata<\/p>\n<p>100502<br \/>\n100003<br \/>\nMarinheiro<\/p>\n<p>Como uma organiza\u00e7\u00e3o de armazenamento de dados normalizada pode facilitar o desenvolvimento de um complexo de sistemas de informa\u00e7\u00e3o? Suponha que, de repente, voc\u00ea tenha novos clientes. Digamos que sejam piratas japoneses, que podem n\u00e3o ter barba, mas andam com um papagaio no ombro, e piratas ecol\u00f3gicos, que voc\u00ea f\u00e1cil reconhecer\u00e1 pelo perfil azulado de Greta no peito esquerdo. <\/p>\n<p>Os piratas ecol\u00f3gicos, naturalmente, n\u00e3o podem usar pentes de osso e exigem um equivalente feito de pl\u00e1stico marinho reciclado.<\/p>\n<p>Voc\u00ea precisar\u00e1 ajustar os algoritmos de funcionamento dos programas de acordo com as novas introdu\u00e7\u00f5es. Se as regras de normaliza\u00e7\u00e3o tivessem sido seguidas, voc\u00ea teria apenas que adicionar entradas para algumas ramifica\u00e7\u00f5es de processos em determinados sistemas e criar novas ramifica\u00e7\u00f5es apenas para os casos e sistemas onde a presen\u00e7a de pelos faciais \u00e9 relevante. Contudo, como as regras n\u00e3o foram seguidas, voc\u00ea ter\u00e1 que analisar todo o c\u00f3digo, em todo o contorno, onde s\u00e3o utilizados os valores do diret\u00f3rio de tipos de clientes e estabelecer claramente que, em um caso, o algoritmo deve levar em conta a atividade profissional do cliente, enquanto, em outro, as caracter\u00edsticas f\u00edsicas. <\/p>\n<p>Na forma que <b><i>tende <\/i><\/b>\u00e0 normaliza\u00e7\u00e3o, ter\u00edamos duas tabelas com dados operacionais e dois diret\u00f3rios:<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habrastorage.org\/webt\/qn\/pq\/g4\/qnpqg4idbhbsqejhnryzfuilhhy.png\"><img decoding=\"async\" alt=\"Desnormaliza\u00e7\u00e3o de bancos de dados de sistemas ERP e seu impacto no desenvolvimento de software: abrindo uma taverna em Tortuga\" src=\"\/wp-content\/uploads\/2020\/04\/eea87da839171e8a3a42db0618972124.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<ul>\n<li>resultado do reconhecimento na forma de um conjunto de caracter\u00edsticas estabelecidas,<\/li>\n<\/ul>\n<p><\/p>\n<p>ID do objeto reconhecido<br \/>\nGreta no peito esquerdo<br \/>\nP\u00e1ssaro no ombro<br \/>\nPelo facial<\/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>resultado da determina\u00e7\u00e3o do tipo de cliente (suponha que seja uma representa\u00e7\u00e3o do usu\u00e1rio, na qual s\u00e3o mostradas as descri\u00e7\u00f5es dos diret\u00f3rios)<\/li>\n<\/ul>\n<p>\nSignifica que a denormaliza\u00e7\u00e3o detectada impede que os sistemas sejam ajustados \u00e0s novas condi\u00e7\u00f5es? Claro que n\u00e3o. Se imaginarmos que todos os sistemas de informa\u00e7\u00e3o foram criados por uma \u00fanica equipe com zero rotatividade de pessoal, com desenvolvimentos bem documentados e informa\u00e7\u00f5es sendo passadas na equipe sem perdas, as mudan\u00e7as necess\u00e1rias podem ser feitas com esfor\u00e7os desprez\u00edveis. Mas se voltarmos \u00e0s condi\u00e7\u00f5es iniciais do problema, apenas a impress\u00e3o dos protocolos de discuss\u00f5es conjuntas consumiria 1,5 teclados e mais 0,5 para a elabora\u00e7\u00e3o dos procedimentos de compra.<\/p>\n<p>No exemplo acima, todas as tr\u00eas formas normais foram violadas; vamos tentar viol\u00e1-las separadamente.<\/p>\n<p><b>Viola\u00e7\u00e3o da primeira forma normal:<\/b><\/p>\n<p>Suponha que os produtos em seu armaz\u00e9m sejam entregues a partir dos armaz\u00e9ns dos fornecedores com o uso de uma van de 1,5 toneladas que pertence \u00e0 sua taverna. O tamanho dos seus pedidos \u00e9 t\u00e3o pequeno em rela\u00e7\u00e3o ao volume dos fornecedores que eles s\u00e3o sempre realizados exatamente um por um, sem esperar pela fabrica\u00e7\u00e3o. Precisam de tabelas separadas neste cen\u00e1rio? Ve\u00edculos, tipos de ve\u00edculos, \u00e9 necess\u00e1rio separar o planejado do realizado nos seus pedidos enviados aos fornecedores?<\/p>\n<p>Imagine quantas conex\u00f5es \"desnecess\u00e1rias\" seus programadores teriam que escrever se utilizassem o modelo abaixo para desenvolver o programa.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habrastorage.org\/webt\/bz\/js\/gf\/bzjsgfs0fephwjwqx8xdvunrgva.png\"><img decoding=\"async\" alt=\"Desnormaliza\u00e7\u00e3o de bancos de dados de sistemas ERP e seu impacto no desenvolvimento de software: abrindo uma taverna em Tortuga\" src=\"\/wp-content\/uploads\/2020\/04\/7309871d1ecc5c1ceb4f077ea4afebff.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p>Suponha que decidimos que a estrutura proposta \u00e9 excessivamente complexa, para o nosso caso, separar o planejado do realizado no registro do pedido \u00e9 uma informa\u00e7\u00e3o redundante, e a especifica\u00e7\u00e3o do pedido \u00e9 regravada com base nos resultados da aceita\u00e7\u00e3o do produto recebido, raros erros de contagem e recebimento de produtos de qualidade inadequada s\u00e3o resolvidos fora do sistema de informa\u00e7\u00e3o.<br \/>\nE um dia voc\u00ea v\u00ea que todo o sal\u00e3o da taverna est\u00e1 cheio de piratas irritados e desgrenhados. O que aconteceu? <\/p>\n<p>Aconteceu que, com o crescimento do seu neg\u00f3cio, o consumo tamb\u00e9m aumentou. Algum tempo atr\u00e1s, foi tomada uma decis\u00e3o de gest\u00e3o de que, se a van estivesse sobrecarregada em volume e\/ou peso, o que acontecia muito raramente, o fornecedor priorizava a carga em favor das bebidas. <\/p>\n<p>Os produtos n\u00e3o entregues entravam no pr\u00f3ximo pedido e eram enviados em uma nova viagem, a presen\u00e7a de um estoque m\u00ednimo no armaz\u00e9m da taverna permitia ignorar ocorr\u00eancias de falta.<\/p>\n<p>No porto, o \u00faltimo concorrente fechou, e a ocorr\u00eancia de sobrecarga da van, ignorada devido \u00e0 prioriza\u00e7\u00e3o baseada na suposi\u00e7\u00e3o de que o estoque m\u00ednimo era suficiente e na carga peri\u00f3dica insuficiente do ve\u00edculo, tornou-se uma pr\u00e1tica comum. O sistema criado funcionar\u00e1 perfeitamente de acordo com os algoritmos incorporados e n\u00e3o ter\u00e1 qualquer possibilidade de rastrear as falhas sistem\u00e1ticas nos pedidos planejados. Apenas uma reputa\u00e7\u00e3o arruinada e clientes insatisfeitos poder\u00e3o detectar o problema.<\/p>\n<p>Um leitor atento certamente notou que a quantidade solicitada na especifica\u00e7\u00e3o do pedido (T_ORDER_SPEC) na Se\u00e7\u00e3o 2 e na Se\u00e7\u00e3o 5 pode ou n\u00e3o estar em conformidade com a primeira forma normal. Tudo depende de se as diferentes unidades de medida podem cair no mesmo campo dentro da variedade de produtos escolhida. <\/p>\n<p><b>Viola\u00e7\u00e3o da segunda forma normal:<\/b><\/p>\n<p>\u00c0 medida que suas necessidades crescem, voc\u00ea adquire mais alguns ve\u00edculos de diferentes tamanhos. No contexto apresentado acima, a cria\u00e7\u00e3o de um cat\u00e1logo de ve\u00edculos foi considerada redundante, resultando em todos os algoritmos de trabalho com dados que atendem \u00e0s necessidades de entrega e estoque tratando o transporte de carga do fornecedor para o armaz\u00e9m como uma viagem exclusivamente de uma caminhonete de 1,5 tonelada. Portanto, junto com a compra de novos ve\u00edculos, voc\u00ea acaba criando um cat\u00e1logo de ve\u00edculos; entretanto, voc\u00ea dever\u00e1 analisar todo o c\u00f3digo que se refere ao transporte de carga para descobrir se em cada ponto espec\u00edfico existem refer\u00eancias \u00e0s caracter\u00edsticas do ve\u00edculo em que o neg\u00f3cio come\u00e7ou.<\/p>\n<p><b>Viola\u00e7\u00e3o da terceira forma normal:<\/b><\/p>\n<p>Em algum momento, voc\u00ea come\u00e7a a criar um programa de fidelidade e um registro de cliente habitual aparece. Por que, por exemplo, perder tempo criando representa\u00e7\u00f5es f\u00edsicas que armazenam dados agregados sobre vendas para um cliente espec\u00edfico, a serem usados em relat\u00f3rios e transferidos para sistemas anal\u00edticos, se na fase inicial do programa de fidelidade, tudo o que interessa ao cliente pode ser registrado na pr\u00f3pria ficha do cliente? E, de fato, \u00e0 primeira vista, n\u00e3o parece haver sentido. Mas sempre que sua empresa conectar, por exemplo, novos canais de venda, deve haver algu\u00e9m entre seus analistas que lembre que existe esse atributo de agrega\u00e7\u00e3o. <\/p>\n<p>Ao projetar cada novo processo, digamos, vendas pela internet, vendas atrav\u00e9s de distribuidores conectados ao sistema de fidelidade comum, algu\u00e9m deve se lembrar de que todos os novos processos devem garantir a integridade dos dados em n\u00edvel de c\u00f3digo. Para um banco de dados industrial com mil tabelas, isso parece uma tarefa um tanto invi\u00e1vel.<\/p>\n<p>Um desenvolvedor experiente, \u00e9 claro, sabe como contornar todos os problemas mencionados acima, mas, na minha opini\u00e3o, a tarefa de um analista experiente \u00e9 evitar que cheguem a esse ponto.<\/p>\n<p>Gostaria de expressar minha gratid\u00e3o pelo valioso feedback ao preparar a publica\u00e7\u00e3o com o desenvolvedor l\u00edder, Evgeny Yaruhin.<\/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. Bancos de dados. Design, implementa\u00e7\u00e3o e manuten\u00e7\u00e3o. Teoria e pr\u00e1tica.<br \/>\n<br \/>Fonte: <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.3 - 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\/pt\/blog\/administrirovanie\/denormalizacziya-baz-dannyh-erp-sistem-i-ee-vliyanie-na-razvitie-po-otkryvaem-tavernu-na-tortuge\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"pt_PT\" \/>\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\/pt\/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\udd47Desnormaliza\u00e7\u00e3o de bancos de dados em sistemas ERP e seu impacto no desenvolvimento de software: abrindo uma taverna em Tortuga | ProHoster","description":"Ol\u00e1! Meu nome \u00e9 Andrey Semenov, sou analista s\u00eanior na Sportmaster. Neste post, quero levantar a quest\u00e3o da desnormaliza\u00e7\u00e3o de bancos de dados em sistemas ERP.","canonical_url":"https:\/\/prohoster.info\/pt\/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":"pt_PT","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\/pt\/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\/pt\/wp-json\/wp\/v2\/posts\/78198","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/comments?post=78198"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts\/78198\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media\/78199"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media?parent=78198"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/categories?post=78198"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/tags?post=78198"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}