Как выбрать, что хранить в БД?

Рейтинг: 0Ответов: 1Опубликовано: 28.04.2015

Добрый день, не знаю как поступить, что хранить в базе данных? Объясняю: База данных создается для работы с заказами. Заказы вводятся в программе. На основе заказов создаются платежные документы, содержащие конкретные услуги - например добавляют заказ "Добавить заказ на перевод, языки Английский, Русский, Перевод нотариально заверить.", при этом добавление заказа реализуется заполнением формы "заказ на перевод", содержащей input'ы для указания языков, и чекбокс для указания будет заверение или не будет. На основе этих данных создаются две услуги - "перевод с европейских(или западных) языков, нотариальное заверение перевода.". Так вот, что должно храниться в базе данных?

  1. информационные поля заказа (два языка и булево значение "есть заверение или нет"). На основе этих данных всегда можно автоматически составить эти две конкретные услуги.
  2. должны хранится именно услуги. Потому что наверное полезно иметь возможность делать выборки по разным типам услуг, да и в конце концов именно услуги попадают потом в документы. Но по таким услугам не получится восстановить полную входную информацию о заказе, например те же языки (так как в услуге указывается только европейские они или западные), а значит придется хранить дополнительные сведения и заказа.
  3. из пункта 2) вытекает этот пункт - и то и то. И заказ в виде набора полей. И ассоциированный с ним набор услуг в отдельной таблице. Но набор услуг можно получить динамически из данных заказов, не будет ли это дублированием?

Какой вариант выбрать?

Ответы

▲ 2Принят

Если у вас есть строгий набор услуг:

Таблица заказов(orders):

id | date | итд..

Таблица услуг(services):

id | order_id | service_type_id

Таблица типов услуг(service_types):

id | name

Таблица свойств(options):

id  |   service_id  |   option_type_id
1   |   2           |   1
2   |   4           |   4
3   |   6           |   5

Таблица типов опций(option_types):

id  |   name
1   |   Английский  
2   |   Немецкий    
3   |   Ускоренный курс 
4   |   Другой курс
5   |   Сделать быстро
6   |   Вредный заказчик

В таком варианте все данные о заказе у вас будут храниться в числовом виде, что поможет вам в будущем избежать проблем. Естественно, что виды услуг и языки нужно предварительно заполнить в базу. И текстовые инпуты заменить на селекты с их выбором.