Airtable'dan PostgreSQL'e Göç: Pratik Çeviri Kalıpları
Bağlantılı kayıtları, rollup'ları, formülleri ve izinleri bir üretim uygulaması için nasıl çevireceğinizi öğrenerek Airtable'dan PostgreSQL'e göç edin.

Neden Airtable kalıpları üretim veritabanında farklı hissedilir
Airtable, bir tablo gibi hissettiren ama yapı veren bir şey gerektiğinde iyidir. Sorun, base üretim sistemi haline gelip her gün daha çok insan ona bağımlı olduğunda başlar. Akıllıca kurulmuş bağlı kayıtlar, rollup'lar ve formüller yavaş, kontrol etmesi zor ve yanlışlıkla kolayca değiştirilebilir bir hale dönüşebilir.
PostgreSQL destekli bir üretim uygulaması farklı beklentiler etrafında kurulur. Veriler paylaşılır. Kurallar her zaman uygulanır (sadece bir görünümde değil). Değişikliklerin izlenebilir olması gerekir. Bu yüzden “Airtable'dan PostgreSQL'e göç” genellikle tabloları kopyalamaktan ziyade davranışı çevirmeyle ilgilidir.
Üretim kullanımı genellikle birkaç somut gereksinim anlamına gelir:
- Güvenilirlik: uygulama her kullanıcı için her zaman aynı şekilde davranır.
- Erişim kontrolü: kişiler yalnızca izinli olduklarını görür ve düzenler.
- Denetlenebilirlik: “kim neyi, ne zaman değiştirdi?” sorusuna cevap verebilmelisiniz.
- Ölçek performansı: daha fazla kayıt ve kullanıcı günlük işi bozmamalı.
- Net sahiplik: güncellemeler uygulamanın kuralları aracılığıyla olmalı, görüntülerde dağınık elle düzenlemelerle değil.
Airtable'da birçok kural “görünüm zamanı”dır. Bir rollup toplam gösterir, bir formül hesaplanmış bir değer gösterir ve filtrelenmiş bir görünüm kayıtları gizler. PostgreSQL'de bu davranışlar genellikle ilişkiler, aggregate sorgular ve uygulama mantığı haline gelir; hangi kullanıcı uygulamada olursa olsun tutarlı çalışır.
Bazı Airtable davranışları bire bir eşleşmeyebilir. "Sadece çalışan" bir bağlantı alanı sıkı kurallara sahip bir join tablosu olabilir. Metin, tarih ve lookup'ları karıştıran bir formül SQL ifadesi, bir veritabanı görünümü veya arka uç mantığına dönüşebilir.
Basit bir örnek: Airtable'da bir yönetici görünümde bir rollup ile “Toplam Pipeline” görür. Üretim uygulamasında aynı sayı izinlere saygı göstermeli (hangi anlaşmaları görebiliyor?), öngörülebilir şekilde yenilenmeli ve raporlarda yeniden üretilebilir olmalıdır.
Gerçek iş akışlarıyla eşleşen bir Airtable denetimi ile başlayın
Airtable'dan PostgreSQL'e geçmeden önce, base'in günlük kullanım şeklini yazın. Airtable sıklıkla bir “yaşayan tablo” olarak başlar; bu yüzden aynı tablo raporlama, onaylar ve hızlı düzenlemeler için aynı anda kullanılabilir. Veritabanı destekli bir uygulama daha net kurallar gerektirir.
Varlıkları envanterleyin, insanların unuttuğu kısımları da dahil edin — mesela “geçici” görünümler ve arka planda çalışan tek seferlik scriptler.
- Tablolar (gizli veya arşivlenmiş olanlar dahil)
- Ekiplerin güvendiği görünümler ve filtreler (özellikle “Benim işlerim” görünümleri)
- Arayüzler, formlar ve kimlerin kullandığı
- Otomasyonlar, scriptler ve entegrasyonlar
- Manuel rutinler (kopyala/yapıştır içe aktarma, haftalık temizlik)
Sonra alanları ya "gerçek kaynak" ya da "türetilmiş" olarak etiketleyin.
- Gerçek kaynak alanlar kişi veya güvenilir bir sistem tarafından girilir (müşteri e-postası, sözleşme imzalandığı tarih).
- Türetilmiş alanlar rollup, formül, lookup ve diğer verilerden gelen durum bayraklarıdır.
Bu önemlidir çünkü bazı türetilmiş değerlerin saklanması (geçmiş ve denetim için) gerekirken, diğerleri ihtiyaç duyulduğunda hesaplanmalıdır.
Kullanışlı bir kural: insanlar "o an neydi" bilmek zorundaysa (ör. bir anlaşmanın kapandığı andaki komisyon), saklayın. Sadece gösterim amaçlıysa (ör. "Son aktiviteden bu yana gün sayısı"), hesaplayın.
Ağrı noktalarını sade bir dille yakalayın. Örnekler: “Deals görünümü 20 saniye sürüyor”, “Yöneticiler maaş alanlarını görebiliyor”, “İçe aktarmalardan sonra kırık bağlantıları sürekli düzeltiyoruz.” Bunlar yeni uygulamada izinler, performans ve veri kontrolleri için gerçek gereksinimlere dönüşür.
Veri modeli çevirisi: tablolar, alanlar ve ID'ler
Airtable'dan PostgreSQL'e geçerken en büyük zihniyet değişimi veritabanının etiketler ve düzen değişse bile doğru kalacak kurallara ihtiyaç duymasıdır. Airtable “o hücrede bugün ne varsa” diyebilir. PostgreSQL buna izin vermemelidir.
Her Airtable tablosunu sabit bir birincil anahtara sahip gerçek bir varlığa çevirerek başlayın. İnsan adı (ör. “Acme, Inc.”) gibi bir şeyi ID olarak kullanmayın. İsimler değişir, yanlış yazılır ve bazen çakışır. İç ID kullanın (çoğunlukla UUID veya sayısal ID) ve isimleri düzenlenebilir özellikler olarak tutun.
Alan tipleri ikinci bir göz gerektirir çünkü Airtable’ın “sayı” ve “metin” ayrımı bazı önemli farkları gizleyebilir:
- Eğer bir alanın küçük, bilinen bir değer kümesi varsa, onu kontrol edilen bir seçim gibi ele alın (durum, öncelik, seviye).
- Para tutuyorsa, para hesaplamaları için tasarlanmış sayısal bir tipte saklayın (ve para birimini belirleyin).
- Zaman için tarih (sadece tarih) ile timestamp (kesin an) arasında karar verin.
Boş değerler için net bir politika da gereklidir. Airtable sıkça “boş”, “sıfır” ve “bilinmiyor”u karıştırır. PostgreSQL'de her durumun ne anlama geldiğine karar vermeniz gerekir:
- Gerçekten "henüz bilmiyoruz" ise NULL kullanın.
- "Normal bir değer var" ise varsayılan kullanın (ör. status = "new").
- Boş stringleri gerçekten "eksik" anlamına geliyorsa NULL'a çevirin.
- Boş stringler yalnızca boş olmanın anlamlı olduğu durumlarda tutulmalı.
- Kötü içe aktarmayı yakalamak için temel kontroller ekleyin (ör. amount >= 0).
Son olarak, gerçek kullanım bazlı birkaç indeks ekleyin. İnsanlar her gün hesap bazında, durumda ve oluşturulma tarihine göre filtreliyorsa, bu sütunlar iyi adaylardır. Gerçek performans verisi olana kadar karmaşık indekslerden kaçının, ama bariz olanları atlamayın.
Örnek: "Deals" tablosu deals(id, account_id, stage, amount, close_date, created_at) olabilir. Bu yapı, üstüne koyacağınız UI değişse bile sabit kalır.
Bağlı kayıtlar: linkleri ilişkilere ve join tablolarına dönüştürme
Airtable ilişkileri basit hissettirir: bir linked record alanı ekliyorsunuz ve iş bitti. PostgreSQL'de o linkin ne anlama geldiğine karar vermeniz gerekir.
Önce kardinaliteyle başlayın: her kayıt bir eşleşmeye mi yoksa birden fazlasına mı sahip olabilir?
- Bir-çok: bir Company'nin birçok Contact'ı vardır, ama her Contact bir Company'ye aittir.
- Çok-çok: bir Contact birçok Deal ile çalışabilir ve bir Deal birçok Contact içerebilir.
PostgreSQL'de:
- Bir-çok bağlantı genellikle “çok” tarafında tek bir sütun olarak olur (ör. contacts.company_id).
- Çok-çok bağlantı genellikle deal_contacts(deal_id, contact_id) gibi bir join tabloya dönüşür.
Bu join tablosu, insanlar ilişkiye sızdırdıkları ekstra ayrıntıları da tutabilir; örneğin role_on_deal veya added_by gibi.
İlişkileri referential integrity ile güvenli tutun
Airtable zamanla bağlantıların dağılmasına izin verebilir. Veritabanı destekli bir uygulamada bunu yabancı anahtarlar ve net silme kurallarıyla önleyebilirsiniz.
Karar verin:
- Silmeler cascade mi olsun, kısıtlı mı kalsın yoksa bağlantı null mı yapılsın?
- Orphan satırlar (ör. deal_contacts içinde gerçek bir deal veya contact olmadan) engellensin mi?
ID'ler vs gösterim isimleri
Airtable gösterecisi arkadaşça bir “primary field” ile etiketi gösterir. PostgreSQL sabit anahtarları (sayı ID veya UUID) saklamalı, uygulama ise kullanıcıya gösterim isimlerini göstermelidir.
Pratik bir örnek: everywhere company_id saklayın, companies.name (ve gerekiyorsa companies.code) ile gösterim ve arama yapın.
Rollup'lar: görünüm zamanı matematiğinden veritabanı aggregate'larına
Airtable'da rollup, ilişkili kayıtlar boyunca yapılan "matematik"tir. Tek alan gibi görünür ama aslında birçok satırın özeti—sayım, toplam, min/max tarihler, ortalamalar veya link üzerinden çekilen listelerdir.
PostgreSQL'de aynı fikir aggregate sorgusuna dönüşür. İlgili tabloları join edersiniz, parent kayıta göre group by yapar ve yerleşik fonksiyonlarla toplamları hesaplatırsınız. Airtable'dan PostgreSQL'e geçerken rollup'lar spreadsheet benzeri alanlar olmaktan çıkar ve veritabanının yanıtlayabileceği sorular halini alır.
Yaygın rollup'ları SQL düşüncesine çevirme
Yaygın kalıplar:
- "Bu müşteri için toplam fatura tutarı" -> customer bazında SUM(amount)
- "Bu projedeki açık görev sayısı" -> durum filtresi ile COUNT(*)
- "Son aktivite tarihi" -> MAX(activity_date)
- "Bu temsilci için ortalama anlaşma büyüklüğü" -> AVG(deal_value)
Airtable rollup'ları sıklıkla "sadece Aktif ögeler" veya "sadece son 30 gün" gibi filtreler içerir. Veritabanında bu WHERE cümlesine dönüşür. Zaman dilimleri ve "son 30 gün"ün ne anlama geldiği konusunda açık olun; üretim raporları bunu sorgulayacaktır.
Hesaplanan vs saklanan rollup'lar
İki seçeneğiniz var:
- Rollup'ları talep üzerine hesaplayın (her zaman güncel, bakımı daha basit).
- Onları saklayın (ekranlar daha hızlı, ama güncel tutmak zorundasınız).
Pratik kural: paneller ve listeler için hesapla; hız veya sabit anlık görüntü gerektiğinde saklayın.
Formüller: hangisi SQL, hangisi uygulama mantığı olmalı
Airtable'dan PostgreSQL'e geçerken formüller genellikle en dikkatli çeviriyi gerektirir. Airtable'da bir formül aynı anda bir görünümü, bir filtreyi ve bir iş akışını güçlendirebilir. Üretim uygulamasında sonuçların tutarlı, hızlı ve tüm ekranlarda aynı olması istenir.
Formülleri yaptıkları işe göre sınıflandırın:
- Formatlama: değerleri "Q1 2026" veya "Yüksek öncelik" gibi etiketlere çevirme
- Koşullu bayraklar: "Vadesi geçmiş" veya "İncele gerekli" gibi TRUE/FALSE kontrolleri
- Hesaplamalar: toplamlar, marjlar, tarih farkları, skorlar
- Lookuplar: bağlı kayıtlardan değer çekme
- İş kuralları: kullanıcıların ne yapabileceğini değiştiren kurallar (uygunluk, onaylar)
Basit hesaplamalar ve bayraklar genellikle SQL'de (sorgu ifadeleri, view'lar veya computed alanlar) olmalıdır. Bu, her ekranın tutarlı kalmasını sağlar ve aynı matematiği birden fazla yerde yeniden uygulamaktan kaçınır.
Eğer bir formül gerçekten bir kuralsa (ör. "Hesap aktifse ve anlaşma 5.000$ üzerindeyse indirim verilebilir"), genellikle arka uç mantığına taşınmalıdır. Böylece farklı istemciler, CSV ithalatları veya yeni raporlar tarafından atlatılamaz.
Formatlamayı UI'ya yakın tutun. Gösterim etiketleri web ve mobil arayüzde oluşturulabilir; veritabanına sert kodlamayın.
Nihai hale gelmeden önce, her zaman eşleşmesi gereken birkaç çıktıyı seçin (ör. Durum, Ödenecek Tutar, SLA İhlali) ve bunların nerede tutulacağına karar verin. Ardından her istemciden test edin ki uygulamada görülen sayı finans tarafından dışa aktarıldığında da aynı olsun.
İzinlerin yeniden tasarımı: roller, kayıt erişimi ve denetim izleri
Airtable izinleri genellikle basit hissedilir çünkü çoğunlukla base, tablo ve görünüm bazlıdır. Üretim uygulamasında bu nadiren yeterlidir. Görünümler iş akışı için iyidir ama güvenlik sınırı değildir. Airtable'dan PostgreSQL'e geçerken "bu kim görebilir?" kararını API, UI, dışa aktarmalar ve arka plan işler dahil her yerde uygulanan bir erişim kuralı olarak ele alın.
Uygulamanızın ihtiyaç duyduğu rolleri listeleyerek başlayın, insanların tıkladığı sekmeler değil. Tipik bir set:
- Admin: ayarları, kullanıcıları ve tüm veriyi yönetir
- Yönetici: değişiklikleri onaylar ve takımının çalışmalarını görür
- Personel: atandığı kayıtları oluşturur ve günceller, sınırlı raporlama
- Müşteri: kendi taleplerini, faturalarını veya durumunu görür
Sonra kayıt düzeyi kurallarını (row-level access) tanımlayın. Birçok gerçek uygulama şu kalıplardan birine indirgenir: "sadece benim kayıtlarım", "takımımınkiler" veya "organizasyonumunkiler". Bunu veritabanında (row-level security) mı yoksa API katmanında mı uygulayacağınızdan bağımsız olarak anahtar tutarlılıktır: her sorgu bu kuralı içermeli, dışa aktarmalar ve gizli ekranlar dahil.
Denetimi baştan planlayın. Her değişiklik için nelerin kaydedilmesi gerektiğine karar verin:
- Kim yaptı (kullanıcı ID, rol)
- Ne değişti (gerekirse alan düzeyinde önce/sonra)
- Ne zaman oldu (timestamp ve zaman dilimi)
- Nereden geldi (UI, import, API)
- Neden (opsiyonel not veya sebep kodu)
Sürprizleri önleyen adım adım göç planı
En güvenli geçişler sıkıcı hisseder. Bir tarih seçersiniz, hareket eden parçaları azaltırsınız ve eski base ile yeni uygulamayı karşılaştırmayı kolaylaştırırsınız.
Taşınmadan bir hafta önce şema değişikliklerini durdurun. Bir geçiş tarihi üzerinde anlaşın ve bir kural koyun: yeni tablo yok, yeni alan yok, alan yeniden adlandırma yok. Küçük değişiklikler içe aktarmaları ve formülleri sessizce kırabilir.
Basit beş adımlık plan:
- Yapıyı kilitleyin ve “tamamlandı”nın ne anlama geldiğini tanımlayın (hangi ekranlar, iş akışları ve raporlar eşleşmeli).
- Veriyi dışa aktarın ve Airtable dışında temizleyin. Çok-seçimleri normalize edin, birleştirilmiş alanları ayırın ve linklerin sağlam kalması için sabit ID'ler oluşturun.
- PostgreSQL şemasını oluşturun, ardından doğrulamalarla partiler halinde içe aktarın. Satır sayıları, zorunlu alanlar, benzersizlik ve yabancı anahtarları doğrulayın.
- Günlük kullanılan temel ekranları ilk olarak yeniden inşa edin: günlük kullanılan birkaç ekran ve oluştur/güncelle akışları.
- Kısa süreli paralel çalıştırma yapın, sonra kesiş (cut over). Geri alma planı hazırlayın: Airtable için salt okunur erişim, cutover öncesi PostgreSQL anlık görüntüsü ve kritik uyuşmazlık çıkarsa durma kuralı.
Örnek: bir sales ops base için her iki sistemi bir hafta çalıştırın. Satış temsilcileri yeni uygulamada aktivite kaydeder, ancak takım sabahları pipeline toplamlarını Airtable ile karşılaştırana kadar sayılar tutarlı olmayana kadar kontrol eder.
Veri kalitesi ve test: yeni uygulamanın gerçeğe uyduğunu kanıtlayın
Çoğu göç hatası “PostgreSQL hatası” değildir. Bunlar Airtable'ın ne demek istediği ile yeni tablolarınızın ne sakladığı arasındaki uyumsuzluklardır. Testi veri çalışmasının bir parçası olarak ele alın, son dakika işi olarak değil.
Basit bir eşleme sayfası tutun. Her Airtable alanı için hedef Postgres sütununu ve uygulamada nerede kullanıldığını (hangi ekran, rapor, durum kuralı) yazın. Bu "içeri aktardık"un "asla kullanılmıyor"ya dönüşmesini engeller.
Hızlı sağlık kontrolleriyle başlayın:
- İçe aktarmadan önce ve sonra tablo bazında satır sayısını karşılaştırın.
- Kayıp linkleri kontrol edin (yabancı anahtarların hiçbir şeye işaret etmemesi).
- Pratikte "benzersiz" olan değerlerde (e-posta, anlaşma ID'leri) çoğaltmalar bulun.
- Airtable formları ile izin verilen ama artık zorunlu olan alanların eksik olduğunu tespit edin.
Sonra insanların güvendiği hesaplamaları doğrulayın. Gerçek kayıtları seçin ve toplamları, durumları ve rollup'ları bilinen örneklerle karşılaştırın. Formül ikameleri burada sıkça sapar çünkü boş, sıfır ve eksik bağlı kayıtlar farklı davranır.
Son olarak, kasıtlı olarak kenar durum verilerini test edin: boşlar, silinmiş linkler, uzun metin, alışılmadık karakterler ve satır sonları. "O'Neil" gibi isimler ve çok satırlı notlar genelde içe aktarma ve gösterim sorunlarının kaynağıdır.
Airtable'dan PostgreSQL'e çevirirken yaygın tuzaklar
En büyük tuzak bir Airtable base'ini basit bir veritabanı ihracı gibi işlemektir. Airtable saklama, görünüm mantığı, formüller ve paylaşım kurallarını karıştırır. PostgreSQL bu endişeleri ayırır; bu üretimde daha sağlıklıdır ama her davranışın nereye ait olduğuna karar vermenizi zorunlu kılar.
Bağlı kayıtlar klasik bir örnektir. Birçok ekip her linkin bir-çok olduğunu varsayar çünkü tek bir alan gibi görünür. Gerçekte birçok Airtable linki çok-çok'tur. Bunu tek yabancı anahtarla modellemek ilişkileri sessizce kaybetmenize ve sonrasında iş çevrelerine yol açmanıza neden olur.
Rollup'lar başka bir problem yaratabilir. Geçerli rollup sayısını saklanmış gerçek olarak içe aktarırsanız, bunun nasıl hesaplandığını da yakalamanız gerekir. Aksi halde sayı neden değiştiğini açıklayamazsınız. Yeniden hesaplanabilir aggregate'leri (SUM/COUNT) net tanımlarla tercih edin; caching ihtiyacı varsa nasıl güncelleneceğini kararlaştırın.
Görünümler de yanıltıcı olabilir. Ekipler bazen Airtable görünümlerini yeni uygulamada sabit filtreler olarak yeniden kurar ve sonra bu görünümlerin kişisel iş akışları olduğunu keşfeder. Filtreleri kilitlemeden önce kim kullandı, sonra hangi eylemi yaptı ve kaydedilmiş filtre, segment veya panoya ihtiyacı olup olmadığını sorun.
Hızlı tuzak kontrol listesi:
- Temizlenmemiş serbest metin durumları ("In progress", "in-progress", "IP")
- Tanım veya yeniden hesaplama planı olmadan içe aktarılan rollup'lar
- Çok-çok ilişkiler için join tabloları olmadan modellenmiş link alanları
- Kullanıcı niyeti teyit edilmeden sabitleştirilen görünümler
- Sonradan eklenen izinler, acı verici yeniden yazımlara zorlayabilir
Örnek senaryo: bir sales ops base'inin gerçek bir uygulama olarak yeniden inşası
Dört tabloyu düşünün: Accounts, Deals, Activities ve Owners (temsilciler ve yöneticiler). Airtable'da bir Deal bir Account ve bir Owner'a linkler; Activities bir Deal'e (çağrılar, e-postalar, demolar) link olur.
PostgreSQL'de bu net ilişkiler haline gelir: deals.account_id accounts.id'ye, deals.owner_id owners.id'ye ve activities.deal_id deals.id'ye işaret eder. Eğer bir anlaşma için birden çok sahip (rep + sales engineer) gerekliyse deal_owners gibi bir join tablo eklenir.
Yaygın bir Airtable metriği “Account başına Deal Value rollup” (linklenmiş anlaşma tutarlarının toplamı)dır. Veritabanı destekli uygulamada bu rollup talep üzerine çalıştırılabilen, önbelleğe alınabilen veya materialize edilebilen bir aggregate sorgu olur:
SELECT a.id, a.name,
COALESCE(SUM(d.amount), 0) AS total_pipeline
FROM accounts a
LEFT JOIN deals d ON d.account_id = a.id
AND d.stage NOT IN ('Closed Won', 'Closed Lost')
GROUP BY a.id, a.name;
Şimdi bir “Health score” formülünü düşünün. Airtable'da her şeyi tek bir alana sıkıştırmak caziptir. Üretimde, girdileri saklayın ve denetlenebilir yapın (last_activity_at, next_step_date, open_deal_count, overdue_tasks_count). Health_score'u arka uç mantığında hesaplayın ki kuralları değiştirmek eski kayıtları yeniden yazmayı gerektirmesin. Filtreleme ve raporlama için son skoru saklamayı tercih edebilirsiniz.
İzinler genellikle en büyük yeniden düşünmeyi gerektirir. Görünüm filtreleri yerine açık erişim kuralları tanımlayın:
- Temsilciler sadece kendi anlaşma ve aktivitelerini görebilir/düzenleyebilir.
- Yöneticiler takımının anlaşmalarını görebilir.
- Finans kapalı-kazan geliri görebilir, ama özel notları göremez.
- Sales Ops aşamaları ve skorlama kurallarını yönetebilir.
Yeni PostgreSQL uygulamasını yayına almadan önce kısa kontrol listesi
Canlıya geçmeden önce son bir kez "Airtable hissinin" stabil, test edilebilir ve güvenli bir şeye çevrildiğinden emin olun. Küçük boşluklar gerçek olaylara dönüşebilir.
Eğer Airtable'dan PostgreSQL'e geçmeye çalışıyorsanız, Airtable'ın sizin için "sessizce hallettiği" şeylere odaklanın: ilişkiler, hesaplanan değerler ve kim neyi görebilir veya değiştirebilir.
Yaygın sürprizleri yakalayan ön lansman kontrolleri
- İlişkiler: her eski linked record için açık ilişki tipi (bir-çok, çok-çok) ve net anahtar stratejisi (sabit ID'ler, benzersizlik kısıtları, silme kuralları).
- Aggregate'ler: hangi toplamların her zaman doğru olması gerektiğini (faturalar, kotalar, uygunluk) etiketlediniz mi; hangi panellerin hafif gecikmeli olabileceğini belirlediniz mi?
- Karar mantığı: sonuçları değiştiren her formül (onay, fiyatlandırma, komisyon) uygulanıp test edildi mi ve doğru yerde mi?
- İzinler: her rol için gerçek kullanıcı hikayelerini (oluştur, düzenle, dışa aktar, sil, onay) uçtan uca koştunuz ve kayıt düzeyi erişimini doğruladınız mı?
- Sahiplik ve dağıtım: şema değişikliklerinin sahibi kim, mantık değişikliklerini kim inceler, geri alma nasıl olur ve uygulama nerede çalışır belirlendi mi?
Gerçek kontrol: eğer bir satış temsilcisi Airtable'da "Account Tier"i düzenleyebiliyorsa ve bu seviye indirimleri etkiliyorsa, muhtemelen hem bir izin değişikliğine (sadece yöneticiler düzenleyebilsin) hem de kimin ne zaman değiştirdiğini kayıt altına alan bir denetim izine ihtiyacınız vardır.
Sonraki adımlar: inşa et, yayına al ve iyileştirmeye devam et
Airtable'dan PostgreSQL'e geçtikten sonra en büyük risk her şeyi aynı anda yeniden kurmaya çalışmaktır. Bir pilot ile başlayın: gerçek kullanıcılarla uçtan uca bir iş akışını çalıştırın. Ölçülebilir bir şey seçin: “kayıt oluştur - onayla - bildir - raporla” gibi ve kapsamı dar tutun.
Pilotı bir ürün gibi yönetin. Yeni veri modelini ve izin kurallarını sade bir dille yazın ki teknik olmayan sahipler iki soruyu hızlıca cevaplayabilsin: "Bu değer nereden geliyor?" ve "Bunu kim görebilir veya değiştirebilir?"
Dokümantasyonu hafif tutun. Çoğu ekip şu kadar ile ilerleyebilir:
- Temel tablolar ve her birinin neyi temsil ettiği
- Önemli ilişkiler (silme/arsivleme ne yapmalı)
- Hangi alanların hesaplandığı (SQL vs uygulama mantığı) ve neden
- Roller, kayıt düzeyi erişim kuralları ve kim erişim veriyor
- Denetim beklentileri (nelerin loglanması gerektiği)
Her şeyi sıfırdan inşa etmeden hızlı ilerlemek istiyorsanız, no-code platformu işe yarayabilir; önemli olan gerçek bir backend üretmesi ve kuralları tutarlı uygulamasıdır. Örneğin AppMaster (appmaster.io), PostgreSQL destekli uygulamalar inşa etmek, iş mantığı ve rol tabanlı erişim sağlamak ve aynı zamanda üretim kaynak kodu üretmek üzere tasarlanmıştır.
Aşamalar halinde yayımlayın: bir takımla pilot, kısa paralel çalışma, planlı bir kesiş ve geri alma planı, sonra iş akışı bazında genişletme.
SSS
Önce Airtable tabanınızın gerçekte ne yaptığını listeleyin; sadece hangi tabloların olduğu değil. Görünümler, arayüzler, otomasyonlar, scriptler ve tekrarlayan elle yapılan rutinler özellikle önemlidir çünkü bunlar genellikle PostgreSQL destekli uygulamanın tutarlı şekilde zorlaması gereken gerçek “kuralları” içerir.
Tabloları kalıcı varlıklar olarak düşünün: gerçek bir birincil anahtar ve açık ilişkiler gerekir. Hücredeki “ne varsa o” yaklaşımını bırakıp, açık tipler, varsayılanlar ve kontroller koyun ki kötü veri içe aktarma veya sonradan düzenlemeler sırasında sessizce karışmasın.
İsimleri kimlik olarak kullanmayın; isimler değişir, çakışır ve yanlış yazılabilir. Birincil anahtar için içsel bir ID (genellikle UUID veya sayısal ID) kullanın ve ismi gösterim ve arama amacıyla düzenlenebilir bir alan olarak tutun.
Her bağlantının kullanım şekline göre bir-to-many mi yoksa many-to-many mi olduğunu kararlaştırın. Bir-çok genellikle “çok” tarafta bir yabancı anahtar sütunu olurken, çok-çok genellikle ilişki ayrıntılarını da tutabilecek bir join tablosu olur.
Veritabanı yabancı anahtarları ekleyin ki kırık bağlantılar engellensin ve davranış tutarlı olsun. Silme davranışını (cascade, restrict veya set null) bilinçli seçin; ebeveyn kaydın silinmesi çocukları kaldırabilir, engelleyebilir veya referansları null yapabilir—iş akışınıza hangisi uyuyorsa onu seçin.
Rollup'ları, veritabanının toplama sorgularıyla yanıtladığı sorular olarak ele alın; spreadsheet benzeri saklanmış alanlar olarak değil. Doğruluk için varsayılan olarak talep üzerine hesaplayın; yalnızca performans nedeniyle saklamanız gerekiyorsa, güncelleme mantığını güvenilir şekilde kurun.
Formülleri amaçlarına göre gruplayın: gösterim formatlama, basit hesaplamalar, bayraklar, lookuplar ve gerçek iş kuralları. Gösterimi UI'da tutun, tutarlılık gerekiyorsa basit matematiği SQL'e koyun; kurallar gibi davranan mantığı (ör. indirim izni) arka uçta uygulayın ki ithalat veya farklı istemcilerle atlatılamasın.
Görünümler iş akışı için yararlı olsa da güvenlik sınırı değillerdir. Roller ve kayıt düzeyi erişim kurallarını açıkça tanımlayın ve API, UI, dışa aktarma ve arka plan işlerindeki tüm sorgular için bu kuralları uygulayın; ayrıca kimin neyi ne zaman değiştirdiğini cevaplayacak denetimleri ekleyin.
Kesmeden önce şemayı dondurun, verileri dışa aktarın ve temizleyin, ardından doğrulamalarla (zorunlu alanlar, benzersizlik, yabancı anahtarlar) içe aktarın. Kısa süreli paralel çalışma yapın, ana sayılar karşılaştırılana kadar geçişi erteleyin ve geri alma planı hazırlayın (Airtable'ı salt okunur bırakma, PostgreSQL öncesi anlık bir yedek gibi).
Her şeyi sıfırdan elle kodlamak yerine hız istiyorsanız, gerçek bir backend üreten ve kuralları zorlayabilen bir no-code platformu seçin. AppMaster bir seçenek olup PostgreSQL destekli uygulamalar oluştururken iş mantığı ve rol tabanlı erişim sunar ve üretim kaynak kodu da üretebilir.


