Siirry sisältöön

Rakenna looginen malli

Saatavilla myös 28 kielellä

English · Español · 日本語 · Português (Brasil) · Français · Deutsch · Italiano · 한국어 · 简体中文 · Português (Portugal) · 繁體中文 · Bahasa Indonesia · Türkçe · Polski · Tiếng Việt · ไทย · Nederlands · العربية · עברית · Українська · हिन्दी · Русский · Svenska · Dansk · Norsk bokmål · Español (México) · Français (Canada) · Deutsch (Schweiz)

Five different dog collars on pegs by a home's front door, each with its own blank metal tag, beside a leash, a brush and a water bowl.
Kuva on luotu tekoälyllä

Moduuli 3/6 luvussa Tietojen mallintaminen merkityksen kautta, Data Architect -kurssin luku 2. Jokainen moduuli on itsenäinen. Edellinen: Piirrä suhteet · Seuraava: Sijoita tiedot oikeaan paikkaan

Kysymys, johon tämä moduuli vastaa: Miten muutan käsitteellisen mallin loogiseksi tietomalliksi?

Käsitteellinen malli kertoi meille, mitä Steve Truckingilla on olemassa ja miten se liittyy toisiinsa: vähittäiskauppakumppanit ja niiden jakelukeskukset, kuormaluettelot ja toimitukset, vastaanottajat, reitit ja pysähdykset, tiimit, kuorma-autot ja tiimien osoitukset. Se riittää erittäin tuottavaan keskusteluun liiketoiminnan kanssa. Mutta jossain vaiheessa tarvitsen lisää yksityiskohtia. Mitä meidän täytyy tietää toimituksesta? Mikä tekee yhdestä jakelukeskuksesta erilaisen kuin toisesta? Miten tunnistamme vastaanottajan? Mikä kuuluu tiimin osoitukselle eikä tiimille tai kuorma-autolle? Nämä kysymykset vievät meitä käsitteellisestä mallista kohti loogista tietomallia, emmekä vieläkään rakenna Salesforcea.

Ensin takaisin koirien pariin. Meillä on laatikot ja viivat. Nyt kaksi uutta kysymystä: mitä tiedämme kustakin asiasta, ja miten erotamme ne toisistaan?

Mikä sitä kuvaa? Koiralla on nimi ja syntymäpäivä. Omistajalla on nimi, puhelinnumero ja osoite. Tempulla on nimi ja vaikeustaso. Jokainen tieto menee siihen laatikkoon, jota se kuvaa.

Sitten liitos. Kuinka hyvin Bella tekee Istu-tempun ja milloin se oppi sen: kuvaako se Bellaa? Ei aivan; se on joissain tempuissa parempi kuin toisissa. Kuvaako se Istu-temppua? Ei; jokainen koira tekee Istu-tempun eri tavalla. Se kuvaa Bellaa ja Istu-temppua yhdessä, joten se kuuluu koiran temppuun: taitotaso ja oppimispäivä. Siksi liitos on olemassa: jotkin tiedot kuuluvat vain parille.

Mikä koira on mikä? Kokeile ensin nimeä. Max-nimisiä koiria on paljon, joten nimi ei ole yksilöllinen. Omistajan puhelinnumero? Marcuksella on kaksi koiraa samalla numerolla, ihmiset vaihtavat numeroitaan, ja se on jonkun henkilötieto, joka kopioituisi jokaiseen järjestelmään, joka koskaan viittaa koiraan. Mikrosirun numero näyttää paremmalta: se on yksilöllinen, eikä se muutu. Mutta uutta pentua ei ehkä ole vielä sirutettu, eikä avain voi olla tyhjä. Mikrosiru siis jää, jonakin, jolla koira tunnetaan myös, ja koira saa oman koiran ID:nsä (Dog ID): numeron, joka tekee yhden tylsän työn eli erottaa koirat toisistaan.

