Kjernen data fra Scratch: Data Model

Core data fra Scratch: Data Model
18
Del
10
Del
Dette Cyber ​​mandag Envato Tuts + kurs vil bli redusert til bare $ 3. Ikke gå glipp av
Dette innlegget er en del av en serie kalt kjernedata fra Scratch.Core data fra Scratch:. Kjerne data StackCore data fra Scratch: Managed Objects og Fetch Forespørsler
Innledning

I den første artikkelen i denne serien, lærte vi om grunndata stabelen, i hjertet av en Core data program. Vi utforsket klarte objektet sammenheng, den vedvarende butikken koordinator, og klarte objektmodellen.

Denne artikkelen fokuserer på datamodellen av en Core data program. Vi zoomer inn på Xcode datamodell redaktør og vi tar en titt på entiteter, attributter og relasjoner.

1. Data Model Editor

Start med å laste ned prosjektet fra forrige tutorial eller klone depotet fra GitHub. Åpne prosjektet i Xcode, og i Prosjekt Navigator
, søke etter Core_Data.xcdatamodeld
. Xcode viser automatisk datamodellen redaktøren når prosjektets datamodell er valgt.

2. Entities

Før vi utforske redaktørens brukergrensesnitt, må vi opprette et foretak til å arbeide med. På bunnen av datamodellen editor, klikker du på Legg Entity
knappen. Dette vil legge til en enhet med navn Entity. Det vil dukke opp i Enheter
til venstre på datamodellen editor. Endre enhetens navn til
Person ved å dobbeltklikke på den i Entities
delen.

"Hva er en enhet?" lurer du kanskje. Å bringe tilbake databasen analogi, er en enhet kan sammenlignes med en tabell i en database. Når du velger Person enhet, ser du at et foretak kan ha attributter, relasjoner og hentet egenskaper. Ikke bekymre deg om hentede egenskaper for nå, de er en mer avansert funksjon av rammeverket.

3. Attributter

Gi Person foretaket et attributt ved å klikke på pluss-knappen nederst i attributter
tabellen. Dobbeltklikk attributtet navn og sett den til
først. Fra Type
rullegardinmenyen, velg String
. Hvis vi sammenligner dette til en tabell i en database,
Person tabellen har nå en kolonne første av typen String
.

Selv om jeg ikke ønsker å forvirre du ved å sammenligne enheter med tabeller i en database, det gjør det lettere å forstå hva entiteter og attributter er. Faktisk, hvis du bruker en SQLite database som kompet butikk av søknaden, vil kjernedata opprette en tabell for å lagre data på personen enhet. Men dette er noe vi ikke har til og bør ikke trenger å bekymre seg for. Husk at kjernedata er ikke en database.

Det samme gjelder for relasjoner. Hvordan kjernedata holder styr på relasjoner er noe vi ikke trenger å bekymre seg for. Faktisk gjør kjernedata for at deler av innholdet er lastet når programmet trenger dem. Dette er noe vi vil se senere i denne serien.

Legg til to flere attributter til Person enhet, det siste av typen String Hotell og alder av type Integer
16
. Den type du velger for tallene er ikke viktig på dette punktet. Det forteller kjernedata hvordan det skal strukturere databasen og optimalisere for ytelse.

data Valg

egenskap av en enhet kan konfigureres gjennom Data Model Inspector
. Velg den første egenskap av Person enhet og åpne inspektøren til høyre. Datamodellen Inspector lar deg konfigurere den valgte attributtet. På dette punktet er vi bare interessert i noen innstillinger, Valgfritt
, attributtype
, og Standard Verdi
.

Valgfritt

Merking et attributt som ekstrautstyr betyr at attributtet kan være tomt eller tomt for en rekord. I vårt eksempel, men vi ønsker å sikre at hver person posten har et fornavn. Med den første attributtet valgt, fjerner du merket Valgfri
å merke det som er nødvendig. Nye attributter er valg be standard.

Merking et attributt som kreves har konsekvenser skjønt. Hvis vi sparer en person rekord uten gyldig fornavn, vil kjernedata kaste en feil. Dette betyr at vi må sørge for at posten første attributt er satt før du lagrer det.

attributtype

