RedZ adlı üyeden alıntı:
mesajı görüntüle
Veritabanı yöntemleri
14
●4.362
- 25-06-2010, 21:34:57Kapitan verdiğin örnek çok güzel ve kafada şimşek çaktıran cinsten

Benim ufak bir sorum olacak.
Bir örnekle açıklarsam daha rahat olacak sanırım.
Ben A Oteliyim diyelim ki.
X ve Y türünden 10'ar odam var.
Ben diyorum ki;
X türü odamı,
Sürekli fiyat - 80 TL
10 Haziran - 20 Temmuz - 100 TL
29 Haziran - 30 Haziran - 150 TL (üstteki tarih aralığının içinde olduğunun farkındayım.)
Y türü odamı,
Sürekli fiyat - 50 TL
1 Ocak - 1 Mart - 40 TL
1 Haziran - 1 Eylül - 90 TL
şeklinde belirlemek istiyorum.
Kullanıcı açısından iyi güzel bunu yapsın ama veritabanında bu veriyi en optimize hali ile nasıl tutabiliriz?
Yine en mantıklısı between mi olur? Benim aklıma başka bir çözüm gelmiyor çünkü. - 25-06-2010, 23:38:40Kapitan adlı üyeden alıntı: mesajı görüntüle
Orası seni ilgilendirmez. - 26-06-2010, 11:27:25Kesişen bilgileri biribirinin içinde tutma 10-20 haziran için fiyat ver, 20-30 haziran , 1-30 temmuz için fiyatları ayrı ayrı ver. Bilgileri iç içe sokma. Çok bilgi olunca ne senin kafan karışır. Eğer aynı veritabanı ile çalışan veya çalışacak in-out yapacak iş arkadaşların varsa onlarında kafası karışmasın.akadal34 adlı üyeden alıntı: mesajı görüntüle
kesinlikle 1 tabloda tutma mesela bu örneğin için şöyle bir yapı düşünüle bilir
Oda tablosu ve Anahtarları :
1.oda no
2. oda türü
3. sürekli fiyat
Zaman Tablosu
(buradaki fiyatlar belli bir aralıkta olabilir, belli bir hafta da ,günde tamamen dediğim gibi ölçeklemeye bağlı yani gün günde fiyat verebilirsin. hafta haftada belli aralıklardada.
1. gerekli zaman aralığı
2. fiyat
3.oda türü veya numarası (bu 3. sütün foreign_key denen oda tablosu ile zaman tablosun bağlayacak anahtardır. ODA NO gönderilir bu oda noların birbirine = olduğu yani WHERE oda_tablosu.oda_no = zaman_tablosu.oda_no ile bilgileri bağlayacak sütündur.)
Çalışma mantığı ise şöyle olur
Veritabanına 1 veri göndereceğiz (oda NO veya türü) buna ait bilgileri çekeceğiz değil mi?
oda no veya oda türü gönderilir
select * from zaman WHERE oda_tablosu.oda_no = zaman_tablosu.oda_no
and işte ne bileyim zaman_tablosu.zaman_araligi between tarih vs gibisinden
gerekli verileri alıp bunları nasıl göstereceğin nasıl sana bağlı ne istediğine bağlı
veya şöyle bişi yapabilirsin
3 tabloya ayırırsın.
1 oda
2 fiyat
3 zaman
bu sefer ki mantığın ise şu şekilde olur. 2 tane foreign_key gerektirir.
1 odayı zamana oda_no ile bağlarsın. zamanı da fiyata zaman_id vs ile bağlarsın x tane tablon varsa x -1 tane foreign_key in olur.
veya gereksiz birazda kafa karıştırıcı bişi yaparsın.
1 tablo koyarsın.
odalar olur bu
1. oda_no
2. oda_turu
3. oda_zaman
3. oda_fiyat
her oda için belli verileri girersin.
oda_no = 5, oda_turu = X , oda_zaman = 10haziran - 10 temmuz, oda_fiyat = 100 TL
bu daha basit gibi gözükebilir ama ileride sistemine birşeyler eklemek istediğin zaman veritabanı yapından dolayı çok uğraştırır. Benim tavsiyem her birim başka 1 tabloda tutulması. sonra gerekirse PHP sorgu veya SQL ile CREATE VIEW ile gerekli görünüm sağlanır.
Senin verdiğin örneği ben olsam şu şekilde tutarım.
2 tablo . oda ve zaman
Oda tablosu :
1.oda türü
2. oda no
3. oda surekli fiyat
Zaman tablosu:
1. oda_no
2. tarih_baslangic
3. tarih_bitis
4. fiyat
sonra zaman tablosunu esas alarak eğer oda için zaman aralıkları girilmişse (fiyat varsa o fiyat) yok ise oda sürekli fiyatı göstertirim.
Bu arada Redz isimli arkadaş yazmış Orası seni ilgilendirmez diye. Biliyorum beni ilgilendirmediğini sadece veritabanı yapısından ne anladığımı yazdım. Kesinlikle kötülemek vs gibi bir amacım yoktu. - 26-06-2010, 22:09:10Peki bunu anladım ama şuna takıldı kafam:
tarihleri iç içe sokmamak daha uygun gibi gözüksede bu şekilde parçalayarak veritabanına nasıl yazılacak bu?
Yani adam önce 10 haziran 20 temmuz girdi sonra 29-30 haziran girdi.
ilk giriş kolay: 10 hazirandan 20 temmuza kadar dolu olacak oda
ama sonra 2. kayıt girilince veritabanına nasıl yazdırılacak bu?
önceki veri silinip uygun şekilde parçalanıp tekrar mı yazdırılacak?
Bu şekilde yazdırılması hem zor hem karışık hem de kullanıcıya "şu dönem için şu fiyatı belirlediniz" gibi bir bilgi verilmesini engelliyor. - 26-06-2010, 23:35:24o senin sipariş sistemine göredir. uçak bileti , otel odası vs olsun mutlaka giriş çıkış check in check out ile çalışır. çift rezervasyon yapmış sayılır. seçtirirken JS ile seçimden sonra KOD ile gerekli kontrolleri yapacaksın.akadal34 adlı üyeden alıntı: mesajı görüntüle