Koiramalli avaimineen ja attribuutteineen Koiramalli yksityiskohtaisena tietomallina. Jokainen laatikko luettelee tietueen ID:nsä ja muutaman kentän. Omistaja: omistajan ID, nimi, puhelin, postinumero, kaupunki. Kasvattaja: kasvattajan ID, nimi, kaupunki. Koira: koiran ID, tunnetaan myös mikrosirun numerolla, omistajan ID ja kasvattajan ID, nimi, syntymäpäivä. Rotu, ei vielä yhdistetty: rodun ID, nimi, koko. Temppu: tempun ID, nimi, vaikeus. Koiran temppu, Koiran ja Tempun välissä: koiran tempun ID, koiran ID ja tempun ID, taitotaso, oppimispäivä. Tempun arviointi, Koiran tempun alla: sen ID, koiran tempun ID, päivämäärä, taitotaso, arvioija. Viivat ovat samat kuin ennen: omistaja omistaa koiria, kasvattaja kasvattaa koiria (koiralla on nolla tai yksi kasvattaja), koira osaa koiran temppuja, temppua osataan koiran tempuissa, ja koiran temppu tarkistetaan tempun arvioinneissa. omistaa kasvattaa osaa osataan tarkistetaan Omistaja Omistajan ID TIETUEEN ID Nimi Puhelin ZIP Kaupunki Kasvattaja Kasvattajan ID TIETUEEN ID Nimi Kaupunki Koira Koiran ID TIETUEEN ID Mikrosirun numero TUNNETAAN MYÖS Omistajan ID Kasvattajan ID Nimi Syntymäpäivä Rotu Rodun ID TIETUEEN ID Nimi Koko Koiran temppu Koiran tempun ID TIETUEEN ID Koiran ID Tempun ID Taitotaso Oppimispäivä Temppu Tempun ID TIETUEEN ID Nimi Vaikeus Tempun arviointi Tempun arvioinnin ID TIETUEEN ID Koiran tempun ID Päivämäärä Taitotaso Arvioija täsmälleen yksi nolla tai yksi yksi tai monta nolla tai monta © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

Samat kysymykset kysymme nyt Steve Truckingilta, ja syistä, joiden vuoksi nimi, puhelinnumero ja mikrosiru kukin jäävät vajaiksi, tulee sääntö, jota olen noudattanut vuosia.

Käsitteellinen kertoo, mitä on olemassa; looginen kertoo, mitä se tarkoittaa tietona

Osio nimeltä “Käsitteellinen kertoo, mitä on olemassa; looginen kertoo, mitä se tarkoittaa tietona ”

Otetaan kuorma-auto. Mitä minun täytyy tietää kuorma-autosta? Ehkä sen yksikkönumero, VIN-tunnus, merkki, malli, vuosimalli, rekisterikilpi, nykyinen kilometrimäärä ja tila. Ne ovat kuorma-auton attribuutteja.

Otetaan sitten toimitus. Ehkä vähittäiskauppakumppanin tilausnumero, toimituspäivä, luvattu aikaikkuna, todellinen saapumisaika, tila ja se, sisältyykö toimitukseen asennus tai vanhan laitteen poisvienti. Taas attribuutteja.

Käsitteellinen malli kertoi meille, että toimitus on olemassa. Looginen malli alkaa kertoa, mitä toimitus tarkoittaa tietona. Yksinkertainen laatikko, kuten kuorma-auto tai toimitus, voi edustaa kokonaista joukkoa kenttiä.

