Rezervasyon uygulaması örnek için veritabanı tasarımı

13 Cevap php

Ben birini inşa ettik, ama bu yanlış eminim.

Ben müşteri bilgileri için bir tablo vardı, ve her tarih kalmak ile başka bir tablo (yani bir hafta tatil yedi kayıtları olurdu).

Daha iyi bir yolu var mı?

MySQL ile PHP kodu

13 Cevap

I work in the travel industry and have worked on a number of different PMS's. The last one I designed had the row per guest per night approach and it is the best approach I've come across yet. Quite often in the industry there are particular pieces of information to each night of the stay. For example you need to know the rate for each night of the stay at the time the booking was made. The guest may also move room over the duration of their stay.

Performans açısından bir MySQL aralığından daha arama eşittir yapmak için daha hızlı, bu yüzden startdate / enddate yaklaşımı daha yavaş olacaktır. Tarihleri ​​do "tarih (dates)" bir dizi için bir arama yapmak için.

Ben kullanılan kabaca şema:

Bookings (id, main-guest-id, arrivaltime, departime,...)

BookingGuests (id, guest-id)

BookingGuestNights (date, room, rate)

Kendinize sormanız gereken bazı sorular:

  • Eğer her gün kalış için rekor bir ihtiyaç bir nedeni var mı?
  • Sadece kalmak için bir tablo var ve bir giris tarihi ve gece bir dizi ya da bir ayrılış tarihi ya var değil mi?
  • Bir müşterinin konaklama ile ilgili günden güne farklılık belirli veri bit var mı?

Modelinizi kırılabilir Bazı şeyler. Bu bir sorun olmayabilir, ama onlar oluşabilir görmek için müşteri ile kontrol etmelisiniz.

  • 1 günden az kalır (kısa öğle kalır örneğin, bazı iş otellerde yaygındır)
  • Geç check-outs/early check-ins. Sadece geceleri değil, tarih / süreleri ölçme iseniz, zor bu düzenlemek için bulmak, ya da potansiyel çatışma görebilirsiniz. Müşterilerimizden biri her zaman bir dört saatlik boşluğu değil 10:00-02:00 istedi.

Vay, tüm cevaplar için teşekkürler.

Ben şeması hakkında uzun ve sert düşündüm ve başka bir şekilde çalışıyor ve html dönüştürme zorluk sonra bir rekor = gece yaklaşımı ile gitti.

Ben rezervasyon bilgi görüntülemek için Takvim Sınıf inşa ile CodeIgniter'ı kullanılır. Bir tarih mevcut olmadığını denetleme (en azından denedikten sonra) bu şekilde daha kolay olduğunu, bu yüzden onunla gitti. Ama ben soru sordum neden olan, en iyi yol olmadığını ikna oldum.

Ve DB cevaplar için teşekkürler, çok bağlantı.

En iyisi,

Mei

Bu ne yanlış var? Müşteri kalan her tarih günlüğü ne hayal ediyorum böyle herhangi bir gün rezervasyonu odaların sayısını görüntülemek için edememek gibi oldukça standart raporlar sağlar.

Cevabı ağır gereksinimlerinize bağlıdır ... Ama ben sadece kendi kalmak için gerekli başlangıç ​​ve durdurma tarihi ile bir rekor depolama beklenebilir. Eğer daha fazla soru açıklamak, biz size daha ayrıntılı bilgi verebilir.

Bir demet başına günlük biraz overkill, ben düşünüyorum. Bir "konaklama" masada birkaç sütun yeterli olacaktır.

stay.check_in_time_scheduled
stay.check_in_time_actual
stay.check_out_time_scheduled
stay.check_out_time_actual

Bir kişi neccessary kaldığı her gün için bir kayıt yaratıyor? Her gün önemli ise sadece aksi misafirler için rezervasyon içeren müşteri bilgilerini içeren bir Müşteri / Misafir tablo, Kitap tablo var, gerekliyse olmalıdır. Kitap masa, oda vb içeren tarihi, bitiş tarihi, konuk (veya misafir), başlamak istiyorum

Eğer böyle ödenen faaliyetler, ya da yemek gibi başka şeyleri kaydetmek için gerekli olan diğer tablolarda bu eklemek gerekir.

Her kalmak için girişlerin sayısını azaltmak için olası bir yol, zaman çerçevesi örneğin saklamanız başlangıç ​​tarihi ve bitiş tarihi. Ben size daha spesifik bir tavsiye vermek için veri karşı çalıştırmak operasyonları bilmek gerekir.

Eğer bir saklı yordam ile yapabilirsiniz belirli bir tarihte kalıyorsun kaç müşterinin kontrol etmek gerekirse, genel anlamda.

Bazı özel operasyonlar için tasarım iyi olabilir. Bu durumda bile hala benzersiz bir konaklama için bir müşteri bağlayan bir "ziyaret" tablosu, ve ben onun gün her müşterinin rahat çözecek bir "gün-of-ziyareti" tablosunu yapacağını.

Asaf.

Ben gün başına yaklaşım başlığın gerçekten zarif olduğunu düşünüyorum.

Sen sorgu basitlik (ve muhtemelen performans) ile veritabanı boyutu kapalı ticaret konum

Misafirlerine numarasını sorgulamak için oldukça kolay, gece n, ve böylece, ancak veritabanı boyutu üzerinde oda X boş oldukça hızla artacak gibi mevcut modeli, basit sorgular verir.

Bir başlangıç ​​için hareketli / durdurmak veya başlatmak / num gece modeli zamanlarda bazı ilginç ... sorguları :) için yapacak

Yani bir sürü seçenek SQL beceri düzeyi ile yapmaktır :)

Ben şemada şemada için umurumda değil. Bu oldukça çirkin.

Schema Abstract

Table: Visit

Her gece bir otelde kaldık için ziyaret tablo bir satır içerir.

Not: Yazarın içeriyor

  • ixVisit
  • ixCusomer
  • dt
  • sNote

Table: Customer

  • ixCustomer
  • sFirstName
  • sLastName

Table: Stay

Stay tablo tüm ziyaret açıklayan bir satır içerir. Bu her ziyaret udpated edilir güncellenir.

  • ixStay
  • dtArrive
  • dtLeave
  • sNote

Notes

Bir web uygulaması iki şeydir: eylemleri ve CRUD eylemleri SEÇ. Çoğu web uygulamaları% 99 SELECT, ve% 1 CRUD. Normalizasyon, SELECT daha fazla CRUD yardımcı eğilimindedir. Sen benim şema ve panik bakmak olabilir, ama hızlı. Herhangi CRUD etkinlik için ekstra çalışma küçük bir miktar yapmak zorunda olacak, ancak seçen tüm Stay tablo vurabilir çünkü seçer çok daha hızlı olacaktır.

Ben Jeff Atwood koyar nasıl severim: "acıyor kadar çalıştığını kadar denormalize, Normale"

Yoğun bir otel müdürü, ne kadar iyi çalıştığını kadar hızlı çalışıyor kadar önemlidir tarafından kullanılan bir web sitesi için.