{"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\/es\/blog\/administrirovanie\/denormalizacziya-baz-dannyh-erp-sistem-i-ee-vliyanie-na-razvitie-po-otkryvaem-tavernu-na-tortuge","title":{"rendered":"Desnormalizaci\u00f3n de bases de datos de sistemas ERP y su impacto en el desarrollo del software: abrimos una taberna en Tortuga","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>\u00a1Hola! Me llamo Andrei Semenov, soy analista senior en Sportmaster. En este post quiero plantear la cuesti\u00f3n de la desnormalizaci\u00f3n de bases de datos de sistemas ERP. Revisaremos las condiciones generales, as\u00ed como un ejemplo concreto: digamos que ser\u00e1 una hermosa taberna monopolista para piratas y marineros. En la que los piratas y marineros deben ser atendidos de diferentes maneras, ya que sus percepciones de lo hermoso y los patrones de consumo difieren significativamente. <\/p>\n<p>\u00bfC\u00f3mo hacer para que todos est\u00e9n contentos? \u00bfC\u00f3mo no volverse loco al dise\u00f1ar y mantener un sistema as\u00ed? \u00bfQu\u00e9 hacer si a la taberna comienzan a llegar no solo los habituales piratas y marineros?<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/sportmaster_lab\/blog\/497550\/\"><img decoding=\"async\" alt=\"Desnormalizaci\u00f3n de bases de datos de sistemas ERP y su impacto en el desarrollo del software: abrimos una taberna en Tortuga\" src=\"\/wp-content\/uploads\/2020\/04\/bd0ccbfa3e3649aac20631e09fcb5b16.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p>Todo a continuaci\u00f3n. Pero vayamos por partes.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>1. Limitaciones y supuestos<\/h2>\n<p>\nTodo lo expuesto se refiere \u00fanicamente a bases de datos relacionales. No se consideran las consecuencias de la desnormalizaci\u00f3n, como las anomal\u00edas de modificaci\u00f3n, eliminaci\u00f3n e inserci\u00f3n, que est\u00e1n bien documentadas, incluso en Internet. Quedan fuera de esta publicaci\u00f3n los casos en los que la desnormalizaci\u00f3n es algo com\u00fan, con ejemplos cl\u00e1sicos: serie y n\u00famero de pasaporte, fecha y hora, entre otros.<\/p>\n<p>En el post se utilizan definiciones intuitivas y pr\u00e1cticamente aplicables de las formas normales, sin referencias a t\u00e9rminos matem\u00e1ticos. En la forma en que pueden aplicarse a la investigaci\u00f3n de procesos de negocio reales y al dise\u00f1o de software industrial.<\/p>\n<p>Existe la opini\u00f3n de que el dise\u00f1o de almacenes de datos, herramientas para crear informes y acuerdos de integraci\u00f3n (que utilizan una representaci\u00f3n tabular de la informaci\u00f3n), difiere del dise\u00f1o de bases de datos de sistemas ERP en que la facilidad de consumo y la aplicaci\u00f3n de una desnormalizaci\u00f3n consciente pueden tener prioridad sobre la integridad de los datos. Comparto esta opini\u00f3n, y lo que se describe a continuaci\u00f3n se refiere exclusivamente a los modelos de datos maestros y datos transaccionales de sistemas ERP.<\/p>\n<p>La explicaci\u00f3n de las formas normales se presenta con un ejemplo que resulta comprensible para la mayor\u00eda de los lectores en un nivel cotidiano. Sin embargo, como ilustraci\u00f3n visual, en los puntos 4-5 se utiliza deliberadamente un problema \u00abinventado\u00bb. Si no se hace esto y se toma alg\u00fan ejemplo can\u00f3nico, como el mismo modelo de almacenamiento de pedidos en el p. 2, se puede caer en la situaci\u00f3n en que la atenci\u00f3n del lector se desv\u00ede de la descomposici\u00f3n del proceso propuesto al modelo, a su experiencia personal y percepci\u00f3n de c\u00f3mo deben construirse los procesos y modelos de almacenamiento de datos en SIS. En otras palabras, tome a dos analistas de TI calificados: uno que preste servicios a logistas que transportan pasajeros, y otro a logistas que mueven m\u00e1quinas para la producci\u00f3n de microchips. P\u00eddales, sin discutir previamente los procesos automatizables, que formulen un modelo de datos para almacenar informaci\u00f3n sobre un viaje en tren. <\/p>\n<p>Existe una probabilidad no nula de que en los modelos propuestos encuentre no solo un conjunto notablemente diferente de atributos, sino tambi\u00e9n conjuntos de entidades no coincidentes, porque cada analista se basar\u00e1 en los procesos y tareas que le son familiares. Y decir en tal situaci\u00f3n cu\u00e1l modelo es \"correcto\" es imposible, porque no hay un criterio de evaluaci\u00f3n.<\/p>\n<h2>2. Formas normales<\/h2>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/habrastorage.org\/webt\/mz\/vc\/ex\/mzvcexxqfzhzyybzk8zvbndmtcc.png\"><img decoding=\"async\" alt=\"Desnormalizaci\u00f3n de bases de datos de sistemas ERP y su impacto en el desarrollo del software: abrimos una taberna en Tortuga\" src=\"\/wp-content\/uploads\/2020\/04\/e2d3fc5656b59671648511b0a0e5f7b9.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p><b>La primera forma normal de la base de datos<\/b> requiere la atomicidad de todos los atributos. <br \/>\nEn particular, si un objeto A tiene atributos no clave a y b, tales que c=f(a,b) y en la tabla que describe el objeto A almacena el valor del atributo c, entonces en la base de datos se ha violado la primera forma normal. Por ejemplo, si en la especificaci\u00f3n del pedido se indica una cantidad cuya unidad de medida depende del tipo de producto: en un caso puede ser piezas, en otro litros, en otro paquetes compuestos por piezas (en el modelo anterior Good_count_WR), entonces en la base de datos se ha violado la atomicidad de los atributos. En este caso, para determinar c\u00f3mo debe ser el conjunto de tablas de la especificaci\u00f3n del pedido, se necesita una descripci\u00f3n objetiva del proceso de trabajo en SIS, y dado que los procesos pueden ser diferentes, puede haber muchas versiones \"correctas\".<\/p>\n<p><b>La segunda forma normal de la base de datos<\/b> requiere el cumplimiento de la primera forma y de una tabla propia para cada entidad relacionada con el proceso de trabajo en el SI. Si en una tabla existen dependencias con=f1(a) y d=f2(b) y no existe dependencia con=f3(b), entonces se ha violado la segunda forma normal en la tabla. En el ejemplo anterior, en la tabla 'Pedido' no existe dependencia entre el pedido y la direcci\u00f3n. Cambie el nombre de la calle o de la ciudad, y no tendr\u00e1 ning\u00fan impacto en los atributos sustanciales del pedido. <\/p>\n<p><b>Tercera forma normal de la base de datos<\/b> requiere el cumplimiento de la segunda forma normal y la ausencia de dependencias funcionales entre atributos de diferentes entidades. Esta regla se puede formular as\u00ed: 'todo lo que puede ser calculado debe ser calculado'. En otras palabras, si existen dos objetos A y B. En la tabla que almacena los atributos del objeto A, se manifiesta el atributo C, y del objeto B existe un atributo b tal que hay c=f4(b), entonces se ha violado la tercera forma normal. En el siguiente ejemplo, el atributo 'Cantidad de piezas' (Total_count_WR) en el registro del pedido claramente tiende a violar la tercera forma normal.<\/p>\n<h2>3. Mi enfoque para aplicar la normalizaci\u00f3n<\/h2>\n<p>\n1. Solo un proceso de negocio automatizable objetivo puede proporcionar al analista los criterios para identificar entidades y atributos al crear un modelo de almacenamiento de datos. La creaci\u00f3n de un modelo de proceso es un requisito indispensable para crear un modelo de datos normalizado.<\/p>\n<p>2. Alcanzar la tercera forma normal en un sentido estricto puede no ser pr\u00e1ctico en la pr\u00e1ctica real de creaci\u00f3n de sistemas ERP al cumplirse parte o todas las siguientes condiciones:<\/p>\n<ul>\n<li>los procesos automatizables rara vez est\u00e1n sujetos a cambios, <\/li>\n<li>los plazos para la investigaci\u00f3n y el desarrollo son ajustados, <\/li>\n<li>los requisitos de integridad de los datos son condicionalmente bajos (los posibles errores en el software industrial no conducen a la p\u00e9rdida de dinero o de clientes para el contratista del software)<\/li>\n<li>etc.<\/li>\n<\/ul>\n<p>\nBajo las condiciones descritas, los costos de identificaci\u00f3n y descripci\u00f3n del ciclo de vida de algunos objetos y sus atributos pueden no ser justificados desde el punto de vista de la efectividad econ\u00f3mica.<\/p>\n<p>3. Cualquier consecuencia de la desnormalizaci\u00f3n del modelo de datos en un SI ya creado puede ser contrarrestada mediante una investigaci\u00f3n cuidadosa del c\u00f3digo y pruebas.<\/p>\n<p>4. La desnormalizaci\u00f3n es una forma de transferir los esfuerzos de trabajo de la etapa de investigaci\u00f3n de fuentes de datos y dise\u00f1o de procesos de negocio a la etapa de desarrollo, del periodo de implementaci\u00f3n al periodo de evoluci\u00f3n del sistema.<\/p>\n<p>5. Es recomendable aspirar a la tercera forma normal de la base de datos si:<\/p>\n<ul>\n<li>La direcci\u00f3n del cambio en los procesos de negocio automatizados es dif\u00edcil de predecir.<\/li>\n<li>Dentro del equipo de implementaci\u00f3n y\/o desarrollo hay una clara divisi\u00f3n del trabajo poco permeable.<\/li>\n<li>Los sistemas que forman parte del contorno de integraci\u00f3n evolucionan de acuerdo con sus propios planes.<\/li>\n<li>La incoherencia de datos puede llevar a la p\u00e9rdida de clientes o dinero para la empresa.<\/li>\n<\/ul>\n<p>\n6. El dise\u00f1o del modelo de datos debe ser realizado por un analista solo en relaci\u00f3n con los modelos del proceso de negocio objetivo y el proceso en el sistema de informaci\u00f3n. Si el dise\u00f1o del modelo de datos lo realiza un desarrollador, tendr\u00e1 que sumergirse en el \u00e1rea tem\u00e1tica hasta el punto de entender la diferencia entre los valores de los atributos, que es una condici\u00f3n necesaria para la identificaci\u00f3n de atributos at\u00f3micos. De esta manera, asumiendo funciones que no le son propias.<\/p>\n<h2>4 Tarea para ilustrar<\/h2>\n<p>\nSupongamos que tienes una peque\u00f1a taberna robotizada en el puerto. Tu segmento de mercado: marineros y piratas que llegan al puerto y necesitan descansar. A los marineros les vendes t\u00e9 de tomillo, y a los piratas, ron y peines de hueso para arreglarse la barba. El servicio en la taberna es proporcionado por un robot anfitri\u00f3n y un robot bartender. Gracias a la alta calidad y bajos precios, has desplazado a todos los competidores, as\u00ed que cada persona que desembarca de un barco viene a tu taberna, que es la \u00fanica en el puerto.<\/p>\n<p>El conjunto de sistemas de informaci\u00f3n de la taberna est\u00e1 compuesto por el siguiente software: <\/p>\n<ul>\n<li>Sistema de alerta temprana del cliente, que reconoce su categor\u00eda por caracter\u00edsticas distintivas.<\/li>\n<li>Sistema de gesti\u00f3n de robots anfitriones y robots bartenders.<\/li>\n<li>Sistema de gesti\u00f3n de inventario y entrega en el punto de venta.<\/li>\n<li>Sistema de gesti\u00f3n de relaciones con proveedores (SGRP).<\/li>\n<\/ul>\n<p>\nProceso:<\/p>\n<p>El sistema de alerta temprana reconoce a las personas que desembarcan de los barcos. Si la persona est\u00e1 afeitada, se la clasifica como marinero; si tiene barba, se le clasifica como pirata.<\/p>\n<p>Al entrar en la taberna, el invitado escucha un saludo del robot anfitri\u00f3n correspondiente a su categor\u00eda, por ejemplo: \u00ab\u00a1Jo, jo, jo, estimado pirata, pase a la mesa n\u00ba\u2026\u00bb<\/p>\n<p>El cliente se acerca a la mesa designada, donde el robot barman ya ha preparado los productos seg\u00fan la categor\u00eda. El robot barman comunica a la sistema de gesti\u00f3n de almac\u00e9n que la pr\u00f3xima entrega debe ser incrementada; el sistema log\u00edstico genera una solicitud de compra con base en el inventario disponible.<\/p>\n<p>Suponga que el sistema de alerta temprana fue desarrollado por su equipo interno de TI, mientras que el programa para gestionar los robots de bar fue creado por un contratista externo espec\u00edficamente para su negocio. Los sistemas para la gesti\u00f3n de inventarios y relaciones con proveedores son soluciones empaquetadas personalizadas del mercado.<\/p>\n<h2>5. Ejemplos de desnormalizaci\u00f3n y su impacto en el desarrollo de software<\/h2>\n<p>\nAl dise\u00f1ar el proceso empresarial, los expertos encuestados coincidieron en que en todo el mundo los piratas beben ron y se peinan la barba con peines de hueso, mientras que los marineros toman t\u00e9 con tomillo y siempre est\u00e1n bien afeitados. <\/p>\n<p>Aparece un directorio de tipos de clientes con dos valores: 1- piratas, 2- marineros, com\u00fan para todo el contorno inform\u00e1tico de la empresa. <\/p>\n<p>El sistema de alerta sobre el cliente guarda de inmediato el resultado del procesamiento de la imagen como el ID del cliente reconocido y su tipo: marinero o pirata. <\/p>\n<p>ID del objeto reconocido<br \/>\nCategor\u00eda del cliente<\/p>\n<p>100500<br \/>\nPirata<\/p>\n<p>100501<br \/>\nPirata<\/p>\n<p>100502<br \/>\nMarinero<\/p>\n<p>Recalquemos que<\/p>\n<p>1. Nuestros marineros son personas realmente afeitadas<br \/>\n2. Nuestros piratas son personas realmente barbadas<\/p>\n<p>\u00bfQu\u00e9 problemas deben resolverse en este caso para que nuestra estructura aspire a la tercera forma normal?<\/p>\n<ul>\n<li>violaci\u00f3n de la atomicidad del atributo \u2014 categor\u00eda del cliente<\/li>\n<li>mezcla del hecho analizado y la conclusi\u00f3n en una misma tabla <\/li>\n<li>dependencia funcional fijada entre atributos de diferentes entidades. <\/li>\n<\/ul>\n<p>\nEn forma normalizada, tendr\u00edamos dos tablas: <\/p>\n<ul>\n<li>resultado del reconocimiento en forma de un conjunto de atributos establecidos,<\/li>\n<\/ul>\n<p><\/p>\n<p>ID del objeto reconocido<br \/>\nVello facial<\/p>\n<p>100500<br \/>\nS\u00ed<\/p>\n<p>100501<br \/>\nS\u00ed<\/p>\n<p>100502<br \/>\nNo<\/p>\n<p><\/p>\n<ul>\n<li>resultado de la determinaci\u00f3n del tipo de cliente como una aplicaci\u00f3n de la l\u00f3gica incorporada en el sistema para interpretar los atributos establecidos<\/li>\n<\/ul>\n<p>ID del objeto reconocido<br \/>\nID de identificaci\u00f3n<br \/>\nCategor\u00eda del cliente<\/p>\n<p>100500<br \/>\n100001<br \/>\nPirata<\/p>\n<p>100501<br \/>\n100002<br \/>\nPirata<\/p>\n<p>100502<br \/>\n100003<br \/>\nMarinero<\/p>\n<p>\u00bfC\u00f3mo puede una organizaci\u00f3n de almacenamiento de datos normalizada facilitar el desarrollo del sistema de informaci\u00f3n? Supongamos que de repente tiene nuevos clientes. Que sean piratas japoneses que pueden no tener barba, pero llevan un loro en el hombro, y piratas ecologistas, los reconocer\u00e1 f\u00e1cilmente por el perfil azul de Greta en su pecho izquierdo. <\/p>\n<p>Los piratas ecologistas, por supuesto, no pueden usar peines de hueso y exigen una alternativa hecha de pl\u00e1stico marino reciclado.<\/p>\n<p>Es necesario que modifique los algoritmos de los programas de acuerdo con las nuevas entradas. Si se hubieran cumplido las reglas de normalizaci\u00f3n, solo tendr\u00eda que complementar las entradas para algunas ramas de los procesos en ciertos sistemas y crear nuevas ramas solo para aquellos casos y en aquellos sistemas donde la presencia de vello facial sea relevante. Pero, dado que las reglas no se han cumplido, deber\u00e1 analizar todo el c\u00f3digo en todo el contorno donde se utilizan los valores del directorio de tipos de clientes y establecer claramente que, en un caso, el algoritmo debe tener en cuenta la actividad profesional del cliente y, en el otro, las caracter\u00edsticas f\u00edsicas. <\/p>\n<p>En la forma que <b><i>est\u00e1 buscando <\/i><\/b>normalizado, obtendr\u00edamos dos tablas con datos operativos y dos directorios:<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habrastorage.org\/webt\/qn\/pq\/g4\/qnpqg4idbhbsqejhnryzfuilhhy.png\"><img decoding=\"async\" alt=\"Desnormalizaci\u00f3n de bases de datos de sistemas ERP y su impacto en el desarrollo del software: abrimos una taberna en Tortuga\" src=\"\/wp-content\/uploads\/2020\/04\/eea87da839171e8a3a42db0618972124.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<ul>\n<li>resultado del reconocimiento en forma de un conjunto de atributos establecidos,<\/li>\n<\/ul>\n<p><\/p>\n<p>ID del objeto reconocido<br \/>\nGreta en el pecho izquierdo<br \/>\nUn loro en el hombro<br \/>\nVello 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 de la determinaci\u00f3n del tipo de cliente (supongamos que esto es una representaci\u00f3n de usuario, en la que se muestran descripciones de los directorios)<\/li>\n<\/ul>\n<p>\n\u00bfSignifica la desnormalizaci\u00f3n detectada que los sistemas no se podr\u00e1n adaptar a nuevas condiciones? Por supuesto que no. Si imaginamos que todos los sistemas fueron creados por un mismo equipo con una rotaci\u00f3n de personal nula, el desarrollo est\u00e1 bien documentado y la informaci\u00f3n se transmite en el equipo sin p\u00e9rdidas, entonces los cambios requeridos podr\u00edan hacerse con costos de esfuerzo despreciables. Pero si volvemos a las condiciones iniciales del problema, solo en la impresi\u00f3n de las actas de las discusiones conjuntas se desgastar\u00e1n 1.5 teclados y otros 0.5 en la formalizaci\u00f3n de los procedimientos de compra.<\/p>\n<p>En el ejemplo anterior, se han violado las tres formas normales. Intentemos violarlas por separado.<\/p>\n<p><b>Violaci\u00f3n de la primera forma normal:<\/b><\/p>\n<p>Supongamos que los productos en su almac\u00e9n se entregan desde los almacenes de los proveedores mediante la auto-recolecci\u00f3n utilizando una furgoneta de 1.5 toneladas que pertenece a su taberna. El tama\u00f1o de sus pedidos es tan peque\u00f1o en relaci\u00f3n con el volumen de los proveedores que siempre se cumplen exactamente uno a uno sin esperar la fabricaci\u00f3n. \u00bfSe necesitan tablas separadas: veh\u00edculos, tipos de veh\u00edculos, es necesario diferenciar entre el plan y la realidad en sus pedidos enviados a los proveedores?<\/p>\n<p>Solo imagina cu\u00e1ntas conexiones \u00abinnecesarias\u00bb tendr\u00e1n que escribir tus programadores si se utiliza el modelo a continuaci\u00f3n para desarrollar el programa.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habrastorage.org\/webt\/bz\/js\/gf\/bzjsgfs0fephwjwqx8xdvunrgva.png\"><img decoding=\"async\" alt=\"Desnormalizaci\u00f3n de bases de datos de sistemas ERP y su impacto en el desarrollo del software: abrimos una taberna en Tortuga\" src=\"\/wp-content\/uploads\/2020\/04\/7309871d1ecc5c1ceb4f077ea4afebff.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p>Supongamos que hemos decidido que la estructura propuesta es innecesariamente compleja, para nuestro caso, separar el plan y la realidad en el registro de pedidos es informaci\u00f3n excesiva, y la especificaci\u00f3n del pedido se sobrescribe seg\u00fan los resultados de la aceptaci\u00f3n de la mercanc\u00eda recibida, el raro error de clasificaci\u00f3n y la llegada de productos de calidad no adecuada se manejan fuera del sistema de informaci\u00f3n.<br \/>\nY un d\u00eda ves c\u00f3mo toda la sala de la taberna est\u00e1 llena de piratas indignados y desali\u00f1ados. \u00bfQu\u00e9 ha pasado? <\/p>\n<p>Result\u00f3 que, junto con el crecimiento de su negocio, tambi\u00e9n creci\u00f3 el consumo. En alg\u00fan momento, se tom\u00f3 la decisi\u00f3n administrativa de que si la furgoneta estaba sobrecargada en volumen y\/o peso, lo cual ocurr\u00eda muy rara vez, el proveedor priorizaba la carga en favor de las bebidas. <\/p>\n<p>Los productos no entregados se inclu\u00edan en el siguiente pedido y se enviaban en un nuevo viaje, la existencia de un inventario m\u00ednimo en el almac\u00e9n de la taberna permit\u00eda no notar los casos de falta de entrega.<\/p>\n<p>En el puerto cerr\u00f3 el \u00faltimo competidor, y el caso de sobrecarga de la furgoneta, pasado por alto debido a la priorizaci\u00f3n basada en la suposici\u00f3n de que hab\u00eda suficiente inventario m\u00ednimo y la carga peri\u00f3dica insuficiente del veh\u00edculo, se convirti\u00f3 en una pr\u00e1ctica habitual. El sistema creado funcionar\u00e1 perfectamente de acuerdo con los algoritmos establecidos, y no habr\u00e1 manera de rastrear la falta sistem\u00e1tica de cumplimiento de los pedidos planificados. Solo una reputaci\u00f3n da\u00f1ada y clientes descontentos podr\u00e1n detectar el problema.<\/p>\n<p>El lector atento seguramente habr\u00e1 notado que la cantidad solicitada en la especificaci\u00f3n del pedido (T_ORDER_SPEC) en la secci\u00f3n 2 y en la secci\u00f3n 5 puede cumplir o no con los requisitos de la primera forma normal. Todo depende de si, con el surtido de productos seleccionado, diferentes unidades de medida pueden caer en el mismo campo. <\/p>\n<p><b>Violaci\u00f3n de la segunda forma normal:<\/b><\/p>\n<p>A medida que aumentan sus necesidades, adquiere un par m\u00e1s de veh\u00edculos de diferentes tama\u00f1os. En el contexto expuesto anteriormente, se consider\u00f3 redundante crear un cat\u00e1logo de veh\u00edculos, como resultado de lo cual todos los algoritmos de manejo de datos que atienden las necesidades de entrega y almac\u00e9n perciben el movimiento de mercanc\u00edas del proveedor al almac\u00e9n como un viaje exclusivamente de una furgoneta de 1.5 toneladas. As\u00ed, junto con la compra de nuevos veh\u00edculos, a\u00fan as\u00ed crea un cat\u00e1logo de veh\u00edculos, pero al final tendr\u00e1 que analizar todo el c\u00f3digo que hace referencia al movimiento de las cargas para determinar si en cada lugar espec\u00edfico hay referencias a las caracter\u00edsticas del mismo veh\u00edculo con el que comenz\u00f3 el negocio.<\/p>\n<p><b>Violaci\u00f3n de la tercera forma normal:<\/b><\/p>\n<p>En alg\u00fan momento, comienza a crear un programa de fidelizaci\u00f3n, aparece el registro de un cliente habitual. \u00bfPara qu\u00e9, por ejemplo, perder tiempo creando representaciones materiales que almacenan datos agregados sobre ventas a un cliente espec\u00edfico para su uso en informes y transferencia a sistemas anal\u00edticos, si en la etapa inicial del programa de fidelizaci\u00f3n todo lo que le interesa al cliente se puede colocar en el registro del propio cliente? Y, de hecho, no parece tener sentido a primera vista. Pero cada vez que su negocio conecte, por ejemplo, nuevos canales de venta, entre sus analistas debe haber alguien que recuerde que existe ese atributo de agregaci\u00f3n. <\/p>\n<p>Al dise\u00f1ar cada nuevo proceso, como la venta por Internet o las ventas a trav\u00e9s de distribuidores conectados al sistema de fidelizaci\u00f3n com\u00fan, alguien debe tener en mente que todos los nuevos procesos deben garantizar a nivel de c\u00f3digo la integridad de los datos. Para una base de datos industrial con miles de tablas, esto parece una tarea poco realizable.<\/p>\n<p>Un desarrollador experimentado, por supuesto, sabe c\u00f3mo abordar todos los problemas mencionados anteriormente, pero, en mi opini\u00f3n, la tarea de un analista experimentado es evitar que se lleguen a esos problemas.<\/p>\n<p>Quiero expresar mi agradecimiento por la valiosa retroalimentaci\u00f3n al preparar la publicaci\u00f3n para el desarrollador l\u00edder, Evgeny Yarukhin.<\/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. Bases de datos. Dise\u00f1o, implementaci\u00f3n y mantenimiento. Teor\u00eda y pr\u00e1ctica.<br \/>\n<br \/>Fuente: <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.2 - 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\/es\/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.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"es_ES\" \/>\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\/es\/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\udd47Desnormalizaci\u00f3n de bases de datos de sistemas ERP y su impacto en el desarrollo de software: abrimos una taberna en Tortuga | ProHoster","description":"\u00a1Hola! Me llamo Andrei Semenov, soy analista principal en Sportmaster. En este post quiero plantear la cuesti\u00f3n de la desnormalizaci\u00f3n de las bases de datos de sistemas ERP.","canonical_url":"https:\/\/prohoster.info\/es\/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":"es_ES","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\/es\/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\/es\/wp-json\/wp\/v2\/posts\/78198","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/comments?post=78198"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/78198\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media\/78199"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media?parent=78198"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/categories?post=78198"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/tags?post=78198"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}