iKonekt
کنسول کھولیں

علیحدگی

وہ حد جو ڈیٹابیس رکھتا ہے، نہ کہ کوڈ

ہر CRM دعویٰ کرتا ہے کہ وہ ملٹی-ٹیننٹ ہے۔ دعویٰ سستا ہے؛ اصل بات یہ ہے کہ کون سی تہہ یہ لکیر تھامے ہوئے ہے۔ اگر جواب یہ ہو کہ "ہماری ایپلیکیشن ہمیشہ درست فلٹر لگاتی ہے"، تو ضمانت اتنی ہی مضبوط ہے جتنا وہ سب سے کم آرام والا ڈویلپر جس نے کبھی کوئی کوئری لکھی۔

iKonekt اپنی پہلی مائیگریشن سے ہی ملٹی-ٹیننٹ تھا، بعد میں جوڑا نہیں گیا، جو بظاہر فخر لگتا ہے مگر حقیقت میں اعتراف ہے: بعد میں یہ جوڑنا قائل کرنے کے قابل ہونا تقریباً ناممکن ہے، اور جس نے کوشش کی اُس کے پاس ایک کہانی ہے۔

علیحدگی ڈیٹابیس میں رہتی ہے۔ چھبیس جدولوں میں سے ہر ایک اپنا ٹیننٹ ساتھ رکھتا ہے، اور اُس کی جانچ کرنے والی پالیسی ہر پڑھنے اور ہر لکھنے پر چلتی ہے، ایپلیکیشن سے بالکل نیچے۔ کوئی ایسی کوئری جو حد بھول جائے، کسی اور کے گاہک واپس نہیں لاتی۔ وہ کچھ نہیں لاتی۔

رو-لیول سیکیورٹی، لازمی

نہ کوئی روایت، نہ کوئی کوڈ ریویو کا اصول۔ ڈیٹابیس انکار کرتا ہے۔ بہتر (72) پالیسیاں، ایک ایک کر کے لکھی گئیں، نہ کہ جنریٹ کی گئیں — کیونکہ جنریٹ شدہ پالیسی وہ ہے جسے کسی نے پڑھا ہی نہیں۔

مرکب کلیدیں (Composite keys)

کوئی چائلڈ ریکارڈ اپنے ٹیننٹ اور اپنے پیرنٹ دونوں کا حوالہ ایک ساتھ، جوڑے کی صورت میں دیتا ہے۔ غلط کمپنی کا کوئی بے تہا شناختی نمبر حل نہیں ہوتا — وہ محض ایک درست حوالہ نہیں ہوتا۔

کوئی ڈیفالٹ ٹیننٹ کبھی نہیں

بغیر سکوپ کی درخواست خاموشی سے ٹیننٹ زیرو کی درخواست نہیں بن جاتی۔ وہ ڈیٹابیس تک پہنچنے سے پہلے ہی خرابی پھینکتی ہے۔ کوئی "unscoped" موڈ نہیں جسے بند کرنا بھول جائیں۔

وہ خرابی جو اپنی اطلاع دے ہی نہ سکتی

جب ٹیننسی کا کام ہو رہا تھا، تو زیادہ تر غلطیاں شور والی تھیں۔ دو کمپنیوں کو ایک ہی گاہک کا ڈومین اور ڈیٹابیس آبجیکٹ فوراً دیں، تو ایرر کوڈ اور اسٹیک ٹریس کے ساتھ غلطی سامنے آ جاتی ہے؛ آپ اسے دوپہر سے پہلے ٹھیک کر لیتے ہیں۔

ایک نے اعتراض نہیں کیا۔ قابلِ ترمیم پرامپٹ اووررائیڈز کی ایک جدول صرف پرامپٹ کی قسم پر کلید تھی — قسم اور ٹیننٹ دونوں پر نہیں۔ دوسری کمپنی اپنی نقل میں ترمیم کرتی تو پوری طرح درست SQL کے ذریعے پہلی کمپنی کی نقل خاموشی سے اوور رائٹ ہو جاتی، نہ کوئی ایرر، نہ کوئی وارننگ، نہ کوئی ناکام ٹیسٹ۔ یہ اس شبہ پر کہ شور والی غلطیوں کا کوئی ساتھی بھی ہوگا، کلید بدلنے کے بعد باقی ہر یونیک انڈیکس کو ایک ایک کر کے پڑھنے سے ملی۔

