Sizin tablo gibi bir şey olabilir
CREATE TABLE ArticleText (
INTEGER artId,
INTEGER wordNum,
INTEGER wordId,
PRIMARY KEY (artId, wordNum),
FOREIGN KEY (artId) REFERENCES Articles,
FOREIGN KEY (wordId) REFERENCES Words
)
Tabii bu çok uzay-pahalı vs, veya yavaş olabilir, ama (çok DB motoru bağlıdır gibi) olduğunu belirlemek için bazı ölçümler gerekir. BTW, ben Makaleler tablo artid anahtarlı makaleleri meta ile basit bir tablo olduğu açıktır umut ve Sözcükler tablo (zaten bilinen kelime belirleyerek orada bazı yer kazanmak için çalışırken wordId anahtarlı her makalede tüm kelimelerin bir tablo Bir makale girildiğinde, bu mümkün değilse ...). Bir özel bir kelime gibi ve her gerçek kelime farklı olarak kolayca tanımlanabilir işaretleyici "paragraf sonu" olmalıdır.
Bu gibi verileri yapılandırma yaparsanız sayfa tarafından alınırken çok esneklik kazanmak ve isterseniz sayfa uzunluğu sorgusu tarafından, bir çırpıda bile sorgu değiştirilebilir. Bir sayfayı almak için:
SELECT wordText
FROM Articles
JOIN ArticleText USING (artID)
JOIN Words USING (wordID)
WHERE wordNum BETWEEN (@pagenum-1)*@pagelength AND @pagenum * @pagelength + @extras
AND Articles.artID = @articleid
parametreler @pagenum
, @pagelength
, @extras
, @articleid
sorgu sırasında hazırlanan sorguda eklenecek olan (kullanım olursa olsun dizimi DB ve Böyle :extras
veya numaralı parametrelerin ya da her neyse) gibi dil gibi.
Bu yüzden ötesinde sözler @extras
olsun beklenen sonu-sayfa-ve daha sonra istemci tarafında biz onlardan biri son paragraf işareti olduğundan emin olmak için bu ekstra kelimeleri kontrol - aksi takdirde biz (başka bir sorgu yapacağız ) BETWEEN
değerleri farklı ile daha fazla almak için.
Uzakta ideal, ama, sen vurgulanan olduğunuz tüm konularda verilen, değer dikkate alınarak. Eğer sayfa uzunluğu her zaman örneğin olmanın güvenebilirsiniz eğer 100'ün katları, 100 kelimelik parçalara göre bu çok hafif bir değişim (ve hiçbir Words
tablo, satır başına doğrudan saklanır sadece metin) kabul edebilir.