Bu Etiketleme çözüm nasıl etkili olabilir?

1 Cevap php

Im bir görüntü paylaşım sitesinde çalışan ve görüntüler için etiketleme uygulamak istiyorum.

Ben Soruları okudum #20856 ve #2504150

Yukarıdaki sorulara yaklaşımı ile birkaç endişeleri var. Her şeyden önce bir etikete bir görüntü bağlantı kolay görünüyor. Ancak etiketi ilişki görüntüleri almak kadar kolay değildir. Eğer bir tablodan görüntü-etiketi ilişkisini almak ve daha sonra bir demet OR tablolarında (bir VEYA her görüntü için) büyük bir sorgu yapmak zorunda olacak çünkü kolay değil.

Hatta ben aşağıdaki yöntemi test etmeye başladı etiketleme konuyu araştırma önce:

Örnek olarak bu tabloları:

Table: Image
Columns: ItemID, Title, Tags

Table: Tag
Columns: TagID, Name

(-) Image tabloda Tags kolon çoklu tagID çizgiler ile kapalı Tag tablosundan bir dizisini alır.

Örneğin:

-65-25-105- 

TagID 65,25 ve 105 ile bir görüntü bağlar.

Bu yöntemle i bir sorgu ile TagID olsun ve benzeri başka basit bir sorgu ile tüm görüntüleri almak gibi kolay etiketi görüntüleri almak için bulmak:

SELECT * FROM Image WHERE Tags LIKE %-65-%

Yani ben etiketleme için bu yöntemi kullanırsanız,

Bu ne kadar etkilidir?

% Yavaş süreci -% -65 GİBİ tarafından sorgulanıyor?

I gelecekte ne gibi sorunlar karşıya olabilir?

1 Cevap

Bu 3 tablolar gerekir.

Table: Image
Columns: ImageId, ItemID, Title

Table: Image_Tag
Columns: ImageId, TagId

Table: Tag
Columns: TagID, Name

Sonra kullanacağınız bir etiket için tüm görüntüleri almak için:

SELECT ImageId, Title 
FROM Image_Tag LEFT JOIN Image USING (ImageId)
WHERE TagId = $TagId

Bu bir ilişkisel veritabanı çok-çok ilişkileri işlemek için tipik bir yoludur. Muhtemelen http://en.wikipedia.org/wiki/Database_normalization okuyarak yararlanacak

Düzenleme: Ben bu zaten başvurulan diğer sorular adreslerini olduğunu görmek, bu yüzden daha fazla açıklayacağım. Bunu o şekilde yapmanın görmek büyük sorun sorguları az verimli hale getirir id sütunlar dizine yararlanmak olamaz. Güncellemek için beceriksiz olacak gibi de görünüyor. Ben çok bu şekilde yapmak için çalışıyor öneririm, en az 3 tablo çözüm kullanarak denemek istiyorum. Sizin için "tık" bana teşekkür edeceksiniz kez.