Transact Charlie tarafından önerildiği gibi operasyonel tablolarınızı normalleştirmek iyi bir fikirdir ve zaman içinde birçok baş ağrısını ve problemi kurtaracaktır - ancak harici sistemlerle entegrasyonu destekleyen arayüz tabloları ve analitik gibi şeyleri destekleyen raporlama tabloları gibi şeyler vardır. işleme; ve bu tür tablolar mutlaka normalleştirilmemelidir - aslında, çoğu zaman onlar için çok, çok daha uygun ve performanslıdır .
Bu durumda, Transact Charlie'nin operasyonel masalarınız için önerisinin iyi olduğunu düşünüyorum.
Ancak, entegrasyon amacıyla CompetitorName üzerinde etkin birleşimleri desteklemek için CompetitorsNeti'ye CompetitorName'e bir dizin (zorunlu olarak benzersiz değil) ekleyeceğim ve dış kaynaklardan verilerin yüklenmesi) ve mix'e bir arayüz tablosu koyacağım: CompetitionResults.
RekabetSonuçları, rekabet sonuçlarınızda bulunan tüm verileri içermelidir. Bunun gibi bir arayüz tablosunun amacı, bir Excel sayfasından veya CSV dosyasından veya bu verilere sahip olduğunuz herhangi bir formdan kesip yeniden yüklemeyi mümkün olduğunca hızlı ve kolay hale getirmektir.
Bu arayüz tablosu, normalleştirilmiş operasyonel tablolar grubunun bir parçası olarak düşünülmemelidir. Ardından, henüz mevcut olmayan Rakiplere kayıt eklemek ve mevcut olanları güncellemek için (örneğin telefon numaraları veya e-posta adresleri gibi rakipler hakkında daha fazla bilgiye sahipseniz) Richard'ın önerdiği gibi CompetitionResults'a katılabilirsiniz.
Dikkat edeceğim bir şey - gerçekte, Rakip Adı, bana öyle geliyor ki, verilerinizde benzersiz olması pek olası değildir . 200.000 rakipte, örneğin 2 veya daha fazla David Smith'e sahip olabilirsiniz. Bu nedenle, rakiplerden telefon numaraları veya e-posta adresleri veya benzersiz olma olasılığı daha fazla olan bilgileri toplamanızı öneririm.
Operasyonel tablonuzda, Rakipler, bileşik veri anahtarına katkıda bulunan her veri öğesi için sadece bir sütun içermelidir; örneğin, birincil e-posta adresi için bir sütun olmalıdır. Ancak arayüz tablosunun birincil e-posta adresi için eski ve yeni değerler için bir yuvası olmalıdır , böylece eski değer Rakipler'deki kaydı aramak ve bu kısmını yeni değere güncellemek için kullanılabilir.
Bu yüzden CompetitionResults bazı "eski" ve "yeni" alanlara sahip olmalıdır - oldEmail, newEmail, oldPhone, newPhone, vb.
Daha sonra bazı rekabet sonuçlarınız olduğunda, CompetitionResults tablonuzu excel sayfanızdan veya sahip olduğunuz her şeyden kesebilir ve yeniden yükleyebilir ve tüm yeni rakipleri Rakipler tablosuna eklemek için tek ve verimli bir ekleme ve güncellemek için tek, verimli güncelleme çalıştırabilirsiniz. CompetitionResults'tan mevcut rakiplerle ilgili tüm bilgiler. Ayrıca, CompetitionCompetitors tablosuna yeni satırlar eklemek için tek bir ekleme yapabilirsiniz. Bunlar, CompetitionResults tablosu yüklendikten sonra yürütülebilen bir ProcessCompetitionResults saklı yordamında yapılabilir.
Bu, Oracle Applications, SAP, PeopleSoft ve diğer kurumsal yazılım paketlerinin bir çamaşır listesi ile gerçek dünyada defalarca yaptığımın ilkel bir açıklamasıdır.
Yapacağım son bir yorum daha önce SO üzerinde yaptığım bir yorum: Rakipler tablosunda Rekabetçi rakiplere bir satır eklemeden önce bir Rakip'in Rakipler tablosunda var olmasını sağlayan yabancı bir anahtar oluşturursanız , yabancı anahtar güncellemeleri ve silmeleri kademelendirir . Bu şekilde bir rakibi silmeniz gerekiyorsa, bunu yapabilirsiniz; bu rakiple ilişkili tüm satırlar otomatik olarak silinir. Aksi takdirde, varsayılan olarak yabancı anahtar, bir Rakip'i silmenize izin vermeden önce, ilgili tüm satırları CompetitionCompetitors'dan silmenizi gerektirir.
(Bazı insanlar basamaklı olmayan yabancı anahtarların iyi bir güvenlik önlemi olduğunu düşünürler, ancak deneyimlerim, popoda sadece bir gözetimin sonucu olmaktan daha sık olmayan ve bir sürü iş yapmaktan korkan bir acı olduklarıdır. Yanlışlıkla bir şeyleri silen insanlarla uğraşmak, neden "emin misiniz?" iletişim kutuları ve çeşitli düzenli yedekleme ve yedekli veri kaynakları gibi şeylere sahip olmanızdır. Verileri tamamen olan bir rakibi silmek istemek çok daha yaygındır. örneğin, yanlışlıkla birini silmek ve sonra "Ah hayır! Bunu yapmak istemedim! Ve şimdi onların rekabet sonuçları yok! Aaaahh!" , bunun için hazırlıklı olmanız gerekir, ancak birincisi çok daha yaygındır,bu nedenle, eski imo için hazırlanmanın en kolay ve en iyi yolu, yabancı anahtarları art arda güncellemeler ve silmeler yapmaktır.)
NVARCHAR(64)
sütunu, birincil (ve dolayısıyla: kümeleme) tuşuna !! Her şeyden önce - çok geniş bir anahtar - 128 bayta kadar; ve ikinci olarak değişken boyutu - tekrar: optimal değil ... Bu sahip olabileceğiniz en kötü seçim hakkında - performansınız cehennem olacak ve tablo ve dizin parçalanması her zaman% 99.9 olacaktır .....