Şu anda makale ve Etiketler adı verilen iki tablo içeren bir veritabanım var. Makalelerin birden fazla kategoride olmasına izin vermek için çok fazla ilişkiye sahibim. Performans açısından böyle bir tasarıma sahip olmak bir hata mıdır? veya bu iki tablo arasındaki ilişkiyi kaldırmalı ve üçüncü bir tabloyu köprü olarak eklemeliyim (articlesTags)?Veritabanı tasarımında çoktan çoğa ilişkisi
cevap
Çoktan çoğa ilişkisine sahip olmanın doğal olarak yanlış bir tarafı yok, yalnızca Junction Table (articlesTags
ile ilgili olduğunu düşündüğünüz gibi) bu ilişkiyi kolaylaştırmak için oluşturmanız gerekir.
Verilerin gerektirdiği buysa, çoktan çoğa ilişkisine sahip olmakla ilgili bir sorun yok, ancak bunu temsil edecek bir 3 tablo isteyeceksiniz.
"Üçüncü bir masaya ihtiyacınız olacak" derdim. – Dave
İlişkisel modelde çoktan çoğa ilişkisi var, sadece zihnin bir soyutlaması. Birçok kullanımında hiçbir sorun yoktur
fk_article (INTEGER) fk_tag (INTEGER)
: bunu uygulamak gerekir zaman gerekecek bir articles_to_tags tablo olacaktır Birçok ilişkilere. Genellikle gereklidir.
Ve evet, üçüncü bir tablo kullanmadan çok fazla ilişki oluşturmak mümkün değildir.
Kavramsal veritabanı tasarımı (N: N ilişkisi) ile fiziksel gerçekleşme arasındaki farkı görüyorsunuz. N: N ilişkinizi nasıl modellediğinize bakılmaksızın, çalışmasını sağlamak için yukarıda belirtilen Bağlantı Tablosuna ihtiyacınız olacaktır. Genel bir ifade olarak gerçek dünyaya yakın bir gerçek dünya ilişkisini modellemekte yanlış bir şey yoktur. Berraklık kraldır.
Herhangi bir sistemdeki herhangi bir performans sorusu söz konusu olduğunda, yanıt genellikle "bağlı" durumuna düşer.
Performans sorununuz WRITES ile ilişkiliyse, yüksek bir NORMALIZED yapısı en iyisidir ve bu Bağlantı tablosunu isteyeceksiniz. Sonunda çok daha az veri yazacaksınız ve bu da işleri büyük ölçüde hızlandırabileceksiniz (buna rağmen eklentileri oluşturmadan önce arama yapmak zorunda kalarak bu avantajı yakabilirsiniz). Kişiselleştirilmiş normal tablolardan okumak da çok hızlı olabilir.
Sorununuz analitik READS ile ilgili ise, DENORMALISED bir yapı en iyisidir. Tablolar büyükse ve indeksler yayılırsa, birleşimler çok yoğun olabilir. Çok fazla zaman kazanmak için çok fazla alan kurban edersiniz. Genel olarak, durumunuzun ayrıntılarına bakmak ve bir çözüm üzerinde karar vermeden önce her yaklaşımın artılarını ve eksilerini tartmak istersiniz. Şahsen, ilk aşamalarda Clarity'ye odaklanmayı ve daha sonra bir problemi keşfettiğimde performansın yeniden düzenlenmesini her zaman daha iyi buldum.
- 1. Ek alanlar ile çoktan çoğa ilişkisi
- 2. Doctrine2 ile çoktan çoğa ilişkisi arama
- 3. .NET RIA hizmetlerinde çoktan çoğa ilişkisi
- 4. Çoktan çoğa sorgu jpql
- 5. Fluent-NHibernate: Benzersiz bir contraint ile çoktan çoğa ilişkisi oluşturma
- 6. Symfony2 ile Doktrini kullanarak çoktan çoğa ilişkisi sorgula
- 7. Çoktan çoğa nasıl sorgulanır?
- 8. Çoktan çoğa eşleme tablosu
- 9. Çoktan çoğa tabloya göre filtreleme
- 10. Çoktan çoğa tablodaki kayıt silme
- 11. Entity Framework çoktan çoğa öznitelelik
- 12. Çoktan çoğa sorgu kullanılarak SQL
- 13. RestKit çoktan çoğa eşleme nasıl yapılır?
- 14. Çoktan çoğa ilişkideki satır sayısı (SQLAlchemy)
- 15. Bu Çoktan-Çok doktrin2 ilişkisi nasıl tanımlanmalıdır?
- 16. LINQ çoktan çoğa ilişkisi, doğru bir WHERE yan tümcesi nasıl yazılır?
- 17. Aynı tablo arasında çoktan çoğa silme
- 18. Çoktan çoğa ilişki okumak ve yazmak
- 19. django 1.4 Çoktan çoğa toplu ekleme
- 20. PHP MYSQL çoktan çoğa ilişkiyi güncelleştirme
- 21. setPrimitiveValue: forKey: ve çoktan çoğa ilişkileri
- 22. Varlık Çerçevesi'nde çoktan çoğa ilişkiyle ilgili hata
- 23. Çoktan çoğa ilişkilendirme tablosuna silmek mi istiyorsunuz?
- 24. Django Çoktan çoğa (m2m) Aynı modele ilişkindir
- 25. Entity Framework'de çoktan çoğa eşleme nasıl oluşturulur?
- 26. Django'da, çoktan çoğa ilgili bir sınıf alanına nasıl erişirsiniz?
- 27. MySQL, çoktan çoğa bağlantı tablosu için birincil anahtar gerektiriyor mu?
- 28. Django'dan "ekstra alanları" kullanarak fazla alanlarla çoktan çoğa ilişkilerini kullanma
- 29. Nasıl tembel yükleme hazırda çoktan çoğa koleksiyonu var?
- 30. Tabloda çoktan çoğa arasındaki ilişki varsa Varlık'ta kesişme nasıl alınır?
ArticlesTags tablosu kullanmadan çoktan çoğa ilişki nasıl oluşturdunuz? – flayto
Çoktan çoğa ilişkiniz varsa, temsil etmek için üçüncü tablonuz gerekir - mantıklı bir alternatif yoktur. En yakın yaklaşımınız her tabloda bir SET yapısı olabilir - DBMS'niz bunu destekliyorsa. Ancak, tipik olarak, bu tür tiplerde çok fazla masa başı kontrolü yoktur - ayrı tablo gereklidir. –