KEPLIN Docs

Datamodellen

Att skapa appens databas, CRM:ets tre tabeller och modellen med relationerna som resten av plattformen kommer att använda.

Appen Kundhantering finns och är tom. Den här etappen ger den grunden: databasen där posterna bor, tabellerna contas, contactos och oportunidades, och modellen som binder ihop allt — kartan som API:erna, skärmarna och skripten läser från och med nu.

I slutet av den här sidan har du riktiga data: tre tabeller skapade, kopplade till varandra, och en konsol där frågorna returnerar rader.

Två lager, och det lönar sig att inte blanda ihop dem

Keplin arbetar med data i två lager ovanpå varandra. De gör olika saker och ändras på olika ställen:

Lager Vad det är Var det ändras
Datakälla Själva databasen — anslutningen, tabellerna, kolumnerna, raderna. Panelen DataDatakällor
Modell Porträttet av den databasen inuti plattformen: entiteter, fält med vänliga namn och relationer. Datakällans flik, i modellens canvas

Skillnaden är praktisk. Att skapa en kolumn ändrar i databasen. Att importera en tabell till modellen ändrar ingenting i databasen — den talar bara om för plattformen ”den här tabellen intresserar mig, och så här läses den”. Det är modellen som matar appens GraphQL-API, tabell-API:erna och, genom dem, skärmarna.

Nota

I den här guiden skapas databasen från grunden, inuti appen. Om din organisation redan har en databas med kunderna i sig är vägen densamma från och med steget ”Importera tabellerna till modellen” — registrera anslutningen och importera de tabeller som finns. Kapitlet Ansluta databaser tar upp det fallet.

Skapa datakällan Dados CRM

Första steget är att registrera appens databas. Eftersom vi inte ska ansluta något externt använder vi den typ som plattformen skapar och sparar tillsammans med själva appen: den frågar varken efter server, port, användare eller lösenord.

  1. På appens arbetsyta, välj panelen Data längst ned i sidofältet.

  2. I avsnittet Datakällor, klicka på knappen + (Ny datakälla). Dialogrutan Ny datakälla öppnas — ”Anslut en databas till den här appen. Allt krypteras i vila.”

  3. I Internt namn, skriv Dados CRM. Det är med det namnet — exakt det — som API:erna och skripten kommer att hänvisa till anslutningen längre fram i guiden.

  4. Öppna listan Typ. Den visar alla motorer som stöds; välj den lokala databasen, den som sparas tillsammans med appen. Lägg märke till vad som händer sedan: fälten för server, port, användare och lösenord försvinner — det finns ingenting att ansluta till.

    Listan över databastyper i dialogrutan Ny datakälla: de sex motorer som stöds.
    Listan över databastyper i dialogrutan Ny datakälla: de sex motorer som stöds.

  5. Ett fält blir kvar, Importera databas (valfritt). Lämna det tomt: ”Utan fil skapas en tom databas.” Det är vad vi vill ha.

  6. Klicka på Testa anslutningen för att bekräfta — svaret är Anslutningen fungerar.

  7. Klicka på Skapa. Datakällan dyker upp i trädet och dess flik öppnas direkt, med modellens canvas — ännu tom.

Dialogrutan Ny datakälla ifylld, med den lokala databasen vald.
Dialogrutan Ny datakälla ifylld, med den lokala databasen vald.

Atenção

Internt namn är en identifierare, inte en etikett. Att ändra det senare tvingar dig att gå igenom skripten som anropar db("Dados CRM") och de SQL-steg som valde anslutningen via det gamla namnet.

Skapa tabellen contas

Med datakällan skapad görs tabellerna utan att du lämnar plattformen.

  1. I trädet, öppna menyn på datakällan Dados CRM och välj Ny tabell.
  2. I Tabellens namn, skriv contas. Lämna Schema (valfritt) tomt.
  3. I Tabellens beskrivning, skriv Kundföretag och potentiella kunder. Det är valfritt, men det är det du kommer att läsa om ett år.
  4. Listan KOLUMNER kommer redan med en kolumn id, av typen integer, med Primärnyckel (PK) och Autoinkrement påslagna. Låt den vara som den är — den är varje posts identitet.
  5. Klicka på + i KOLUMNER för varje ny kolumn och fyll i Namn, Typ och reglagen. Tabellen nedan säger vad du ska skriva.
  6. Bekräfta med Skapa tabell. Tabellen föds i databasen och börjar synas i objektträdet.

Dialogrutan Ny tabell, med namnet, beskrivningen och kolumnpanelen.
Dialogrutan Ny tabell, med namnet, beskrivningen och kolumnpanelen.

