Atdalīšana
Robeža, ko sargā datubāze, nevis kods
Katrs CRM apgalvo, ka ir vairāku nomnieku sistēma. Šis apgalvojums ir lēts; svarīgi ir tas, kurš slānis tur robežu. Ja atbilde ir "mūsu lietojumprogramma vienmēr pievieno pareizo filtru", tad garantija ir tikpat laba kā mazāk atpūstā izstrādātāja, kas jebkad rakstījis vaicājumu.
iKonekt bija vairāku nomnieku sistēma jau no pirmās migrācijas, nevis pēc tam pielāgota atpakaļejošā ceļā, kas izklausās pēc lepnibas, bet patiesībā ir atzīšanās: to pielāgot atpakaļejošā ceļā pārliecinoši ir gandrīz neiespējami, un ikvienam, kas to mēģināja, ir sava pieredze.
Atdalīšana dzīvo datubāzē. Katrs no divdesmit sešiem tabulu nes savam nomniekam piederošo atzīmi, un politika, kas to pārbauda, darbojas pie katra lasījuma un katra rakstījuma, pilnībā zem lietojumprogrammas. Vaicājums, kas aizmirst robežu, neatgriež kāda cita klientus. Tas neatgriež neko.
Rindas līmeņa drošība, piespiedu
Tā nav vienošanās, ne koda pārskata noteikums. Datubāze atsakās. Septiņdesmit divas politikas, uzrakstītas pa vienai, nevis ģenerētas — jo ģenerēta politika ir politika, ko neviens nav lasījis.
Saliktās atslēgas
Bērna ieraksts atsaucas uz savu nomnieku un savu vecāku vienlaikus, kā pāri. Svešs identifikators no nepareiza uzņēmuma neatrisinās — tas vienkārši nav derīga atsauce.
Nekāda noklusējuma nomnieka, nekad
Pieprasījums bez darbības jomas klusi nepārvēršas par pieprasījumu nomniekam nulle. Tas izmet kļūdu, pirms sasniedz datubāzi. Nav "neierobežota" režīma, ko aizmirst izslēgt.
Kļūda, kas nevarēja paziņot par sevi
Kamēr tika veikts nomnieku atdalīšanas darbs, lielākā daļa kļūdu bija skaļas. Dodiet diviem uzņēmumiem to pašu klienta domēnu, un datubāze iebildīs uzreiz, ar kļūdas kodu un izsaukumu trace; to izlabojat pirms pusdienlaika.
Viena neiebilda. Rediģējamu uzvedņu pārrakstu tabula bija atslēgta tikai pēc uzvedņa veida — nevis pēc veida un nomnieka. Otrs uzņēmums, rediģējot savu kopiju, būtu klusi pārrakstījis pirmā uzņēmuma kopiju, ar pilnīgi derīgu SQL, bez kļūdas, bez brīdinājuma un bez neizdošanās testa. To atrada, izlasot katru atlikušo unikālo indeksu pēc atslēgas maiņas, pa vienam, aizdomās, ka skaļajiem ir pavadonis.
Mēs to pieminam, jo tā ir godīga šī darba forma. Atdalīšana nav funkcija, ko ieslēdzat; tā ir ieradums lasīt shēmas garlaicīgās daļas, pieņemot, ka tur kaut kas ar jums nepiekrīt.
Testi, pierakstam: to ir 942, un tie darbojas pret datubāzi, kas tiek pārbūvēta no nulles pēc katras izmaiņas. Tie nav tur, lai pierādītu, ka dizains ir gudrs. Tie ir tur, jo šī konkrētā dizaina kļūmju režīms ir kluss, un klusām kļūmēm vajag kādu, kas kliedz to vietā.
Ko atdalīšana dod parastam cilvēkam
- Grupa var vadīt vairākus uzņēmumus no vienas instalācijas, un pārdevējs vienā nekad neredzēs otra uzņēmuma klientu — nevis pēc politikas, bet pēc konstrukcijas.
- Partneru programma, uzvedņu kopa, pretenzija uz klientu: viss ar darbības jomu katram uzņēmumam, tāpēc viena nomnieka konfigurācija nevar kļūt par vispārēju.
- Dzēšanas pieprasījums tiek izpildīts robežas ietvaros, nevis pāri kopīgai kaudzei — tieši tāpēc ir iespējams atbildēt godīgi.
- Un neviens neko no tā nav jāatceras. Tas ir būtība — garantija, kas atkarīga no atcerēšanās, nav garantija.
Vēl viena rindiņa, kas nav par datubāzēm
Katrs brāļa serviss ģimenē tur savu nosauktu pieteikumu. Nekas nerunā ar kopīgu pieteikumu, tāpēc neviens serviss nevar nejauši rīkoties kā cits — neliela discipline, kas radās tieši no tā, ka reiz mums bija kopīgs marķieris un tas nepatika.
Tā pati intuīcija kā datubāzes noteikums. Padariet nepareizo lietu neiespējamu, nevis tikai neiesakāmu, un jūs tērējat uzmanību klientiem, nevis modrībai.
- 126 tabulasKatra nes savu nomnieku, ar piespiedu pārbaudi.
- 272 politikasUzrakstītas pa vienai, tāpēc katru izlasījis cilvēks.
- 3942 testiPret datubāzi, kas pārbūvēta no nulles pēc katras izmaiņas.
- 40 noklusējuma nomniekuPieprasījums bez darbības jomas nekad nesasniedz datus.
Mērīts uz dzīvā būvējuma

“Mūsu lietojumprogramma vienmēr filtrē pēc uzņēmuma.”
Šajā teikumā vārds “vienmēr” strādā ļoti smagi.
Pārvietojiet robežu lejup datubāzē, un aizmirsts WHERE klauzula atgriež neko, nevis kāda cita klientus. Tukšs ekrāns ir labāka kļūme nekā neērta iepazīšanās.
Grupām ar vairākiem zīmoliem →