{"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\/it\/blog\/administrirovanie\/denormalizacziya-baz-dannyh-erp-sistem-i-ee-vliyanie-na-razvitie-po-otkryvaem-tavernu-na-tortuge","title":{"rendered":"Denormalizzazione dei database ERP e il suo impatto sullo sviluppo software: apriamo una taverna a Tortuga","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Ciao! Mi chiamo Andrey Semenov, sono un analista senior di Sportmaster. In questo post, voglio sollevare la questione della denormalizzazione delle basi di dati nei sistemi ERP. Esamineremo le condizioni generali e un esempio specifico - diciamo che sar\u00e0 una meravigliosa taverna monopolista per pirati e marinai. In questa, i pirati e i marinai devono essere serviti in modo diverso, poich\u00e9 le loro concezioni del bello e i modelli dei consumatori differiscono notevolmente. <\/p>\n<p>Come fare affinch\u00e9 tutti siano soddisfatti? Come non impazzire progettando e mantenendo un tale sistema? Cosa fare se nella taverna iniziano a venire non solo i soliti pirati e marinai?<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/sportmaster_lab\/blog\/497550\/\"><img decoding=\"async\" alt=\"Denormalizzazione dei database ERP e il suo impatto sullo sviluppo software: apriamo una taverna a Tortuga\" src=\"\/wp-content\/uploads\/2020\/04\/bd0ccbfa3e3649aac20631e09fcb5b16.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p>Tutto sotto l'etichetta. Ma procediamo con ordine.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>1. Limitazioni e ipotesi<\/h2>\n<p>\nTutto quanto esposto si riferisce solo a basi di dati relazionali. Le conseguenze della denormalizzazione, ben documentate anche su Internet, in termini di anomalie di modifica, cancellazione e inserimento non verranno considerate. Sono esclusi i casi in cui la denormalizzazione \u00e8 pratica comune, con esempi classici: numero di serie e numero di passaporto, data e ora, ecc.<\/p>\n<p>Il post utilizza definizioni intuitive e pratiche delle normali forme, senza riferimenti a termini matematici. Cos\u00ec come possono essere applicate all'analisi dei processi aziendali reali e alla progettazione di software industriale.<\/p>\n<p>Esiste l'opinione che la progettazione di archivi dati, strumenti per la creazione di report e accordi di integrazione (che utilizzano una rappresentazione tabellare delle informazioni), si differenzia dalla progettazione di database di sistemi ERP, in quanto la facilit\u00e0 di utilizzo e l'applicazione della denormalizzazione consapevole possono avere la priorit\u00e0 sulla protezione dell'integrit\u00e0 dei dati. Condivido questa opinione, e quanto descritto di seguito si riferisce esclusivamente ai modelli di master data e dati transazionali dei sistemi ERP.<\/p>\n<p>La spiegazione delle forme normali \u00e8 fornita con un esempio comprensibile per la maggior parte dei lettori. Tuttavia, come illustrazione visiva, nei punti 4-5 \u00e8 stata utilizzata deliberatamente una \u00absituazione inventata\u00bb. Se non si fa ci\u00f2 e si prende un esempio comunemente usato, come il modello di archiviazione degli ordini nel punto 2, si rischia di spostare l'attenzione del lettore dall'analisi del processo proposto al proprio bagaglio personale e alle percezioni su come dovrebbero essere costruiti i processi e i modelli di archiviazione dei dati nei sistemi informatici. In altre parole, prendete due analisti IT qualificati; uno lavora con i servizi per i logisti che trasportano passeggeri, l'altro con i logisti che trasportano macchinari per la produzione di microchip. Chiedete loro, senza discutere in anticipo i processi aziendali automatizzabili, di creare un modello di dati per memorizzare informazioni su un viaggio ferroviario. <\/p>\n<p>C'\u00e8 una probabilit\u00e0 non nulla che nei modelli proposti si trovino non solo un insieme di attributi notevolmente diverso, ma anche insiemi di entit\u00e0 non corrispondenti, poich\u00e9 ogni analista si baser\u00e0 sui processi e sulle attivit\u00e0 a lui familiari. E in una situazione del genere, dire quale modello sia \"giusto\" \u00e8 impossibile, poich\u00e9 non esiste un criterio di valutazione.<\/p>\n<h2>2. Forme normali<\/h2>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/habrastorage.org\/webt\/mz\/vc\/ex\/mzvcexxqfzhzyybzk8zvbndmtcc.png\"><img decoding=\"async\" alt=\"Denormalizzazione dei database ERP e il suo impatto sullo sviluppo software: apriamo una taverna a Tortuga\" src=\"\/wp-content\/uploads\/2020\/04\/e2d3fc5656b59671648511b0a0e5f7b9.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p><b>La prima forma normale del DB<\/b> richiede l'atomicit\u00e0 di tutti gli attributi. <br \/>\nIn particolare, se un oggetto A ha attributi non chiave a e b, tali che c=f(a,b) e nella tabella che descrive l'oggetto A si memorizza il valore dell'attributo c, allora nel DB \u00e8 violata la prima forma normale. Ad esempio, se nella specifica dell'ordine viene indicata una quantit\u00e0 le cui unit\u00e0 di misura dipendono dal tipo di prodotto: in un caso possono essere pezzi, in un altro litri, in un terzo confezioni composte da pezzi (nel modello sopra Good_count_WR), allora nel DB \u00e8 violata l'atomicit\u00e0 degli attributi. In questo caso, per dire quale dovrebbe essere la struttura della tabella nella specifica dell'ordine, \u00e8 necessaria una descrizione mirata del processo di lavoro nel sistema informativo, e poich\u00e9 i processi possono essere diversi, possono esistere anche molte versioni \"giuste\".<\/p>\n<p><b>Secondo normale forma del DB<\/b> richiede il rispetto della prima forma e una propria tabella per ogni entit\u00e0 relativa al processo di lavoro nel sistema informatico. Se in una tabella esistono dipendenze con=f1(a) e d=f2(b) e non esiste dipendenza con=f3(b), allora la tabella viola la seconda normale forma. Nell'esempio sopra, nella tabella 'Ordine' non esiste dipendenza tra l'ordine e l'indirizzo. Cambia il nome della strada o della citt\u00e0, e non influenzerai alcun attributo sostanziale dell'ordine. <\/p>\n<p><b>Terza normale forma del DB<\/b> richiede il rispetto della seconda normale forma e l'assenza di dipendenze funzionali tra attributi di entit\u00e0 diverse. Questa regola pu\u00f2 essere formulata cos\u00ec: 'tutto ci\u00f2 che pu\u00f2 essere calcolato, deve essere calcolato'. In altre parole, se ci sono due oggetti A e B. Nella tabella che memorizza gli attributi dell'oggetto A, \u00e8 presente l'attributo C, e per l'oggetto B c'\u00e8 un attributo b, tale che esiste c=f4(b), allora la terza normale forma \u00e8 violata. Nell'esempio sottostante, l'attributo 'Numero di pezzi' (Total_count_WR) nella registrazione dell'ordine sembra chiaramente violare la terza normale forma.<\/p>\n<h2>3. Il mio approccio all'applicazione della normalizzazione<\/h2>\n<p>\n1. Solo i processi aziendali automatizzabili e mirati possono fornire analisi con criteri per identificare entit\u00e0 e attributi durante la creazione di un modello di archiviazione dati. La creazione di un modello di processo \u00e8 una condizione necessaria per la realizzazione di un modello dati normale.<\/p>\n<p>2. Raggiungere la terza forma normale in senso stretto pu\u00f2 non essere praticabile nella realt\u00e0 della creazione di sistemi ERP quando si soddisfano parte o tutte le seguenti condizioni:<\/p>\n<ul>\n<li>i processi automatizzabili subiscono raramente cambiamenti, <\/li>\n<li>i tempi per la ricerca e lo sviluppo sono ristretti, <\/li>\n<li>i requisiti di integrit\u00e0 dei dati sono relativamente bassi (errori potenziali nel software industriale non comportano la perdita di denaro o clienti per il committente del software)<\/li>\n<li>e cos\u00ec via.<\/li>\n<\/ul>\n<p>\nIn tali circostanze, i costi per l'identificazione e la descrizione del ciclo di vita di alcuni oggetti e dei loro attributi possono non essere giustificati in termini di efficienza economica.<\/p>\n<p>3. Qualsiasi conseguenza della denormalizzazione del modello dati in un sistema informativo gi\u00e0 creato pu\u00f2 essere mitigata attraverso un'attenta analisi preliminare del codice e test.<\/p>\n<p>4. La denormalizzazione \u00e8 un modo per trasferire il lavoro richiesto dalla fase di ricerca delle fonti dati e progettazione del processo aziendale alla fase di sviluppo, spostando il periodo di implementazione al periodo di evoluzione del sistema.<\/p>\n<p>5. \u00c8 utile mirare alla terza forma normale del DB se:<\/p>\n<ul>\n<li>\u00c8 difficile prevedere l'andamento dei processi aziendali automatizzati<\/li>\n<li>All'interno del team di implementazione e\/o sviluppo esiste una chiara divisione del lavoro<\/li>\n<li>I sistemi che fanno parte del contesto di integrazione si sviluppano secondo propri piani<\/li>\n<li>Incoerenze nei dati possono portare a una perdita di clienti o di denaro per l'azienda<\/li>\n<\/ul>\n<p>\n6. La progettazione del modello dati deve essere effettuata dall'analista esclusivamente in relazione ai modelli del processo aziendale target e al processo nel sistema informativo. Se la progettazione del modello dati \u00e8 eseguita dallo sviluppatore, questi dovr\u00e0 immergersi nel dominio del soggetto fino al punto da comprendere, tra l'altro, la differenza tra i valori degli attributi - condizione necessaria per l'estrazione degli attributi atomici. In questo modo assumerebbe funzioni non a lui proprie.<\/p>\n<h2>4 Esempio di compito<\/h2>\n<p>\nImmagina di avere una piccola taverna automatizzata nel porto. Il tuo segmento di mercato: marinai e pirati che approdano e hanno bisogno di riposo. Ai marinai vendi t\u00e8 al timo, mentre ai pirati proponi rum e pettini di osso per pettinare le barbe. Il servizio nella taverna \u00e8 gestito da un robot hostess e da un robot barista. Grazie all'alta qualit\u00e0 e ai prezzi competitivi, hai sopraffatto i tuoi concorrenti, cos\u00ec ogni persona che scende dalla nave si dirige verso la tua taverna, l'unica nel porto.<\/p>\n<p>Il complesso di sistemi informativi della taverna \u00e8 composto dal seguente software: <\/p>\n<ul>\n<li>Sistema di allerta precoce per il cliente, che riconosce la sua categoria in base a caratteristiche distintive<\/li>\n<li>Sistema di gestione dei robot hostess e dei robot baristi<\/li>\n<li>Sistema di gestione del magazzino e delle consegne al punto vendita<\/li>\n<li>Sistema di gestione delle relazioni con i fornitori (SRF)<\/li>\n<\/ul>\n<p>\nProcesso:<\/p>\n<p>Il sistema di allerta precoce riconosce le persone che scendono dalla nave. Se una persona \u00e8 ben rasata, la identifica come marinaio; se ha una barba, viene identificata come pirata.<\/p>\n<p>Entrando nella taverna, l'ospite sente il saluto del robot hostess in base alla sua categoria, ad esempio: \u00abHo-ho-ho, caro pirata, prenda posto al tavolo n\u00b0\u2026\u00bb<\/p>\n<p>L'ospite si dirige verso il tavolo indicato, dove il robot barista ha gi\u00e0 preparato i prodotti in base alla categoria. Il robot barista comunica al sistema di magazzino che la prossima consegna deve essere incrementata, e il sistema informatico di magazzino genera una richiesta di acquisto basata sulle giacenze in magazzino.<\/p>\n<p>Lasciate che il sistema di allerta precoce sia stato sviluppato dal vostro IT interno, mentre il programma di gestione dei robot da bar \u00e8 stato creato da un fornitore esterno specificamente per il vostro business. I sistemi per la gestione del magazzino e delle relazioni con i fornitori sono soluzioni box personalizzate del mercato.<\/p>\n<h2>5. Esempi di denormalizzazione e il suo impatto sullo sviluppo software<\/h2>\n<p>\nNella progettazione del processo aziendale, gli esperti del settore intervistati hanno affermato all'unisono che in tutto il mondo i pirati bevono rum e si pettinano la barba con pettini di osso, mentre i marinai bevono t\u00e8 al timo e sono sempre ben rasati. <\/p>\n<p>Appare un elenco dei tipi di clienti con due valori: 1 - pirati, 2 - marinai, comune a tutto il contesto informativo dell'azienda. <\/p>\n<p>Il sistema di notifica del cliente salva immediatamente il risultato dell'elaborazione dell'immagine come identificatore (ID) del cliente riconosciuto e il suo tipo: marinaio o pirata. <\/p>\n<p>ID dell'oggetto riconosciuto<br \/>\nCategoria del cliente<\/p>\n<p>100500<br \/>\nPirata<\/p>\n<p>100501<br \/>\nPirata<\/p>\n<p>100502<br \/>\nMarinaio<\/p>\n<p>Ribadiamo che<\/p>\n<p>1. I nostri marinai sono in realt\u00e0 persone rasate<br \/>\n2. I nostri pirati sono in realt\u00e0 persone con la barba<\/p>\n<p>Quali problemi devono essere risolti affinch\u00e9 la nostra struttura tenda alla terza forma normale:<\/p>\n<ul>\n<li>violazione dell'atomicit\u00e0 dell'attributo - Categoria del cliente<\/li>\n<li>mescolanza del fatto analizzato e della conclusione in un'unica tabella <\/li>\n<li>dipendenza funzionale fissa tra gli attributi di entit\u00e0 diverse. <\/li>\n<\/ul>\n<p>\nIn forma normalizzata avremmo ottenuto due tabelle: <\/p>\n<ul>\n<li>risultato del riconoscimento sotto forma di un insieme di caratteristiche stabilite,<\/li>\n<\/ul>\n<p><\/p>\n<p>ID dell'oggetto riconosciuto<br \/>\nPelo sul viso<\/p>\n<p>100500<br \/>\nS\u00ec<\/p>\n<p>100501<br \/>\nS\u00ec<\/p>\n<p>100502<br \/>\nNo<\/p>\n<p><\/p>\n<ul>\n<li>risultato della definizione del tipo di cliente come applicazione della logica incorporata nel sistema per l'interpretazione delle caratteristiche stabilite<\/li>\n<\/ul>\n<p>ID dell'oggetto riconosciuto<br \/>\nID di identificazione<br \/>\nCategoria 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 \/>\nMarinaio<\/p>\n<p>Come pu\u00f2 un'organizzazione di archiviazione dei dati normalizzata facilitare lo sviluppo di un sistema informativo complesso? Immagina che all'improvviso ti arrivino nuovi clienti. Facciamo che siano dei pirati giapponesi che, pur non avendo barba, portano un pappagallo sulla spalla, e pirati ecologisti, che potrai riconoscere dal profilo blu di Greta sulla loro sinistra. <\/p>\n<p>I pirati ecologisti, naturalmente, non possono utilizzare pettini di osso e richiedono un'alternativa realizzata in plastica marina riciclata.<\/p>\n<p>\u00c8 necessario riprocessare gli algoritmi delle applicazioni in base alle nuove esigenze. Se le regole di normalizzazione fossero state seguite, avresti dovuto solo integrare alcune nuove entrate in parte dei sistemi e creare nuovi rami solo in quei casi e nei sistemi informativi dove \u00e8 rilevante la peluria facciale. Tuttavia, poich\u00e9 le regole non sono state rispettate, dovrai analizzare l'intero codice in tutto il contesto in cui vengono utilizzati i valori del registro dei tipi di clienti e accertarti che in un caso l'algoritmo debba considerare l'attivit\u00e0 professionale del cliente, mentre nell'altro le caratteristiche fisiche. <\/p>\n<p>In un formato che <b><i>si propone di <\/i><\/b>normalizzato, avremmo ottenuto due tabelle con dati operativi e due elenchi:<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habrastorage.org\/webt\/qn\/pq\/g4\/qnpqg4idbhbsqejhnryzfuilhhy.png\"><img decoding=\"async\" alt=\"Denormalizzazione dei database ERP e il suo impatto sullo sviluppo software: apriamo una taverna a Tortuga\" src=\"\/wp-content\/uploads\/2020\/04\/eea87da839171e8a3a42db0618972124.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<ul>\n<li>risultato del riconoscimento sotto forma di un insieme di caratteristiche stabilite,<\/li>\n<\/ul>\n<p><\/p>\n<p>ID dell'oggetto riconosciuto<br \/>\nGreta sul petto sinistro<br \/>\nUccello sulla spalla<br \/>\nPelo sul viso<\/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>risultato della determinazione del tipo di cliente (che sia una visualizzazione personalizzata, in cui vengano mostrati i descrittori degli elenchi)<\/li>\n<\/ul>\n<p>\nSignifica l'eventuale denormalizzazione che i sistemi non possano essere adattati a nuove condizioni? Certamente no. Se immaginiamo che tutti i sistemi informativi siano stati creati da un unico team con zero turnover, lo sviluppo sia ben documentato e le informazioni all'interno del team vengano trasferite senza perdite, le modifiche necessarie possono essere realizzate con sforzi trascurabili. Ma se torniamo alle condizioni iniziali del compito, solo per stampare i verbali delle discussioni congiunte si userebbero 1,5 tastiere e altri 0,5 per la documentazione delle procedure di acquisto.<\/p>\n<p>Nell'esempio sopra, tutte e tre le forme normali sono violate, proviamo a violarle singolarmente.<\/p>\n<p><b>Violazione della prima forma normale:<\/b><\/p>\n<p>Supponiamo che le merci nel tuo magazzino vengano consegnate dai magazzini dei fornitori con un furgone da 1,5 tonnellate di propriet\u00e0 della tua taverna. Le dimensioni dei tuoi ordini sono talmente ridotte rispetto ai volumi dei fornitori, che vengono sempre eseguiti uno a uno senza attesa per la produzione. Serve un registro separato per veicoli, tipi di veicoli e per distinguere tra piano e fattibilit\u00e0 nei tuoi ordini inviati ai fornitori?<\/p>\n<p>Immagina quanti \u00abcollegamenti inutili\u00bb dovranno scrivere i tuoi programmatori se si utilizza il modello sottostante per lo sviluppo del programma.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habrastorage.org\/webt\/bz\/js\/gf\/bzjsgfs0fephwjwqx8xdvunrgva.png\"><img decoding=\"async\" alt=\"Denormalizzazione dei database ERP e il suo impatto sullo sviluppo software: apriamo una taverna a Tortuga\" src=\"\/wp-content\/uploads\/2020\/04\/7309871d1ecc5c1ceb4f077ea4afebff.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p>Supponiamo che abbiamo deciso che la struttura proposta \u00e8 eccessivamente complessa; nel nostro caso \u00e8 superfluo distinguere tra piano e realizzazione nel registro dell'ordine. Le specifiche dell'ordine vengono aggiornate in base ai risultati dell\u2019accettazione delle merci ricevute, mentre le rare discrepanze e le merci di qualit\u00e0 non conforme vengono gestite al di fuori del sistema informatico.<br \/>\nE un giorno vedi l'intera sala della taverna riempita di pirati arrabbiati e trasandati. Cosa \u00e8 successo? <\/p>\n<p>Si \u00e8 scoperto che con la crescita della tua azienda cresceva anche il consumo. Un tempo si era presa la decisione gestionale che, se il furgone risultava sovraccarico in termini di volume e\/o peso, cosa piuttosto rara, il fornitore dava priorit\u00e0 al caricamento delle bevande. <\/p>\n<p>I prodotti non consegnati venivano inseriti nel successivo ordine e partivano con un nuovo viaggio, e la presenza di una scorta minima in magazzino presso la taverna permetteva di non notare i casi di sottofornitura.<\/p>\n<p>Nel porto ha chiuso l'ultimo concorrente, e il caso di sovraccarico del furgone, ignorato a causa della priorit\u00e0 data a presupposti sulla sufficienza della scorta minima e sul carico parziale del veicolo, \u00e8 diventato una pratica comune. Il sistema creato funzioner\u00e0 perfettamente in conformit\u00e0 agli algoritmi in esso integrati e non offrir\u00e0 alcuna possibilit\u00e0 di tracciare il mancato rispetto sistematico degli ordini pianificati. Solo una cattiva reputazione e clienti insoddisfatti potranno individuare il problema.<\/p>\n<p>\u00c8 probabile che il lettore attento abbia notato che la quantit\u00e0 ordinata nella specifica dell'ordine (T_ORDER_SPEC) nelle sezioni 2 e 5 pu\u00f2 corrispondere o meno al requisito della prima forma normale. Tutto dipende dal fatto che, con l'assortimento di prodotti scelto, possano finire nello stesso campo diverse unit\u00e0 di misura sostanzialmente distinte. <\/p>\n<p><b>Violazione della seconda forma normale:<\/b><\/p>\n<p>Con l'aumento delle vostre esigenze, acquistate un paio di veicoli di dimensioni diverse. Nel contesto esposto sopra, \u00e8 stato ritenuto eccessivo creare un archivio dei veicoli, di conseguenza tutti gli algoritmi di gestione dei dati che servono le esigenze di consegna e magazzino considerano il trasporto delle merci dal fornitore al magazzino come un viaggio esclusivo di un furgone da 1,5 tonnellate. Pertanto, anche con l'acquisto di nuovi veicoli, si crea comunque un archivio dei veicoli, ma nella fase di modifica sar\u00e0 necessario analizzare tutto il codice che si riferisce al trasporto delle merci per capire se in ogni singolo punto ci si riferisce alle caratteristiche del veicolo da cui \u00e8 iniziata l'attivit\u00e0.<\/p>\n<p><b>Violazione della terza forma normale:<\/b><\/p>\n<p>A un certo punto, inizi a creare un programma di fidelizzazione e viene registrato un cliente abituale. Perch\u00e9, ad esempio, perdere tempo a creare rappresentazioni materiali che memorizzano dati aggregati sulle vendite per un singolo cliente da utilizzare nei report e trasmettere nei sistemi analitici, se all'inizio del programma di fidelizzazione tutto ci\u00f2 che interessa il cliente pu\u00f2 essere memorizzato direttamente nel profilo del cliente stesso? E, in effetti, a prima vista, non ha senso. Ma ogni volta che la tua azienda attiver\u00e0, ad esempio, nuovi canali di vendita, tra i tuoi analisti dovrebbe esserci qualcuno che ricorda l'esistenza di questo attributo aggregato. <\/p>\n<p>Progettando ogni nuovo processo, poniamo, le vendite online, le vendite attraverso distributori collegati al sistema di fidelizzazione comune, qualcuno deve tenere a mente che tutti i nuovi processi devono garantire l'integrit\u00e0 dei dati a livello di codice. Per un DB industriale con migliaia di tabelle, questo sembra un compito praticamente irrealizzabile.<\/p>\n<p>Un sviluppatore esperto sa certamente come mitigare tutti i problemi sopra menzionati, ma, a mio avviso, il compito di un analista esperto \u00e8 prevenirli.<\/p>\n<p>Vorrei esprimere la mia gratitudine per il prezioso feedback fornito al principale sviluppatore Evgeny Yarukhin durante la preparazione della pubblicazione.<\/p>\n<h2>Letteratura<\/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. Database. Progettazione, implementazione e manutenzione. Teoria e pratica<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 4.9.10 - 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. \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\" \/>\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\/it\/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) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"it_IT\" \/>\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. \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\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/it\/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\udd47Denormalizzazione dei database dei sistemi ERP e il suo impatto sullo sviluppo del software: apriamo una taverna a Tortuga | ProHoster","description":"Ciao! Mi chiamo Andrey Semyonov, sono un analista senior in Sportmaster. In questo post voglio affrontare il tema della denormalizzazione dei database dei sistemi ERP. Esamineremo le condizioni generali, oltre a un esempio specifico: diciamo, sar\u00e0 un'eccellente taverna monopolista per pirati e marinai. Dove pirati e marinai devono essere serviti in modo diverso, poich\u00e9 le loro percezioni del bello e i modelli di consumo sono","canonical_url":"https:\/\/prohoster.info\/it\/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":"it_IT","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. \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","og:url":"https:\/\/prohoster.info\/it\/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"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/78198","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/comments?post=78198"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/78198\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media\/78199"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=78198"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=78198"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=78198"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}