Kolumnerna i tabellen contas:

Kolumn Typ Tillåter NULL Vad den används till
id integer nej Primärnyckel, med autoinkrement
nome text nej Företagets namn
nif text ja Organisationsnummer
sector text ja Livsmedel, Teknik, Hälsa…
cidade text ja Var företaget finns
telefone text ja Allmän kontakt
email text ja Allmän kontakt
estado text nej ativo, prospeto eller inativo

Dica

Tillåter NULL avstängt betyder obligatoriskt i databasen. Spara det till det som verkligen är obligatoriskt — ett företags namn, kontot som en kontakt tillhör. Ett fält som i dag är valfritt och i morgon obligatoriskt ändras på ett ögonblick; motsatsen tvingar dig att städa data.

Skapa tabellerna contactos och oportunidades

Upprepa rörelsen — datakällans meny Ny tabell — två gånger till.

contactos (beskrivning: Kontaktpersoner för varje konto):

Kolumn Typ Tillåter NULL Vad den används till
id integer nej Primärnyckel, med autoinkrement
nome text nej Personens namn
cargo text ja VD, Inköpsansvarig…
email text ja
telefone text ja
conta_id integer nej Kontot som personen tillhör

oportunidades (beskrivning: Pågående affärer, per fas):

Kolumn Typ Tillåter NULL Vad den används till
id integer nej Primärnyckel, med autoinkrement
titulo text nej Affärens namn
conta_id integer nej Affärens konto
valor real ja Värde i euro — tal med decimaler
fase text nej Affärens fas (se nedan)
data_fecho text ja Förväntat avslutsdatum, i ÅÅÅÅ-MM-DD
responsavel text ja Den som följer upp affären

Kolumnen fase är en sluten lista av värden. Den sparas som text, och de möjliga värdena är alltid dessa sex:

Sparat värde Vad det betyder
prospecao Det har ännu inte hållits något riktigt samtal
qualificacao Det finns intresse och vi undersöker om det passar
proposta Offert lämnad
negociacao Villkoren diskuteras
fechada_ganha Affären är avslutad
fechada_perdida Affären är förlorad

Nota

Vi sparar det ”tekniska” värdet (fechada_ganha) och visar den snygga etiketten (”Vunnen”) på skärmen. Det är den uppdelningen som får nästa etapps kanban-tavla att fungera: varje kolumn på tavlan är ett av de här värdena, med sin etikett och sin färg. Kolumnerna estado (på kontona) och fase följer samma idé.

Granska och ändra en tabells struktur

Du valde fel typ, en kolumn saknas, namnet är inte det bästa. Inget av det är slutgiltigt:

  1. I trädet, öppna tabellens meny och välj Redigera struktur.
  2. Dialogrutan har två flikar: Kolumner och Index. Högst upp ligger Namn i databasen, Visningsnamn (appar) — namnet som skärmarna visar — och beskrivningen.
  3. Klicka på en kolumn till vänster för att redigera den till höger, eller använd + för att lägga till. Nya kolumner märks ”Ny kolumn — skapas när ändringarna tillämpas.”; borttagna kolumner märks ”Markerad för borttagning (DROP) vid tillämpning.”, och borttagningen går att ångra så länge du inte har tillämpat.
  4. Klicka på Tillämpa ändringar.

Redigera struktur på tabellen contas: kolumnerna till vänster, kolumnens detaljer till höger och Tillämpa ändringar i sidfoten.
Redigera struktur på tabellen contas: kolumnerna till vänster, kolumnens detaljer till höger och Tillämpa ändringar i sidfoten.

Atenção

Att ta bort en kolumn tar bort dess data. Plattformen utför ändringen först när du trycker på Tillämpa ändringar — fram till dess är allt utkast, och att stänga dialogrutan förstör ingenting.

Se och så in data

Objektträdet har en konsol under modellen, och det är genom den man kikar på (eller sår in) data:

  1. Öppna en tabells meny och välj Visa data. SQL-konsol öppnas nedtill, redan med en select färdig för den tabellen.
  2. Klicka på Kör. Resultaten visas till höger, med antalet rader och ett fält Filtrera….
  3. För att lägga in de första raderna, skriv de insert du vill ha i konsolen och kör. Det är det snabbaste sättet att få exempeldata innan det finns skärmar som kan skapa dem.

Datakällans SQL-konsol med CRM:ets konton inlästa.
Datakällans SQL-konsol med CRM:ets konton inlästa.

Importera tabellerna till modellen

