Web sitesi için database tabloları nasıl olmalı?

khalannz7

Hectopat
Katılım
18 Ağustos 2022
Mesajlar
858
Çözümler
15
Arkadaşlar merhaba, bir web projesi üzerinde çalışıyorum. Kurduğum tablo düzenini ve o düzenin olacağı sayfayı resim olarak yükledim. Bir sürü tablom var ve ilişkilerimi de daha yapmadım. Çünkü resimde gördüğünüz gibi ürünün tablo şeklinde olan özelliklerine ve diğer tekil özelliklere tablo kurmam gerekiyor. Kurduğum Attributes ve Features tablolarının resmini de ekliyorum.

Ama bu features ve attributes yapısı hiç içime sinmedi. Çünkü admin panelinde ürün eklerken bir sürü aşamadan geçmiş olacak, en başta özellik ekleyip sonra çevirilerini ekleyip sonra ürünü eklemek derken bir sürü aşamadan geçecek. Ve ilişki yapısı da sorunlu sanırım. Çünkü features ve ürünler arasında çoka çok ilişki var(bir üründe birden fazla özellik olabilir veya bir özellik birden fazla üründe bulunabilir). Aynı şekilde attributes tablosundaki name değerleri de çoka çok mu yoksa başka bir ilişkide mi olmalı bilemedim(bir değer örneğin "Depo:" birden fazla üründe olabilir hatta çoğunda olacak).

Mesela şu an mevcut yapıda hem attributes tablosunda hemde çeviri tablosunda name ve value değerlerini 2 kere giriyorum bu da veri tekrarına yol açıyor.

Günlerdir bir sürü tasarım yaptım ama hiçbirisi içime sinmedi. Web developer arkadaşlar yardımlarınızı bekliyorum günlerdir aynı yerde takılı kaldım.
 

Dosya Ekleri

  • Ekran görüntüsü 2025-03-14 195742.png
    Ekran görüntüsü 2025-03-14 195742.png
    9,2 KB · Görüntüleme: 90
  • Ekran görüntüsü 2025-03-14 195710.png
    Ekran görüntüsü 2025-03-14 195710.png
    543,8 KB · Görüntüleme: 90
  • Ekran görüntüsü 2025-03-14 125300.png
    Ekran görüntüsü 2025-03-14 125300.png
    16,8 KB · Görüntüleme: 80
İlişkilendirince veri tekrarı olacağını sanmıyorum. Yardıma ihtiyacın varsa PostgreSQL ve diğer SQL'ler için yardımcı olmaya çalışabilirim.
 
Son düzenleyen: Moderatör:
İlişkilendirince veri tekrarı olacağını sanmıyorum. Yardıma ihtiyacın varsa PostgreSQL ve diğer SQL'ler için yardımcı olmaya çalışabilirim.
Hocam attributes tablosunda mesela "Depo: 50 Litre" verisini girdim diyelim. Sonra bunun çevirisini yapabilmek için diğer tabloda da aynı veriyi yani "Depo: 50 Litre" girdim diyelim, Ve "Tank: 50 Litres" olarak girdim diyelim. Türkçesini 2 farklı tabloda saklamış olacağım verinin.

Features tablosunda diyelim "Çift Piston" verisini girdim bir ürün için. Başka bir ürün içinde "Çift Piston" verisini girmem gerekecek, bu da veri tekrarı değil midir?
 
Çoka çok ilişkileri önlemek için ara tablolar oluşturabilirsiniz. Products ve ProductsAttributes tablolarını ele alacak olursak buradaki çoka çok ilişkiyi kaldırmak için Attributes adında yeni bir tablo oluşturup, Attribute tanımlarını bu tabloda tutabilirsiniz (name, value alanlarını). ProductsAttributes tablosunda ise ürünler ve attributes arasındaki eşleşmeleri tutarsınız. Çeviri tablolarındaki veri tekrarını önlemek içinse ana tabloda çevirinin yapılacağı anahtar kelimeyi tutabilirsiniz (örneğin "tank_50_litres" şeklinde).
 
Çoka çok ilişkileri önlemek için ara tablolar oluşturabilirsiniz. Products ve ProductsAttributes tablolarını ele alacak olursak buradaki çoka çok ilişkiyi kaldırmak için Attributes adında yeni bir tablo oluşturup, Attribute tanımlarını bu tabloda tutabilirsiniz (name, value alanlarını). ProductsAttributes tablosunda ise ürünler ve attributes arasındaki eşleşmeleri tutarsınız. Çeviri tablolarındaki veri tekrarını önlemek içinse ana tabloda çevirinin yapılacağı anahtar kelimeyi tutabilirsiniz (örneğin "tank_50_litres" şeklinde).
Hocam rica etsem örnek tabloyu oluşturabilir misiniz? Kafam karıştı da.
 
Hocam rica etsem örnek tabloyu oluşturabilir misiniz? Kafam karıştı da.
Attributes için örnek tablo yapısını oluşturdum. ProductsAttributes tablosuna unique constraint tanımlayarak, product_id ve attribute_id ikilisinin benzersiz olmasını sağlarsanız daha şık olur. Aynı şekilde AttributesTranslations tablosunda da attribute_id ve languge_id ikilisini unique olarak belirleyebilirsiniz.
 

Dosya Ekleri

  • dbdiagram.png
    dbdiagram.png
    21,4 KB · Görüntüleme: 47
Attributes için örnek tablo yapısını oluşturdum. Productsattributes tablosuna unique constraint tanımlayarak, product_id ve attribute_id ikilisinin benzersiz olmasını sağlarsanız daha şık olur. Aynı şekilde attributestranslations tablosunda da attribute_id ve languge_id ikilisini unique olarak belirleyebilirsiniz.

Bende dün böyle yapmıştım. Boş bir attribute_id oluşturup onun name değerinin hem ingilizcesini hem türkçesini girip, sonra ürünle ilişkisini kurmak için bir ara tablo olarak düşündüm. Sizce sizin attığınızı mı bunu mu kullanmalıyım hocam.
 

Dosya Ekleri

  • Ekran görüntüsü 2025-03-15 201407.png
    Ekran görüntüsü 2025-03-15 201407.png
    15,3 KB · Görüntüleme: 37
Ben de dün böyle yapmıştım. Boş bir attribute_id oluşturup onun name değerinin hem İngilizcesini hem Türkçesini girip, sonra ürünle ilişkisini kurmak için bir ara tablo olarak düşündüm. Sizce sizin attığınızı mı bunu mu kullanmalıyım hocam?
Zaten aynı yapıyı kurmuşuz. Kurcağınız sisteme tam hakim olmadığımdan ötürü bazı alanlar farklı sadece. Örneğin value değeri, product-attribute eşleşmesine ait bir nitelikse ve yalnızca name alanı translate edilecekse sizin oluşturduğunuz yapı daha doğru.
 
Zaten aynı yapıyı kurmuşuz. Kurcağınız sisteme tam hakim olmadığımdan ötürü bazı alanlar farklı sadece. Örneğin Value değeri, product-attribute eşleşmesine ait bir nitelikse ve yalnızca name alanı translate edilecekse sizin oluşturduğunuz yapı daha doğru.

Evet hocam ben son kararı bu yapıda kıldım sizin de desteğinizle çok teşekkür ederim ilginiz için.
 

Technopat Haberler

Yeni konular

Geri
Yukarı