Laatikoista attribuutillisiksi entiteeteiksi Kolme käsitteellistä laatikkoa vasemmalla (Kuorma-auto, Toimitus, Jakelukeskus), kukin yhdistetty ”muuttuu”-viivalla oikealla olevaan loogiseen entiteettiin, joka luettelee sen attribuutit. Kuorma-auto: yksikkönumero, VIN, merkki, malli, vuosimalli, rekisterinumero, nykyinen ajomäärä, tila. Toimitus: kumppanin tilausnumero, toimituspäivä, luvattu aikaikkuna, todellinen saapuminen, tila, sisältää asennuksen, sisältää poisviennin. Jakelukeskus: nimi, osoite, markkina-alue, puhelin. KÄSITTEELLINEN: MITÄ ON OLEMASSA LOOGINEN: MITÄ SE TARKOITTAA TIETOINA muuttuu muuttuu muuttuu Kuorma-auto ajoneuvo Kuorma-auto Yksikkönumero VIN Merkki Malli Vuosimalli Rekisterinumero Nykyinen ajomäärä Tila Toimitus yksi tilaus yhdelle vastaanottajalle Toimitus Kumppanin tilausnumero Toimituspäivä Luvattu aikaikkuna Todellinen saapuminen Tila Sisältää asennuksen Sisältää poisviennin Jakelukeskus mistä toimitukset lähtevät Jakelukeskus Nimi Osoite Markkina-alue Puhelin Useimmat kaaviomme pitävät yksinkertaisen laatikon: kentät lisääntyvät, vanhenevat ja kantavat yksityiskohtia (API-nimi, nimiö, tyyppi, pituus). © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

Silti useimmissa kaavioissamme laatikot pysyvät yksinkertaisina, kolmesta syystä. Kenttien määrä kasvaa. Kentät vanhenevat nopeasti. Ja jokaisella kentällä on yksityiskohtia, joita on vaikea näyttää objektimallissa: sen API-nimi, nimiö, tietotyyppi ja pituus. Nuo yksityiskohdat kirjataan ehdottomasti, mutta eivät ensimmäiseen tietomalliin. Kun muutaman avainkentän näyttäminen todella auttaa kertomaan tarinan, piirrän yksityiskohtaisen tietomallin: rajatun leikkeen, jossa on vain asian kannalta olennaiset kentät.

Attribuuttien pitää kuvata entiteettiä

Osio nimeltä “Attribuuttien pitää kuvata entiteettiä ”

Tässä on yksinkertainen kysymys, jota käytän katsoessani attribuuttia: mitä tämä kuvaa? Kuorma-auton merkki kuvaa selvästi kuorma-autoa. Mutta entä tiimin jäsenten nimet toimituksessa? Kuvaavatko ne toimitusta? Vai kuvaavatko ne tiimiä, jolla oli tiimin osoitus, joka kattoi reitin, johon tämä pysähdys kuului?

Tässä kohtaa tietomalli alkaa paljastaa asioita, jotka näyttävät näytöllä täysin järkeviltä. Koordinaattori sanoo: ”Haluan nähdä tiimin nimet toimituksessa.” Se on pätevä käyttökokemusvaatimus. Se ei välttämättä ole vaatimus tallentaa tiimin nimet toimitukseen. Ne ovat kaksi eri asiaa, ja palaamme tähän normalisoinnin yhteydessä. Opettele toistaiseksi kysymään, mitä asiaa tämä tieto oikeasti kuvaa. Se kysymys säästää sinut monelta harmilta.

Sitten meidän on puhuttava yksilöllisistä ID:istä

Osio nimeltä “Sitten meidän on puhuttava yksilöllisistä ID:istä ”

Attribuutit kuvaavat asioita. Mutta on vielä yksi ongelma ratkaistavana: mistä tiedän, mikä asia on mikä?

Kahden vastaanottajan nimi on John Smith. Ovatko he sama henkilö? Ehkä, ehkä ei. Nimi ei riitä. Osoite? Ihmiset muuttavat. Puhelinnumerot vaihtuvat. Sähköpostiosoitteet vaihtuvat. Jopa vähittäiskauppakumppanin nimi voi muuttua.

Tämä tuo meidät avaimiin: siihen, minkä avulla voimme tunnistaa jonkin asian mallissamme yksiselitteisesti. Tästä aiheesta minulle on vuosien varrella muodostunut melko vahva mielipide. Tunnisteelta haluan neljä asiaa:

Yksilöllinen. Muuttumaton. Merkityksetön. Ei koskaan henkilötietoa.