Tabellerna finns, men plattformen vet ännu inte att den ska använda dem. Det är vad importen gör:

  1. I trädet, fäll ut Dados CRM ▸ Tabeller. Där ligger alla tre.
  2. För var och en, öppna menyn och välj Importera till modell — eller dra tabellen från trädet till modellens canvas, vilket ger samma sak.
  3. Varje tabell blir ett kort på canvasen: entiteten. Kortet visar fälten, typen på var och en och märkningen PK på primärnyckeln.

Datakällans objektträd, med CRM:ets tre tabeller.
Datakällans objektträd, med CRM:ets tre tabeller.

Entiteternas namn får stor begynnelsebokstav — contas blir Contas — eftersom det är så de dyker upp i API:erna och på skärmarna. Tabellen i databasen heter fortfarande contas.

Nota

Att importera kopierar inga data och skapar ingenting i databasen. Och att ta bort en entitet från modellen tar inte heller bort tabellen — ”Det ändrar INTE tabellen i databasen”, som varningen själv säger.

Koppla ihop entiteterna — de två relationerna

Ett CRM utan relationer är tre lösryckta listor. Två kopplingar saknas: varje kontakt tillhör ett konto, varje affärsmöjlighet tillhör ett konto.

För att skapa en relation, dra fältet conta_id från entiteten Contactos till fältet id på entiteten Contas — tipsen på kortet påminner om det: ”Dra till ett fält i en annan tabell för att koppla”. Dialogrutan Ny relation öppnas, redan med entiteterna och kolumnerna ifyllda:

Fält Vad du väljer Varför
Kardinalitet One-to-many (1:N) Ett konto har många kontakter; varje kontakt har ett konto.
Parent (refererad) Contasid ”Ett”-sidan.
Child (har FK:n) Contactosconta_id ”Många”-sidan — det är den som håller referensen.
Typ av relation Fysisk — skapar FK:n i databasen Databasen börjar garantera att det inte finns föräldralösa kontakter.
Navigator på Contactos → Contas conta Det virtuella fältet som, från en kontakt, ger dess konto.
Navigator på Contas → Contactos contactos Det virtuella fältet som, från ett konto, ger dess kontakter.
När föräldern tas bort (ON DELETE) Ingenting (blockerar om det finns barn) Att ta bort ett konto som har kontakter blir nekat — hellre ett fel än ett hål.

Bekräfta med Skapa relation och upprepa rörelsen mellan Oportunidadesconta_id och Contasid, med den omvända navigatorn oportunidades.

Modellen för appen Kundhantering: entiteterna Contas, Contactos och Oportunidades, med de två relationerna ritade mellan sig.
Modellen för appen Kundhantering: entiteterna Contas, Contactos och Oportunidades, med de två relationerna ritade mellan sig.

Navigatorerna är den del som ger mest. De är fält som inte finns i databasen men finns i modellen: med dem returnerar en fråga om affärsmöjligheter conta.nome utan att någon skriver en join. Det är precis vad dashboardens tabell kommer att göra i nästa etapp, i kolumnen Konto.

Dica

Fysisk skapar verkligen främmande nyckeln i databasen; Virtuell — bara i plattformens modell är till för databaser där du inte kan (eller inte vill) röra schemat. I den här guiden är databasen vår, alltså fysisk.

Vad som nu är upplåst

Med modellen på plats har appen fått saker gratis:

  • Appens GraphQL-API känner redan till Contas, Contactos och Oportunidades, med relationerna — se Modellens GraphQL-API.
  • Tabell-API:erna kan nu peka på en entitet och generera läsning och skrivning utan en rad SQL. Det är första steget i nästa etapp.
  • Skärmarna kommer att läsa från de här API:erna via datastores.

Varför inte…?

  • Varför syns inte min tabell i trädet? Objektträdet läses från databasen — använd Uppdatera objekten i datakällans meny efter att du har ändrat något utanför plattformen.
  • Varför går det inte att skapa relationen? De två kolumnerna måste vara kompatibla: en primärnyckel av typen integer kopplas till en integer. Om du drog till fel fält, avbryt och gör om — dialogrutan säger att kolumnerna inte är valda.
  • Varför syns inte fältet conta i mina data? Navigatorerna är inga kolumner: de finns bara genom modellen. Om du frågar via SQL-konsol ser du de verkliga kolumnerna; det är i API:erna och på skärmarna som navigatorerna dyker upp.
  • Varför låter plattformen mig inte ta bort ett konto? Du valde Ingenting (blockerar om det finns barn) i ON DELETE — och det finns kontakter eller affärsmöjligheter som pekar på det. Ta bort dem först, eller ändra relationens regel.

Grunden är lagd. Nästa etapp: skärmarna.