Çeşitli / değişken içerik PHP / MySQL veritabanı tasarımı - modüler sistem

1 Cevap php

Temel web siteleri oluşturmak için küçük modüler sistemi (çoğunlukla ortak görevlerini kolaylaştırmak için biz webdesigners rutin yaptığımız gibi): Ben (] Şu an sadece ilişkilerini çizim / / planlama düşünme) inşa etmeye çalışıyorum.

Ben küçük içerik depolama veritabanı tasarımı / fikre saplanıp.

. 1, (benim deneyimlerinden) web sitelerinin çoğu çoğunlukla acı nedir, yarı aynı düzen / iskeletleri ile sayfaları farklı bilgi vardır - örneğin Başlık, resim, bilgi ve set - CMS özel şablonları / özel modüller yapma, ama bir metin olarak düzenleyin daha fazla enerjiye mal olur - ancak, burada bazı operasyonel potansiyelini kaybetmek - biz "sadece başlıkları" alınamıyor, CMS / sistem bir textfield olarak tüm içeriği anlar, çünkü

Yani, bu iki tablo istiyorum - bir içerik (örneğin, sadece değişken fotoğrafların miktarının <1; 500) neler yapısı bilgileri tutmak için:], title & Metin & fotoğraf (büyük) & galeri) - NASIL - ve tüm içerik, modüller ve "koleksiyon" (çeşitli yapısal bilgi için benim çalışma adı) parçaları ile başka bir tablo - NE

table module_descriptors (HOW)  
id int  
structure - *???*  

table modules (WHAT)  
id int  
module_type - @link to module_descriptors id
content - *???*  

. 2, Bu konuda ne gibi - Ben birçok tablolar gerekmez - Ben bu kadar açıklama için, 6810 tablolar, her modül için biri ile veritabanları sevmiyorum, misc için. , ilişkileri metne ... ve ben de 60 sütunlarla tablolar sevmiyorum, gibi numara content_us, content_it, category_id, {[(3) }].

Ben yapı açıklamasını tutun ve yetinmesi olabilir düşünüyorum XML veya CSV olarak ya (???? Kaydetti), ama belki ben tekerleği yeniden icat ve bu bazı tasarımında gizlidir cevap çalışıyorum Ben içine bakmadım desen.

Bana ... Düşüncelerinizi, artılarını, eksilerini vermek veya beni cehenneme göndermek - Ben hiç bir mantıklı ve biraz cevap olsun umuyoruz. Teşekkür ederim

EDIT: Benim sorum da bu olduğunu: Bu yaklaşım mantıklı mı? Düzenlemek dostu var mı? Daha iyi bir şey değil mi? Bu ahlaki mi? Ben bunu yaparken kedi ölmek olmaz mı? Çok ben DB çekti 30 XMLs okumak ve karşılaştırmak istiyorsanız sunucu için, (örneğin şey karşılaştırmak istiyorum) çok değil mi? Teknik bölüm - bunu nasıl - soru sadece bir parçasıdır :)

1 Cevap

Eğer ima ettiğin tasarım deseni denir Serialized LOB. Sen her giriş için aynı nitelikleri için (sütun gibi) geleneksel şekilde bazı verileri saklayabilirsiniz. Değişken özellikleri için, XML veya markdown veya istediğiniz gibi biçimlendirmek ve bir METİN BLOB depolamak.

Tabii ki DAMLA içindeki tek tek öğeleri sorgulamak için SQL ifadeleri kullanmak için yeteneğini kaybeder. Eğer arama veya sıralama kullanmak için gereken şey, geleneksel sütun olmalıdır.


Yorumunuz Re: Metin blob XML biçiminde ise, XML functions daha sonra MySQL 5.1 tarafından desteklenen ve bunu arama olabilir. Ama bu bir dizin istifade edemeyen, bu yüzden çok yavaş aramalarda neden olacak.

Eğer joker ile LIKE veya RLIKE kullanmaya çalışırsanız aynı durum geçerlidir. Bir dizin kullanmadan, aramalar tam tablo taramaları neden olacaktır.

Bu metin içeriği ve XML etiket adları ve XML arasındaki farkı söylemek mümkün olmayacaktır çünkü aynı zamanda, bir MySQL FULLTEXT endeksi, ama bu XML verilerini aramak için iyi bir çözüm değildir kullanmayı deneyebilirsiniz bağlıyor.

Yani sadece sırala aramak ya da istediğiniz herhangi bir alan için geleneksel sütunları kullanabilirsiniz. Bu şekilde daha mutlu olacağım.


Söz Re: belgeler gerçekten değişken yapıya ihtiyacınız varsa, size birkaç seçenek var. Doğru kullanıldığında, SQL her satır (ki, sütunlar olan) aynı yapıya sahip olduğunu varsayar. Sizin alternatifler:

Bazı insanlar Varlık-Özellik-Değer (EAV) değişken özelliklerini saklamak denilen bir antipattern çare, ama dürüst olmak gerekirse, orada gitmeyin. Bu yanlış gidebilir ne kadar kötü hakkında bir hikaye için, bu makaleyi okuyun: Bad CaRMa.