{"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\/da\/blog\/administrirovanie\/denormalizacziya-baz-dannyh-erp-sistem-i-ee-vliyanie-na-razvitie-po-otkryvaem-tavernu-na-tortuge","title":{"rendered":"Denormalisering af ERP-system databaser og dens indflydelse p\u00e5 softwareudvikling: \u00e5bner en kro p\u00e5 Tortuga","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Hej! Jeg hedder Andrey Semenov, jeg er senioranalytiker hos Sportmaster. I dette indl\u00e6g vil jeg tage sp\u00f8rgsm\u00e5let om denormalisering af databaser i ERP-systemer op. Vi vil se p\u00e5 de generelle betingelser samt et konkret eksempel - lad os sige, det bliver en fantastisk monopoltaverna for pirater og s\u00f8m\u00e6nd. I hvilken pirater og s\u00f8m\u00e6nd skal betjenes p\u00e5 forskellige m\u00e5der, da deres opfattelser af det smukke og forbrugerm\u00f8nstre er meget forskellige. <\/p>\n<p>Hvordan kan man sikre, at alle er tilfredse? Hvordan undg\u00e5r man at miste forstanden, mens man designer og vedligeholder et s\u00e5dant system? Hvad skal man g\u00f8re, hvis der begynder at komme andre end de s\u00e6dvanlige pirater og s\u00f8m\u00e6nd til tavernen?<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/sportmaster_lab\/blog\/497550\/\"><img decoding=\"async\" alt=\"Denormalisering af ERP-system databaser og dens indflydelse p\u00e5 softwareudvikling: \u00e5bner en kro p\u00e5 Tortuga\" src=\"\/wp-content\/uploads\/2020\/04\/bd0ccbfa3e3649aac20631e09fcb5b16.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p>Alt er under katagori. Men lad os tage det i r\u00e6kkef\u00f8lge.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>1. Begr\u00e6nsninger og foruds\u00e6tninger<\/h2>\n<p>\nAlt det, der er n\u00e6vnt, g\u00e6lder kun for relationelle databaser. De godt beskrevne, herunder p\u00e5 internettet, konsekvenser af denormalisering i form af modifikations-, sletnings- og inds\u00e6tningsanomalier overvejes ikke. Uden for publikationen forbliver situationer, hvor denormalisering er almindelig praksis, med klassiske eksempler som serienummer og udl\u00f8bsdato, dato og tid osv.<\/p>\n<p>Indl\u00e6gget bruger intuitive og praktisk anvendelige definitioner af normale former uden henvisninger til matematiske termer. I den form, som de kan anvendes til unders\u00f8gelse af reelle forretningsprocesser (BP) og design af industriel software.<\/p>\n<p>Der er en opfattelse af, at design af datalagre, v\u00e6rkt\u00f8jer til rapportering og integrationsaftaler (hvor tabelpr\u00e6sentation af information anvendes) adskiller sig fra design af ERP-databaser ved, at brugervenlighed og anvendelse af bevidst denormalisering kan have h\u00f8jere prioritet end at beskytte dataintegriteten. Jeg deler denne opfattelse, og det, der er beskrevet nedenfor, g\u00e6lder udelukkende for modeller af masterdata og transaktionsdata i ERP-systemer.<\/p>\n<p>Forklaringen af normalformer er givet med et eksempel, der er let forst\u00e5eligt for de fleste l\u00e6sere. Som en illustrativ demonstration er der imidlertid bevidst brugt en helt \"opfundet\" opgave i punkterne 4-5. Hvis dette ikke g\u00f8res, og man tager et klassisk eksempel, som for eksempel den samme model til opbevaring af en ordre fra punkt 2, kan man befinde sig i en situation, hvor l\u00e6serens opm\u00e6rksomhed bliver afledt fra den foresl\u00e5ede nedbrydning af processen i modellen til deres personlige erfaring og opfattelse af, hvordan processer og datalagringsmodeller i informationssystemer skal konstrueres. Med andre ord, tag to kvalificerede IT-analytikere, lad den ene yde service til logistikere, der transporterer passagerer, mens den anden g\u00f8r det samme for logistikere, der transporterer maskiner til produktion af mikrochips. Bed dem, uden at diskutere de automatiserbare forretningsprocesser p\u00e5 forh\u00e5nd, om at udarbejde en datamodel til opbevaring af information om en jernbanerejse. <\/p>\n<p>Der er en ikke-nul sandsynlighed for, at du i de foresl\u00e5ede modeller vil finde ikke kun markant forskellige s\u00e6t af attributter, men ogs\u00e5 uoverensstemmende s\u00e6t enheder, fordi hver analytiker vil basere sig p\u00e5 de processer og opgaver, de er vant til. Og at sige, hvilken model der er \"korrekt\" i en s\u00e5dan situation, er umuligt, fordi der ikke findes noget evalueringskriterium.<\/p>\n<h2>2. Normalformer<\/h2>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/habrastorage.org\/webt\/mz\/vc\/ex\/mzvcexxqfzhzyybzk8zvbndmtcc.png\"><img decoding=\"async\" alt=\"Denormalisering af ERP-system databaser og dens indflydelse p\u00e5 softwareudvikling: \u00e5bner en kro p\u00e5 Tortuga\" src=\"\/wp-content\/uploads\/2020\/04\/e2d3fc5656b59671648511b0a0e5f7b9.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p><b>Den f\u00f8rste normale form for databasen<\/b> kr\u00e6ver atomaritet for alle attributter. <br \/>\nSpecifikt, hvis objekt A har ikke-n\u00f8gleattributter a og b, s\u00e5dan at c=f(a,b) og i tabellen, der beskriver objekt A, opbevarer du v\u00e6rdien af attributten c, s\u00e5 er den f\u00f8rste normale form overtr\u00e5dt i databasen. For eksempel, hvis en ordrespecifikation angiver m\u00e6ngden, hvis m\u00e5leenheder afh\u00e6nger af produkttypen: i \u00e9t tilf\u00e6lde kan det v\u00e6re stykker, i et andet liter, i et tredje pakker, der best\u00e5r af stykker (i den ovenst\u00e5ende model Good_count_WR), s\u00e5 er atomariteten af attributter overtr\u00e5dt i databasen. I dette tilf\u00e6lde, for at sige, hvordan tabellerne i ordrespecifikationen skal v\u00e6re, er det n\u00f8dvendigt med en m\u00e5lspecifik beskrivelse af arbejdsgangen i informationssystemet, og da processerne kan v\u00e6re forskellige, kan der v\u00e6re mange \"korrekte\" versioner.<\/p>\n<p><b>Den anden normale form for databasen<\/b> kr\u00e6ver overholdelse af f\u00f8rste normalform og en egen tabel for hver entitet relateret til arbejdet i informationssystemet. Hvis der i \u00e9n tabel findes afh\u00e6ngigheder med=f1(a) og d=f2(b), og der ikke findes en afh\u00e6ngighed med=f3(b), s\u00e5 er den anden normalform brudt i tabellen. I eksemplet ovenfor findes der ikke nogen afh\u00e6ngighed mellem ordren og adressen i tabellen \"Bestilling\". \u00c6ndrer du gadenavn eller by, vil du ikke f\u00e5 nogen indflydelse p\u00e5 v\u00e6sentlige attributter for bestillingen. <\/p>\n<p><b>Tredje normalform for databaser<\/b> kr\u00e6ver overholdelse af anden normalform og frav\u00e6r af funktionelle afh\u00e6ngigheder mellem attributter af forskellige enheder. Denne regel kan formuleres s\u00e5dan: \"alt, hvad der kan beregnes, skal beregnes\". Med andre ord, hvis der findes to objekter A og B. I tabellen, der opbevarer attributterne for objekt A, vises attribut C, som for objekt B har en attribut b, s\u00e5dan at der findes c=f4(b), s\u00e5 er den tredje normalform brudt. I nedenst\u00e5ende eksempel \u00f8nsker attribut \"Antal stk\" (Total_count_WR) i ordren \u00e5benlyst at kr\u00e6nke den tredje normalform.<\/p>\n<h2>3. Min tilgang til anvendelse af normalisering<\/h2>\n<p>\n1. Kun en m\u00e5lrettet automatiserbar forretningsproces kan give analytikeren kriterier for identifikation af enheder og attributter ved oprettelse af en datamodel. Oprettelse af procesmodellen er en foruds\u00e6tning for at skabe en normal datamodel.<\/p>\n<p>2. At opn\u00e5 tredje normalform i strengt forstand kan v\u00e6re urealistisk i praksis ved oprettelse af ERP-systemer under udf\u00f8relsen af en del eller alle f\u00f8lgende betingelser:<\/p>\n<ul>\n<li>automatiserede processer sj\u00e6ldent er udsat for \u00e6ndringer, <\/li>\n<li>tidsrammerne for forskning og udvikling er stramme, <\/li>\n<li>kravene til dataintegritet er relativt lave (potentielle fejl i industriel software f\u00f8rer ikke til tab af penge eller kunder for softwarekunden)<\/li>\n<li>osv.<\/li>\n<\/ul>\n<p>\nUnder de beskrevne betingelser kan udgifterne til identifikation og beskrivelse af livscyklussen for nogle objekter og deres attributter ikke v\u00e6re \u00f8konomisk b\u00e6redygtige.<\/p>\n<p>3. Enhver konsekvens af denormalisering af datamodellen i allerede eksisterende informationssystemer kan begr\u00e6nses ved grundig forunders\u00f8gelse af koden og testning.<\/p>\n<p>4. Denormalisering er en metode til at flytte arbejdstimer fra dataindsamlings- og forretningsprocesdesignfasen til udviklingsfasen, fra implementeringsperioden til systemudviklingsperioden.<\/p>\n<p>5. Det er hensigtsm\u00e6ssigt at str\u00e6be efter den tredje normale form i databasen, hvis:<\/p>\n<ul>\n<li>Retningen for \u00e6ndringen af de automatiserede forretningsprocesser er sv\u00e6r at forudsige.<\/li>\n<li>Inden for implementerings- og\/eller udviklingsteamet er der en svag opdeling af arbejdet.<\/li>\n<li>Systemerne i integrationsrammen udvikler sig efter deres egne planer.<\/li>\n<li>Uoverensstemmelser i data kan f\u00f8re til tab af kunder eller penge for virksomheden.<\/li>\n<\/ul>\n<p>\n6. Data modellen b\u00f8r kun designes af analytikeren i forbindelse med modellerne for den m\u00e5lrettede forretningsproces og processen i informationssystemet. Hvis udvikleren besk\u00e6ftiger sig med design af datamodellen, skal han dykke ned i emnet i en s\u00e5dan grad, at han specifikt forst\u00e5r forskellen mellem attributv\u00e6rdierne \u2013 en n\u00f8dvendighed for at udpege atom\u00e6re attributter. Dermed tager han ansvar for ikke-tilknyttede funktioner.<\/p>\n<h2>4 Opgave til illustration<\/h2>\n<p>\nLad os antage, at du har en lille robotiseret taverna i havnen. Dit markedsegment: s\u00f8m\u00e6nd og pirater, der kommer ind i havnen og har brug for hvile. Til s\u00f8m\u00e6ndene s\u00e6lger du te med timian, og til piraterne rom og knogler til at rede sk\u00e6gget med. Servicen i tavernaen udf\u00f8res af en robot-hostess og en robot-bartender. Takket v\u00e6re h\u00f8j kvalitet og lave priser har du udkonkurreret alle konkurrenter, s\u00e5 alle, der kommer fra skibet, bes\u00f8ger din taverna, som er den eneste i havnen.<\/p>\n<p>Samlingen af informationssystemer i tavernaen best\u00e5r af f\u00f8lgende software: <\/p>\n<ul>\n<li>System til tidlig kundevarsling, der genkender kundens kategori ud fra karakteristiske tr\u00e6k.<\/li>\n<li>System til styring af robot-hostess og robot-bartendere.<\/li>\n<li>System til lagerstyring og levering til salgsstedet.<\/li>\n<li>System til styring af forholdet til leverand\u00f8rerne (SRL).<\/li>\n<\/ul>\n<p>\nProcessen:<\/p>\n<p>Systemet til tidlig varsling genkender personer, der g\u00e5r af skibet. Hvis en person er glatbarberet, identificerer den ham som s\u00f8mand, hvis en person har sk\u00e6g, identificeres han som pirat.<\/p>\n<p>N\u00e5r g\u00e6sten tr\u00e6der ind i tavernaen, h\u00f8rer de en hilsen fra robotv\u00e6rten i henhold til deres kategori, for eksempel: \"Ho-ho-ho, \u00e6rede pirat, g\u00e5 hen til bord nr. \u2026\"<\/p>\n<p>G\u00e6sten g\u00e5r hen til den angivne bar, hvor robot-bartenderen allerede har forberedt varer til ham i henhold til kategorien. Robot-bartenderen sender information til lagersystemet om, at den n\u00e6ste levering skal \u00f8ges, lagerets it-system danner en indk\u00f8bsanmodning baseret p\u00e5 lagerbeholdningen.<\/p>\n<p>Lad os sige, at advarselssystemet blev udviklet af jeres interne it, programmet til styring af barrobotter blev skabt af en ekstern leverand\u00f8r specifikt til jeres virksomhed. Og systemerne til h\u00e5ndtering af lager og leverand\u00f8rrelationer er tilpassede standardl\u00f8sninger fra markedet.<\/p>\n<h2>5. Eksempler p\u00e5 denormalisering og dens indflydelse p\u00e5 softwareudvikling<\/h2>\n<p>\nVed design af forretningsprocessen sagde de adspurgte eksperter inden for emnet samstemmende, at pirater i hele verden drikker rom og b\u00f8rster deres sk\u00e6g med knogleskaber, mens s\u00f8m\u00e6nd drikker te med timian og altid er glatbarberede. <\/p>\n<p>En kundetypevejledning fremkommer med to v\u00e6rdier: 1- pirater, 2 \u2014 s\u00f8m\u00e6nd, f\u00e6lles for hele virksomhedens informationskontur. <\/p>\n<p>Kundens advarselssystem gemmer straks resultatet af billedbehandlingen som et id (ID) for den genkendte kunde og hans type: s\u00f8mand eller pirat. <\/p>\n<p>ID for den genkendte enhed<br \/>\nKundekategori<\/p>\n<p>100500<br \/>\nPirat<\/p>\n<p>100501<br \/>\nPirat<\/p>\n<p>100502<br \/>\nS\u00f8mand<\/p>\n<p>Lad os endnu en gang bem\u00e6rke, at<\/p>\n<p>1. V\u00e5re s\u00f8m\u00e6nd er faktisk glatte mennesker<br \/>\n2. V\u00e5re pirater er faktisk sk\u00e6ggede mennesker<\/p>\n<p>Hvilke problemer skal l\u00f8ses i dette tilf\u00e6lde, for at vores struktur str\u00e6ber mod tredjedel normalform:<\/p>\n<ul>\n<li>brud p\u00e5 attributternes atomaritet \u2014 Kundekategori<\/li>\n<li>sammenblanding af den analyserede fakta og konklusion i \u00e9n tabel <\/li>\n<li>fastlagt funktionel afh\u00e6ngighed mellem attributter af forskellige enheder. <\/li>\n<\/ul>\n<p>\nI normaliseret form ville vi have f\u00e5et to tabeller: <\/p>\n<ul>\n<li>genkendelsesresultatet i form af et s\u00e6t etablerede funktioner,<\/li>\n<\/ul>\n<p><\/p>\n<p>ID for den genkendte enhed<br \/>\nAnsigtsh\u00e5r<\/p>\n<p>100500<br \/>\nJa<\/p>\n<p>100501<br \/>\nJa<\/p>\n<p>100502<br \/>\nNej<\/p>\n<p><\/p>\n<ul>\n<li>resultatet af identifikation af kundetypen som anvendelse af den indlagte logik i it-systemet til fortolkning af de etablerede funktioner<\/li>\n<\/ul>\n<p>ID for den genkendte enhed<br \/>\nID for identificering<br \/>\nKundekategori<\/p>\n<p>100500<br \/>\n100001<br \/>\nPirat<\/p>\n<p>100501<br \/>\n100002<br \/>\nPirat<\/p>\n<p>100502<br \/>\n100003<br \/>\nS\u00f8mand<\/p>\n<p>Hvordan kan en normaliseret dataopbevaringsorganisation lette udviklingen af informationssystemkomplekser? Antag, at du pludselig f\u00e5r nye kunder. Lad os sige, at det er japanske pirater, som m\u00e5ske ikke har sk\u00e6g, men som g\u00e5r rundt med en papeg\u00f8je p\u00e5 skulderen, og milj\u00f8pirater; du genkender dem let p\u00e5 Greta-profilen, der er tatoveret p\u00e5 deres venstre bryst. <\/p>\n<p>Milj\u00f8pirater kan naturligvis ikke bruge knoglekamme og kr\u00e6ver et alternativ lavet af genanvendt havplastik.<\/p>\n<p>Du skal justere programalgoritmerne i henhold til de nye foruds\u00e6tninger. Hvis normaliseringsreglerne var blevet overholdt, ville du kun skulle supplere nogle systemer med input for visse procesgrene og skabe nye grene kun for de tilf\u00e6lde og i de informationssystemer, hvor ansigtsh\u00e5r har betydning. Men da reglerne ikke blev overholdt, m\u00e5 du analysere al koden i hele omfanget, hvor v\u00e6rdier fra kundetyperne anvendes og entydigt fastsl\u00e5, at i \u00e9t tilf\u00e6lde skal algoritmen tage hensyn til kundens professionelle aktivitet, mens den i et andet tilf\u00e6lde skal overveje fysiske egenskaber. <\/p>\n<p>I den form, der <b><i>str\u00e6ber <\/i><\/b>mod normalisering, ville vi have f\u00e5et to tabeller med operationelle data og to registre:<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habrastorage.org\/webt\/qn\/pq\/g4\/qnpqg4idbhbsqejhnryzfuilhhy.png\"><img decoding=\"async\" alt=\"Denormalisering af ERP-system databaser og dens indflydelse p\u00e5 softwareudvikling: \u00e5bner en kro p\u00e5 Tortuga\" src=\"\/wp-content\/uploads\/2020\/04\/eea87da839171e8a3a42db0618972124.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<ul>\n<li>genkendelsesresultatet i form af et s\u00e6t etablerede funktioner,<\/li>\n<\/ul>\n<p><\/p>\n<p>ID for den genkendte enhed<br \/>\nGreta p\u00e5 venstre bryst<br \/>\nFuglen p\u00e5 skulderen<br \/>\nAnsigtsh\u00e5r<\/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>resultatet af bestemmelsen af kundetypen (lad os sige, at dette er en brugerdefineret visning, der viser beskrivelserne fra registrene)<\/li>\n<\/ul>\n<p>\nBetyder den opdagede denormalisering, at systemerne ikke kan tilpasses de nye forhold? Selvf\u00f8lgelig ikke. Hvis vi antager, at alle informationssystemer blev skabt af et team med nul medarbejderoms\u00e6tning, at udviklingen er godt dokumenteret, og at informationen overf\u00f8res uden tab i teamet, kunne de n\u00f8dvendige \u00e6ndringer foretages med forsvindende sm\u00e5 ressourcer. Men hvis vi vender tilbage til de oprindelige opgaveforhold, ville det alene at udskrive protokoller for f\u00e6lles dr\u00f8ftelser kr\u00e6ve 1,5 tastaturer og yderligere 0,5 til at h\u00e5ndtere indk\u00f8bsprocedurerne.<\/p>\n<p>I det ovenst\u00e5ende eksempel er alle tre normale former blevet overtr\u00e5dt, lad os fors\u00f8ge at overtr\u00e6de dem hver for sig.<\/p>\n<p><b>Overtr\u00e6delse af den f\u00f8rste normale form:<\/b><\/p>\n<p>Antag, at varer til dit lager bliver leveret fra leverand\u00f8rernes lagre ved at hente dem med en 1,5 tons varevogn, som tilh\u00f8rer dit v\u00e6rtshus. St\u00f8rrelsen af dine ordrer er s\u00e5 lille i forhold til leverand\u00f8rernes oms\u00e6tning, at de altid bliver udf\u00f8rt helt pr\u00e6cist uden ventetid p\u00e5 produktion. Er der behov for separate tabeller for transportmidler, typer af transportmidler, og er det n\u00f8dvendigt at adskille plan og faktiske ordrer sendt til leverand\u00f8rerne i denne forretningsmodel?<\/p>\n<p>Forestil dig blot, hvor mange \"overfl\u00f8dige\" forbindelser dine programm\u00f8rer vil v\u00e6re n\u00f8dt til at skrive, hvis programmet skal udvikles ved hj\u00e6lp af modellen herunder.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habrastorage.org\/webt\/bz\/js\/gf\/bzjsgfs0fephwjwqx8xdvunrgva.png\"><img decoding=\"async\" alt=\"Denormalisering af ERP-system databaser og dens indflydelse p\u00e5 softwareudvikling: \u00e5bner en kro p\u00e5 Tortuga\" src=\"\/wp-content\/uploads\/2020\/04\/7309871d1ecc5c1ceb4f077ea4afebff.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p>Lad os antage, at vi har besluttet, at den foresl\u00e5ede struktur er for komplex til vores tilf\u00e6lde. At adskille plan og faktum i ordre registrering er overfl\u00f8dig information, og den udformede ordre-specifikation bliver overskrevet baseret p\u00e5 resultaterne af modtagelsen af det ankomne gods; sj\u00e6ldne ombytningsfejl og ankomst af varer af utilfredsstillende kvalitet bliver h\u00e5ndteret uden for informationssystemet.<br \/>\nOg en dag ser du, hvordan hele v\u00e6relset i v\u00e6rtshuset er fyldt med ophidsede og usk\u00e5rede pirater. Hvad er der sket? <\/p>\n<p>Det viste sig, at i takt med at din virksomhed voksede, voksede forbruget ogs\u00e5. Engang blev der truffet en ledelsesm\u00e6ssig beslutning om, at hvis varevognen blev overbelastet i henhold til volumen og\/eller v\u00e6gt \u2014 hvilket sj\u00e6ldent skete \u2014 prioriterede leverand\u00f8ren lastningen til fordel for drikkevarer. <\/p>\n<p>Underleverede varer gik med i den n\u00e6ste ordre og blev sendt afsted med det nye flyvning, mens tilstedev\u00e6relsen af en minimumsbeholdning p\u00e5 lageret ved v\u00e6rtshuset gjorde, at man ikke bem\u00e6rkede de forsvundne tilf\u00e6lde.<\/p>\n<p>I havnen lukkede den sidste konkurrent, og det forsvundne tilf\u00e6lde af overbelastning af varevognen, der blev overset ved prioriteringen baseret p\u00e5 antagelsen om tilstr\u00e6kkelig minimumsbeholdning og periodisk underbelastning af transportmidlet, blev almindelig praksis. Det skabte system vil fungere perfekt i overensstemmelse med de indbyggede algoritmer og vil v\u00e6re helt ude af stand til at spore systematisk undladelse af planlagte ordrer. Kun en \u00f8delagt rygte og utilfredse kunder vil kunne opdage problemet.<\/p>\n<p>Den opm\u00e6rksomme l\u00e6ser har sikkert bem\u00e6rket, at det bestilte antal i bestillingsspecifikationen (T_ORDER_SPEC) i sektion 2 og i sektion 5 kan opfylde og m\u00e5ske ikke opfylde kravet til den f\u00f8rste normale form. Det afh\u00e6nger alt sammen af, om forskellige m\u00e5leenheder kan falde ind i det samme felt for det valgte sortiment af varer. <\/p>\n<p><b>Overtr\u00e6delse af den anden normale form:<\/b><\/p>\n<p>I takt med at dine behov vokser, anskaffer du endnu et par transportmidler i forskellige st\u00f8rrelser. I den ovenst\u00e5ende kontekst blev det anset for overfl\u00f8digt at oprette en transportmidelsregister, hvilket resulterede i, at alle algoritmer, der arbejder med data og betjener behovene til levering og lager, opfatter transporten af gods fra leverand\u00f8ren til lageret, som en rute udelukkende for en 1,5 tons Gazelle. S\u00e5 sammen med k\u00f8bet af nye transportmidler opretter du stadig et transportmidelsregister, men under implementeringen skal du analysere al den kode, der henviser til transport af gods, for at finde ud af, om der p\u00e5 hvert specifikt sted henvises til egenskaberne for det k\u00f8ret\u00f8j, som virksomheden startede med.<\/p>\n<p><b>Overtr\u00e6delse af den tredje normale form:<\/b><\/p>\n<p>P\u00e5 et tidspunkt begynder du at oprette et loyalitetsprogram, og der opst\u00e5r en optegnelse for en fast kunde. Hvorfor skulle man for eksempel bruge tid p\u00e5 at oprette materielle repr\u00e6sentationer, der gemmer aggregerede data om salget til en enkelt kunde til brug i rapportering og overf\u00f8rsel til analytiske systemer, hvis alt, hvad kunden interesserer sig for p\u00e5 starttrinnet for loyalitetsprogrammet, kan placeres i selve kundens optegnelse? Og der er faktisk ikke nogen mening i det ved f\u00f8rste \u00f8jekast. Men hver gang din virksomhed f.eks. tilslutter nye salgskanaler, skal der blandt dine analytikere v\u00e6re nogen, der husker, at der findes en s\u00e5dan aggregeringsattribut. <\/p>\n<p>N\u00e5r du designer hver ny proces, for eksempel salg p\u00e5 internettet, salg gennem distribut\u00f8rer tilsluttet det f\u00e6lles loyalitetssystem, skal nogen have i tankerne, at alle nye processer skal sikre dataintegritet p\u00e5 kode niveau. For en industriel database med tusinder af tabeller virker det som en vanskelig opgave.<\/p>\n<p>En erfaren udvikler ved selvf\u00f8lgelig, hvordan man kan minimere de n\u00e6vnte problemer, men efter min mening er det en erfaren analytikers opgave at forhindre dem i at opst\u00e5.<\/p>\n<p>Jeg vil gerne takke for den v\u00e6rdifulde feedback under forberedelsen af publikationen til den ledende udvikler Evgenij Yarukhins.<\/p>\n<h2>Litteratur<\/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. Databaser. Design, implementering og vedligeholdelse. Teori og praksis<br \/>\n<br \/>Kilde: <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\/da\/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=\"da_DK\" \/>\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\/da\/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\udd47Denormalisering af databaser i ERP-systemer og dens indflydelse p\u00e5 softwareudvikling: vi \u00e5bner et v\u00e6rtshus p\u00e5 Tortuga | ProHoster","description":"Hej! Mit navn er Andrey Semyonov, jeg er senioranalytiker hos Sportmaster. I dette indl\u00e6g vil jeg gerne rejse sp\u00f8rgsm\u00e5let om denormalisering af databaser i ERP-systemer.","canonical_url":"https:\/\/prohoster.info\/da\/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":"da_DK","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\/da\/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\/da\/wp-json\/wp\/v2\/posts\/78198","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/comments?post=78198"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/78198\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media\/78199"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media?parent=78198"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/categories?post=78198"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/tags?post=78198"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}