9

Veritabanı tasarımında yeni. Ürün özniteliği veritabanı tasarımı için daha iyi bir seçenek nedir? (Lütfen diğer seçenekleri de önerin).(Veritabanı Tasarımı - ürün özellikleri): Ürün özellik veritabanı tasarımı için daha iyi seçenek nedir?

seçenek 1: 1 masa

products{ 
id 
product_name 
color 
price 
attribute_name1 
attribute_value1 
attribute_name2 
attribute_value2 
attribute_name3 
attribute_value3 
} 

seçenek 2: den ne istiyorsun bağlıdır 3 tablolar

products{ 
id 
product_name 
color 
price 
} 

attribute{ 
id 
name 
value 
} 

products_attribute{ 
products_id 
attribute_id 
} 

sayesinde Yosef

+0

Öznitelikler ne sıklıkla değişir? Sık sık yenilerini ekliyor/siliyor musunuz? Aksi takdirde, seçenek 1 olan sütunların isimleriyle seçenek 1'i kullanın. Eğer özniteliğiniz dinamikse, 2. seçeneği kullanın. 2. seçenek için elbette bir performans isabeti alacaksınız. –

+0

Ayrıca Bill'in önceki cevaplarınıza bakması ve iyi bir vatandaş olmanız ve sizin için çalışmış olanları kabul etmesinin de söylediği gibi. (Sadece bir fare tıklaması) –

+0

Oylama ekliyorum, bana teşekkür ettiğin için teşekkürler. Web uygulamamız dinamic - her kullanıcının kendi niteliklerini tanımladığı anlamına geliyor. 2. seçenekle ilgili sorun çok yavaş olacak ve seçenek 1 ile Adını bilmediğimiz ve değerinin kullanıcıya tanımladığı ürün için maksimum 10 özellik verin. – Yosef

cevap

22

Veritabanı tasarımında yaygın bir hata yapıyorsunuz, bir sütunda adı depolıyor ve başka bir sütunda değer kaydediyorsunuz. Bu ilişkisel bir veritabanı tasarımı değildir.

Her özellik, sütun adına göre adlandırılmalıdır. Renk, sayfa, gömlek büyüklüğü, yayınlanma tarihi, sütun adları olmalıdır.

Her ürün türünde ayrı bir özellik kümesi varsa, başka çözümler de vardır. Daha fazla bilgi için yanıtlarımı şu adreste bulabilirsiniz:

  • How to design a database schema to support tagging with categories?
  • Design question: Filterable attributes, SQL
  • How do you model custom attributes of entities?
  • Ayrıca lütfen bu hikayeyi okuyun: Eğer yapıyorsun olarak ad-değer çiftleri etrafında tasarlanmış bir veritabanı uygulamak Bad CaRMa: Introducing Vision önce.

    +0

    Teşekkür ederim Bill, diğer sorularıma da oylarımı ver, anlattığın için teşekkür ederim. – Yosef

    +0

    Merhaba Fatura, Size Okuyan Linkler Teşekkürler, Soru: Neden ** Class Table Inheritance ** kullanmayı tercih ediyorsanız ** ** Tek Table Inheritance **? Lütfen açıklayın, Teşekkür ederiz, Yosef – Yosef

    +0

    @Yosef: Sınıf Tablosu Devralma ile birlikte hangi sütun gruplarının bir araya geldiği daha açık. Ayrıca, herhangi bir zamanda, tüm alt türler için ortak sütunlar içeren üst tabloyu değiştirmeye gerek olmadan, kendi türünde özel sütunları ile yeni bir alt çizelge tablosu ekleyebilirsiniz. Bu, örneğin ALTER TABLE'ın pahalı bir işlem olduğu MySQL için önemlidir. –

    1

    Veritabanınız Tüm ürünleriniz aynı tipte ve aynı özelliklere sahipse, o zaman böyle bir şey yapmalısınız:

    ürünler {id: tamsayı, ürün_adı: string, color: string, attribute_name1: string, attribute_name2: string. ..}. Attribute_name {} anlamlı bir kelime olmalı, tıpkı "renk" gibi (bir özellik de).

    +0

    Hayır, aynı değil çünkü 2 alan ekliyorum: 1. isim 2. değer – Yosef

    3

    i ürün için en iyi uygulama alabilirsiniz öznitelik ürünlerinizi aynı özelliklere sahip değilse

    Product_Tbl [ 
        ID 
        Name 
        more columns 
    ] 
    
    Attribute_Tbl [ 
        ID 
        Att_Name 
    ] 
    
    Product_Attribute_Tbl [ 
        Product_ID 
        Attribute_ID 
        Value 
    ] 
    

    bu Bu artık yapıyı

    0

    eski bir konu, ama düşünce kullanabilirsiniz düşünüyorum Bu durumun nasıl geliştiğini düşünmek ilginç olabilir (özellikle daha fazla işlem hızı ile performans zaman zaman kumar oynanabilir demektir).

    Tabloda her bir özelliği ayrı bir öğe olarak kaydetmeyi düşündünüz mü?Diyelim tablo "2", ürüne geri anahtar bir kimliği nerede olacağını:

    Product (table 1) 
    { 
        Product ID 
        Product Name 
    } 
    
        Tags (table 2) 
    { 
        Tag ID 
        Higher Level tag ID 
        Description 
        Value 
        Product ID 
    } 
    

    Ve bu tablo içinde benzersiz kimliğini bulmak böylece bu tablo aynı zamanda "üst düzey" olarak adlandırılan bir alanı içeren edeceğini

    Bu özellik için bu özellik daha yüksek bir seviye olarak oluşturuldu. Böylelikle "omnilevel tagging" adında bir şeyiniz var.

    Yardım bu yardımcı olur