Attributtypen er viktig av flere grunner. Det forteller kjernedata i hvilket format det skal spare attributtet, og det vil også returnere attributt data til oss i det angitte formatet. Hvert attributt type har et annet sett med konfigurasjonsmuligheter. Endre attributtet type første attributt til Dato
å se konfigurasjonsmuligheter for en egenskap av typen Dato
.

Standard Verdi

Flere attributt typer, for eksempel String Hotell og Dato
, har en Standard Verdi
felt du kan stille. Dette er praktisk, for eksempel hvis en attributt er nødvendig og du ønsker å sikre attributtet for et rekord har en gyldig verdi når det settes inn i databasen.

Legg merke til at standardverdien brukes bare når en ny posten er opprettet. Hvis en eksisterende Person rekord, for eksempel, blir oppdatert ved å sette den første attributt til null, så Kjerne Data vil ikke fylle den første attributtet med standardverdien. I stedet Kjerne data ville kaste en feil, fordi vi markerte den første attributt som kreves.

4. Relasjoner

Kjernedata virkelig skinner når du begynner å arbeide med relasjoner mellom enheter. La oss se hvordan dette fungerer ved å legge til en ny enhet som heter Adresse. The Address foretaket har fire attributtene typen String
, street, nummer, byen og landet.

Forholdet mellom enhetene har en rekke definerende egenskaper, navn, reisemål, kardinaliteten av forholdet, det omvendte forholdet, og forholdet er sletteregelen.

La oss utforske relasjoner i mer detalj ved å skape en relasjon mellom personen og adresse enheter.

Navn, Destination, og opsjonalitet

Opprett et forhold ved å velge Person enhet og klikke på pluss-knappen nederst i Relasjoner
tabellen. Navn forholdet
adresse og angi Mål
i adresse enhet. Dette indikerer at hver person posten kan være forbundet med en adresse posten.

Som med attributter, relasjoner er valgfritt som standard. Dette betyr at ingen valideringsfeil vil bli kastet dersom en person rekord har ingen sammenheng med en adresse posten. La oss endre dette ved å fjerne avmerkingen for Valgfritt
i Data Model Inspektør
til høyre.

Inverse Sivil

På øyeblikket, kan personen ha et forhold til en adresse posten. Men hvis personen har en adresse rekord forbundet med det, adresseoppføringen ikke vet om personen posten, fordi forholdet er uni-directional i øyeblikket-fra person til Adresse. De fleste relasjoner i kjernedata, men er toveis, begge enhetene vite om forholdet.

La oss lage den inverse forholdet fra Adresse enhet til Person enhet ved å velge adresse foretaket og skape et forhold navngitt person med Person foretaket som sin destinasjon.

Selv om vi skapte den inverse forholdet mellom Adresse og Person, Xcode gir oss noen advarsler forteller oss Person.address
bør ha en invers Hotell og Address.person bør ha en invers
. Har vi gjort noe galt?

Kjerne data er ikke smart nok til å vite hvilke forhold er den inverse forholdet som forholdet. Dette er lett å fikse selv. Velg Person enhet og sette Inverse
av adressen forhold til person, personen forholdet. Hvis du nå velge adresse enhet, vil du se at den inverse av adressen forholdet har allerede blitt satt til den personen forholdet for deg.

Data Modell Graf

Når datamodellen gevinster i kompleksitet, kan relasjoner bli forvirrende og uklar. Xcode har ryggen dekket skjønt. Datamodellen redaktøren har to stiler, tabellen Hotell og grafen
. Nederst til høyre i redigereren, vil du se en toggle som lar deg bytte mellom de to modusene. Klikk på venstre knapp for å bytte til grafstilen.

Grafen stil viser objektet grafen vi har laget så langt. Den viser oss de enhetene vi har laget, deres attributter, og deres relasjoner. En av de mest nyttige funksjonen, er imidlertid den visuelle representasjon av forholdet mellom datamodellen enheter. En linje med en pil i hver ende kobler Person og adresse, som betegner deres toveis relasjon.

til-mange relasjoner

De relasjonene vi har laget så langt er til- ett relasjoner
, en person kan ha en adresse og vice versa. Men det er fullt mulig at flere mennesker bor på samme adresse. Hvordan ville vi inkludere denne ekstra informasjon i vår datamodell?

Et forhold er kardinaliteten spesifiserer om det er en til-en eller til-mange-relasjon. La oss endre personens forhold i adresse foretaket å gjøre det en til-mange-relasjon. Velg personen forholdet adresse enhet, endrer navn til personer til å reflektere til-mange-relasjon, og satt forholdet Skriv
til Slik Mange
i inspektøren til høyre.

