Türkiye'nin En Eski Webmaster Forumu İyinet'e Hoşgeldiniz!

veritabanı tasarımları ?

Darkart

0
Onaylı Üye
Üye
Katılım
1 Temmuz 2005
Mesajlar
7,037
Açılan Konu
291
Tepki puanı
53
arkadaşlar portallar için veritabanı tasarımları nasıl olmalıdır diye düşüne düşüne sürmenaj olacam :D
Aslında basit gibi görünsede sorgulsa kısımda başa dert oluyorlar. Örneğin 2 yerde fena kitlendim. biri etiket sistemi diğeri ise üye aktiviteleri...

örneğin etiketten başlıyım...
içeriğe eklenen etiketler içeriğin bulunduğu tablodamı tutulmalı yoksa farklı bir tablo içindemi belirtilmeli ?

ve diğer bir sorunda üye aktiviteleri...
bir üye, resim ekliyor, haber ekliyor, makale yazıyor, oy veriyor, yorum yapıyor, foruma yazıyor vs.vs.vs.

Şimdi bunlar sorular. Cevapları bende var ama onları yazmam kafa karıştırır diye şu an iletmiyorum size. Gelecek cevaplara göre hazırdaki uygulamamdan ya da fikrimden bahsetmeyi düşünüyorum.

Sizden ricamda bu konudaki yapılarınız nedir. db yi aptallaştırmadan, envayi çeşit sorguyla boğmadan nasıl işin içinden çıkılır bende merak ediyorum :)
 

selim61

0
Onaylı Üye
Üye
Katılım
10 Mayıs 2006
Mesajlar
5,299
Açılan Konu
252
Tepki puanı
13
Konum
<?=selim61?>
Etiketler için farklı tablo öneririm ama kod tarafı kalabalık olur bu sefer, aynı tabloda yaparsan db de index olarak belirleyip işini kolayca görürsün
Üye işlemleri için bunların hepsini üye yapacağı için
resim (resim_id, üye_id, .... oy, hit...)
haber (haber_id, üye_id, .... oy, hit...)
yorum (yorum_id, üye_id, .... oy, hit...)
hepsi birbirinin kopyası
 

yagmayok

1
Onaylı Üye
Üye
Katılım
25 Ocak 2005
Mesajlar
7,131
Açılan Konu
304
Tepki puanı
86
Selim'e ek olarak

uye (resim_id, haber_id, yorum_id ...) şeklinde bilgilerinde bulunmalıdır. Burada birden fazla resim eklemiş olduğunu da sayarsak bu değerler aralarına virgul koyarak veritabanına eklenmesi sağlanır. Yeri gelirde istatistik sunmanız gerekirse daha rahat olur diye düşünüyorum.
 

selim61

0
Onaylı Üye
Üye
Katılım
10 Mayıs 2006
Mesajlar
5,299
Açılan Konu
252
Tepki puanı
13
Konum
<?=selim61?>
Selim'e ek olarak

uye (resim_id, haber_id, yorum_id ...) şeklinde bilgilerinde bulunmalıdır. Burada birden fazla resim eklemiş olduğunu da sayarsak bu değerler aralarına virgul koyarak veritabanına eklenmesi sağlanır. Yeri gelirde istatistik sunmanız gerekirse daha rahat olur diye düşünüyorum.
bunlara gerek yokki haber ,resim, yorum tablolarından zaten bir üyenin gönderileri rahatça alınabilir
önerdiğin bana göre extra kod fazlalığı ve zahmet yaratır
 

yagmayok

1
Onaylı Üye
Üye
Katılım
25 Ocak 2005
Mesajlar
7,131
Açılan Konu
304
Tepki puanı
86
Eğer veritabanı fazla olursa bunlar sorun yaratmaz mı ? Bu mantıkla hareket ettim ki bazen uyguladığımda olmuştur.
 

iyinet

Root
Root
İyinet Ekibi
Onaylı Üye
Katılım
2 Eylül 2002
Mesajlar
5,034
Açılan Konu
485
Tepki puanı
75
Konum
SEO
etiket nedir anlamadim ingilizcesini yazabilirmisin.
Uye aktivitelerini 1 tabloda tutabilirsin her aktiviteye bir id atarsin omlari da activiteler tablosunda tutarsin.

Aktiviteler tablosu
Aktivite_id int primary
Activite varchar 255

Uye aktivite tablosu
Uye_aktivite_id auto_increment int primary
Aktivite_id int
Tarih datetime

Uye aktivite detay tablosu
Uye_aktivite_id int
Aktivite_detay text
 

Virtuozzo

0
Onaylı Üye
Üye
Katılım
27 Nisan 2008
Mesajlar
441
Açılan Konu
9
Tepki puanı
4
Konum
Istanbul
Veritabanlarında az alana sahip çok sayıda tablo kullanmak, içine herşey sıkıştırılmış az sayıda tablo kullanmaktan daha yararlıdır.
İçeriği çok bir tabloya yapılan bir sorgunun sunucuya yükleyeceği yük ile hafif bir tabloda yapılacak sorgunun yükü arasında fark olacaktır.
Bu yüzden veritabanını mümkün olduğunca akıllıca, ileriye dönük olarak üzerinde değişikliğe imkan verecek esneklikte tasarlamak gerekir.
 

Darkart

