Bu etiketleme yaklaşımın herhangi dezavantajları

3 Cevap php

I tags bir tablo var

ID      tag
---     ------
1       tagt
2       tagb
3       tagz
4       tagn

Benim items tabloda, ben tefrika formatında bu etiketleri, virgülle ayrılmış istimal

ID       field1       tags
----     ------       -----
1        value1       tagt,tagb
2        value2       tagb
3        value3       tagb,tagn
4        value4

Ben bu etikete sahip öğeleri bulmak gerektiğinde, ben etiketleri serisini planlıyoruz. Ama bunu yapmak için nasıl aslında emin değilim, ve yerine etiketleri ve öğeler arasındaki ilişkinin üçüncü bir tablo var daha eğer.

3 Cevap

Genel olarak, bir kişinin avantaj ilişkisel veritabanı gücünü kullanmaya çalışır. Diğer bir deyişle, seri hale ve de-serializing bir string herhangi bir etiketleme özelliği erişilen her zaman ikisi de son derece verimsiz ve başka nedenlerden dolayı kötü bir tasarım.

Örneğin, ne varsa bir (undefined) etiketi tagc yanlışlıkla bir item ve tags alanına eklenir? Kod hata ayıklamak çok zor olacaktır.

Ilişkili kimlikleri kayıtları içeren üçüncü bir tablo oluşturma çok daha iyi bir seçenektir. Buna ek olarak, böyle bir şey bakmak için taggings tablo oluşturabilirsiniz:

ID    item_id    tag_id    tagger_id    etc
-------------------------------------------

ve her bir etiketleme ile birlikte meta-veri depolamak.

Yapılandırılmış veri depolamak için aşırı bağımlı dizeleri üzerinde olma verimsiz ve unmaintainable hem de. Etki modelleme, kod "stringly yazdığınız" önlemek için daha fazla bu durumlarda daha iyidir.

Ben olsaydım, evet, ben öğe etiketi dernek için üçüncü bir tablo kullanabilirsiniz. Bu etiketli mesajları aramak için daha kolay ve daha hızlı olacak ve siz de hiçbir aynı etiket veritabanı tasarımı ile aynı mesajı iki kez eklenecektir zorlamak olabilir.

Etiketleme yaklaşımı ile yanlış ne açıklamak için, sana benzer kusurlu veritabanı göstermek için gidiyorum:

table Students
--------------------
Id     grade          names
--     -----          -----
1      Kindergarden   timmy, james, sarah, suzie, etc...
2      1st            annie, chris, laura, etc...
3      2nd            robert, kimmy, sarah, jason, etc...

Bu aynı nedenlerle tüm yanlış. Sen isimleri ile bir şey yapamaz. Sen, onları saymak onlara göre filtre, hatta sadece bir tanesi iade edemez.

Ne size şu anda düşünmediğini olduğunuzu daha sonra etiketleri ile eşyalarını soğutmak istiyorsanız?