İyi çalışmalar arkadaşlar. Önceden beri kullandığım etiket sistemini ve kullanmayı planladığım fakat performans durumu hakkında tecrübeye sahip olmadığım sistemi aşağıda ayrı ayrı belirteceğim. Sizce hangisi daha performanslıdır?

1. Sistem (Kullanmakta olduğum.) :
  1. Etiketlerin tutulduğu "tags" tablosu var.
  2. İçeriklerin tutulduğu "articles" tablosu var.

İçeriğin etiketleri "articles" tablosundaki ilgili içeriğin "tags" kolonunda "," (virgül)'lerle ayrılarak tutuluyor. Etiketler listelenirken "explode" fonksiyonu kullanılıyor.

Herhangi bir etikete ait içerikleri listelemek için ise:
SELECT * FROM articles WHERE MATCH(tags) AGAINST ('aranan_tag')
gibi FULLTEXT SEARCH yapısını kullanıyorum.

2. Sistem (Kullanmayı Planladığım) :
  1. Etiketlerin tutulduğu "tags" tablosu olacak.
  2. İçeriklerin tutulduğu "articles" tablosu olacak.
  3. Etiketlenen içeriklerin tutulduğu "tagged" tablosu olacak. Tablo alanları yaklaşık aşağıdaki gibi olacak :
    • id
    • tag_id
    • article_id

Bu sistemde içeriğe ait etiketleri listelemek için :
SELECT * FROM tagged WHERE article_id=active_article_id
gibi bir sorgu kullanılacak.

Herhangi bir etikete ait içerikleri listelemek için ise :
SELECT * FROM tagged WHERE tag_id=active_tag_id
sorgusuyla önce o etiketle etiketlenmiş içeriklerin id'leri çekilecek, sonra ise :
foreach($selected_articles as $value) {$article=SELECT * FROM articles WHERE article_id=$value}
gibi bir döngüyle çekilen id'lere ait içerikler çekilecek.

2. Yöntem daha düzenli görünüyor. Fakat hangisi daha performanslı olur?