Добрый день, не знаю как поступить, что хранить в базе данных?
Объясняю:
База данных создается для работы с заказами. Заказы вводятся в программе. На основе заказов создаются платежные документы, содержащие конкретные услуги - например добавляют заказ "Добавить заказ на перевод, языки Английский, Русский, Перевод нотариально заверить.", при этом добавление заказа реализуется заполнением формы "заказ на перевод", содержащей input'ы для указания языков, и чекбокс для указания будет заверение или не будет. На основе этих данных создаются две услуги - "перевод с европейских(или западных) языков, нотариальное заверение перевода.".
Так вот, что должно храниться в базе данных? 1)информационные поля заказа (два языка и булево значение "есть заверение или нет"). На основе этих данных всегда можно автоматически составить эти две конкретные услуги. 2)должны хранится именно услуги. Потому что наверное полезно иметь возможность делать выборки по разным типам услуг, да и в конце концов именно услуги попадают потом в документы.
Но по таким услугам не получится восстановить полную входную информацию о заказе, например те же языки (так как в услуге указывается только европейские они или западные), а значит придется хранить дополнительные сведения и заказа. 3) из пункта 2) вытекает этот пункт - и то и то. И заказ в виде набора полей. И ассоциированный с ним набор услуг в отдельной таблице. Но набор услуг можно получить динамически из данных заказов, не будет ли это дублированием?
1. заказ (осн. поля)
2. список услуг, для привязки к заказу (id, наименование, доп.поля для каждой услуги)
Плюсы: при добавлении доп. полей - выражение выборки данных на основе заказа не нужно будет менять. (если доп. поля - только дописать в конец)
Спасибо!
Получается имеем по одной дополнительной таблице, для каждого вида услуги (с разными доп. полями) привязанными к заказу внешним ключом?
Скажите, если одна из услуг использует все данные другой услуги, добавляя при этом некоторые свои, можно ли связать таблицу с этой услугой не с заказом, а с оказанной услугой (1го типа), и программно, когда понадобиться вывод, то использовать те общие поля? Не влечет это подводных камней в простом случае?
Alksar: вы говорите о поглощении множеств. согласно даже 3-ДНФ - это недопустимо.
Однако! Можно использовать дерево для хранения сложных зависимостей c новым контейнером:
[таблица списка услуг]
id:25,title:"Комплексная услуга"
id:26,title:"Услуга 1",parent_id:25
id:27,title:"Услуга 1.1",parent_id:26
id:28,title:"Услуга 2",parent_id:25