Määrittele tietomallit Fabric-sovelluksille

Fabric Apps käyttää TypeScript-koristelijoita määrittelemään tietomalleja, jotka tuottavat tietokantatauluja ja rajapintoja. Määrittelet jokaisen entiteetti luokaksi, joka on koristeltu , @entity()lisäät kenttäkoristelijat tietotyypeille ja kartoitat suhteita entiteettien välillä.

Valtuutus- ja käyttöoikeuksien hallintaohjeita löytyy kohdasta Määrittele dataoikeudet.

Edellytykset

  • Fabric Apps -projekti, joka on luotu npm create @microsoft/rayfin@latest:lla tai alustettu npx rayfin init:llä.
  • Perusymmärrys TypeScript-luokista ja sisustajista.

Määrittele entiteetti

Tietomallin luomiseksi lisää koristelija @entity() TypeScript-luokkaan. Sitten tuo tarvittavat sisustajat :@microsoft/rayfin-core

import { entity, uuid, text, date } from '@microsoft/rayfin-core';

@entity()
export class Todo {
  @uuid() id!: string;
  @text() title!: string;
  @text({ optional: true }) description?: string;
  @date() createdAt!: Date;
  @date() updatedAt!: Date;
}

Tämä entiteetti generoi Todo taulukon, jossa on sarakkeet , titleid, description, createdAt, ja updatedAt.

Perusavaimet

Jokainen entiteetti käyttää UUID-kenttää string , joka nimetään id ensisijaisena avaimena. Jos et ilmoita id eksplisiittisesti, Fabric Apps lisää sen skeemaan automaattisesti.

  • Kenttä id on vapaaehtoinen luontitoimintojen aikana—palvelin luo UUID:n, jos sen jätät pois.
  • Voit antaa oman UUID:n luontivaiheessa, jos haluat asiakaspohjaisia tunnisteita.
  • Yhdistetyt pääavaimet ja mukautetut avainnimet eivät ole tuettuja.
@entity()
export class Note {
  @uuid() id!: string;  // UUID primary key, auto-generated when omitted
  @text() title!: string;
  @text() content!: string;
}

Tuetut tietotyypit

Käytä näitä sisustajia kenttätyypien määrittämiseen:

Sisustaja Tyyppi Description
@uuid() merkkijono Yksilöllinen tunnistekenttä.
@text() merkkijono Tekstikenttä, jossa on valinnaisia pituusrajoituksia.
@int() numero Kokonaislukukenttä.
@decimal() numero Desimaali- tai numeerinen kenttä.
@boolean() totuusarvo Tosi tai epätosi kenttä.
@date() Päivämäärä Päivämäärä- ja aikakenttä, sarjoittaa ISO-merkkijonoista tai Date objekteista.
@email() merkkijono Tekstikenttä sähköpostivahvistuksella.
@set() merkkijono Lueteltu joukko merkkijonoliteraaleja.

Esimerkki useista tyypeistä

import { entity, uuid, text, int, decimal, boolean, date, set } from '@microsoft/rayfin-core';

@entity()
export class Product {
  @uuid() id!: string;
  @text() name!: string;
  @decimal() price!: number;
  @int() stockQuantity!: number;
  @boolean() isAvailable!: boolean;
  @date() createdAt!: Date;
  @set('draft', 'published', 'archived') status!: 'draft' | 'published' | 'archived';
}

Tyyppimuunnokset

Lisää kentän sisustajiin modifikaattoreita validoinnin ja rajoitusten konfigurointia varten:

Muokkaaja Description
{ optional: true } Salli NULL-arvot. Kentät ovat oletuksena pakollisia.
{ unique: true } Lisää ainutlaatuinen rajoite.
{ default: value } Aseta oletusarvolauseke.
{ max: n }, { min: n } Merkkijonojen pituusrajoitteet (suurin ja minimimäärä merkkejä).
{ min: n }, { max: n } Numeeriset arvorajoitteet.

Note

TypeScript-valinnainen merkki (? ominaisuuden nimen jälkeen) vaikuttaa vain staattiseen TypeScript-tyyppiin. Se ei tee tietokantasarakkeesta nollattavaa. Tehdäksesi kentän nollattavaksi, lisää { optional: true } koristeluun. Käytetään ! väittämään, että vaadittu kenttä on alustanut kehys.

Esimerkki modifikaattoreista

@entity()
export class User {
  @uuid() id!: string;
  @email({ unique: true }) email!: string;
  @text({ min: 3, max: 50 }) username!: string;
  @text({ optional: true, max: 500 }) bio?: string;
  @int({ min: 0, max: 150 }) age!: number;
  @boolean({ default: false }) isVerified!: boolean;
}

