MySQL veri yapısı tavsiyem gerekli

0 Cevap php

Ben etkin ve hızlı metin arama için benim verileri düzenlemek için nasıl ilgili bazı tavsiyeler gerekir.

Background

I have an application (in PHP) where the user can organize articles and dynamically create forms and fields for that purpose. Meaning that one article can for example have Type,Brand,Color attributes and another article can for example have Type,Material,Color,Content as attributes. The user can basically create as many attributes he likes...

Then I need to be able to search and sort among these "unknown" attributes. I also need to be able to read back all the attributes in the case the user want to edit the article.

My solution

Benim ilk fikir (ve şimdiye kadar sadece bir fikir) gibi FULLTEXT endeksi (çalışmak için MyISAM olması gerekiyor), tek bir TEXT alanına tüm özelliklerini kodlamak için:

__Type="3",__Brand="Nokia",__Color="6"
__Type="2",__Material="7",Color="2",İçerik = "MP3 Çalar, 2 elma, 1 kitap: Larry King"

Öznitelikler öznitelikleri değerleri ile karıştırılmamalıdır bir önek ve / veya postfix'i olacaktı. Veya JSON ile özelliklerini serialize.

Sonra ben gibi seçilen niteliklerine dayanarak bir sorgu oluşturabilirsiniz:

SELECT * FROM Articles a
WHERE Attribute LIKE '%__TYPE="2"%'
AND Attribute LIKE '%__Color="2"%'

Bir özellik boşsa, o dahil olmayacak ve bu mümkün olursa olsun değerinin belirli bir öznitelik kümesi vardır tüm makalelerin bir arama eklemek için yapar.

Problem

Sorun ya da değil, ne ben endişeleniyorum veritabanı binlerce makale ile dolu olduğunda arama performans.

Başka bir sorun da gibi belirli bir niteliğine içinde belirli bir kelime için arama olacaktır:

İçerik = "MP3 Çalar, 2 elma, 1 kitap: Larry King"

Diyelim ki, yalnızca nitelik İçerik yerde ifade "Larry King" olan satırları almak istiyorum diyelim. Ben "Larry King" bir yere sahip olduğu tüm satırları bir maç almadan aynı SQL söz bunu sanmıyorum.

Ben hedefleri açıkladı ulaşmak için oluşturmanız gereken tablolar, alanlar ve ilişkiler ile ilgili öneri / tartışma her türlü açığım.

Teşekkür ederim.

0 Cevap