Oddelenie
Hranica, ktorú drží databáza, nie kód
Každý CRM sa hlási k viacnájomníckosti. Toto tvrdenie je lacné; dôležité je, ktorá vrstva stráži líniu. Ak je odpoveďou „naša aplikácia vždy pridá správny filter“, potom je záruka len taká dobrá, aký je najmenej vyspatý vývojár, ktorý kedy napísal dotaz.
iKonekt bol viacnájomnícky od svojej prvej migrácie, nie dodatočne doplnený — to znie ako chvastanie, ale v skutočnosti je to priznanie: dodatočne to presvedčivo urobiť je takmer nemožné a každý, kto to skúsil, má svoj príbeh.
Oddelenie žije v databáze. Každá z dvadsiatich šiestich tabuliek nesie nájomníka, ku ktorému patrí, a politika, ktorá to kontroluje, beží pri každom čítaní a každom zápise, celkom pod aplikáciou. Dotaz, ktorý zabudne na hranicu, nevráti zákazníkov niekoho iného. Nevráti nič.
Zabezpečenie na úrovni riadkov, vynútené
Nie je to konvencia, nie je to pravidlo kódovej revízie. Databáza odmieta. Sedemdesiatdveľa politík, napísaných jednu po druhej, nie generovaných — lebo generovanú politiku nikto nečítal.
Zložené kľúče
Záznam potomka odkazuje na svojho nájomníka a súčasne na svojho rodiča, ako pár. Stratený identifikátor od inej firmy sa nevyrieši — jednoducho nie je platným odkazom.
Žiadny predvolený nájomník, nikdy
Požiadavka bez rozsahu sa potichu nestane požiadavkou na nájomníka nula. Zlyhá skôr, než sa dostane do databázy. Neexistuje režim „bez rozsahu“, ktorý by ste mohli zabudnúť vypnúť.
Chyba, ktorá sa nemohla priznať
Počas práce na viacnájomníckosti bola väčšina chýb hlasná. Dajte dvom firmám rovnakú doménu zákazníka a databáza okamžite namietne, s kódom chyby a výpisom zásobníka; opravíte to ešte pred obedom.
Jedna nenamietla. Tabuľka upraviteľných prepisov promptov bola kľúčovaná len podľa druhu promptu — nie podľa druhu a nájomníka. Druhá firma, ktorá by upravila svoju kópiu, by potichu prepísala kópiu prvej firmy, celkom platným SQL, bez chyby, bez varovania a bez padajúceho testu. Našla sa čítaním každého zostávajúceho unikátneho indexu po zmene kľúča, jeden po druhom, z podozrenia, že aj tie hlasné majú spoločenského spoločníka.
Spomíname to, pretože to je úprimná podoba tejto práce. Oddelenie nie je funkcia, ktorú zapnete; je to návyk čítať nudné časti schémy s predpokladom, že vám v nich niečo odporuje.
Testy, pre poriadok: je ich 942 a bežia proti databáze stavanej od nuly pri každej zmene. Nie sú tam, aby dokázali, že návrh je múdry. Sú tam preto, že spôsob zlyhania tohto konkrétneho návrhu je tichý — a tiché zlyhania potrebujú niekoho, kto bude kričať ich menom.
Čo oddelenie dáva obyčajnému človeku
- Skupina môže prevádzkovať viacero firiem z jednej inštalácie a predavač v jednej nikdy neuvidí zákazníka druhej — nie politiku, ale konštrukciou.
- Partnerský program, sada promptov, nárok na zákazníka: všetko má rozsah po firme, takže konfigurácia jedného nájomníka sa nemôže stať konfiguráciou všetkých.
- Žiadosť o výmaz je splnená v rámci hranice, nie cez zdieľanú hromadu — a to je to, čo umožňuje odpovedať úprimne.
- A nikto si to nemusí pamätať. V tom je pointa — záruka, ktorá závisí od pamätania si, nie je zárukou.
Ešte jeden riadok, ktorý nie je o databázach
Každá sesterská služba v rodine drží svoju vlastnú pomenovanú poverenie. Nič nehovorí zdieľaným, takže žiadna služba nemôže omylom konať ako iná — malá disciplína, ktorá prišla priamo z toho, že sme raz mali zdieľaný token a neužili si to.
Je to ten istý inštinkt ako pravidlo databázy. Urobte nesprávnu vec nemožnou namiesto odrádzanej a vašu pozornosť môžete venovať zákazníkom namiesto ostražitosti.
- 126 tabuliekKaždá nesie svojho nájomníka, s vynútenou kontrolou.
- 272 politíkNapísaných jednotlivo, takže každú prečítal človek.
- 3942 testovProti databáze stavanej od nuly, pri každej zmene.
- 40 predvolených tenantovŽiadosť bez rozsahu sa nikdy nedostane k dátam.
Merané na živom builde

„Naša aplikácia vždy filtruje podľa firmy.“
To „vždy“ v tej vete robí poriadnu prácu.
Presuňte hranicu dole do databázy a zabudnutá klauzula WHERE nevráti nič namiesto cudzích zákazníkov. Prázdna obrazovka je lepšie zlyhanie ako nepríjemné predstavenie.
Pre skupiny prevádzkujúce viac značiek →