首页 > 解决方案 > 多酒店预订系统的数据库设计/结构

问题描述

我想开发一个类似于 OTA 网站的网站,例如(booking.com 和 agoda.com)。但是我在制作桌子时遇到了麻烦。酒店经营者也可以在特定日期关闭特定房间,所以我必须在某个地方有一个封闭的空地。我不确定我目前是否做得正确,因此我需要一些额外的大脑来帮助我更好地设计它。

我曾尝试在 Google 中搜索数据库设计,但它们不符合我的要求,它们中的大多数仅适用于单个酒店结构并且只有固定价格,而我的价格是基于日期的。PH 和周末的价格可能会更高,并且可以由酒店经营者更改。

我对我的桌子有什么想法:

hotel {
    hotelID (INT) PK
    hotelName (VARCHAR)
}
rooms {
    roomID (INT) PK
    roomType (VARCHAR)
}

我计划在可用性上使用 INT(0 = 关闭 & 1 = 打开)

rates {
    roomID (INT) 
    date (datetime)
    price (double)
    available (INT)
}
bookings {
    bookingID (INT) PK
    hotelID (INT)
    roomID (INT)
    checkInDate (datetime)
    checkOutDate (datetime)
    price (double)
}

标签: phpdatabasephpmyadmin

解决方案


也许这个设计模型会帮助你理解一个酒店管理系统的基本逻辑。

hotels {
    id INT 11
    code VARCHAR 50
    name VARCHAR 70
    street_address TEXT 
    city_id INT 11
    state_id INT 11
    country_id INT 11
    zip_code VARCHAR 30
    added_on DATETIME
    added_by INT 11 ( ADMIN ID )
    updated_on DATETIME
    updated_by INT 11 ( ADMIN ID )
    flag TINYINT 2 DEFAULT 0
}

rooms {
    id INT 11
    hotel_id INT 11
    room_number INT 11
    floor_number INT/VARCHAR ..
    room_type INT 5 ( FK: room_types )
    added_on DATETIME
    added_by INT 11 ( ADMIN ID )
    flag TINYINT 2 (0/1) DEFAULT 0 AVAILABLE / NOT AVAILABLE
}

room_types {
    id INT 11
    hotel_id INT 11
    ......
}

room_facilities {
    id INT 11
    hotel_id INT 11
    room_id INT 11
    bed_type ( 'single', 'double', etc. )
    ac_available ...
    ..... etc.
}

room_rates {
    id INT 11
    hotel_id INT 11
    room_id INT 11
    price INT 11
    .. other price ..
    price_on DATETIME 11 ( DATE )
    added_on DATETIME
    added_by INT 11 ( ADMIN ID )
    flag TINYINT 2
}

bookings {
    id INT 11
    hotel_id INT 11
    room_id INT 11
    check_in DATETIME
    check_out DATETIME
    booking_person_id INT 11
    flag
}

booking_customer {
    id INT 11
    booking_id INT 11
    first_name ..
    last_name ..
    contact_number ..
    id_number ..
    added_on
    flag
}

booking_payment {
    id
    booking_id
    customer_id
    total_paid
    -- other price
    payment_type ( credit card/cash )
    status ( paid/ not paid ) 
}

booking_person {
    id
    hotel_id
    first_name
    last_name
    contact_number
    email
    address
    profile_picture
    added_on
    updated_on
    flag
}

您可以根据这些标准/设计开发您的数据库。始终尝试将多种类型的数据分离到单独的表中。


推荐阅读