Yksilöllinen. Tunnisteen täytyy tunnistaa tasan yksi asia. Jos kahdella toimituksella voi olla sama arvo, se ei ole luotettava toimituksen tunniste. Nimet eivät yleensä ole yksilöllisiä, osoitteet eivät välttämättä ole yksilöllisiä, ja puhelinnumeroita jaetaan. Jopa arvot, jotka näyttävät tänään yksilöllisiltä, eivät ehkä ole sitä, kun tietoa on tarpeeksi. Kysy siis: voiko kahdella näistä koskaan olla sama arvo? Jos vastaus on kyllä, ole hyvin varovainen sen käyttämisessä tietueen yksilöllisenä ID:nä.

Muuttumaton. Tämä jää usein huomaamatta. Jos tunnistamme vähittäiskauppakumppanin sen nimellä ja kumppani vaihtaa nimeään, saimmeko uuden kumppanin? Emme. Liiketoimintaentiteetti pysyi samana; yksi sen attribuuteista muuttui. Tietueen yksilöllisen ID:n pitää säilyä, vaikka sen tunnistama asia muuttuu, ja se sulkee pois nimet, sähköpostiosoitteet, puhelinnumerot, osoitteet ja käyttäjätunnukset, olivatpa ne kuinka käteviä tahansa, kun järjestelmää ensimmäistä kertaa rakennetaan.

Merkityksetön. Tämä kuulostaa oudolta, kun sen kuulee ensimmäisen kerran. Miksi haluaisin tunnisteen olevan merkityksetön? Koska merkitys muuttuu. Kuvittele, että joku rakentaa toimituksen ID:n, johon on koodattu jakelukeskus, vähittäiskauppakumppani, toimituspäivä ja juokseva numero: PHX-KEY-20261002-0042. Se näyttää fiksulta. Sitten vastaanottaja siirtää toimituksen perjantaille. Muutammeko tunnistetta? Jos emme muuta, se valehtelee meille. Jos muutamme, olemme muuttaneet toimituksen yksilöllistä ID:tä, koska yksi sen attribuuteista muuttui, ja jokainen järjestelmä, joka tallensi vanhan ID:n, on juuri kadottanut sen. Tunniste yritti tehdä kahta työtä: tunnistaa toimituksen ja kuvata sitä. Annan mieluummin attribuuttien kuvata sitä ja tunnisteen tehdä yhden tylsän työn: tunnistaa se. Tylsät tunnisteet ovat hyviä tunnisteita.

Ei koskaan henkilötietoa. Tämä on niin tärkeä, että pidän sen erillään. Älä käytä henkilötietoa (PII) tunnisteena vain siksi, että se näyttää yksilölliseltä. Steve Truckingilla on houkuttelevaa tunnistaa vastaanottaja puhelinnumerosta. Mutta avain kopioituu kaikkialle, missä järjestelmien täytyy yhdistää tietueita: integraatioihin, vienteihin, lokeihin, vähittäiskauppakumppaneille palautettaviin tilatiedostoihin, tietovarastoon, testidataan. Tee puhelinnumerosta avain, ja olet levittänyt vastaanottajan henkilötiedot koko arkkitehtuuriin.

Avaimen täytyy myös olla olemassa jokaisessa tietueessa: ei koskaan null tai tyhjä. Jos jotkut ihmiset eivät anna arvoa, tai heidän ei pitäisi joutua antamaan sitä, se arvo ei voi olla avain. Siksi järjestelmät luovat omat sisäiset tunnisteensa, ja henkilötiedosta, jos sitä ylipäätään tarvitaan, tulee suojattu attribuutti.

Sääntöni on siis: yksilöllinen, muuttumaton, merkityksetön, ei koskaan henkilötietoa.

Tietokantaihmisillä on osalle tästä nimet. Luonnollinen avain on jo olemassa liiketoiminnan tiedoissa: kuorma-auton VIN-tunnus on hyvä esimerkki. Sovelluksemme ei keksinyt sitä, ja sillä on jo merkitys. Sijaisavain luodaan nimenomaan tietueen tunnistamista varten; se ei kuvaa mitään, se vain tunnistaa.

