У меня есть одна таблица бронирования отелей, и она должна ссылаться на другую пару таблиц, которые имеют отношение многие ко многим.Как правильно установить это соединение
У меня есть база данных MySQL с 4 таблицами: RESERVATIONS
RESORTS --BOOKABLE_ROOMS (таблица соединений) ROOM_TYPES
Когда резервированиеДля этого требуется ссылка на курорт (т. е. название отеля) и тип номера (т. е. стандартные 2 королева, 1 король и т. д.), но мне также нужно ограничить его тем, какие отели имеют типы номеров, поэтому у меня есть много ко многиммежду этими двумя таблицами.
До сих пор я сохранял первичный ключ соединительной таблицы (BOOKABLE_ROOMS) в новой таблице резервирования как внешний ключ.Технически это работает, но очень медленно при выполнении запросов с использованием Flask с SQLalchemy.Я вижу, что затем делает несколько запросов для каждого поиска резервирования.Есть ли более правильный способ сохранить эти отношения между резервированием и bookable_room (resort + room_type)?
Сейчас у меня есть соединительная таблица в качестве класса, но при проведении исследований я обнаружил, что это не рекомендуется и чтоЯ должен просто использовать стол.Если я сделаю это, как мне сделать ссылку на комбинацию resort + room_type в таблице резервирования?
Я также безуспешно пытался связываться с различными ленивыми вариантами.
class Resort(db.Model, AddUpdateDelete):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(255), unique=True, nullable=False)
bookable_rooms = db.relationship('BookableRoom', backref='resort')
def __init__(self, name):
self.name = name
def __repr__(self):
return "Resort(%s) - ID(%s)" % (self.name, self.id)
class RoomType(db.Model, AddUpdateDelete):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(255), unique=True, nullable=False)
sleeps = db.Column(db.Integer, nullable=True)
bookable_rooms = db.relationship('BookableRoom', backref='room_type')
def __init__(self, name, **kwargs):
self.name = name
if 'sleeps' in kwargs:
self.sleeps = kwargs['sleeps']
def __repr__(self):
return "Room Type(%s) - ID(%s) - Sleeps(%s)" % (self.name, self.id, self.sleeps)
class BookableRoom(db.Model, AddUpdateDelete):
id = db.Column(db.Integer, primary_key=True)
resort_id = db.Column(db.Integer, db.ForeignKey('resort.id'), nullable=False)
room_type_id = db.Column(db.Integer, db.ForeignKey('room_type.id'), nullable=False)
reservations = db.relationship('Reservation', backref='bookable_room', lazy='dynamic')
def __init__(self, resort, room_type):
self.resort = resort
self.room_type = room_type
def __repr__(self):
return "Bookable Room = %s at %s" % (self.room_type.name, self.resort.name)
class Reservation(db.Model, AddUpdateDelete):
id = db.Column(db.Integer, primary_key=True)
check_in_date = db.Column(db.DateTime, nullable=False)
check_out_date = db.Column(db.DateTime, nullable=False)
notes = db.Column(db.String(255))
bookable_room_id = db.Column(db.Integer, db.ForeignKey('bookable_room.id'), nullable=False)
owner_id = db.Column(db.Integer, db.ForeignKey('owner.id'), nullable=False)
booked_date = db.Column(db.DateTime, nullable=False)
points_needed = db.Column(db.Integer, nullable=False)
def __init__(self, owner, bookable_room):
self.owner = owner
self.bookable_room = bookable_room
def __repr__(self):
return "Trip - %s(%s %s-%s) %s" % (self.id, self.owner.name,
self.bookable_room.resort.name,
self.bookable_room.room_type.name,
self.check_in_date)
Я хочучтобы иметь возможность открыть таблицу резервирования без выполнения сотен запросов для каждой бронируемой комнаты