Datamodel для учебного проекта MVC - PullRequest
0 голосов
/ 24 марта 2010

Я пытаюсь изучить Microsoft MVC 2 и в этом случае нашел небольшой проект, на котором я хотел его развернуть.

Моя идея состояла в том, чтобы смоделировать ресторан, где можно заказать столик.

Основа:

  • Пользователь может зарезервировать только полную таблицу, так что у меня нет проблем слияние людей за разными столами.

    Человек может заказать столик для определенное количество часов.

У меня был вопрос, как я могу сделать модель данных самым умным способом. Я подумал о том, чтобы просто иметь свою базу данных вот так:

Таблица { Я бы, TableName }

Бронирование { Я бы TABLEID ReservedFrom ReservedTo Идентификатор пользователя }

Пользователь { Идентификатор пользователя UserName ... } * * Тысяча двадцать-один

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

Поэтому у вас, ребята, есть лучший способ сделать это?

Ответы [ 2 ]

1 голос
/ 24 марта 2010

Невозможно узнать, сколько времени потребуется человеку, чтобы поесть, поэтому вы не можете считать, что время ReservedTo является точным. Я бы построил временные интервалы в отдельной таблице. Таким образом, можно использовать простое уникальное ограничение.

TimeSlot {id, StartTime, Duration}

Кроме того, я бы сбросил таблицу пользователей и просто добавил имя.

Reservation {id, tableId, date, timeSlotId, Name}

установить уникальное ограничение для {tableId, date, timeSlotId}

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

1 голос
/ 24 марта 2010

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

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

...