Я хочу смоделировать следующий сценарий в базе данных:как проектировать ценообразования модуля на уровне базы данных
У меня есть пакет, состоящий из независимого Activities
и Hotel
:
пакет P:
- Деятельность A1, A2, A3
- Отель H
Activities
и Hotel
являются независимыми юридическими лицами, которые имеют свои собственные цены определяются на момент определения юридического лица.
Когда предприятие добавлено к упаковке, его можно изменить (только specific to the package
). Следовательно, каждый пакет будет иметь уникальную цену за действия/гостиницы.
E.g. (Defining activities and hotel)
:
A1 - 10$
A2 - 20$
H1 - 100$
(Adding activities and hotel to package)
:
Package p;
p.addActivity("A1", 15);
p.addActivity("A2", 25);
p.addHotel("H1", 50);
yields =>
p
- A1 - 15
- A2 - 25
- H1 - 50
Side База данных:
Определение:
Activity
:Activity-идентификатор, StartDate, EndDate, Цена
Hotel
:Hotel-ID, StartDate, EndDate, Цена
После добавления к пакету
Package table
:
Пакет-идентификатор, Гостинично-идентификатор, активность-идентификатор
Package-Activity price table
:Пакет-идентификатор, активность-идентификатор, Цена // Пакет-идентификатор и идентификатор деятельности - это уникальный ключ
Package-Hotel price table
:Пакет-идентификатор, Hotel-идентификатор, Цена // Пакет-идентификатор и гостинично-идентификатор служит уникальным ключом
мне нужна обратная связь по дизайну, которые я придумал. Сложно ли мне это? Есть ли более простой/лучший способ сделать это? Кроме того, поскольку я писал это, я решил, что в пакете может быть много отелей и мероприятий, поэтому вам нужно будет учитывать это здесь. Разве я слишком много фрагментировал это, так как для каждого ценового поиска объекта я буду выполнять соединение?
EDIT
Нашел соответствующую ссылку на производительности с Присоединяется: When and why are database joins expensive?
Я немного смущен. Итак, у нас есть 1 таблица для всех видов деятельности. Пакет может содержать несколько действий, поэтому мне нужны отношения «один ко многим». Я бы предположил, что таблица пакетов-пакетов - это способ пойти на это. Я хочу сохранить отдельную таблицу для ценообразования, поэтому у меня будет пакет-активность-цена для этого, как я перечислял в своем вопросе. Верный ? – brainydexter
@brainydexter: Нет. Вначале пакет может содержать несколько действий, но данное действие может быть в нескольких пакетах. Это отношения «многие ко многим». Теперь, когда у вас много таблиц соединений, вам не нужно ограничивать себя двумя полями, поэтому цена может быть в этой таблице вместе с 'package_id' и' activity_id'. Почему бы вам сохранить отдельную таблицу только по ценам? Он также должен * также иметь идентификаторы, чтобы вы могли узнать, к чему относится цена. – Borealid