Öneri ve Hata Raporu



Günün Sözü Her an seni düşünür

oylama 2.9/5 yorum 5 yorum yazar Hakan Taşan tarih 08 Kasım 2013

Ben bu blogu tasarlarken 1 hafta boyunca etiketler ve makale ilişkilerini nasıl yapacağımı düşündüm. Veritabanı tasarımı çok zorlamasa da Codeigniter ile kodlaması epey zamanımı aldı açıkçası. Bu makalede etiket bulutu için ideal veritabanı tasarımını anlatacağım.

Etiket bulutu için elimizde minimum 3 adet tablo bulunması gerekiyor.

  • yazilar (yazıların bulunacağı tablo)
  • etiketler (etiketlerin bulunacağı tablo)
  • yazi_etiket (yazıları ve etiketleri ilişkilendireceğimiz tablo)

 

yazilar tablosunu inceleyelim. Oluşturulacak sütunlar id, icerik, baslik, tarih ve projenize ait diğer sütunlar.

Bu tabloda işimize yarayacak olan sütun id sütunudur. Her yazının farklı bir id'si olmalıdır. Bu yüzden id sütunu primary key olmalıdır. Diğer sütunlar ise yazıyı tanımmlayan sütunlardır yani yazı içeriğini belirten icerik sütunu, yazı başlığını belirten baslik sütunu ve yazı tarihini belirten tarih sütunudur.

CREATE TABLE `yazilar` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `icerik` text NOT NULL,
  `baslik` varchar(200) NOT NULL,
  `tarih` date NOT NULL,
  PRIMARY KEY (`id`)
);

 

etiketler tablosunu inceleyelim. Oluşturulacak sütunlar id, etiket ve hit sütunları.

Bu tabloda da her etikete özgü bir id değeri olmalıdır. Bu yüzden id sütunu primary key olacaktır. etiket sütunu ekleyeceğimiz etiketi içermelidir. hit sütunu ise o etiketten kaç adet bulunduğunu gösterir. Her satırda bir adet etiket tanımlanmalıdır.

CREATE TABLE `etiketler` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `etiket` varchar(50) NOT NULL,
  `hit` int(11) unsigned NOT NULL,
  PRIMARY KEY (`id`)
);

 

yazi_etiket tablosunu inceleyelim. Oluşturulacak sütunlar yazi_id ve etiket_id sütunları.

İşin en önemli noktası bu tablo yani yazıları ve etiketleri birbirleriyle ilişkilendireceğimiz tablodur. yazi_id sütununda yazilar tablosundaki bir yazıya ait id, etiket_id sütununda ise etiketler tablosundaki bir etiket id'si olmalıdır ki yazı ve etiketi ilişkilendirebilelim.

CREATE TABLE `yazi_etiket` (
  `yazi_id` int(10) unsigned NOT NULL,
  `etiket_id` int(10) unsigned NOT NULL
);

 

Nasıl Kullanılabilir?

yazi_etiket tablosunun amacı yazilar ve etiketler tablosunun id'lerini tutmak ve gerektiğinde bu id'ler sayesinde hangi yazının hangi etiketleri olduğunu bulabilmek.

Örnek yazilar tablosu

Örnek etiketler tablosu

Örnek yazi_etiket tablosu

Tablolara göre 2 tane yazımız var. 1. yazı Android Başlığı ve 2. yazı PHP Başlığı. Android Başlığı adlı yazının sahip olduğu etiketler yazi_etiket tablosunda yazi_id'si 1 olan bütün satırlardır (etiket_id'si 4,3 ve 1 olan etiketler). Aynı şekilde PHP Başlığı adlı yazının sahip olduğu etiketler de yazi_etiket tablosunda yazi_id'si 2 olan bütün satırlardır (etiket_id'si 3,2 ve 1 olan etiketler). etiketler tablosuna dikkat ederseniz 2 yazının da ortak olan 2 tane etiketi vardır. Bunlar php ve android etiketleridir. Bu yüzden hit sütununda o etiketin karşısında 2 yazmaktadır.

Şimdi kısa bir örnek SQL sorgusu ile veritabanından nasıl veri çekebileceğinizi anlatıp yazımı bitireceğim.

SELECT e.etiket FROM yazi_etiket AS ye, etiketler AS e WHERE ye.yazi_etiket = "1" AND ye.etiket_id = e.id;

 

yazilar tablosundan id'si 1 olan yazının etiketlerini bu SQL sorgusu ile çekebiliriz. 1 yazan yeri istediğiniz yaznın id'si ile değiştirebilirsiniz.

paylaş Paylaş
oylama yap Oyla

makale yorumları YORUMLAR

5 Yorum


yorum

Mert1i

06 Mayıs 2015 13:37


Güzel yapmışsın ama devamı gelecek mi? Mesela yaptıklarını çok iyi anladım ama bu nasıl çalışacak. Tabloları oluşturduk. İlişkilendirme nasıl olacak? Yarım kalmış yada biraz daha az bilgisi olanlara hitap etmiyor.. Anlatımın çok başarılı daha geniş kitleye hitap eder tarzda makalelerini görmek ümidiyle. Başarılar.

yorum

Admin

12 Mayıs 2015 04:33


Merhaba Mert1i; makaleyi baştan okuyunca dediğiniz gibi daha az bilgisi olanlara hitap etmediğini gördüm. burada yazi_etiket tablosunda bulunan makale id lerimizi etiket id leri ile ilişkilendiriyoruz. yani yazi_etiket tablosu üzerinden etiketler tablosuna ulaşıyoruz, bir aracı gibi düşünün. kısa bir örnekle tablodan nasıl veri çekebileceğinizi anlatayım
SELECT e.etiket FROM yazi_etiket AS ye, etiketler AS e WHERE ye.yazi_etiket = \"etiketlerini istediğiniz makale id si\" AND ye.etiket_id = e.id;
yazdığım sql sorgusuyla istediğiniz makalenin etiketlerini çekip yazdırabilirsiniz. en kısa zamanda bununla ilgili bir örneği makaleye ekleyeceğim.

yorum

YIL2016

28 Mayıs 2016 22:57


Müthişsin başkan tam bunu arıyordum :)

yorum

Erhan koyuncu

07 Ekim 2016 11:12


Merhaba;
Sormak istediğim bir soru var peki aynı etiketler odluğu zaman nasıl olması gerekiyor?

yorum

Admin

07 Ekim 2016 11:43


Merhaba, aynı etiketleri veritabanına eklerken sorgu ile kontrol etmelisiniz. önce etiketler tablosunda aynı etiketin id'sini alıp hit değerini artırırsınız, sonra da yazi_etiket tablosuna kayıtları yaparsınız.