A PHP Error was encountered

Severity: 8192

Message: Creation of dynamic property CI_URI::$config is deprecated

Filename: core/URI.php

Line Number: 101

A PHP Error was encountered

Severity: 8192

Message: Creation of dynamic property CI_Router::$uri is deprecated

Filename: core/Router.php

Line Number: 127

A PHP Error was encountered

Severity: 8192

Message: Creation of dynamic property index::$benchmark is deprecated

Filename: core/Controller.php

Line Number: 75

A PHP Error was encountered

Severity: 8192

Message: Creation of dynamic property index::$hooks is deprecated

Filename: core/Controller.php

Line Number: 75

A PHP Error was encountered

Severity: 8192

Message: Creation of dynamic property index::$config is deprecated

Filename: core/Controller.php

Line Number: 75

A PHP Error was encountered

Severity: 8192

Message: Creation of dynamic property index::$log is deprecated

Filename: core/Controller.php

Line Number: 75

A PHP Error was encountered

Severity: 8192

Message: Creation of dynamic property index::$utf8 is deprecated

Filename: core/Controller.php

Line Number: 75

A PHP Error was encountered

Severity: 8192

Message: Creation of dynamic property index::$uri is deprecated

Filename: core/Controller.php

Line Number: 75

A PHP Error was encountered

Severity: 8192

Message: Creation of dynamic property index::$exceptions is deprecated

Filename: core/Controller.php

Line Number: 75

A PHP Error was encountered

Severity: 8192

Message: Creation of dynamic property index::$router is deprecated

Filename: core/Controller.php

Line Number: 75

A PHP Error was encountered

Severity: 8192

Message: Creation of dynamic property index::$output is deprecated

Filename: core/Controller.php

Line Number: 75

A PHP Error was encountered

Severity: 8192

Message: Creation of dynamic property index::$security is deprecated

Filename: core/Controller.php

Line Number: 75

A PHP Error was encountered

Severity: 8192

Message: Creation of dynamic property index::$input is deprecated

Filename: core/Controller.php

Line Number: 75

A PHP Error was encountered

Severity: 8192

Message: Creation of dynamic property index::$lang is deprecated

Filename: core/Controller.php

Line Number: 75

A PHP Error was encountered

Severity: 8192

Message: Creation of dynamic property index::$load is deprecated

Filename: core/Controller.php

Line Number: 78

A PHP Error was encountered

Severity: 8192

Message: Creation of dynamic property index::$db is deprecated

Filename: core/Loader.php

Line Number: 390

A PHP Error was encountered

Severity: 8192

Message: Creation of dynamic property CI_DB_mysqli_driver::$autoinit is deprecated

Filename: database/DB_driver.php

Line Number: 371

A PHP Error was encountered

Severity: 8192

Message: Return type of CI_Session_files_driver::open($save_path, $name) should either be compatible with SessionHandlerInterface::open(string $path, string $name): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice

Filename: drivers/Session_files_driver.php

Line Number: 113

A PHP Error was encountered

Severity: 8192

Message: Return type of CI_Session_files_driver::close() should either be compatible with SessionHandlerInterface::close(): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice

Filename: drivers/Session_files_driver.php

Line Number: 280

A PHP Error was encountered

Severity: 8192

Message: Return type of CI_Session_files_driver::read($session_id) should either be compatible with SessionHandlerInterface::read(string $id): string|false, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice

Filename: drivers/Session_files_driver.php

Line Number: 145

A PHP Error was encountered

Severity: 8192

Message: Return type of CI_Session_files_driver::write($session_id, $session_data) should either be compatible with SessionHandlerInterface::write(string $id, string $data): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice

Filename: drivers/Session_files_driver.php

Line Number: 223

A PHP Error was encountered

Severity: 8192

Message: Return type of CI_Session_files_driver::destroy($session_id) should either be compatible with SessionHandlerInterface::destroy(string $id): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice

Filename: drivers/Session_files_driver.php

Line Number: 303

A PHP Error was encountered

Severity: 8192

Message: Return type of CI_Session_files_driver::gc($maxlifetime) should either be compatible with SessionHandlerInterface::gc(int $max_lifetime): int|false, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice

Filename: drivers/Session_files_driver.php

Line Number: 344

A PHP Error was encountered

Severity: 8192

Message: Creation of dynamic property index::$session is deprecated

Filename: core/Loader.php

Line Number: 1290

A PHP Error was encountered

Severity: 8192

Message: Creation of dynamic property index::$pagination is deprecated

Filename: core/Loader.php

Line Number: 1290

A PHP Error was encountered

Severity: 8192

Message: Creation of dynamic property index::$email is deprecated

Filename: core/Loader.php

Line Number: 1290

A PHP Error was encountered

