Ayrım
Kodun değil, veritabanının koruduğu sınır
Her CRM çok kiracılı olduğunu iddia eder. İddia ucuzdur; asıl önemli olan, sınırı hangi katmanın tuttuğudur. Cevap "uygulamamız her zaman doğru filtreyi ekler" ise, bu güvence ancak bu sorguyu yazmış en yorgun geliştiricinin kalitesi kadardır.
iKonekt, sonradan eklenmiş değil, ilk göçünden beri çok kiracılıydı; bu bir övünme gibi görünse de aslında bir itiraftır: bunu sonradan inandırıcı biçimde eklemek neredeyse imkânsızdır ve deneyen herkesin bir hikâyesi vardır.
Ayrım veritabanında yaşar. Yirmi altı tablonun her biri ait olduğu kiracıyı taşır ve bunu denetleyen politika her okuma ve yazmada, uygulamanın tamamen altında çalışır. Sınırı unutan bir sorgu başkasının müşterilerini döndürmez. Hiçbir şey döndürmez.
Satır düzeyi güvenlik, zorunlu
Bir kural kararı değil, bir kod inceleme kuralı değil. Veritabanı reddeder. Yetmiş iki politika, tek tek elle yazılmıştır, üretilmemiştir — çünkü üretilmiş bir politika, kimsenin okumadığı bir politikadır.
Bileşik anahtarlar
Bir alt kayıt, kiracısına ve üst kaydına birlikte, bir çift olarak referans verir. Yanlış şirketten gelmiş başıboş bir tanımlayıcı çözülmez — geçerli bir referans değildir.
Varsayılan kiracı yok, hiçbir zaman
Kapsamsız bir istek, sessizce sıfır numaralı kiracı için bir isteğe dönüşmez. Veritabanına ulaşmadan önce hata verir. Kapatmayı unutabileceğiniz bir "kapsamsız" mod yoktur.
Kendini duyuramayan hata
Kiracılık çalışmaları sürerken yapılan hataların çoğu gürültülüydü. İki şirkete aynı müşteri alan adını verin, veritabanı derhal bir hata kodu ve yığın iziyle itiraz eder; öğle yemeğinden önce düzeltirsiniz.
Biri itiraz etmedi. Düzenlenebilir istem (prompt) geçersiz kılmalarından oluşan bir tablo yalnızca istemin türüne göre anahtarlanmıştı — türe ve kiracıya değil. İkinci bir şirket kendi kopyasını düzenlediğinde, tamamen geçerli SQL ile, ilk şirketinkini sessizce üzerine yazardı: hata yok, uyarı yok, başarısız test yok. Anahtar değiştirdikten sonra kalan her benzersiz indeksi tek tek okuyarak, gürültülü olanların yalnız olmadıkları kuşkusuyla bulundu.
Bundan söz etmemizin nedeni, bu işin dürüst biçimi olması. Ayrım, açıp kapattığınız bir özellik değildir; şemanın sıkıcı kısımlarını, içinde bir şeyin size katılmadığını varsayarak okuma alışkanlığıdır.
Testler, kayıtlara geçsin: 942 tanesi, her değişiklikte sıfırdan yeniden kurulmuş bir veritabanına karşı çalıştırılır. Amaçları tasarımın zekice olduğunu kanıtlamak değildir. Amaçları, bu tasarımın hata biçiminin sessiz olması ve sessiz hataların adına birinin bağırması gerektiğidir.
Ayrımın sıradan bir insana kazandırdıkları
- Bir grup tek kurulumdan birkaç şirket yürütebilir ve birindeki satıcı, diğerinin müşterisini asla göremez — politika ile değil, yapı gereği.
- Bir ortaklık programı, bir istem seti, bir müşteri talebi: hepsi şirket bazında kapsamlıdır, böylece bir kiracının yapılandırması herkesinki olamaz.
- Bir silme talebi, paylaşılmış bir yığın boyunca değil, bir sınır içinde yerine getirilir — dürüstçe yanıt vermeyi mümkün kılan da budur.
- Ve kimsenin hiçbirini hatırlaması gerekmez. Asıl nokta budur — hatırlanmaya bağlı olan bir güvence, güvence değildir.
Veritabanlarıyla ilgili olmayan bir satır daha
Ailedeki her kardeş hizmet kendi adlandırılmış kimlik bilgisini tutar. Hiçbiri paylaşılmış bir kimlik bilgisiyle konuşmaz; böylece hiçbir hizmet yanlışlıkla bir başkası gibi davranamaz — bir zamanlar paylaşılmış bir token'ımız olmuşluğun ve bundan hoşlanmamışlığın doğrudan getirdiği küçük bir disiplin.
Veritabanı kuralıyla aynı içgüdüdür. Yanlış olanı caydırılmak yerine imkânsız kılın, dikkatinizi müşterilere harcayın, tetikte olmaya değil.
- 126 tabloHer biri kendi kiracısını taşır, denetim zorunlu.
- 272 politikaTek tek yazılmıştır, böylece her birini bir insan okumuştur.
- 3942 testHer değişiklikte sıfırdan yeniden kurulmuş bir veritabanına karşı.
- 40 varsayılan kiracıKapsamı olmayan bir istek veriye asla ulaşmaz.
Canlı derleme üzerinde ölçülmüştür

“Uygulamamız her zaman şirkete göre filtreler.”
Bu cümledeki “her zaman” kelimesi çok ağır bir yük taşıyor.
Sınırı veritabanına kadar indirin; unutulmuş bir WHERE yan tümcesi, başkasının müşterilerini döndürmek yerine hiçbir şey döndürmez. Boş bir ekran, gafetten daha iyi bir hatadır.
Birden fazla marka yürüten gruplar için →