SORU
6 EYLÜL 2010, PAZARTESİ


Veritabanına bir sütun ayrılmış bir listesini saklamak çok mu kötü?

Onay kutularını bir dizi (herhangi biri ya da hepsi seçilebilir) ile bir web form düşünün. Onları kurtarmak için değerleri veritabanı tablosundaki bir sütunda depolanan virgülle ayrılmış bir liste olarak seçtim.

Şimdi, doğru çözüm ikinci bir tablo oluşturmak ve düzgün veritabanı normalleştirmek için olacağını biliyorum. Kolay çözümü için daha hızlı ve proof-of-concept bu uygulama hızlı ve üzerinde çok fazla zaman harcamak zorunda kalmadan vermek istedim.

Kaydedilen zaman ve basit kod değdi benim durumda düşündüm, bu savunulabilir bir tasarım seçimdir, ya da normalize olması gerekir ... en başından beri?

Daha fazla içerik biraz, bu paylaşılan bir klasörde depolanan aslında bir Excel dosyası yerine küçük bir iç uygulamadır. Ayrıca program temizlemeyi düşünüyorum soruyorum çünkü daha rahat olun. Biri bu sorunun konu ile tamamen mutlu değilim orada bazı şeyler var.

CEVAP
6 EYLÜL 2010, PAZARTESİ


Değerleri tek bir sütunda depolanan yinelenen grup yüzünden First Normal Form ihlal etmenin yanı sıra, virgülle ayrılmış listeler daha pratik başka sorunları var:

  • Her değeri doğru veri türü olduğundan emin olun. önlemek için bir yolu1,2,3,, 5 muz
  • Bir arama tablosu değerlerini bağlamak için yabancı anahtar kısıtlamaları kullanamaz; tutarlılığı sağlamak için bir yolu.
  • Benzersizlik: engellemek için bir yol1,2,3,3,3,5
  • Sil tüm listeyi getiriliyor olmadan listeden bir değeri yok.
  • Mağaza listesi dize sütundaki ne uyuyor daha uzun olamaz.
  • Sabit listesinde belirli bir değeri olan tüm varlıklar için aramak için; bir verimsiz kullanımı tablo-tarama var. Düzenli ifadeler başvurmak, MySQL, örneğin olabilir:
    idlist REGEXP '[[:<:]]2[[:>:]]'
  • Sabit listedeki öğeleri saymak için, ya da diğer toplu sorgular.
  • Bir arama tablosu değerlerini katılmak zor başvurusu.
  • Listeyi almak için sabit sıralı düzende.
  • Dize olarak depolamak ikili tamsayılar tamsayılar depolama olarak iki kat daha fazla yer alır. Boşluk virgül karakterini tarafından çekilen bahsetmiyorum bile.

Bu sorunları çözmek için, uygulama kod ton, VERİTABANI işlevleri yeniden yazmak zorundazaten sağlar çok daha verimli.

Virgülle ayrılmış listeler kitabımda bu ilk bölümde yaptığım yanlış yeterli: SQL Antipatterns: Avoiding the Pitfalls of Database Programming.

Denormalization istihdam etmek gerekir zamanlar vardır, ama @OMG Ponies mentions, Bu istisna durumlar vardır. Herhangi bir ilişkisel olmayan “optimizasyon” faydaları bir tür sorgu karşılığında diğer kullanım verileri, bu yüzden emin olun sizin bilmediğiniz, sizin sorguları gerek tedavi olmak çok güzel bir şey buldum bunu hak ediyorlar denormalization.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Elliot Davin

    Elliot Davin

    28 Kasım 2008
  • The Slow Mo Guys

    The Slow Mo

    15 AĞUSTOS 2010
  • Thom Hall

    Thom Hall

    24 Kasım 2006