Severity: 8192

Message: Creation of dynamic property index::$ders_model is deprecated

Filename: core/Loader.php

Line Number: 353

A PHP Error was encountered

Severity: 8192

Message: Creation of dynamic property index::$bilgi_model is deprecated

Filename: core/Loader.php

Line Number: 353

A PHP Error was encountered

Severity: 8192

Message: Creation of dynamic property CI_Loader::$data is deprecated

Filename: core/Loader.php

Line Number: 925

A PHP Error was encountered

Severity: 8192

Message: Creation of dynamic property CI_Loader::$benchmark is deprecated

Filename: core/Loader.php

Line Number: 925

A PHP Error was encountered

Severity: 8192

Message: Creation of dynamic property CI_Loader::$hooks is deprecated

Filename: core/Loader.php

Line Number: 925

A PHP Error was encountered

Severity: 8192

Message: Creation of dynamic property CI_Loader::$config is deprecated

Filename: core/Loader.php

Line Number: 925

A PHP Error was encountered

Severity: 8192

Message: Creation of dynamic property CI_Loader::$log is deprecated

Filename: core/Loader.php

Line Number: 925

A PHP Error was encountered

Severity: 8192

Message: Creation of dynamic property CI_Loader::$utf8 is deprecated

Filename: core/Loader.php

Line Number: 925

A PHP Error was encountered

Severity: 8192

Message: Creation of dynamic property CI_Loader::$uri is deprecated

Filename: core/Loader.php

Line Number: 925

A PHP Error was encountered

Severity: 8192

Message: Creation of dynamic property CI_Loader::$exceptions is deprecated

Filename: core/Loader.php

Line Number: 925

A PHP Error was encountered

Severity: 8192

Message: Creation of dynamic property CI_Loader::$router is deprecated

Filename: core/Loader.php

Line Number: 925

A PHP Error was encountered

Severity: 8192

Message: Creation of dynamic property CI_Loader::$output is deprecated

Filename: core/Loader.php

Line Number: 925

A PHP Error was encountered

Severity: 8192

Message: Creation of dynamic property CI_Loader::$security is deprecated

Filename: core/Loader.php

Line Number: 925

A PHP Error was encountered

Severity: 8192

Message: Creation of dynamic property CI_Loader::$input is deprecated

Filename: core/Loader.php

Line Number: 925

A PHP Error was encountered

Severity: 8192

Message: Creation of dynamic property CI_Loader::$lang is deprecated

Filename: core/Loader.php

Line Number: 925

A PHP Error was encountered

Severity: 8192

Message: Creation of dynamic property CI_Loader::$load is deprecated

Filename: core/Loader.php

Line Number: 925

A PHP Error was encountered

Severity: 8192

Message: Creation of dynamic property CI_Loader::$db is deprecated

Filename: core/Loader.php

Line Number: 925

A PHP Error was encountered

Severity: 8192

Message: Creation of dynamic property CI_Loader::$session is deprecated

Filename: core/Loader.php

Line Number: 925

A PHP Error was encountered

Severity: 8192

Message: Creation of dynamic property CI_Loader::$pagination is deprecated

Filename: core/Loader.php

Line Number: 925

A PHP Error was encountered

Severity: 8192

Message: Creation of dynamic property CI_Loader::$email is deprecated

Filename: core/Loader.php

Line Number: 925

A PHP Error was encountered

Severity: 8192

Message: Creation of dynamic property CI_Loader::$ders_model is deprecated

Filename: core/Loader.php

Line Number: 925

A PHP Error was encountered

Severity: 8192

Message: Creation of dynamic property CI_Loader::$bilgi_model is deprecated

Filename: core/Loader.php

Line Number: 925

A PHP Error was encountered

Severity: 8192

Message: Creation of dynamic property index::$makale_model is deprecated

Filename: core/Loader.php

Line Number: 353

A PHP Error was encountered

Severity: 8192

Message: setcookie(): Passing null to parameter #7 ($httponly) of type bool is deprecated

Filename: core/Input.php

Line Number: 410

A PHP Error was encountered

Severity: 8192

Message: Creation of dynamic property index::$yorum_model is deprecated

Filename: core/Loader.php

Line Number: 353

A PHP Error was encountered

Severity: 8192

Message: Creation of dynamic property CI_Loader::$makale_model is deprecated

Filename: core/Loader.php

Line Number: 925

A PHP Error was encountered

Severity: 8192

Message: Creation of dynamic property CI_Loader::$yorum_model is deprecated

Filename: core/Loader.php

Line Number: 925

MySQL ile Etiket Bulutu Veritabanı Tasarımı
Öneri ve Hata Raporu



Günün Sözü İnsan kafasında ne kurarsa, onu yaşar.

oylama 3/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.