SORU
14 Temmuz 2009, Salı


Tasarım desenleri bir uygulamada özel alanları desteklemek için nelerdir?

Ticari bir uygulama geliştiriyoruz. Müşterilerimizin özel alanlar için destek istiyor. Örneğin, Müşteri formu için bir alan eklemek istiyorum.

Alanları ile ilgili alan değerleri ve meta-veri deposu olarak bilinen tasarım desenleri nelerdir?

Şimdilik bu seçenek görüyorum:

Seçenek 1: Müşteri masama varchar Alan1, Alan2, Alan3, Field4 sütun ekleyin.

Seçenek 2: Müşteri tablosunda XML türünde tek bir sütun ekleyin ve özel alanları' xml değerleri. mağaza

Seçenek 3: Bu sütun türü varchar ve mağaza değerleri bir sütun ile CustomerCustomFieldValue bir tablo ekleyin. Bu tablo da bir Müşteri Kimliği, bir CustomFieldİD olurdu.

CustomerID,  CustomFieldID, Value
10001,       1001,          '02/12/2009 8:00 AM'
10001,       1002,          '18.26'
10002,       1001,          '01/12/2009 8:00 AM'
10002,       1002,          '50.26'

CustomFieldİD başka bir tablo bu sütunlar ile CustomField " adlı bir KİMLİĞİ olurdu: CustomFieldİD, Alanadı, FieldValueTypeİD.

Seçenek 4: Sağ sütundaki her olası değeri yazın ve saklayın değerleri bir sütun ile CustomerCustomFieldValue bir tablo ekleyin. #3 benzer ama alan değerleri şiddetle tipi kullanılarak saklanır sütun.

CustomerID,  CustomFieldID, DateValue,           StringValue,       NumericValue                 
10001,       1001,          02/12/2009 8:00 AM,  null,              null
10001,       1002,          null,                null,              18.26
10002,       1001,          01/12/2009 8:00 AM,  null,              null
10002,       1002,          null,                null,              50.26

Seçenek 5Ve 4 seçenek 3 tablo (Müşteri) tek bir kavram için belirli kullanın. Müşterilerimize diğer şekillerde özel alan için de soruyor. Bunun yerine, sistem genelinde özel alanı depolama sistemi kurmalıyız? Yani CustomerCustomFieldValue, EmployeeCustomFieldValue, İnvoiceCustomFieldValue gibi birden fazla tablo yerine tek bir tablo CustomFieldValue adlı olurduk? Bana daha şık görünüyor olsa da, bu performans düşüklüğü neden olmaz?

Bu yaklaşımlar birini hiç kullandın mı? Başarılı oldun mu? Yaklaşım seçin ne olur? Ya ben başka bir yaklaşım biliyor musunuz?

Ayrıca, müşterilerimin özel alanı diğer tablolarda veri başvurmak için mümkün olmak istiyorum. Örneğin, bir müşteri "Ödeme" Müşteri. alan Yöntemi Favori eklemek isteyebilirsiniz Ödeme şekli başka bir sistemde tanımlanır. ""Resimde. yabancı anahtarları konusunu Kısıtlamaları değerleri özel alan tablolarda depolanan geçerli değerler sağlamak için oluşturmak için denemeli miyim?

Teşekkürler

======================

07-27-2009 DÜZENLEME:

Cevaplarınız için teşekkür ederim. Yaklaşımları listesi oldukça kapsamlı gibi görünüyor. Seçenek 2 (tek bir XML sütun) seçtim. Şimdi uygulamak için kolay oldu. Muhtemelen güçlü tanımlı benim gereksinimleri daha karmaşık hale geldikçe ve destek için özel alanların sayısını daha büyük olsun gibi bir yaklaşım daha fazla mercekli gerekecek.

CEVAP
14 Temmuz 2009, Salı


Seçenek 3, 4, veya 5 uygun olması muhtemeldir aşağıda o posterleri ile katılıyorum. Ancak, önerilen uygulamaların her birinin kendine göre avantajları ve maliyetleri vardır. Gereksinimlerinize göre eşleştirerek seçimi öneririm. Örneğin:

  1. Seçenek 1 artıları: uygulamak için Hızlı. Özel alanları DB eylemler (, sıralama arama.) sağlar
    Seçenek 1 eksileri: Özel alanlar, türü kesin olarak belirtilmiş alanlar. hayır yani genel Veritabanı tablo verimsiz, ölçü bakımından hiç kullanılacak bir çok gereksiz alanları ile. Özel alanları sayısı ihtiyacı beklenen izin verdi.
  2. Seçenek 2 artıları: uygulamak için Hızlı. Esnek, keyfi bir sayı ve bir özel alan türü sağlar.
    Seçenek 2 eksileri: özel alanlarda DB eylemleri mümkün. Bu tüm yapmanız gereken özel alanları görüntülemek ise en iyi, daha sonra, ya da her Müşteri için ayrı ayrı sadece verilerin küçük manipülasyonlar yapmak.
  3. Seçenek 3 artıları: esnek ve verimli. DB eylemler yapılabilir, ama veriler biraz boşa alan azaltmak için normale döndü. Bilinmeyen (google)'ın yazın veya kaynak bilgilerini belirtmek için kullanılan ek bir sütun ekleyin öneriye katılıyorum. Seçenek 3 eksileri: sorgu geliştirme zamanı ve karmaşıklığı içinde Hafif bir artış, ama gerçekten çok fazla eksileri yok burada.
  4. Seçenek 4 Seçenek yazılan veriler DB düzeyinde çalıştırılabilen dışında 3, aynıdır. Seçenek 3 link masaya tür bilgilerin yanı sıra, uygulama bizim düzeyde daha fazla işlem yapmanızı sağlar, ama DB karşılaştırmalar yapmak veya sıralama, örneğin mümkün olmayacaktır. 3 ve 4 arasında bir seçim bu gereksinimi bağlıdır.
  5. Seçenek 3 veya 5 ama çok farklı tablolar çözümü uygulamak için daha fazla esneklik ile 4, aynıdır. Bu durumda maliyeti bu tablonun boyutu çok daha büyüyecek. Eğer çok pahalı birleştirme işlemlerini kendi özel alanları almak için yapıyorsanız, bu çözüm iyi ölçekli değil.

Aşağıda belirtildiği Gibi P. S., "tasarım deseni" genellikle nesne yönelimli programlama anlamına gelir. terim En danışmanlık tasarım desenleri ile ilgili geçerli olmayacak anlamına gelir veritabanı tasarımı bir sorun için bir çözüm arıyoruz.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • ChannelRichard

    ChannelRicha

    7 Kasım 2008
  • hans peder sahl

    hans peder s

    22 Temmuz 2009
  • NCIX Tech Tips

    NCIX Tech Ti

    2 Ocak 2007