Som nævnt bruger Azure Mobile Services en SQL Server som backend database.  Det er ikke en normal SQL Server.  F.eks. findes begrebet foreign keys ikke, og Azure management konsollen giver ikke mulighed for at tilføje kolonner til tabeller som sådan.  I stedet bliver kolonner oprettet dynamisk ud fra det data, man sender til servicen.  Dette er en setting under “Configure” fanen for ens Mobile Service.

image

Husk at slå dynamic schema fra i produktion!

I første omgang har styrdindiabetes.dk behov for en enkelt tabel til at holde de indtastede blodsukkermåling.  En måling består bl.a. af en dato, typen (morgenmad, frokost, aftensmad eller sengetid) og blodsukker før og efter måltidet, hvor det giver mening.  Som JavaScript objekt kunne det se således ud i styrdindiabetes.dk (med lidt knockout.js blandet ind i det):

    var entry =
        {
            type: self.type(),
            beskrivelse: self.beskrivelse(),
            blodsukkerfoer: self.blodsukkerfoer(),
            blodsukkerefter: self.blodsukkerefter(),
            dato: dato,
            antalInsulinEnheder: self.antalInsulinEnheder(),
        };

CRUD operationer foregår vha. en REST API med POST, GET, PUT og DELETE.  Microsoft har heldigvis pakket REST API’en ind i en dejlig JavaScript API.  En CREATE/INSERT/POST operation kan f.eks. se således ud:

    client.getTable("Entries")
        .insert(entry)
        .done(function (result) {
            self.id(result.id);
            // ...
            }
        }, function (err) {
            self.root.errorMessage(err);
        });

JavaScript API’en opbygger HTTP kaldet for os.

Første gang vi laver ovenstående kald til “insert”, vil Mobile Service benytte dynamic schema og tilføje kolonner i Entries tabellen svarende til de properties, jeg definerede på entry objektet ovenfor.

Om  man kan lide dynamic schema er en smagssag.  Man kan godt frygte for integriteten i ens SQL Server database, og at der bliver givet køb på normalisering.  På den anden side øges produktiviteten betragteligt, fordi man kan koncentrere sig om at lave sin applikation og ikke om at designe database og lave datalag etc.  Jeg forestiller mig ikke, at Azure Mobile Services er beregnet til store datatunge projekter.

I næste indlæg skal vi se på, hvordan vi kan bruge login information til at styre adgang til data.

Kommentarerne er lukkede