İyinet'e Hoşgeldiniz!

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

Kayıt Ol!

Veritabanı yapısı olusturma

ploop

0
İyinet Üyesi
Katılım
11 Ekim 2004
Mesajlar
6,964
Reaction score
0
Konum
karavan
Selam,
PHP'yi internetten öğrenme çalısmalarım devam ediyor. Öğrenmeye devam ettikçe, aklıma yeni sorular takılıyor. Makale vb. sitelerin veritabanlarını olustururken fazla is yok ama, diyelim ki araba sitesi hazırlıyoruz; o zaman neye göre nasıl bir veritabanı hazırlamamız gerekir? Örneğin araba sitemizde asağıdaki özellikler olsun: araba markası, renk, model, motor gücü, yıl, fiyat, silindir. Bu özellikleri araba diye tablo diye yaratıp, aynı sütuna mı eklersiniz yoksa hepsi için ayrı sütun mu açarsınız? Pek açıklayamadım, örnek vereyim (özet geçiyorum tablolarda :p):

PHP:
CREATE TABLE `araba` (
  `arabamarka`
  `renk`
  `model` 
  `motorgucu`
  `yil`
  `fiyat` 
  `silindir`
)

1. seçenek: Burada renk olarak kırmızı, model 2000, motorgücü 1600, yıl 2000, fiyat 24000, silindir 4 veri girislerini yaparken, direk bu alanlara yazdırırsınız.

2. seçenek:
renk için ayrı bir tablo yaratıp, 1 numaralı id'yi kırmızı diye girip, araba tablosunda renk satırına 1 yazarsınız (1. seçenekte kırmızı yazacaktık).

Insallah anlatabilmisimdir :) Bana açıkçası 2. seçenek mantıklı geliyor. Çünkü örneğin arama sistemini kurarken, silindir seçeneklerini yazdırmak lazım. Bunu da 2. seçenekte daha kolay yaparız. Yorumlarınızı bekliyorum, +rep'ler cebimde :p
 

selim61

0
İyinet Üyesi
Onaylı Üye
Katılım
10 Mayıs 2006
Mesajlar
5,299
Reaction score
12
Konum
<?=selim61?>
PHP:
CREATE TABLE `marka` (
  `markaid`
  `marka`
)
markalar ve modeller ayrı tabloda olmalı , bir markanın birçok modeli
PHP:
CREATE TABLE `model` (
  `modelid`
  `model`
)
PHP:
CREATE TABLE `araba` (
  `markaid`
  `modelid` 
  `renk`
  `motorgucu`
  `kilometre`
  `yil`
  `fiyat` 
  `silindir`
........................
)
birde resimler olayı var onlar içinde ayrı bi tablo bağlantısı gerekli.
 

ploop

0
İyinet Üyesi
Katılım
11 Ekim 2004
Mesajlar
6,964
Reaction score
0
Konum
karavan
yani bütün özellikler için ayrı tablo mu olusturayım? CREATE TABLE `marka` , CREATE TABLE `renk`, CREATE TABLE `motorgucu` vs... resim olayını ayrı tabloda yapıyorum, onu önceden tecrübe etmistim :)
 

iyinet

Root
Admin
Hosting Firması
Katılım
2 Eylül 2002
Mesajlar
5,030
Reaction score
73
Konum
Sakarya
Selam,
PHP'yi internetten öğrenme çalısmalarım devam ediyor. Öğrenmeye devam ettikçe, aklıma yeni sorular takılıyor. Makale vb. sitelerin veritabanlarını olustururken fazla is yok ama, diyelim ki araba sitesi hazırlıyoruz; o zaman neye göre nasıl bir veritabanı hazırlamamız gerekir? Örneğin araba sitemizde asağıdaki özellikler olsun: araba markası, renk, model, motor gücü, yıl, fiyat, silindir. Bu özellikleri araba diye tablo diye yaratıp, aynı sütuna mı eklersiniz yoksa hepsi için ayrı sütun mu açarsınız? Pek açıklayamadım, örnek vereyim (özet geçiyorum tablolarda :p):

PHP:
CREATE TABLE `araba` (
  `arabamarka`
  `renk`
  `model` 
  `motorgucu`
  `yil`
  `fiyat` 
  `silindir`
)

1. seçenek: Burada renk olarak kırmızı, model 2000, motorgücü 1600, yıl 2000, fiyat 24000, silindir 4 veri girislerini yaparken, direk bu alanlara yazdırırsınız.