Useimmissa arkkitehtuureissa suosin sijaisavainta sisäisenä tietueen ID:nä ja pidän tärkeät luonnolliset tunnisteet attribuutteina. Se ei tee luonnollisista tunnisteista huonoja; ne ovat usein äärimmäisen tärkeitä. En vain automaattisesti tee niistä tietueen yksilöllistä ID:tä. Kysy, mitä tapahtuu, jos arvo korjataan, muotoillaan uudelleen, korvataan, käytetään uudelleen, puuttuu tai saapuu useammasta kuin yhdestä lähdejärjestelmästä. Siinä kohtaa yksinkertaiselta näyttävästä päätöksestä tulee arkkitehtuuripäätös.

Yhdellä asialla voi olla useita hyödyllisiä tunnisteita

Osio nimeltä “Yhdellä asialla voi olla useita hyödyllisiä tunnisteita ”

Sisäinen tietueen ID ei välttämättä ole se tunniste, jota kaikki muut järjestelmät käyttävät. Steve Trucking voi tunnistaa toimituksen sisäisesti generoidulla ID:llä. Jokainen vähittäiskauppakumppani tuntee saman toimituksen omalla tilausnumerollaan: Keystone CSV-kuormaluettelossaan, Redrock API:ssaan, Brightwave EDI-sanomissaan. Ja vanhan ajojärjestelytyökalun RouteDeskin kahdeksan vuoden historia käyttää RouteDeskin omia toimitus-ID:itä.

Nuo tunnisteet ovat tärkeitä. Meidän täytyy säilyttää ne ja kohdistaa ne oikein, koska tilapäivitys on palautettava jokaiselle kumppanille sen numerolla. Mutta kaikista niistä ei tarvitse tulla toimituksen yksilöllistä ID:tä. Kysymykseen ”mikä sen ID on?” voi olla useampi kuin yksi vastaus, ja arkkitehdin täytyy tietää, mikä ID on auktoritatiivinen missäkin yhteydessä. Palaamme tähän perustietojen ja integraation yhteydessä.

Suhteet riippuvat yksilöllisistä ID:istä

Osio nimeltä “Suhteet riippuvat yksilöllisistä ID:istä ”

Palataan nyt piirtämiimme viivoihin. Kuormaluettelossa luetellaan toimitukset. Vastaanottaja vastaanottaa toimituksia. Tiimillä on tiimin osoituksia. Nuo suhteet toimivat vain, koska pystymme tunnistamaan luotettavasti asiat molemmissa päissä.

Tässä kohtaa se puree Steve Truckingilla. Vähittäiskauppakumppani muuttaa kuormaluetteloaan toimituspäivänä: tilaus peruttu, tuote vaihdettu, uusi osoite. Jos emme pysty kohdistamaan muutettua riviä jo olemassa olevaan toimitukseen kumppanin tilausnumeron perusteella, luomme toisen toimituksen samalle jääkaapille, ja tiimi saattaa tulla paikalle kahdesti. Laatikot, attribuutit, avaimet ja suhteet eivät ole erillisiä ideoita. Ne ovat kaikki saman mallin osia.