0
Onaylı Üye
Üye
Katılım
1 Temmuz 2005
Mesajlar
7,037
Açılan Konu
291
Tepki puanı
53
Etiketler için farklı tablo öneririm ama kod tarafı kalabalık olur bu sefer, aynı tabloda yaparsan db de index olarak belirleyip işini kolayca görürsün
Üye işlemleri için bunların hepsini üye yapacağı için
resim (resim_id, üye_id, .... oy, hit...)
haber (haber_id, üye_id, .... oy, hit...)
yorum (yorum_id, üye_id, .... oy, hit...)
hepsi birbirinin kopyası

evet ben şu an böyle tutuyorum zaten. ama bir üye birden fazla yere yorum yapabiliyor....
örneğin üyenin yorum yaptığı yerler ;

-haberler
-makaleler
-çalışmalar
-blog

diyelim...Üye, bir habere yorum yapıyorsa yorum adındaki talo içine bilgileri kayıt oluyor. ayrıca o haberin yorumsayisi kısmındaki sayısal değeri +1 artırıyorum. Habere 17 yorum yapıırsa sayılsa alanın değeri 17 oluyor böylece haberleri listelerkende ayrı yorumlar tablosuna bağlanıp haber id bulup sayıp ekrana yazdırmak daha zordur diye düşünüyorum. İki iş oluyor çünkü. bana göre bu mantıklı ama diğerleri ne kullanıyor bilmiyorum :)



Selim'e ek olarak

uye (resim_id, haber_id, yorum_id ...) şeklinde bilgilerinde bulunmalıdır. Burada birden fazla resim eklemiş olduğunu da sayarsak bu değerler aralarına virgul koyarak veritabanına eklenmesi sağlanır. Yeri gelirde istatistik sunmanız gerekirse daha rahat olur diye düşünüyorum.

resimleri virgülle kayıt edip sonrada splitle ayırmak çok daha zor olur sanırım. Ben üyeye 10mb alan veriyorum. belki buraya 40 tane resim ekleyecek. split işi sakat olur :(

etiket nedir anlamadim ingilizcesini yazabilirmisin.
Uye aktivitelerini 1 tabloda tutabilirsin her aktiviteye bir id atarsin omlari da activiteler tablosunda tutarsin.

Aktiviteler tablosu
Aktivite_id int primary
Activite varchar 255

Uye aktivite tablosu
Uye_aktivite_id auto_increment int primary
Aktivite_id int
Tarih datetime

Uye aktivite detay tablosu
Uye_aktivite_id int
Aktivite_detay text

Demek istediğini anladım. Her bir aktivite için bir tablo oluşturmak daha iyi diyorsun. Peki veritabanını zorlayacak bir unsur değildir herhalde ? Çünkü şu an bile 15 civarı tablo varsa senin dediğin gibi 25 falan olur...ama mantıksızda gelmedi. Sonuçta sorgu hangi alandaysa o tablo sorgu yiyecek. Gereksiz, uzun süre sorgu yemeyen içeriklerde boşuna yer kapalamayacaktır...Dediğin mantıklı...
Bu arada etiket dediğim label...Yani senin sorumun altında kullandıgın tag lar ;)

Veritabanlarında az alana sahip çok sayıda tablo kullanmak, içine herşey sıkıştırılmış az sayıda tablo kullanmaktan daha yararlıdır.
İçeriği çok bir tabloya yapılan bir sorgunun sunucuya yükleyeceği yük ile hafif bir tabloda yapılacak sorgunun yükü arasında fark olacaktır.
Bu yüzden veritabanını mümkün olduğunca akıllıca, ileriye dönük olarak üzerinde değişikliğe imkan verecek esneklikte tasarlamak gerekir.

Senin dediğinde iyinet le aynı mantıkta...gerçi diğer arkadaşlarda buna benzer şeyler söylemişler.

O zaman öylemidir kısaca...

Örneğin veritabanını açınca gerekirse 50 ayrı tablo olsun ama sen hangisine ne zaman işin düşerse bağlanacağın için en yararlısıda budur...
mu ?:D
 

OnurSQL

0
Onaylı Üye
Üye
Katılım
29 Mart 2005
Mesajlar
2,025
Açılan Konu
84
Tepki puanı
1
Konum
ankara
etiket nedir anlamadim ingilizcesini yazabilirmisin.
Uye aktivitelerini 1 tabloda tutabilirsin her aktiviteye bir id atarsin omlari da activiteler tablosunda tutarsin.

Aktiviteler tablosu
Aktivite_id int primary
Activite varchar 255

Uye aktivite tablosu
Uye_aktivite_id auto_increment int primary
Aktivite_id int
Tarih datetime

Uye aktivite detay tablosu
Uye_aktivite_id int
Aktivite_detay text

iyinet, tarihi datetime yerine timestamp olarak tutsak performans kaybı olur mu?
 

atay

0
Onaylı Üye
Üye
Katılım
29 Ekim 2005
Mesajlar
3,592
Açılan Konu
298
Tepki puanı
36
ben genellikle tarihi INT olarak ayarlıyıp, 20081116 şeklinde giriyorum. date yapmak performans açısından daha mı iyi oluyor?
 

Darkart

0
Onaylı Üye
Üye
Katılım
1 Temmuz 2005
Mesajlar
7,037
Açılan Konu
291
Tepki puanı
53
arada performans sorunu olacağını sanmam
 
Üst