ڈیٹا بیس اور Postgres
Databases and Postgres
45 منٹ
تین طریقے
ڈیٹا بیس ڈیٹا کا منظم ذخیرہ ہے، اور Postgres دنیا کا سب سے قابلِ احترام اوپن سورس relational ڈیٹا بیس ہے۔ Apple, Reddit, Instagram، اور پاکستان کے زیادہ تر سنجیدہ فن ٹیک اسی پر چلتے ہیں۔ ماڈل سادہ: ڈیٹا tables میں رہتا ہے، ہر row ایک ریکارڈ، ہر column ایک فیلڈ، اور tables foreign keys سے جڑتے ہیں۔ SQL وہ زبان ہے جس میں آپ ڈیٹا بیس سے سوال پوچھتے ہیں۔ Postgres کا اچھا علم ساری زندگی کا ہنر ہے، اس کا نحو بیس سال سے تقریباً نہیں بدلا۔
پہلا طریقہ، schema بنائیں۔ ہماری remittance ایپ کے لیے تین tables: customers (id, full_name, cnic, phone, created_at), beneficiaries (id, customer_id, full_name, country, iban, currency), transfers (id, customer_id, beneficiary_id, amount_pkr, amount_dest, fx_rate, status, created_at)۔ transfers کا customer_id کالم customers کی row کی طرف اشارہ کرتا ہے، یہ foreign key ہے۔ id کالم primary keys ہیں، عام طور پر UUIDs یا bigints۔ کوڈ سے پہلے کاغذ پر schema درست کریں؛ پروڈکشن میں غلط schema ڈیزائن کے مقابلے میں سو گنا مہنگا پڑتا ہے۔
دوسرا طریقہ، SQL لکھیں۔ CREATE TABLE transfers (id uuid primary key default gen_random_uuid(), customer_id uuid references customers(id) not null, beneficiary_id uuid references beneficiaries(id) not null, amount_pkr numeric(14,2) not null check (amount_pkr > 0), amount_dest numeric(14,2) not null, fx_rate numeric(10,4) not null, status text not null default 'pending', created_at timestamptz default now());۔ ایک گاہک کی ایک لاکھ روپے سے اوپر کی pending منتقلیاں نکالنے کے لیے: SELECT id, amount_pkr, created_at FROM transfers WHERE customer_id = $1 AND status = 'pending' AND amount_pkr > 100000 ORDER BY created_at DESC۔ بینفشری ناموں کے ساتھ JOIN: SELECT t.id, t.amount_pkr, b.full_name FROM transfers t JOIN beneficiaries b ON t.beneficiary_id = b.id WHERE t.customer_id = $1۔
فوری چیک
فوری چیک: جدید AI روایتی قاعدہ بنیاد پروگرام سے کس طرح مختلف ہے؟
کیوں؟
کیوں کا پہلا درجہ: relational کیوں؟ کیونکہ دنیا relational ہے۔ ایک گاہک کی کئی منتقلیاں۔ ایک منتقلی ایک گاہک اور ایک مستفید سے جڑی۔ ایک مستفید ایک گاہک کا۔ NoSQL آپ کو ان رشتوں کو نظر انداز کرنے دیتا ہے، مگر بعد میں قیمت پڑتی ہے جب آپ 'کرن نے اس سال کتنا بھیجا' کا جواب ہر document چھان کر دیں گے۔ Postgres ایک indexed query میں ملی سیکنڈز میں جواب دیتا ہے۔
Claude کے ساتھ آزمائیں
Claude کے ساتھ پرامپٹ: 'ایک تین درجاتی remittance ایپ کے لیے Postgres schema لکھیں: senders, recipients, transactions۔ ماہانہ KYC رپورٹنگ کے لیے indexes، foreign-key constraints، PKR کے لیے موزوں numeric precision، check constraint والا status enum، اور triggers کے ساتھ audit-log table شامل کریں۔ پھر اس کے مطابق Drizzle ORM schema لکھیں۔ پھر آپریشنز ٹیم کی روزانہ کی پانچ سرفہرست queries، EXPLAIN ANALYZE کی توقعات سمیت۔' schema.sql اور queries.sql میں محفوظ کریں اور چلائیں۔
ماخذ
ماخذ اور مزید مطالعہ۔ PostgreSQL کی دستاویزات۔ Drizzle ORM dev۔ Use The Index, Luke (indexing کے لیے)۔ Markus Winand کی SQL Performance Explained۔ Crunchy Data اور Supabase کے بلاگز۔ SBP کی KYC اور AML ہدایات۔ PDPA 2023 ڈیٹا کی حفاظت کے لیے۔