ہم اس کا ذکر اس لیے کرتے ہیں کہ یہی اس کام کی سچی صورت ہے۔ علیحدگی کوئی ایسی خصوصیت نہیں جسے آپ سوئچ آن کر دیں؛ یہ اسکیمے کے بور حصوں کو اس مفروضے پر پڑھنے کی عادت ہے کہ اس میں کچھ آپ سے اختلاف رکھتا ہے۔

ریکارڈ کے لیے ٹیسٹ: 942 ٹیسٹ، ہر تبدیلی پر صفر سے دوبارہ بنائے گئے ڈیٹابیس کے خلاف چلائے جاتے ہیں۔ یہ اس بات کو ثابت کرنے کے لیے نہیں کہ ڈیزائن کتنا ہوشیار ہے۔ یہ اس لیے ہیں کہ اس خاص ڈیزائن کا ناکام ہونا خاموش ہوتا ہے، اور خاموش ناکامیوں کی طرف سے کسی کو چیخنا پڑتا ہے۔

عام آدمی کو علیحدگی سے کیا ملتا ہے

  • ایک گروپ ایک ہی انسٹال سے کئی کمپنیاں چلا سکتا ہے، اور ایک کمپنی کا سیلر کبھی دوسری کے گاہک کو نہیں دیکھے گا — پالیسی سے نہیں، ساخت سے۔
  • ایک پارٹنر پروگرام، پرامپٹس کا ایک سیٹ، گاہک پر ایک دعویٰ — سب کمپنی کے دائرے میں، تاکہ ایک ٹیننٹ کی ترتیب سب کی نہ بن جائے۔
  • مٹانے کی درخواست مشترکہ ڈھیر کے بجائے ایک حد کے اندر پوری ہوتی ہے، اور یہی اسے ایمانداری سے پورا کرنا ممکن بناتا ہے۔
  • اور کسی کو اس میں سے کچھ یاد رکھنے کی ضرورت نہیں۔ یہی اصل نکتہ ہے — یاد رکھنے پر منحصر ضمانت ضمانت نہیں ہوتی۔

ایک اور بات جو ڈیٹابیس کے بارے میں نہیں

خاندان کی ہر سسٹر سروس اپنا نامزد کریڈینشیئل رکھتی ہے۔ کوئی چیز مشترکہ کریڈینشیئل سے بات نہیں کرتی، اس لیے کوئی سروس غلطی سے دوسری کی طرح کام نہیں کر سکتی — ایک چھوٹا سا نظم جو براہِ راست ایک مشترکہ ٹوکن رکھنے اور اس سے لطف اندوز نہ ہونے کے تجربے سے پیدا ہوا۔

یہی جذبہ ڈیٹابیس کے اصول میں بھی ہے۔ غلط چیز کو ناپسندیدہ بنانے کے بجائے ناممکن بنائیں، اور آپ اپنی توجہ چوکیداری کے بجائے گاہکوں پر لگائیں گے۔

حدایپلیکیشن کے نیچے
  • 126 جدولہر ایک اپنا ٹیننٹ رکھتا ہے، چیک لازمی آن کے ساتھ۔
  • 272 پالیسیاںالگ الگ لکھی گئی ہیں، تاکہ ہر ایک کو کسی انسان نے پڑھا ہو۔
  • 3942 ٹیسٹصفر سے دوبارہ بنائے گئے ڈیٹابیس کے خلاف، ہر تبدیلی پر۔
  • 40 ڈیفالٹ ٹیننٹبغیر دائرے کی درخواست کبھی ڈیٹا تک نہیں پہنچتی۔

لائیو بلڈ پر ناپا گیا

”ہماری ایپلیکیشن ہمیشہ کمپنی کے مطابق فلٹر کرتی ہے۔“

اس جملے میں ”ہمیشہ“ بہت بوجھ اٹھا رہا ہے۔

حد کو ڈیٹابیس میں نیچے لے جائیں تو بھولا ہوا WHERE کلاز کسی اور کے گاہکوں کے بجائے کچھ بھی واپس نہیں کرتا۔ خالی اسکرین بے تکلفی سے بہتر ناکامی ہے۔

کئی برانڈز چلانے والے گروپس کے لیے →