• 25-06-2010, 19:19:59
    #10
    RedZ adlı üyeden alıntı: mesajı görüntüle
    Hayır değilde özel script olduğundan vermem etik olmaz.
    özel script diyorsunuzda nedense veritabanı yapısı kişiye özel bir scriptmiş gibi yazılmamış. database object DBO kullanılmış. yani 1 otel scripti yazılmış ki bu script sadece 1 firma için değil 1 den çok firmada kullanılabilecek şekilde ölçeklenmiş.
  • 25-06-2010, 21:34:57
    #11
    Kapitan 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:40
    #12
    Kapitan adlı üyeden alıntı: mesajı görüntüle
    özel script diyorsunuzda nedense veritabanı yapısı kişiye özel bir scriptmiş gibi yazılmamış. database object DBO kullanılmış. yani 1 otel scripti yazılmış ki bu script sadece 1 firma için değil 1 den çok firmada kullanılabilecek şekilde ölçeklenmiş.

    Orası seni ilgilendirmez.
  • 26-06-2010, 11:27:25
    #13
    akadal34 adlı üyeden alıntı: mesajı görüntüle
    Kapitan 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ü.
    Kesiş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.

    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:10
    #14
    Peki 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:24
    #15
    akadal34 adlı üyeden alıntı: mesajı görüntüle
    Peki 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.
    o 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.