Сценарий концептуального моделирования

Я очень новичок в проектировании баз данных, и я практиковался с таким количеством вопросов, как только мог. Я случайно наткнулся на приведенный ниже вопрос (нет, это не мое задание!), и, насколько я понял, я создал прилагаемую концептуальную модель. В модели отсутствует некоторая информация, потому что из требований мне было непонятно, куда их следует добавить. Я выделил строки, в которых у меня есть сомнения.

Вам было поручено разработать схему базы данных, в которой будет храниться информация, необходимая для службы обзора объектов для туристов, для таких объектов, как размещение, рестораны и запланированные поездки. Что касается размещения, то сервис хранит информацию о названии, адресе, типе размещения. Тип размещения может быть гостиница, общежитие или кровать и завтрак. Нам также нужны имя и адрес. Есть также необязательный набор удобств (которые должны быть перечислены отдельно), такие как тип номера (одноместный, двухместный или многоместный), наличие телевизора в номере, ванная комната и т.д.< /em> К одному и тому же месту может быть применимо несколько объектов. Существует также стоимость за ночь, которая может быть указана либо на человека (в общежитиях), либо на номер (в гостиницах, ночлег и завтрак, следовательно, в зависимости от типа размещения).
Для мест, где можно поесть, у нас есть название и адрес (уникальный и всегда доступный). Это могут быть рестораны, бары, пабы, таверны и точки самообслуживания. Должен быть указан вид кухни, средняя стоимость одного приема пищи (разделенная на 4 возможных уровня стоимости), ежедневное расписание (составленное по часам открытия и закрытия) и, возможно, дни остановки в течение недели. (один или несколько дней). Что касается поездки, мы хотим указать список названий достопримечательностей (и соответствующий адрес, если он есть). Для каждой туристической достопримечательности у нас есть интервал дат, в который ее посещают туристы. Каждый клиент может оставить отзыв в произвольной форме для каждого места (проживание или место, где можно поесть, но не для туристических поездок), указав свой никнейм (уникальный для всех клиентов), дату посещения (или, как вариант, календарный интервал указывается двумя датами) и целым числом баллов (от 0 до 5). Каждый клиент мог посетить и оставить отзыв более одного раза для одного и того же места. Нарисуйте диаграмму ER для концептуального проекта базы данных.

Вот что я придумал: Концептуальная модель

На изображении есть модель, о которой я мог думать. Мои сомнения:

1) Правилен ли мой подход, чтобы использовать так много обобщений? Есть ли другой способ?

2) В приведенном выше описании первое предложение, выделенное курсивом и жирным шрифтом, говорит о том, что существует определенный «необязательный набор средств». Должны ли эти атрибуты быть добавлены к объекту «Отель», «Хостел» и «B&B» или к обобщенному объекту «Размещение»?

3) Во втором предложении, которое выделено, следует ли добавить стоимость отеля, общежития и пансиона, как это сделал я? В противном случае, как я должен действовать в моделировании этого?

4) В третьем выделенном предложении следует перечислить указанные атрибуты под каждым типом закусочной или их следует добавить к обобщенному объекту Закусочная?

Большое спасибо за помощь заранее!


person Chaos    schedule 04.07.2017    source источник


Ответы (1)


Правилен ли мой подход к использованию стольких обобщений? Есть ли другой способ?

Наверняка есть и другие способы. В обобщениях нет ничего плохого, хотя редко можно увидеть их так много в одной модели. Это не означает, что это неправильно, правильно или неправильно, в данном случае зависит от того, насколько хорошо ваша модель представляет бизнес-требования.

В приведенном выше описании первое предложение, выделенное курсивом и полужирным шрифтом, говорит о том, что существует определенный «необязательный набор возможностей». Должны ли эти атрибуты быть добавлены к объекту «Отель», «Хостел» и «B&B» или к обобщенному объекту «Размещение»?

Звучит как общее требование, я бы связал его с проживанием.

Обратите внимание, что в данном сценарии есть два варианта использования «Объекта» — для мест, которые можно посетить/просмотреть, и для характеристик комнат. Я бы рекомендовал переименовать один из терминов, чтобы избежать путаницы.

Во втором предложении, которое выделено, следует ли добавить стоимость отеля, общежития и пансиона, как это сделал я? В противном случае, как я должен действовать в моделировании этого?

Вы можете сделать это так же, как вы это сделали, или добавить атрибут стоимости (и индикатор на человека/комнату) в Размещение.

Вы должны стараться избегать смешивания доменов в атрибуте. Под этим я подразумеваю, что все возможные значения должны быть одного типа и логически взаимозаменяемыми. Распространенной ситуацией является смешивание значений разных валют в одном атрибуте или столбце значений в таблицах EAV. Такие конструкции имеют тенденцию к увеличению сложности.

Добавление атрибута стоимости к размещению имеет похожий запах, объединяя стоимость за номер и стоимость на человека в одном атрибуте. Тем не менее, я бы рассмотрел его, если бы он мог устранить набор подтипов - если у нас нет атрибутов, отношений или ограничений, специфичных для подтипа, тип может быть указан атрибутом, уменьшая необходимость явного моделирования каждого подтипа.

В третьем выделенном предложении следует перечислить указанные атрибуты под каждым типом закусочной или их следует добавить к обобщенному объекту Закусочная?

Не вижу смысла перечислять его отдельно для каждой забегаловки. Атрибуты, отношения и ограничения, общие для всех подтипов, должны быть связаны с супертипом.

Для сравнения вот моя модель. Я сделал это до того, как посмотрел на вас, поэтому здесь нужен совсем другой подход.

Обзоры объектов ERD

Некоторые примечания:

  • Я переименовал удобства в комнатах в особенности
  • Размещение и столовая являются необязательными непересекающимися подтипами Facility. Это означает, что у нас могут быть объекты, не принадлежащие ни к одному из подтипов, что позволяет мне обрабатывать обзоры других видов достопримечательностей, используя ту же структуру.
  • Посещение — это троичная связь, определяемая Пользователем, Поездкой и Объектом. Таким образом, каждое Посещение должно относиться к Поездке, даже если это Поездка с одним посещением. Положительным моментом является то, что несколько Пользователей могут участвовать в одной и той же Поездке.
  • Пользователи могут Посетить Объект более одного раза в разных Поездках, но не более одного раза за Поездку. Мы могли бы преобразовать Visit из отношения в сущность с суррогатным ключом, чтобы преодолеть это.

Я надеюсь, что это поможет, дайте мне знать, если я должен что-то уточнить.

person reaanb    schedule 05.07.2017
comment
Большое спасибо! Теперь я понимаю этот сценарий намного лучше. - person Chaos; 05.07.2017