Ürün varyantı, bir çatı kaydının altında kendi fiyatı ve stoğuyla izlenen satılabilir birimdir; çatı kaydı ikisini de taşımaz. Sınırın nereden geçeceğini tek soru belirler: bu ayrıma ayrı bir fiyat ve ayrı bir stok asılıyor mu? Ölçüt ters yönde de çalışıyor: parfüm kataloğunda koku notasına fiyat asılmadığı için o eksen varyant sayılmıyor, sayılsaydı anlamsız bir stok sayacı açardı.
Varyant sınırı kataloğun ilk kararıdır
Bir katalog kurulurken en erken verilen karar, neyin bir kayıt sayılacağıdır. Bu karar sonradan değiştirilebilen bir ekran tercihi değil; üstüne fiyat, stok ve sipariş yazılan zemindir. Zemin yanlış seçildiğinde hata tek bir yerde patlamaz, kataloğun her yerine dağılır.
Parfüm perakendesi bu kararı çıplak gösteriyor. Aynı kokunun birden çok hacimde satıldığı Kokudankokuya mağazasında standart e-ticaret ürün modeli kataloğu tek satır olarak görüyor: bir parfüm, bir kayıt. Mağazanın işleyişi bu varsayıma uymuyor, çünkü müşteri parfümü değil belirli bir şişeyi satın alıyor.
Hazır bir kurulumda düğümün iki çıkışı var ve ikisi de kendi bedelini üretiyor. Birinci uç, her şişe hacmini bağımsız bir ürün olarak açmak. Model bu durumda tutuyor ama katalog bozuluyor: liste sayfasında aynı parfüm art arda diziliyor, arama sonucunda aynı ad birkaç kez görünüyor ve müşteri aynı ürünün kaç biçimi olduğunu ancak satırları okuyarak anlıyor. Katalog büyüdükçe tekrar da büyüyor.
İkinci uç, bütün hacimleri tek ürün kaydına sıkıştırmak. Katalog bu kez düzgün görünüyor, kayıt bozuluyor. Fiyat tek bir alanda duruyor ve hacimler arasındaki fark bir açıklama metnine iniyor. Stok tarafında sonuç daha ağır: hangi şişenin tükendiği kayıttan okunamıyor, çünkü sayaç kokunun altında tek. Depodaki kişi doğru bilgiyi bilse bile katalog onu gösteremiyor.
İki ucun ortak yanı, ikisinin de sorunu kaydın dışına atması. Birincisi yükü katalog düzenine, ikincisi bir insanın hafızasına bırakıyor. Doğru sınır bu iki ucun arasında bir yerde ve o yeri tek bir ölçüt belirliyor.
Satılabilir birim testi: fiyat ve stok neye bağlanıyor
Ölçüt şu: neyin fiyatı ve stoğu ayrı ayrı takip ediliyorsa, satılabilir birim odur. Varyant sınırı da tam oradan geçer. Sorulacak soru şu: bunun kendi fiyatı ve kendi stoğu var mı.
Kokudankokuya’da cevap hacim. Katalogda kokunun kendisi tek bir kayıt olarak duruyor; her şişe hacmi o kaydın altında kendi başına satılan bir birim. Fiyat ve stok koku kaydına değil bu birimlere yazılı. Koku kaydı bir çatı: adı, açıklaması ve görseli var, fiyatı ve stoğu yok.
Ayrımın pratik karşılığı büyüme anında görünüyor. Kataloğa yeni bir şişe boyu geldiğinde yeni bir ürün açılmıyor; mevcut çatının altına bir birim ekleniyor. Katalogdaki ürün sayısı yerinde kalıyor, satılabilir birim sayısı artıyor. Model doğruysa büyümenin bedeli listede görünmüyor. Yanlışsa her yeni hacim kataloğa bir satır daha ekliyor ve büyüme kendi kendini yavaşlatıyor.
Kayıt modelinin özelleşmesi altyapının da özelleşmesi anlamına gelmiyor. Bu kataloğun ölçeği ayrı bir arama ya da önbellek katmanı gerektirmedi; mağaza Laravel ve MySQL üzerinde duruyor. Model kararı ile yığın kararı birbirinden bağımsız: biri işin kayıt biriminden, öteki ölçekten çıkıyor. E-ticaret işlerimizde ilk yazdığımız şey de bu yüzden ekran olmuyor; neyin satılabilir birim olduğunu yazıyoruz.
Bu model fiyatın tek bir eksenden türediği kataloglarda çalışıyor. Hacim tek başına fiyatı belirliyor, başka bir seçim fiyata karışmıyor. Fiyatı birden fazla seçim ekseni birlikte belirliyorsa tek eksenli varyant modeli yetmiyor ve sınırı başka bir yerden çizmek gerekiyor.
İki eksen birleşince kayıt birleşimin kendisi olur
Otomotivde satılan şey rafta duran bir kalem değil, bir yapılandırma sonucu. Alıcı önce aracı kuruyor: hangi donanım paketi, hangi renk. Donanım ile renk birleşiminin kendi kaydı olduğu KGM SsangYong online satış kanalında çeşitlilik tek eksende değil, iki eksenin çarpımında yaşıyor.
Kokudan farkı burada. Parfümde hacim tek başına yeterli bir ayrımdı; hacmi bilen fiyatı da biliyordu. Araçta donanımı ya da rengi tek başına bilmek yetmiyor. Fiyatı belirleyen şey ikisinin birlikte aldığı değer. Bu yüzden fiyat donanım kaydına ya da renk kaydına değil, birleşimi temsil eden kayda yazılı. Her donanım–renk birleşimi katalogda kendi kaydıyla duruyor.
Alternatif, fiyatı eksenlerden birine bağlayıp diğerini bir fark olarak eklemek olurdu: donanımın fiyatı, artı rengin farkı. Bu kurgu ilk bakışta ekonomik görünüyor, çünkü daha az kayıt istiyor. Bedeli, birleşimlerin gerçekten bağımsız fiyatlandığı anda çıkıyor. Bir donanımda bir renk ek bedel istemiyor, başka bir donanımda aynı renk istiyorsa toplama kuralı bozuluyor ve kural her istisnada bir dal daha kazanıyor. Kayıt birleşim düzeyinde tutulduğunda istisna diye bir şey kalmıyor; her birleşimin değeri kendi kaydında yazılı.
Hazır sepet yazılımlarının sınırı da burada. Bu ürünler fiyatı tek bir ürün kaydına bağlıyor ve donanım–renk kırılımını kuramıyor. Yapılandırma ekranı bir varyant alanı açıyor, ama o alanın fiyat ve satış koşulu tutup tutamayacağını söylemiyor. Birleşim düzeyinde kayıt bu yüzden özel kuruldu.
Ziyaretçi tarafında bunun karşılığı sade. Donanım ya da renk seçimi değiştiğinde fiyat ve ekrandaki araç görseli aynı anda güncelleniyor. İkisi birbiriyle tutarlı, çünkü ikisi de aynı birleşim kaydından okunuyor. İki bilgi iki ayrı yerde dursaydı tutarlılık bir eşleme kuralına kalırdı; kural da her yeni birleşimde yeniden doğrulanması gereken bir nesne olurdu.
Varyant kaydı fiyattan fazlasını tutar
Varyant sözcüğü çoğu zaman fiyat farkı diye okunuyor. Kayıt düzeyine inildiğinde bunun dar bir okuma olduğu görünüyor. Bir varyant kaydının hangi alanları tutacağı katalogdan kataloğa değişiyor.
SsangYong satış kanalında birleşim kaydı üç şeyi birden tutuyor. Birincisi fiyat. İkincisi görsel: her donanım–renk birleşiminin kendi araç görseli var ve görsel model düzeyinde değil birleşim düzeyinde duruyor. Renk seçimi değiştiğinde ekrandaki araç değişiyor, çünkü görsel bulunduğu yerde birleşime asılı. Görsel model kaydında dursaydı ziyaretçi bir rengi seçip başka renkteki araca bakardı; ekranla fiyat birbirinden ayrışırdı.
Üçüncüsü satış koşulu. Her birleşim kendi satış koşuluyla kayda geçiyor. Koşul birleşime asılmasaydı iki farklı yapılandırma aynı koşulu paylaşmak zorunda kalırdı; bir donanımda geçerli olan bir düzenleme, geçmediği bir donanımda da görünürdü. Koşulu birleşim düzeyinde tutmak, koşulun değiştiği gün dokunulacak yeri de tek bir kayda indiriyor.
İki kataloğu yan yana koymak alan listesinin sabit olmadığını gösteriyor. Parfümde satılabilir birim fiyat ve stok tutuyor; görsel koku düzeyinde kalıyor, çünkü şişe boyu ürünün karakterini değiştirmiyor. Araçta ise birleşim kaydı fiyatı, görseli ve satış koşulunu birlikte tutuyor. Aynı sözcük iki katalogda iki farklı kayıt yapısını adlandırıyor.
Buradan çıkan kural şu: varyant kaydının alan listesi bir şablondan gelmiyor, sorudan geliyor. Alıcının seçimi neyi değiştiriyorsa o bilgi varyant düzeyinde duruyor. Seçim değiştiğinde değişmeyen bilgi çatıda kalıyor. Ayrımı baştan yapmayan kataloglarda alanlar zamanla yanlış katmana yerleşiyor ve düzeltme, kayıtların tamamına dokunmayı gerektiriyor.
Gezinme ekseni varyant değildir
Katalogdaki her ayrım varyant değil. Bazı ayrımlar ürünü bölmüyor, ürüne ulaşmanın ikinci bir yolunu açıyor. Ayrımı yapmanın yolu yine aynı soru.
Kokudankokuya’da kategori ağacının yanında ikinci bir eksen duruyor: koku ailesi ve nota. Marka adını bilmeyen müşteri buradan başlıyor. Aradığı şey bir ad değil bir karakter. Eksen bu niyetin karşılığı olarak kuruldu.
Bu eksenin varyanttan farkı bağlanma biçiminde. Varyantta bir birim tek bir çatıya bağlı: bir şişe boyu tek bir kokuya ait. Notada ilişki çok uçlu; bir parfüm birden çok notaya bağlanabiliyor ve aynı ürün farklı arama niyetlerinden bulunuyor. Ürün tek bir kategori dalına hapsolmuyor.
Asıl ölçüt yine fiyat ve stokta. Notaya ya da koku ailesine fiyat asılmıyor, stok asılmıyor. Kimse bir koku ailesi satın almıyor; belirli bir kokunun belirli bir şişesini satın alıyor. Satılabilir birim hacim olarak kalıyor, nota yalnız bir yol.
Aynı katalogda iki ayrım tipi yan yana yaşıyor: hacim bir varyant, nota bir ilişki. İkisini aynı mekanizmayla kurmak iki yönde de zarar veriyor. Notayı varyant olarak modellemek her notaya bir stok sayacı açar ve o sayaç hiçbir zaman anlamlı bir sayı göstermez. Hacmi ilişki olarak modellemek ise fiyatı ortada bırakır.
Ayrımın hangi tipte olduğu her zaman baştan belli olmuyor. Bir katalogda gezinme ekseni gibi duran bir özellik, işletme onu ayrı fiyatlamaya başladığı gün varyanta dönüşüyor. Dönüşümü fark etmenin işareti tek: o özellik için ayrı bir fiyat ya da ayrı bir stok tutulmaya başlanmışsa eksen artık bir bağlantı değil. Kokudankokuya’da bu sınır yerinde duruyor; nota bir arama yolu olarak kaldığı sürece kendi sayacına ihtiyaç duymuyor.
Bir ayrımın nereye yerleşeceğine karar verirken önce ona fiyat ve stok asılıp asılmadığına bakın: asılıyorsa alt kayıt, asılmıyorsa bağlantı.
Her birim benzersizse varyant modeli kurulmaz
Şimdiye kadarki iki örnek de aynı şeyin birden çok kopyasını satan kataloglardı. Bazı kataloglarda bu koşul hiç yok.
Her makinenin kendi başına yayınlandığı Plastik ve Makina platformunda kayıt birimi ürün değil ilan. Sıfır ve ikinci el plastik işleme makineleri aynı yerde listeleniyor ve ilanlar birbirinin çeşidi olarak modellenmiyor. Üstünde varyant kurulacak ortak bir ürün kaydı yok, çünkü iki ikinci el makine birbirinin aynısı değil.
Fiyat ve stok tarafındaki fark buradan geliyor. Platform satışa aracılık etmiyor; pazarlık ve ödeme taraflar arasında kalıyor. Bu yüzden fiyat ve stok e-ticaretteki gibi bir operasyon yükü olarak sisteme bağlanmıyor. Bir ilanın adedi kendi başına belli olduğu için stok sayacı da bir soruya cevap vermiyor.
Peki sıfır ile ikinci el ayrımı ne? Varyant değil, filtre ekseni. İki durum aynı listede duruyor ve alıcı filtreyi açıp iki seçeneği tek arama içinde karşılaştırıyor. Ayrı listelerde dursaydı karşılaştırma yapılamazdı; alıcı ikinci el bir makinenin fiyatını sıfırının yanında göremezdi. Ayrımın nereye konduğu doğrudan alıcının kararına bakıyor.
Kategori ağacının tamamı tek bir makine ailesinin kendi ayrımlarına göre kurulu. Genel bir ilan sitesinde sanayi başlığının altında bir alt satır olan ayrım burada ana eksen. Liste Laravel’de sunucuda üretiliyor, Inertia tarayıcıya taşıyor; filtre değiştiğinde sayfa baştan yüklenmiyor.
Bu katalogda varyant modeli kurmak boş bir hiyerarşi üretirdi: her çatının altında tek bir birim. Kayıt bir katman derinleşir, hiçbir soru cevaplanmazdı.
Ayrım, e-ticaret ile ilan platformunu birbirinden ayıran şeyi de gösteriyor. Mağaza aynı ürünü tekrar tekrar satar; ilan platformu her kaydı bir kez yayınlar. Birincisinde stok bir sayaç, ikincisinde bir durum. Kayıt modelini bu farkı görmeden kurmak, mağaza için yazılmış bir şablonu ilan listesine giydirmek olur ve giydirme her zaman aynı yerden sırıtır: doldurulmayan varyant alanları.
Hangi ayrım nereye gider: dört yaklaşım yan yana
Dördüncü bir durum daha var ve tabloyu tamamlıyor. Menünün tek sayfa olarak yayınlandığı Çatalca Merkez Kasap QR menüsünde fiyat doğrudan menü kaleminin üstünde duruyor. Varyant yok, çünkü kalemin altında ayrıca fiyatlanan bir birim yok. Sipariş, ödeme ve stok katmanı da hiç kurulmadı; kurulmadığı için stok sorusu ortaya çıkmıyor. Menü bölümlere ayrıldı; her bölüm ayrı bir adresle açılıyor, bu yüzden farklı QR kodları aynı sayfanın farklı yerlerine iniyor. Varyantsız tek kayıt biçimindeki içeriğin yaşadığı yer genellikle içerik yönetimi tarafı oluyor.
Dört yaklaşımı yan yana koymak, aralarındaki farkın ölçek değil soru olduğunu gösteriyor.
| Yaklaşım | Kayıt neyi temsil ediyor | Fiyat ve stok neye asılı | Çeşitlilik alıcıya nasıl açılıyor |
|---|---|---|---|
| Tek kayıt, varyantsız | Menü kalemi — QR menü sayfasındaki tek satır | Fiyat doğrudan kalemin üstünde; sipariş, ödeme ve stok katmanı hiç kurulmadı | Menü bölümlere ayrılmış, her bölümün kendi adresi var; farklı QR kodları aynı sayfanın farklı noktasına iner |
| Tek eksende varyant (hacim düzeyi) | Koku bir çatı kaydı, her şişe hacmi onun altında satılabilir birim | Fiyat ve stok hacim birimine yazılı; koku kaydı ikisini de taşımaz | Kategori ağacının yanında koku ailesi ve nota ekseni; bir parfüm birden çok notaya bağlanır |
| Birleşim düzeyinde kayıt (iki eksen) | Donanım ile rengin her birleşimi kendi kaydı | Fiyat birleşime yazılı; görsel ve satış koşulu da aynı birleşim kaydında | Konfigüratör: ziyaretçi donanım ve renk seçtikçe fiyat ve ekrandaki araç birlikte güncellenir |
| Benzersiz ilan (varyant yok) | Her ilan kendi başına bir kayıt; ilanlar birbirinin çeşidi değil | Pazarlık ve ödeme taraflar arasında; sistem fiyat-stok operasyonu yürütmez | Makine ailesine göre kurulu kategori ağacı; sıfır/ikinci el ayrımı aynı liste üstünde filtre |
Tablonun ikinci sütunu birinci sütunun cevabı, üçüncü sütunu ise sonucu. Kaydın neyi temsil ettiği belirlendiğinde fiyatın ve stoğun nereye yazılacağı kendiliğinden çıkıyor; çeşitliliğin alıcıya nasıl açılacağı da onun ardından geliyor. Ters sıra denendiğinde ekran önce çiziliyor ve kayıt o ekranı beslemek için eğiliyor.
Dört satır bir olgunluk sıralaması değil. QR menü, birleşim düzeyinde kayda doğru büyümesi gereken eksik bir katalog değil; kendi sorusuna verilmiş tam bir cevap. Aynı şekilde ilan platformu, varyant modeline henüz gelmemiş bir mağaza değil. Her satır fiyat–stok sorusunun farklı bir cevabına karşılık geliyor.
Kendi kataloğunuz için bu tabloyu okumanın yolu tek bir cümleyi tamamlamak: “Bizim işimizde fiyat ve stok ___ üstünde duruyor.” Boşluğa yazdığınız şey satılabilir birimdir ve varyant sınırı da tam orada geçer. Boşluğu doldururken iki seçim eksenini birden yazmanız gerekiyorsa cevabınız üçüncü satır. Hiçbir şey yazamıyorsanız — fiyat pazarlıkta duruyor, stok diye bir kayıt yok — cevabınız dördüncü satır ve kuracağınız şey bir katalog değil, bir ilan listesi.