0

Я хочу смоделировать следующий сценарий в базе данных:как проектировать ценообразования модуля на уровне базы данных

У меня есть пакет, состоящий из независимого 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?

ответ

2

Вы на самом деле нужны пяти таблиц здесь.

У вас есть три объекта: деятельность, гостиницы и пакеты (при условии, что в каждой упаковке есть данные, не связанные с гостиницей или деятельностью). У вас есть две связи, как многие, так и многие, а именно пакетная и пакетная деятельность. Каждая строка отношений аннотируется с определенной ценой.

Пять столов - это путь. Нет, необходимость в объединении не проблема: это лучше, чем наличие ненормальных данных. Вы можете денормализовать для производительности позднее при необходимости.

+0

Я немного смущен. Итак, у нас есть 1 таблица для всех видов деятельности. Пакет может содержать несколько действий, поэтому мне нужны отношения «один ко многим». Я бы предположил, что таблица пакетов-пакетов - это способ пойти на это. Я хочу сохранить отдельную таблицу для ценообразования, поэтому у меня будет пакет-активность-цена для этого, как я перечислял в своем вопросе. Верный ? – brainydexter

+1

@brainydexter: Нет. Вначале пакет может содержать несколько действий, но данное действие может быть в нескольких пакетах. Это отношения «многие ко многим». Теперь, когда у вас много таблиц соединений, вам не нужно ограничивать себя двумя полями, поэтому цена может быть в этой таблице вместе с 'package_id' и' activity_id'. Почему бы вам сохранить отдельную таблицу только по ценам? Он также должен * также иметь идентификаторы, чтобы вы могли узнать, к чему относится цена. – Borealid

Смежные вопросы