İyinet'e Hoşgeldiniz!

Türkiye'nin En Eski Webmaster Forum'una Hemen Kayıt Olun!

Kayıt Ol!

veritabanı tasarımları ?

Darkart

0
İyinet Üyesi
Katılım
1 Temmuz 2005
Mesajlar
7,037
Reaction score
56
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
İyinet Üyesi
Onaylı Üye
Katılım
10 Mayıs 2006
Mesajlar
5,299
Reaction score
11
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
İyinet Üyesi
Katılım
25 Ocak 2005
Mesajlar
7,131
Reaction score
89
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
İyinet Üyesi
Onaylı Üye
Katılım
10 Mayıs 2006
Mesajlar
5,299
Reaction score
11
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
İyinet Üyesi
Katılım
25 Ocak 2005
Mesajlar
7,131
Reaction score
89
Eğer veritabanı fazla olursa bunlar sorun yaratmaz mı ? Bu mantıkla hareket ettim ki bazen uyguladığımda olmuştur.
 

iyinet

Root
Admin
Hosting Firması
Katılım
2 Eylül 2002
Mesajlar
5,028
Reaction score
66
Konum
Sakarya
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
İyinet Üyesi
Katılım
27 Nisan 2008
Mesajlar
441
Reaction score
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
İyinet Üyesi
Katılım
1 Temmuz 2005
Mesajlar
7,037
Reaction score
56
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
İyinet Üyesi
Katılım
29 Mart 2005
Mesajlar
2,025
Reaction score
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
İyinet Üyesi
Katılım
29 Ekim 2005
Mesajlar
3,592
Reaction score
37
ben genellikle tarihi INT olarak ayarlıyıp, 20081116 şeklinde giriyorum. date yapmak performans açısından daha mı iyi oluyor?
 

Türkiye’nin ilk webmaster forum sitesi iyinet.com'da forum üyeleri tarafından yapılan tüm paylaşımlardan; Türk Ceza Kanunu’nun 20. Maddesinin, 5651 Sayılı Kanununun 4. maddesinin 2. fıkrasına göre, paylaşım yapan üyeler sorumludur.

Üst