Veritabanı tasarım hataları benim için bir okul oldu, pahalı ama kalıcı bir okul. İlk ciddi veritabanı tasarımımı yaparken tüm verileri tek bir tabloya koydum. Kullanıcılar, siparişler, ürünler, adresler, hepsi tek dev tabloda. Başta hızlı çalıştı. Sonra veri çoğaldı. Veirtabanı tasarım hatalarının birincisi şuydu: tekrarlayan veri. Aynı müşterinin adı ve adresi her siparişte ayrı satırda yazılıyordu. Bir müşteri adresini değiştirince tüm geçmiş siparişleri güncellemem gerekiyordu, ve hepsini güncellemeyi unutuyordum. Veriler tutarsızlaşmaya başladı. Normalizasyonu öğrenmeye başladığımda 1NF, 2NF, 3NF kavramlarıyla karşılaştım. Soyut anlatımlar kafamı karıştırdı. "Atomik değer" ne demekti tam olarak? Bir tabloda aynı isimden birden fazla sütun olmamalıydı, bunu anladım. Ama 2NF ve 3NF için gerçek örnekler görmem gerekiyordu. Veri tabanı tasarım hatası olarak en öğretici deneyimim şu oldu: müşteri tablosuyla sipariş tablosunu ayırdım, ama ürün bilgilerini sipariş satırlarına gömdüm. Bir ürün fiyatı değişince tüm sipariş geçmişi etkilendi. Geçmişte ne ödediklerini göremez hale geldim. Bu bir veritabanı tasarım hatası değil, veri modelleme felsefesi hatasıydı: tarihsel veriyi korumak gerekiyordu. Foreign key kullanmamak da klasik hatalarımdan biriydi. İlişkiler vardı ama veritabanı bunu bilmiyordu. Silinmesi gereken ilişkili kayıtlar ortada kalıyordu, "orphaned record" problemleri oluştu. Bu veritabanı tasarım hatalarından sonra şunu öğrendim: tasarım yapmadan önce bir kağıda entity-relationship diyagramı çizmek, en az bir saat kazandırıyor ve haftalar sürebilecek düzeltme işini önlüyor. Bu küçük adımı atlamak, benim için en büyük ders oldu.