Navnet på forholdet er ikke viktig, men det viser at det er en til-mange-relasjon. La du merke til at datamodellen grafen oppdatert også? Forholdet endepunkt til Person foretaket har to pilene for å betegne den til-mange-innholdet i forholdet.

mange-til-mange relasjoner

Vent et øyeblikk. Er det ikke mulig at en person er assosiert med mer enn en adresse. En person kan ha en arbeidsadresse og hjemmeadresse. Høyre? Kjernen data løser dette ved å opprette en mange-til-mange
forholdet. Velg adressen forholdet mellom Person enhet, endrer navn til adresser, og sette forholdet Skriv
til Slik Mange
. Datamodellen redaktøren viser den oppdaterte forholdet som en linje med to piler i hver ende.

Reflexive relasjoner

Måten kjernedata implementerer relasjoner er svært fleksibel. Bestemmelses enhet av et forhold kan også være den samme som kilden enhet. Dette er kjent som en refleksiv
forholdet. Det er også mulig å ha flere forhold av samme type med forskjellige navn. En person, for eksempel, kan ha en mor og en far. Begge forhold er refleksiv med den eneste forskjellen er navnet på forholdet.

Slett regler

Hva skjer når rekorden på den ene enden av forholdet slettes? Hvis du skulle tenke på kjernedata som en database, så svaret ville være åpenbar. Kjernen data, men er ikke en database.

Anta at du har en konto enhet med en til-mange-relasjon til en brukerenhet. Med andre ord, kan en konto ha mange brukere, og hver bruker tilhører en konto. Hva skjer når du sletter en bruker? Hva skjer når du sletter en konto? I kjernedata, har hver relasjon en sletteregel som gjør det klart hva som skjer i disse situasjonene.

Slett regler gjør at du ikke trenger å bekymre deg eksplisitt oppdatere backing butikken når posten er slettet. Kjernen data tar seg av dette for å sikre objektet grafen forblir i en konsistent tilstand.

Velg adresser forholdet mellom Person enhet og åpne inspektøren til høyre. Slett regel
menyen har fire alternativer, Ingen handling
, opphever
, Cascade
, og Nekt
.

Ingen handling

Hvis du velger Ingen handling
, betyr kjernedata ikke oppdatere eller varsle kilden registrering av forholdet. Dette betyr at kilden registrering av forholdet fortsatt mener det har en sammenheng med den posten som ble slettet. Merk at dette er sjelden det du ønsker.

opphever

Dette alternativet angir målet for forholdet til null når destinasjonen posten slettes. Dette er standard slette regelen for et forhold.

Cascade

Dersom forholdet fra person til Adresse er satt til Cascade
, slette en person posten vil også slette en adresse poster som er knyttet til den personen posten. Dette er nyttig, for eksempel hvis et forhold er nødvendig og posten ikke kan eller bør ikke eksistere uten forholdet. En bruker, for eksempel, bør ikke eksistere hvis det ikke er tilknyttet en konto.

Nekt

På en måte Deny
er den inverse av Cascade
. For eksempel, hvis vi har en konto enhet som har en til-mange-relasjon med en brukersubjekt med sletteregelen satt til Deny
, kan en konto rekord bare slettes hvis den har noen poster knyttet til den . Dette sikrer at noen poster eksistere uten en konto rekord. Resultatet er lik den Cascade
slette regelen, men gjennomføringen er forskjellig.

Konklusjon

I denne opplæringen, vi har tatt en nærmere titt på datamodellen som brukes av en kjernedata søknad. Du skal nå være kjent med entiteter, attributter og relasjoner, og du bør være i stand til å lage dem ved hjelp av Xcode datamodell redaktør.

Kjerne data er veldig flinke til å håndtere relasjoner og Xcode datamodell editor gjør det enkelt å opprette og administrere relasjoner mellom enheter. Relasjoner mellom enheter er kraftig og lett konfigurerbart. Slett regler sikre at objektet grafen kjernedata klarer fortsatt frisk og i en konsistent tilstand.

I neste artikkel, får vi våre hender skitne og begynne å jobbe med kjernedata. Du vil lære å opprette, lese, oppdatere og slette poster, og bli kjent med NSManagedObject og NSFetchRequest.