Схема БД — Работа, Цитата, Статус Работы

Я проектирую базу данных (в MS Access 2010, но я думаю, что для этого вопроса это не имеет значения) для хранения информации о котировках и заказах для столярного бизнеса.

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

Ключевые моменты:

  • Когда клиент делает запрос, создается предложение или несколько предложений.
  • Полученные цитаты могут включать вариации одного и того же. Например, одна цена может быть указана для 10 окон, окрашенных в белый цвет, а другая цена может быть указана для тех же окон, окрашенных в зеленый цвет (мы взимаем дополнительную плату за небелые цвета). Также могут быть отдельные цитаты, например. один для окон дома и один для некоторых дверей.
  • Это для столярного бизнеса, изготовления на заказ окон, дверей и т. Д. - это означает, что расценки производятся, но они не относятся к таблице «продукты», поскольку все является одноразовым. Человек, составляющий предложение, просто напишет что-то вроде «Двойное окно 1200x1000 - Спальня 1» и цену в отдельном поле, и эта строка будет добавлена ​​к предложению.
  • Каждая цитата будет иметь набор деталей, прикрепленных к ней, которые считаются приоритетными деталями для всей цитаты. Имеется около 120 полей, некоторые из которых предназначены для текста, а некоторые — для хранения информации о задании. Это такие вещи, как «Тип рамного стекла» (текст) и «Задание включает раздвижные двери» (логическое значение). Это важно, так как в этих полях записывается именно то, что было процитировано, и наши дизайнеры обратятся к ним позже. Они также лягут в основу документа об утверждении, который мы отправляем заказчику для подписания, прежде чем что-либо производить. Я думаю, что это должно быть настроено таким образом, потому что, как правило, если мы делаем, скажем, 10 окон для расчета, они имеют почти все общие детали, такие как цвет краски и тип стекла. Также будет раздел/поле памятки для специальных примечаний о вещах, которые отклоняются от нашей стандартной спецификации и т. д.
  • Котировки могут иметь статус «Активный», «Мертвый» или «В обработке».
  • Одно или несколько предложений могут быть объединены в одно «задание», которое будет обрабатываться вместе и производиться за один раз. Например, мы можем указать некоторые окна и некоторые двери по отдельности, клиент решает, что он хочет заказать у нас и то, и другое одновременно, поэтому мы обрабатываем их вместе. Точно так же у клиента может быть несколько «этапов» для одного и того же заказа, например. у них может быть 10 окон от нас в один месяц и 10 окон от нас через 3 месяца, когда будет готова другая часть их дома, даже если они могут быть указаны в то же время.
  • Котировки часто необходимо пересматривать, поскольку клиенты меняют свое мнение о том, что они хотят.
  • Я также хочу, чтобы каждая «Работа» (которая может состоять из нескольких кавычек) имела набор JobDetails, который представляет собой сводный список для всего заказа.

Вот что у меня сейчас есть: Диаграмма отношений базы данных

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

Таблица «Работа» также связана с таблицей «Учетные записи», в которой хранятся клиенты и т. д., но я не показывал этого, поскольку это не совсем относится к рассматриваемой проблеме.

Я думаю, что «пересмотренные» кавычки должны фактически создавать новую запись, копируя данные из другой кавычки и изменяя их, чтобы создать журнал аудита, и то же самое с JobDetails - если JobDetails в задании меняются и/или отличается от JobDetails предложения, то это необходимо отметить (поскольку клиенту может потребоваться заплатить больше).

Есть ли у кого-нибудь рекомендации о том, как лучше всего это сделать?


person WhatEvil    schedule 10.07.2014    source источник


Ответы (1)


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

EER


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

person kbbucks    schedule 10.07.2014
comment
Я, вероятно, должен был сделать это более ясным - я хочу иметь контрольный журнал для JobDetails. Если работа была указана как окрашенная в белый цвет, а один из дизайнеров изменил ее на покраску в зеленый цвет, тогда мне нужно, чтобы это было отмечено в отчетах во время выставления счета клиенту (им нужно будет заплатить больше!) . Кроме того, JobDetails необходимо применять как к вакансиям, так и к котировкам. - person WhatEvil; 10.07.2014
comment
относительно деталей работы: я также хочу, чтобы каждая работа (которая может состоять из нескольких цитат) имела набор JobDetails, который представляет собой сводный список для всего заказа. Вы должны резюмировать детали в своем программном обеспечении/процедуре создания отчетов, а не в другой таблице, т.е. используя оператор Select. - person kbbucks; 11.07.2014
comment
также с точки зрения контрольного журнала, вы все равно должны иметь возможность обрабатывать это в таблице QuoteLine, используя разные статусы, затем вы можете использовать superceded_QuoteLineID для ссылки на QuoteLine с обновленными данными - все они все равно будут связаны обратно с заданием через соответствующий JobID - с точки зрения отслеживания контрольного следа, который будет зависеть от того, как вы отчитываетесь об этом. - person kbbucks; 11.07.2014