|
|
|
Проблема с проектирование БД
|
|||
|---|---|---|---|
|
#18+
Приветствую всех! У меня проблема с проектированием БД (попросил друг, не смог отказать). Попробовал разные варианты схемы, но сам запутался, получилось не то, что надо, а сплошные сложности с реализацией. Попробую объяснить проблему. Есть некое кафе, продающее разные блюда. Покупают различные ингредиенты, складируют их, ну и потом ежедневно расходуют на приготовление того или иного блюда, а в конце происходит продажа. Есть также различные расходные материалы, что-то вроде салфетки, зубочистки и т.д., их также покупают в большом количестве и потом ежедневно расходуют (не продают). Есть ещё такие вещи, которые не проходят процесса приготовления (как бы стадию производства), а продают клиентам в таком виде, в каком получили от поставщика. К примеру, напитки Coca-Cola, Pepsi в бутылках и т.п. Само собой разумеется, нужно расходовать со склада методом FIFO, т.к. ещё и нужно учитывать срок годности ингредиентов и прочих вещей. Что я пытаюсь сделать? Создаю таблицу по «приходам ингредиентов» (закупка): 1) Уникальный код прихода 2) Дата прихода 3) Код ингредиента 4) Цена поставщика 5) Количество 6) Срок годности Создаю подчинённую таблицу по «расходам ингредиентов»: 1) Уникальный код прихода 2) Дата расхода 3) Вид расхода ==> (продажа, списание из-за истёкшего срока годности, брак и т.д.) 4) Дата расхода 5) Количество Ставлю ограничение с помощью триггеров о том, что расход не может быть произведен раньше прихода, ну и общее количество расходуемого материала не должно превышать прихода. Далее. Создаю таблицу рецепт, где указываю, какие ингредиенты и в каком количестве необходимо для приготовления блюда. Эта таблица нужна будет как что-то вроде «нормы расходов». Ещё создаю таблицу для учёта «приготовления блюда»: 1) Уникальный код 2) Дата приготовления блюда 3) Код рецепта ==> (в таблице «Рецепт» есть код блюда и код ингредиента) 4) Количество При добавлении записи в таблицу «Приготовление блюда» триггер должен добавить автоматически нужную запись в таблицу «Расход ингредиентов», причём уже тут начинаются сложности. Если ингредиента не хватает по одному приходу, то часть нужно перебросить на следующую закупку. Т.е. допустим, 01.09.2016 купили 100 единиц некоего ингредиента и 08.09.2016 ещё раз 100 единиц, в течение недели расходовали 90 штук, это означает, что от первой закупки осталось 10 штук. 08.09.2016 нужно расходовать 20 штук: 10 из предыдущей закупки от 01.09.2016 и 10 из закупки от 08.09.2016г. Ну и это ещё не все. Дальше больше! Продажа. Продают то они не только блюда, которые они сами и приготовили, но и напитки. Поэтому нижеследующая таблица по продажам не решит эту проблему: 1) Дата продажи 2) Код блюда 3) Порция 4) Количество «Продажа» живёт отдельной жизнью, она никак не связана с «приготовлением блюда», но как списать напитки и тому подобные вещи? Чтобы иметь «под рукой» остаток на складе, думаю ещё нужно создать отдельную (по сути вычисляемую) таблицу «остаток на складе», где должны быть поля «DATE_FROM» и «DATE_TO». Таблица должна позволить получение информации об остатке на любую дату, чтобы не проводить вычисления со дня основания кафешки. Вот такие проблемы. Может у кого есть светлые идеи? Заранее благодарю за дельный совет по решению данной проблемы. P.S. Пробовал уже обкатать эту схемку в тестовой базе, как я писал сложности с реализацией. Слабенькая схема получилась. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2016, 15:43 |
|
||
|
Проблема с проектирование БД
|
|||
|---|---|---|---|
|
#18+
Любитель и изучающийСлабенькая схема получилась. Не просто слабенькая, совсем никакая. Оторванная как от предметной области так и от жизни. ФИФО по блюдам на поточном производстве? Не смешите меня. Как повар будет учитывать расходуемую муку, например? По граммам? У него нет ни способов, ни времени, ни желания этим заниматься. Поищи по этому форуму схему для партионного учёта по складу, она обсуждалась не раз. О контроле производства просто забудь, ограничивайся складом и кассой. Расхождения тупо списывай на производственные потери/брак/воровство и т.п. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2016, 15:52 |
|
||
|
Проблема с проектирование БД
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, FIFO про блюд никто не озвучивал, говорили про ингредиенты не мешай людям работать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2016, 16:58 |
|
||
|
Проблема с проектирование БД
|
|||
|---|---|---|---|
|
#18+
Вы зря включаете в "расход" код прихода - "расход" и "приход" это независимые таблицы, связанные отношением "многие-ко-многим". У "расхода" должна быть ссылка на родительскую операцию - "приготовление блюда", "продажа", "списание" и т.п., (соответственно, то что Вы называете "тип расхода" уместнее будет в этой родительской операции). Вообще имхо Вы пытаетесь сделать все сразу, а задача вполне разбивается на несколько отдельных несложных подзадач. Скажем, на первом этапе я бы не думал про таблицу "актуальные остатки на на складе" - при желании ее вполне можно прикрутить потом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2016, 17:41 |
|
||
|
Проблема с проектирование БД
|
|||
|---|---|---|---|
|
#18+
Любитель и изучающий Если есть желание - напишите в личку - пообщаемся по теме ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2016, 21:28 |
|
||
|
Проблема с проектирование БД
|
|||
|---|---|---|---|
|
#18+
Любитель и изучающийУ меня проблема с проектированием БД ... Заранее благодарю за дельный совет по решению данной проблемы.Без обид, но Вы вряд ли сами потянете, только время напрасно потеряете. Вам прямая дорога сюда , сами можете выступить от лица заказчика. Естественно, небесплатно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2016, 01:30 |
|
||
|
Проблема с проектирование БД
|
|||
|---|---|---|---|
|
#18+
Господа, спасибо за ответ Dimitry SibiryakovНе просто слабенькая, совсем никакая. Оторванная как от предметной области так и от жизни. ФИФО по блюдам на поточном производстве? Не смешите меня. Как повар будет учитывать расходуемую муку, например? По граммам? У него нет ни способов, ни времени, ни желания этим заниматься. ... Ну там реально с FIFO все нормально. Каждое утро кладовщик (он же снабженец в одном лице) выдаёт со склада всё то, что просит повар, при этом старается не выдавать новые ингредиенты если есть старый запас. А скоропортящиеся ингредиенты вообще стараются не тариться, используют в основном день в день. Кот МатроскинВы зря включаете в "расход" код прихода - "расход" и "приход" это независимые таблицы,... Идея была такая: мы покупаем некий ингредиент, возможно у несколько поставщиков с разным сроком хранения и с разной ценой, затем их потихоньку расходуем. Только так я могу контролировать срок годности, а иначе как? Если приход и расход будут жить независимо друг от друга как я могу контролировать, что потратил повар и какие расходы в денежном выражении он сделал при приготовлении блюда? Я забыл написать, требуется ещё и такой отчёт: сумма выручки от продажи того или иного блюда, а также сумма расходов на приготовление этого же блюда. Кот Матроскин У "расхода" должна быть ссылка на родительскую операцию - "приготовление блюда", "продажа", "списание" и т.п., (соответственно, то что Вы называете "тип расхода" уместнее будет в этой родительской операции). Что Вы имеете ввиду? "Расход" должен быть главным, а "приготовление блюда", "продажа", "списание" подчинённые таблицы или наоборот? Во втором случае я в "расходе" должен держать отдельные поля "код приготовления блюда", "код продажи", "код списания", чтобы связать их с этими таблицами? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2016, 04:46 |
|
||
|
Проблема с проектирование БД
|
|||
|---|---|---|---|
|
#18+
Кот Матроскин... Вообще имхо Вы пытаетесь сделать все сразу, а задача вполне разбивается на несколько отдельных несложных подзадач. Скажем, на первом этапе я бы не думал про таблицу "актуальные остатки на на складе" - при желании ее вполне можно прикрутить потом. ОК. Я решу эту проблему в самую последнюю очередь. Пока отложу, хотя этот момент очень и очень важен для снабженца. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2016, 04:51 |
|
||
|
Проблема с проектирование БД
|
|||
|---|---|---|---|
|
#18+
Любитель и изучающий, Вы очередной изобретатель велосипеда. Берите уже готовое решение и не парьте мозг. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2016, 09:01 |
|
||
|
Проблема с проектирование БД
|
|||
|---|---|---|---|
|
#18+
Любитель и изучающий«Продажа» живёт отдельной жизнью, она никак не связана с «приготовлением блюда», но как списать напитки и тому подобные вещи? Здесь фокус в том, что приготовление блюда - это не только списание ингридиентов, но и оприходование самого блюда. Списали 10 кг мяса, оприходовали 100 шт котлет. Приготовленное и оприходованное блюдо - это тоже товар, оно становится в один ряд с другими товарами (бутылками Колы), и продается тогда единообразно. А если не продалось - списывается в конце дня, типа прокисло. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2016, 09:06 |
|
||
|
Проблема с проектирование БД
|
|||
|---|---|---|---|
|
#18+
Любитель и изучающийКот МатроскинВы зря включаете в "расход" код прихода - "расход" и "приход" это независимые таблицы,... Идея была такая: мы покупаем некий ингредиент, возможно у несколько поставщиков с разным сроком хранения и с разной ценой, затем их потихоньку расходуем. Только так я могу контролировать срок годности, а иначе как? Вы меня плохо отквотили, я написал дальше "иначе как" :) Таблицы связаны отношением многие-ко многим - поскольку и один приход может быть потрачен за несколько раз, и несколько приходов могут быть списаны за один раз. Действительно, поищите про схему базы партионного учета - найдете подробное описание. Любитель и изучающийКот Матроскин У "расхода" должна быть ссылка на родительскую операцию - "приготовление блюда", "продажа", "списание" и т.п., (соответственно, то что Вы называете "тип расхода" уместнее будет в этой родительской операции). Что Вы имеете ввиду? "Расход" должен быть главным, а "приготовление блюда", "продажа", "списание" подчинённые таблицы или наоборот? Во втором случае я в "расходе" должен держать отдельные поля "код приготовления блюда", "код продажи", "код списания", чтобы связать их с этими таблицами? Расход - подчиненная таблица, поскольку одно приготовление блюда может потребовать несколько расходов. Как именно связывать - тут есть разные методы, можно объединить продажи, списания и приготовления в одну таблицу "Хоз.Операции", можно сделать супертаблицу "Хоз.Операции" и несколько уточняющих подчиненных таблиц "Продажа", "Приготовление", "Списание" (в этом случае в "Расходе" у Вас ссылка на "Хоз.Операцию"), можно так как Вы сказали (я считаю этот способ кривоватым, но потенциально он возможен). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2016, 10:06 |
|
||
|
Проблема с проектирование БД
|
|||
|---|---|---|---|
|
#18+
Обычно для приготовления блюд есть технологические карты. Условно, чтобы получить "Котлету №1", нужно потратить "Говядины такой-то" 100 гр, "Муки такой-то" 100 гр, "Туалетной бумаги" 1 рулон и т.п. Списываем ингредиенты, получаем конечный продукт, причем конечный продукт одной операции может быть ингредиентом для другой операции. Контроль остатков само собой. Скорее всего, для реализации технологической карты нужны таблицы аналогов, если разные продукты закупаются и ведутся по остаткам раздельно. Например, "Мука такая" и "Мука сякая" может быть на входе "Котлеты №1", но для "Пирожка №212" можно использовать только "Муку сякую". Партионный учет для сроков годности может и нужен, это вам виднее. Скорее всего, для изготавливаемой продукции надо будет вести, чтобы списывать просрочку. Таблица с остатками на каждую дату — не самая лучшая идея, если будут операции списания задним числом. Можно делать техническое закрытие периода (например, каждый месяц) - операция расхода в последний день месяца в 23:59 и операция прихода первого числа в 00:00, остатки на дату считать от последней операции перед выбранной датой + все движение товара до нужной даты ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2016, 11:39 |
|
||
|
Проблема с проектирование БД
|
|||
|---|---|---|---|
|
#18+
Любитель и изучающийПри добавлении записи в таблицу «Приготовление блюда» триггер должен добавить автоматически нужную запись в таблицу «Расход ингредиентов», причём уже тут начинаются сложности. Если ингредиента не хватает по одному приходу, то часть нужно перебросить на следующую закупку. Т.е. допустим, 01.09.2016 купили 100 единиц некоего ингредиента и 08.09.2016 ещё раз 100 единиц, в течение недели расходовали 90 штук, это означает, что от первой закупки осталось 10 штук. 08.09.2016 нужно расходовать 20 штук: 10 из предыдущей закупки от 01.09.2016 и 10 из закупки от 08.09.2016г. Кстати, не факт, что 8 сентября надо будет брать ингредиент из разных закупок. Вполен допустим вариант, что у ингридиента из зкупки от 1 сентября закончился срок годности, тогда, остатки от закупки 1 сентября скорее всего надо будет отправить на списание а не в приготовляемое блюдо. А в блюдо взять все 20 единиц из закупки от 8 сентября. Ну или если списание из-за истекшего срока годности это отдельная операция, то оставить 10 единиц от старой закупки на складе до момента списания и всё равно взять 20 единиц из новой закупки. Как-то так. И это в триггере тоже надо не забыть предусмотреть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2016, 07:27 |
|
||
|
Проблема с проектирование БД
|
|||
|---|---|---|---|
|
#18+
Любитель и изучающий, ещё в твоих таблицах не увидел поля - срок реализации блюда. Точно не знаю куда его лучше запихнуть: в "приготовление блюда" или в "рецепты". Думаю, что в рецептах ему более логично находиться. Ну а в "приготовление блюда" можно добавить дату завершения реализации, которая будет равна дате приготовления блюда плюс срок реализации из рецепта. Как-то так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2016, 07:32 |
|
||
|
Проблема с проектирование БД
|
|||
|---|---|---|---|
|
#18+
Любитель и изучающий, Можно эту задачу решить по этапно: 1. Сделать классификатор блюд: - Несколько градаций (думаю 3 достаточно): Первое, .../Борщ, .../Украинский,... - Установить две цены: себестоимость (примерную) и стоимость продажи (чтоб не лажануться) и количество = 1 - и начать тупо продавать как услуги - количество блюд всегда 1 и не уменьшается... - можно прикрутить сверху меню на день: если количество = 0, то сегодня в меню блюдо не печатаем и не продаем. Этот этап можно запустить дня за три... и через время на ладони вся выручка и примерные затраты на ингредиенты и примерно все остальное... 2. Работаем месяц- два, анализируем... лепим для блюд технологические карты с ингредиентами и нормами их списания... попутно формируем классификатор ингредиентов. 3. Когда все готово - включаем паровоз: реализация блюда влечет за собой расход ингредиентов в соответствии с картой... ингредиенты уходят в минуса, ставим на приход ингредиенты и они уходят в плюса и так в цикле... Это так - в общих чертах (на самом деле - куча нюансов)... По опыту - сейчас многих тупо устраивает только этап 1, даже если всё остальное реализовано, то очень часто получается так, что остальные пункты или некому делать (ставить на приход ингредиенты, контролировать и т.д.) или у тех кто есть нет мозгов делать это правильно... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2016, 09:13 |
|
||
|
Проблема с проектирование БД
|
|||
|---|---|---|---|
|
#18+
Кот Матроскин, здравствуйте нужен ваш совет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2016, 10:30 |
|
||
|
|

start [/forum/topic.php?fid=32&fpage=13&tid=1540233]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
118ms |
get topic data: |
11ms |
get forum data: |
6ms |
get page messages: |
85ms |
get tp. blocked users: |
1ms |
| others: | 30ms |
| total: | 277ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...