Yksityiskohtainen, rajattu tietomalli Yksityiskohtainen, rajattu tietomalli Steve Truckingille kolmessa ryhmässä. Jokainen entiteetti luettelee tietueen ID:nsä (luotu sisäinen yksilöllinen ID), kaiken, millä se myös tunnetaan, ja muutaman avainkentän. Vähittäiskauppakumppani (nimi, laskutusosoite, tila) ylläpitää jakelukeskuksia ja lähettää toimituksia. Toimitus tunnetaan myös kumppanin tilausnumerolla ja RouteDeskin toimitus-ID:llä; se toimitetaan vastaanottajalle (nimi, osoite, puhelin, sähköposti), lähtee jakelukeskuksesta (nimi, osoite, markkina-alue) ja sisältää toimitusrivejä (tuote, määrä, sisältää asennuksen). Tiimi työskentelee tiimin osoituksissa, ja kuorma-autoa (tunnetaan myös VIN:llä ja yksikkönumerolla) käytetään tiimin osoituksissa, joilla on alkupäivä ja loppupäivä. ASIAKASTIEDOT TAPAHTUMATIEDOT VIITETIEDOT ylläpitää lähettää toimitetaan lähtee sisältää työskentelee käytetään Vähittäiskauppakumppani Vähittäiskauppakumppanin ID TIETUEEN ID Nimi Laskutusosoite Tila Vastaanottaja Vastaanottajan ID TIETUEEN ID Nimi Osoite Puhelin Sähköposti Toimitus Toimitus-ID TIETUEEN ID Kumppanin tilausnumero TUNNETAAN MYÖS RouteDeskin toimitus-ID TUNNETAAN MYÖS Toimituspäivä Luvattu aikaikkuna Tila Toimitusrivi Toimitusrivin ID TIETUEEN ID Tuote Määrä Sisältää asennuksen Tiimin osoitus Tiimin osoituksen ID TIETUEEN ID Alkupäivä Loppupäivä Jakelukeskus Jakelukeskuksen ID TIETUEEN ID Nimi Osoite Markkina-alue Tiimi Tiimin ID TIETUEEN ID Nimi Tila Kuorma-auto Kuorma-auton ID TIETUEEN ID VIN TUNNETAAN MYÖS Yksikkönumero TUNNETAAN MYÖS Merkki Malli Rekisterinumero Tila täsmälleen yksi nolla tai yksi yksi tai monta nolla tai monta © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

Tässä vaiheessa saatat ajatella: ”Salesforce antaa jokaiselle tietueelle ID:n.” Aivan oikein, ja pääsemme siihen. Jos tiedot asuvat Salesforcessa, jokainen tietue saa Salesforcen generoiman ID:n. Se on kryptinen ja vaikealukuinen, joten tavallisesti tarjoamme myös ID-kentän, jota ihmiset voivat käyttää, kuten toimitusnumeron D-000184227, joka on Auto Number -kenttä. Ihmiset luulevat usein, että se numero on tietueen ID, mutta ei se ole: Salesforcen ID on yhä olemassa sen alla. Ulkoisella järjestelmällä tai tietokannalla, Oraclella tai SQL Serverillä, on myös omat yksilölliset ID:nsä. Mutta arkkitehtuuriin voi lopulta kuulua Salesforce, talouden ERP, Snowflake, Data 360, kumppanien järjestelmät ja järjestelmiä, joita ei vielä ole olemassa. Looginen malli kuvaa liiketoiminnan tiedot tekemättä jokaista päätöstä riippuvaiseksi yhdestä teknologiasta. Se, miten Salesforce sen fyysisesti toteuttaa, on myöhempi vaihe.

Kun muutan käsitteellisen mallin loogiseksi malliksi, päätän:

  • Mitkä attribuutit oikeasti kuvaavat kutakin entiteettiä.
  • Miten kukin entiteetti tunnistetaan yksiselitteisesti ja onko se tunniste tarpeeksi vakaa ollakseen sen yksilöllinen ID.
  • Mitkä liiketoiminnan tunnisteet (kumppanien tilausnumerot, vanhojen järjestelmien ID:t) täytyy säilyttää ja kohdistaa.
  • Käytetäänkö arkaluonteista tietoa avaimena.
  • Yhdistävätkö suhteet entiteetit luotettavien yksilöllisten ID:iden kautta.

Meillä on nyt entiteetit, suhteet, attribuutit ja yksilölliset ID:t: oikean loogisen tietomallin alku. Mutta yksi ongelma on vielä jäljellä. On hyvin helppoa laittaa täysin pätevää tietoa väärään paikkaan. Siinä kohtaa normalisointi tulee mukaan.