2. seçenek:
renk için ayrı bir tablo yaratıp, 1 numaralı id'yi kırmızı diye girip, araba tablosunda renk satırına 1 yazarsınız (1. seçenekte kırmızı yazacaktık).

Insallah anlatabilmisimdir :) Bana açıkçası 2. seçenek mantıklı geliyor. Çünkü örneğin arama sistemini kurarken, silindir seçeneklerini yazdırmak lazım. Bunu da 2. seçenekte daha kolay yaparız. Yorumlarınızı bekliyorum, +rep'ler cebimde :p

Bu tam bana gore bir soru, yani hergun yaptigim is oldugu icin oyle dedim.

Bahsettigin 2. secenegi tecrubelerimle web programlamasi icin gereksiz oldugu kanisindayim. O nedenle 1. secenek derim. Eger veritabanini normalize (cok tablolu, birbirine baglantili yapi) hale getirirsen, kodlama zamani artar, veritabanindan veri cekmek daha yavas olur.
Mumkun oldugunca tum verielri 1 tabloya at.

Basitce bir tabloyu olusmanin adimlari:

1. Oncelikle bir araba hakkinda hangi bilgileri kullanacaksan o bilgileri veritabaninda tutmalisin.
2. Bu bilgiler veritabaninda bir tablo icinde saklanir, gerekirse baglantili tablolar olusturulur ve birden fazla tablo da yaratilabilir.
3. Birden fazla tabloya nasil karar verirsiniz? Eger birden fazla varlik (entity) yada ozellik soz konusu ise o zaman 1 den fazla tablo olusturabilirsiniz. Gerekmedikce olursturmayin.
4. PHP MySQL programlamasinda hem basit hemde hizli olmasi icin mumkun oldugunca az tablo ile ugrasin.

Ornek bir arab tablosu (buna arabanin ek ozelliklerini istediginiz zaman ekleyebilrisiniz)

CREATE TABLE `araba` (
araba_id INT(11) NOT lisanssız AUTO_INCREMENT,
`araba_marka` VARCHAR (100),
`araba_renk` VARCHAR (30),
`araba_model` VARCHAR (30),
`araba_motorgucu` VARCHAR (30),
`araba_yil` VARCHAR (10),
`araba_fiyat` VARCHAR (10),
`araba_silindir` VARCHAR (10),
PRIMARY_KEY (araba_id)
)

Buradaki bazi VARCHAR alanlari siterseniz INT, NUMBER yada FLOAT'a cevirebilirsiniz.
 

iyinet

Root
Admin
Hosting Firması
Katılım
2 Eylül 2002
Mesajlar
5,030
Reaction score
73
Konum
Sakarya
Eger kullanici dropdown menuden Marka ve Model secimi yapacak ise bunlari ayri bir tabloya at.
Ama gerekmedikce id leme, yani markaid yada modelid yapma.
 

ploop

0
İyinet Üyesi
Katılım
11 Ekim 2004
Mesajlar
6,964
Reaction score
0
Konum
karavan
iyinet ama o zaman araba.com'daki gibi marka, renk, model aramasını nasıl yapacağız? Yani mesela füme renginde bir Subaru araba arıyorum. Bu özelliklerin aranabilmesi için, önceden bu özellikte arabanın eklenmis olması gerekmez mi? Çünkü eğer öncede füme renginde bir araba eklenmediyse, araba_renk bölümünde füme olmayacak, dolayısıyla hazırlayacağım option menüde olmayacak. Çok mu amatörce düsünüyorum bilmiyorum ama düz mantık iste :)
 

selim61

0
İyinet Üyesi
Onaylı Üye
Katılım
10 Mayıs 2006
Mesajlar
5,299
Reaction score
12
Konum
<?=selim61?>
Bu tam bana gore bir soru, yani hergun yaptigim is oldugu icin oyle dedim.

Bahsettigin 2. secenegi tecrubelerimle web programlamasi icin gereksiz oldugu kanisindayim. O nedenle 1. secenek derim. Eger veritabanini normalize (cok tablolu, birbirine baglantili yapi) hale getirirsen, kodlama zamani artar, veritabanindan veri cekmek daha yavas olur.
Mumkun oldugunca tum verielri 1 tabloya at.

Basitce bir tabloyu olusmanin adimlari:

1. Oncelikle bir araba hakkinda hangi bilgileri kullanacaksan o bilgileri veritabaninda tutmalisin.
2. Bu bilgiler veritabaninda bir tablo icinde saklanir, gerekirse baglantili tablolar olusturulur ve birden fazla tablo da yaratilabilir.
3. Birden fazla tabloya nasil karar verirsiniz? Eger birden fazla varlik (entity) yada ozellik soz konusu ise o zaman 1 den fazla tablo olusturabilirsiniz. Gerekmedikce olursturmayin.
4. PHP MySQL programlamasinda hem basit hemde hizli olmasi icin mumkun oldugunca az tablo ile ugrasin.

Ornek bir arab tablosu (buna arabanin ek ozelliklerini istediginiz zaman ekleyebilrisiniz)

CREATE TABLE `araba` (
araba_id INT(11) NOT lisanssız AUTO_INCREMENT,
`araba_marka` VARCHAR (100),
`araba_renk` VARCHAR (30),
`araba_model` VARCHAR (30),
`araba_motorgucu` VARCHAR (30),
`araba_yil` VARCHAR (10),
`araba_fiyat` VARCHAR (10),
`araba_silindir` VARCHAR (10),
PRIMARY_KEY (araba_id)
)

Buradaki bazi VARCHAR alanlari siterseniz INT, NUMBER yada FLOAT'a cevirebilirsiniz.
iyinet bu yapıyı ben onaylamıyorum. nesnel olmalı.
ör bi kullanıcı araba eklicek.Marka alanını ona yazdıramazsınız çünkü kimi Tofaş yazar kimi fiat/tofaş yazar.List box yapsanız yeni marka eklemek için tekrar editlemeniz gerekecek.Markalar kesinlikle ayrı table da arabalar model ve özellikleri ayrı tableda yani toplam 3 table.yukarıda verdiğim gibi.( Veri tabanı tasarımı ve uygulama dersi:p )
 

iyinet

Root
Admin
Hosting Firması
Katılım
2 Eylül 2002
Mesajlar
5,030
Reaction score
73
Konum
Sakarya
iyinet bu yapıyı ben onaylamıyorum. nesnel olmalı.
ör bi kullanıcı araba eklicek.Marka alanını ona yazdıramazsınız çünkü kimi Tofaş yazar kimi fiat/tofaş yazar.List box yapsanız yeni marka eklemek için tekrar editlemeniz gerekecek.Markalar kesinlikle ayrı table da arabalar model ve özellikleri ayrı tableda yani toplam 3 table.yukarıda verdiğim gibi.( Veri tabanı tasarımı ve uygulama dersi:p )

O konuda haklisin, bu yuzden bu degerler icin ayri bir table onerdim yukarida. Boylece kullanici dropdown dan secmeli. Secilen deger id olarak degil de tabloya gercek degeri olarak atilmali.
Ancak veritabaninda depolarken mumkun oldugunca az tablo olmali ki uygulama veritabanindan okurken sadece 1 tabloadan veri ceksin, mumkun oldugunca join yapmasin.
 

iyinet

Root
Admin
Hosting Firması
Katılım
2 Eylül 2002
Mesajlar
5,030
Reaction score
73
Konum
Sakarya
iyinet ama o zaman araba.com'daki gibi marka, renk, model aramasını nasıl yapacağız? Yani mesela füme renginde bir Subaru araba arıyorum. Bu özelliklerin aranabilmesi için, önceden bu özellikte arabanın eklenmis olması gerekmez mi? Çünkü eğer öncede füme renginde bir araba eklenmediyse, araba_renk bölümünde füme olmayacak, dolayısıyla hazırlayacağım option menüde olmayacak. Çok mu amatörce düsünüyorum bilmiyorum ama düz mantık iste :)

Hayir hic de amatorce dusunmuyorsun, cok dogru dusunuyorsun.

Web tabanli uygulamalar ile, bildigimiz klasik veritabani (yani bize okulda ogretilen) gercek hayatta cok farklidir.

Veritabani, yapacaginiz uygulamaya gore tasarlanir.

Yani once veritabanini tasarlayip ustune uygulama yazamazsiniz.

Uygulamaniz arama gerektiriyor ise ve aramalar cok olacak ise o zaman veri tabanini ona gore tasarlamalisiniz.

Bu ne demek? Arama = INDEX