Määrittele suhteet

Käytä @one() ja @many() koristelijoita navigointiominaisuuksien määrittämiseen entiteettien välillä. Fabric Apps generoi automaattisesti vieraat avainsarakkeet, kun määrittelet suhteita.

  • Yksi-moneen – Käytä @many() sekä vanhempaan että @one() lapseen.
  • Moni yhteen – Käytä @one() lapseen viittaamaan vanhempaan.
  • Moni-moneen -suhteita ei tueta – käytä sen sijaan eksplisiittistä liittymisentiteettiä.

Esimerkki yksi-moneen -suhteesta

import { entity, uuid, text, date, one, many } from '@microsoft/rayfin-core';

@entity()
export class Notebook {
  @uuid() id!: string;
  @text() name!: string;
  @date() createdAt!: Date;
  @many(() => Note) notes?: Note[];
}

@entity()
export class Note {
  @uuid() id!: string;
  @text() title!: string;
  @text() content!: string;
  @date() createdAt!: Date;
  @text() notebook_id!: string;
  @one(() => Notebook) notebook?: Notebook;
}

Kun määrittelet @one(() => Notebook)Note-entiteetteissä, Fabric Apps luo automaattisesti notebook_id vierasavaimen sarakkeen. Ilmoita vierasavain kenttä nimenomaisesti vain, jos aiot lukea tai asettaa sen sovelluskoodiin.

Ulkomaisten sävelten nimeämiskäytäntö

Kun määrittelet vierasavaimen kentän, käytä {property}_id nimeämiskäytäntöä:

@entity()
export class Note {
  @uuid() id!: string;
  @text() notebook_id!: string;      // Foreign key field
  @one(() => Notebook) notebook?: Notebook;  // Navigation property
}

Mukautettuja vierasavainnimiä (foreignKey, targetKey asetuksia) ei tueta.

Viitejärjestelmän entiteetit

Fabric Apps ei tue @one() -suhteita, jotka viittaavat järjestelmäentiteetteihin, kuten sisäänrakennettuun USER-entiteettiin. Rivin liittämiseksi kirjautuneeseen, lisää tavallinen user_id tyyppikenttä @text() ja täytä se autentiusvaatimuksista (tyypillisesti claims.sub):

@entity()
export class Task {
  @uuid() id!: string;
  @text() title!: string;
  @text() user_id!: string;  // System user ID from claims.sub
}

Suodata rivejä user_id roolisi politiikkojen mukaan, jotta käyttäjäkohtainen pääsy voidaan pakottaa.

Rekisteriyksiköt skeemassa

Lisää kaikki entiteettiluokat, rayfin/data/schema.ts jotta asiakas voi generoida GraphQL-välityspalvelimia:

import type { Note } from './Note.js';
import type { Notebook } from './Notebook.js';

export type NotesAppSchema = {
  Note: Note;
  Notebook: Notebook;
};

Päivitä tämä tyyppi aina, kun luot uuden entiteettiä.

Sovella skeemamuutoksia

Kun olet määritellyt tai muokatut entiteettejä, sovelletaan muutoksia tietokantaan:

  1. Ota päivitetty skeema käyttöön Fabric:iin:

    npx rayfin up db apply
    
  2. Jos skeeman muutos sisältää tuhoavia operaatioita (sarakkeiden pudottamista, taulukoiden uudelleennimeämistä), komentokeskus varoittaa sinua eikä suostu jatkamaan. Käytä --force turvallisuustarkistuksen ohittamiseen:

    npx rayfin up db apply --force
    

Note

Käyttäminen --force voi aiheuttaa tietojen menetystä. Käy luetellut toiminnot huolellisesti läpi ennen etenemistä.

Parhaat käytännöt

  • Määrittele vierasavainkentät vain, kun sinun täytyy lukea tai asettaa ne koodiin—Fabric Apps generoi ne automaattisesti navigointisisustajilta.
  • Käytä suhteellisia tuontejä, joissa .js on päätteitä entiteettitiedostoissa, jotta lähetetty ESM-JavaScript ratkeaa oikein.
  • Valtuutusmallien ja roolipohjaisen pääsyn osalta katso Määrittele dataoikeudet.

Vianmääritys

Puuttuvat ihmissuhteet

Jos suhteita ei näy API:ssa, varmista että:

  • Navigointikoristelu (@one() tai @many()) on paikalla.
  • Yritys on rekisteröity .rayfin/data/schema.ts