iKonekt

Skilnad

Grensa som databasen held, ikkje koden

Kvar CRM hevdar å vera fleirbrukar. Påstanden er billig; det som tel er kva lag som held linja. Om svaret er «applikasjonen vår legg alltid til riktig filter», er garantien berre like god som den mest utkvilte utviklaren som nokonsinne skreiv ei spørring.

iKonekt var fleirbrukar frå den første migreringa i staden for å bli ettermontert, noko som høyrast ut som skryt og eigentleg er ei innrømming: å ettermontere det er nesten umogleg å gjera overbevisande, og alle som har prøvd har ei historie.

Skiljet bur i databasen. Kvar av dei tjueseks tabellane ber med seg leigetakaren han høyrer til, og regelen som kontrollerer det køyrer ved kvar lesing og kvar skriving, heilt under applikasjonen. Ei spørring som gløymer grensa returnerer ikkje nokon andre sine kundar. Ho returnerer ingenting.

Radenivå-sikkerheit, påtvinga

Ikkje ein konvensjon, ikkje ein kodevurderingsregel. Databasen nektar. Sjuttito reglar, skrivne ut éin og éin i staden for genererte — for ein generert regel er ein regel ingen har lese.

Samansette nøklar

Ein underpost refererer til leigetakaren sin og foreldra si samtidig, som eit par. Ei vill identifikator frå feil selskap løysast ikkje — ho er rett og slett ikkje ein gyldig referanse.

Ingen standardleigetakar, nokonsinne

Ein førespurnad utan omfang blir ikkje stille ein førespurnad om leigetakar null. Han kastar feil før han når databasen. Det finst ingen «uavgrensa» modus å gløyma å slå av.

Feilen som ikkje kunne melde seg sjølv

Medan fleirbrukar-arbeidet pågikk, var dei fleste feila høyrlege. Gje to selskap same kundedomen, og databasen protesterer med ein gong, med feilkode og stakkspor; du fikser det før lunsj.

Ein protesterte ikkje. Ein tabell med redigerbare prompt-overskrivingar var nøkkla på prompten sin type aleine — ikkje på type og leigetakar. Eit andre selskap som redigerte si eiga kopi ville ha overskrive det første selskapet sin i stillhet, gjennom heilt gyldig SQL, utan feil, utan åtvaring, og utan fallande test. Han vart funnen ved å lesa kvar gjenverande unike indeks etter å ha endra ein nøkkel, éin om gongen, i mistanke om at dei høyrlege hadde selskap.

Vi nemner det fordi det er den ærlege forma for dette arbeidet. Skilje er ingen funksjon du slår på; det er ein vane med å lesa dei kjedelege delane av skjemaet i von om at noko der inne er ueinig med deg.

Testane, for protokollen: 942 av dei, køyrt mot ein database bygd frå null ved kvar endring. Dei er ikkje der for å bevisa at designet er klok. Dei er der fordi feilmoden for akkurat dette designet er stille, og stille feil treng nokon som roper på deira vegne.

Kva skiljet gjev eit vanleg menneske

  • Ein gruppe kan driva fleire selskap frå ei installasjon, og ein seljar i det eine vil aldri sjå ein kunde frå det andre — ikkje ved regel, men ved konstruksjon.
  • Ein partnarprogram, eit sett promptar, eit krav på ein kunde: alt med omfang per selskap, så ein leigetakar sin konfigurasjon kan ikkje bli alle sin.
  • Ein slettingsførespurnad blir imøtekommen innanfor ei grense i staden for på tvers av ein felles haug, og det er dette som gjer det mogleg å svara ærleg.
  • Og ingen treng å hugse nokon av det. Det er poenget — eit løfte som avheng av å bli hugsa er ikkje eit løfte.

Ein linje til som ikkje handlar om databasar

Kvar teneste i familien held sitt eige namngitte ogn. Ingenting snakkar med eit delt ogn, så ingen teneste kan ved eit uhell opptre som ein annan — ei lita disiplin som kom direkte frå å ein gong ha hatt eit delt token og ikkje ha likt det.

Det er same instinktet som databasereglene. Gjør det gale umogeleg i staden for frårådd, og du brukar merksemda di på kundar i staden for på årvåkenheit.

GrensaUnder applikasjonen
  • 126 tabellarKvar einaste ber sin eigen leigetakar, med kontrollen tvinga på.
  • 272 retningslinjerSkrivne ut éin for éin, slik at kvar enkelt er blitt lesen av eit menneske.
  • 3942 testarMot ein database bygd opp frå null, ved kvar endring.
  • 40 standardleigetakararEin førespurnad utan omfang når aldri fram til dataa.

Målt på live-bygget

«Applikasjonen vår filtrerer alltid etter føretak.»

«Alltid» gjer mykje arbeid i den setninga.

Flytt grensa ned i databasen, og ei gløymd WHERE-klausul gjev ingenting i staden for nokon andre sine kundar. Ein tom skjerm er ein betre feil enn ein kleint introduksjon.

For grupper som driv fleire merkevarer →