Sana tavsiyem once uygulamanin ozelliklerini buraya yazman.
Ana sayfada neler olacak? Kategoriler, En yeni arabalar vb...
Kullaniciya hangi imkanlar verilecek, ornegin: arama, giris yapma, degisiklik yapma vb...
Ornegin arabalari Spor araba diye kategorisine ayiracakmisin, yoksa sadece Toyota Camry diye mi sunacaksin?

....

Uygulamanin taslagi hazir olunca, veritabani uygulamanin gelismisligine gore tasarlanir. selim61 in tasarim onerisi gelismis bir uygulama icin daha uygun olur. Ek olarak belli araliklarla guncellenen DATAWAREHOUSE tipi FULL indexli FAST-SEARCH tablolari ile arama performansi yukseltilir.
 

ploop

0
İyinet Üyesi
Katılım
11 Ekim 2004
Mesajlar
6,964
Reaction score
0
Konum
karavan
Önceki mesajı yazarken, dropdown menü için tablo açma önerisini okumamıstım, çok mantıklı geldi bu yapı tesekkurler. Sistemin konusu otomobil ilanı olduğu için araba.com bazlı düsünüyorum simdilik. Tabi ki yurtdısı örneklerinden vs. fikir alacağım ama genel olarak sistemin yapısı araba.com gibi olacak. Daha düsünme asamasındayım açıkçası, ama aklımdaki kadarıyla:
- Ana sayfada eklenen son ilanlar
- Vitrin ilanları
- Hızlı arama (Örneğin sadece markaya, fiyata ve yıla göre)
- Detaylı ve hızlı aramanın arasında bir sey
- Marka ilanlarına hızlı linkler (Örneğin, Mazda marka arabaların ilanlarına tek tıkla ulasabilsin kullanıcı)

- Son eklenen / Özel gösterime sahip Araba Satıcıları
- Son eklenen / Özel gösterime sahip Yedek parça / Tamirciler
- Son eklenen / Özel gösterime sahip Araba kiralama sirketleri

- Üyelik düsünüyorum, bu da 2 çesit olacak: Bireysel ve kurumsal. PHP'de hiç üyelik sistemi yapmadım, bu yüzden mutlaka yapmalıyım merak ediyorum :) Üyeler ilan gönderme, ilanlarda değisiklik yapma, diğer üyelere mesaj atma vs. gibi fonksiyonlara sahip olacak. Eğer yapabilirsem üyelik olaylarını vbullettin foruma entegre yapmayı planlıyorum. Ama bu özel mesaj atma vs. onları kendi yazdığım kodlardan yapmayı planlıyorum yapabilirsem tabi :)

- Daha üzerinde fazla düsünmediğim için aklıma gelenler bunlar, her türlü öneriye açığım :)
 

Angelo

0
İyinet Üyesi
Katılım
13 Aralık 2004
Mesajlar
9,603
Reaction score
111
Konum
AZ
Marka ve alt model bağlantılarını text dosyasına da atabilirsin veritabanı çok şişmesin arzusundaysan. Kırk yılda bir update edilecek ama insanlar farklı şekillerde girmesin diye standart bir option menu kurmak istediğin zaman her dakika mysql'e başvuru yapma. Text dosyası hazırla mesela oradan çeksin. Dosya sisteminden okuma mysql'den okumadan çoğu zaman hızlı oluyor, en azından benim için öyle oldu hep.
 

ploop

0
İyinet Üyesi
Katılım
11 Ekim 2004
Mesajlar
6,964
Reaction score
0
Konum
karavan
Evet bu da mantıklı geldi, buradaki bilgileri yoğurup bir sentez çıkacak ortaya hadi bakalım :)
 

iyinet

Root
Admin
Hosting Firması
Katılım
2 Eylül 2002
Mesajlar
5,030
Reaction score
73
Konum
Sakarya
Angelo'nun onerisi cok guzel.

Ornegin kaynaklar.php dosyasi olusturup bu bilgileri statik array'e atabilirsiniz.

$firmalar = array(
'toyota',
'pejo',
'reno',
);

$modeller['toyota'] = array(
'camry',
'4runner',
...
);

$modeller['tofas'] = array(
'murat131',
'murat132',
...
);
 

FERDIKUCUK

0
İyinet Üyesi
Katılım
27 Ağustos 2007
Mesajlar
117
Reaction score
0
Farklı Yollar Alternatifler Yazıldıgını Varsayarak
bunun yerine Select menude id yerine Tam ad yazdır Tek tek Ekle ;)
 

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