Форум: "Базы";
Текущий архив: 2002.05.27;
Скачать: [xml.tar.bz2];
ВнизПомогите разобраться со структурой БД, плз. Найти похожие ветки
← →
ДимкаН (2002-04-28 14:01) [0]Делаю курсовик, запутался совершенно! Помогите, пожалуйста. Итак, проблема:
Есть несколько предприятий, которые выпускают несколько изделий, которые разделяются на группы (любое изделие может выпускать одно или несколько предприятий, предприятие может выпускать одно или несколько изделий). Группа изделий имеет ряд характеристик (их количество в группах разное).
Эксперты оценивают продукты по этим характеристикам.
Например, для наглядности:
есть 2 группы изделий: булки и хлеба.
Характеристики булки: свежесть, внешний вид, аромат.
Характеристики хлеба: свежесть, форма, цена.
Есть 3 хлебозавода: ХЗ1, ХЗ2, ХЗ3.
ХЗ1 выпускает булку1, булку2, булку3, хлеб1
ХЗ2 выпускает хлеб2, хлеб3
ХЗ3 выпускает булку2, хлеб3
Эксперты периодически (например, раз в месяц) оценивают каждую булку и каждый хлеб каждого производителя по характеристикам, выставляя оценки от 1 до 5.
Нужно написать программу сравнения (за месяц и в динамике) одинаковых изделий по характеристикам группы этих изделий.
Данные обо всем этом нужно ввести. Я решил, что в одном документе должны быть данные об оценках всех характеристик всех всех изделий всех производителей (мне кажется, так будет легче потом обрабатывать анкеты).
Т.е. бумажная форма документа:
№ документа Дата
Изделие1
Производитель1
Характеристика1ГруппыИзделия1 Оценка
Характеристика2ГруппыИзделия1 Оценка
......
ХарактеристикаПоследняяГруппыИзделия1 Оценка
Производитель2
Характеристика1ГруппыИзделия1 Оценка
Характеристика2ГруппыИзделия1 Оценка
......
ХарактеристикаПоследняяГруппыИзделия1 Оценка
Изделие2
Производитель1
Характеристика1ГруппыИзделия2 Оценка
Характеристика2ГруппыИзделия2 Оценка
......
ХарактеристикаПоследняяГруппыИзделия2 Оценка
Производитель3
Характеристика1ГруппыИзделия2 Оценка
Характеристика2ГруппыИзделия2 Оценка
......
ХарактеристикаПоследняяГруппыИзделия2 Оценка
... т т.д. по всем производителям и всем изделиям.
Соответственно таблицы:
Таблица 1 (НомерДокумента, ДатаДокумента)
Таблица 2 (НомерДокумента, КодИзделия) - связано по полю НомерДокумента с Таблицей 1 (1:n)
Таблица 3 (НомерДокумента, КодПроизводителя) - связано по полю НомерДокумента с Таблицей 2 (1:n)
Таблица 4 (НомерДокумента, КодХарактеристики, Оценка) - связано по полю НомерДокумента с Таблицей 3 (1:n)
Вроде как все красиво и логично. Каждая таблица связана с предыдущей (master-detail).
Есть еще справочники:
Производители (КОдПроизводителя, Наименование)
Группы (КодГруппы, Наименование)
Характеристики (КодХарактеристики, Наименование, КодГруппы)
Изделия (КодИзделия, Наименование, КодГруппы)
ИзделиеПроизводитель (КодИзделия, КодПроизводителя)
Но нам нужно постоянно помнить о том, какого производителя и какие изделия мы уже ввели в документ, а какие еще нет. Хочется автоматизировать ввод данных так, чтобы при вводе нового документа в таблице 1:
- таблица 2 автоматически заполнялась изделиями из справочника изделий
- таблица 3 автоматически заполнялась теми производителями из справочника производителей, которые выпускают данное изделие
- таблица 4 автоматически заполнялась характеристиками группы, к которой принадлежит данное изделие.
Человеку тогда останется пройти по всем таблицам и ввести только оценки. Удобно.
Для реализации я использую Paradox и DBGrid для каждой таблицы.
Дык вот, большая проблема состоит в том, что я совершенно не представляю, как, например, автоматически заполнить записями таблицу 3 (то есть автоматически ввести в нее только тех производителей, которые выпускают текущее изделие из таблицы 2).
Следующая проблема: при заполнении таблицы 4 характеристиками оценки автоматически не заполняются, а вводятся вручную. На поле Оценка стоит required. Как это совместить и возможно ли? Должна же быть ошибка "Недопустимое значение поля".
Может, у меня есть какая глобальная ошибка при проектировании всей структуры и нужно не так?
Помогите, пожалуйста, разобраться!
← →
Sergey13 (2002-04-29 09:37) [1]Не понятно зачем создавать 4 тавлицы. Если докумету все равно нужен и производитель, и код группы, и характеристики и т.д. Делить данные на разные таблицы надо тогда, когда каких либо данных у сущности может не быть. Наприме "товар" может иметь свойство "характеристика" , а может и не иметь, или може иметь несколько. А так ИМХО тебе нужна ОДНА таблица со всеми полями. А по справочникам вроде все верно на первый взгляд.
← →
ДимкаН (2002-04-30 02:56) [2]Спасибо за ответ. Я хочу немного прокомментировать свое решение и уточнить вопрос.
Зачем создавать 4 таблицы. Это сделано потому, что совершенно неизвестно, сколько есть всего изделий, сколько производителей выпускают данное изделие и сколько характеристик у данного изделия.
Вы пишете: "Делить данные на разные таблицы надо тогда, когда каких либо данных у сущности может не быть. Наприме "товар" может иметь свойство "характеристика" , а может и не иметь, или може иметь несколько." У нас товар как раз и имеет несколько характеристик.
Если использовать одну таблицу, то получаем не нормализованную таблицу:
Таблица(НомерДокумента, Дата, КодИзделия, КодПроизводителя, КодХарактеристики, КодОценки)
КодПроизводителя и КодХарактеристики зависят от КодИзделия.
Для нормализации уже надо заводить несколько таблиц.
Вообще, если у какого-нибудь документа есть шапка и табличная часть, то логично шапку выделять в одну таблицу, а табличную часть - в другую таблицу, и связывать их master-detail. Ведь шапка в документе встречается только один раз, а табличная часть содерджит группу данных одинаковой структуры. Я не прав?
Вы, к сожалению, не сказали, как можно автоматически заполнить записями таблицу 3 (то есть автоматически ввести в нее только тех производителей, которые выпускают текущее изделие из таблицы 2)? Если Вас не затруднит, скажите, плз?
← →
ДимкаН (2002-04-30 03:01) [3]ОЙ, забыл уточнить...
Вообще, если у какого-нибудь документа есть шапка и табличная часть, то логично шапку выделять в одну таблицу, а табличную часть - в другую таблицу, и связывать их master-detail. Ведь шапка в документе встречается только один раз, а табличная часть содерджит группу данных одинаковой структуры.
В моем случае шапка - Номер и дата документа. Табличная (повторяющаяся) часть - Коды изделия, производителя, характеристики и оценка. В свою очередь, в табличной части для одного изделия можно выделить свою шапку (КодИзделия) и свою табличную часть (КодПроизводителя, КодХарактеристики и Оценка). Аналогично с табличной частью для одного производителя.
С помощью таких рассуждений я и пришел к 4 таблицам. В чем моя ошибка?
← →
Sergey13 (2002-04-30 10:50) [4]Да нет никакой ошибки. Есть два подхода к решению одной задачи. В свете Ваших уточнений - может я и не прав. Тут надо бы помозговать и поточнее описать условия. Нормализация не догма. По одной таблице (впрочем наверное 2 - список документов отдельно) например легче подбивать бабки всякими Group By-ями.
← →
ДимкаН (2002-04-30 11:14) [5]Спасибо еще раз за ответ :). И все же я хотел бы выяснить для себя, как сделать такую штуку:
Есть таблица Изделия(НомерДокумента, КодИзделия), есть таблица Производители(НомерДокумента, КодПроизводителя), связанные master-detail. Есть связь ИзделияПроизводители (КодИзделия, КодПроизводителя).
Задача: Ввести изделие и автоматически (без участия пользователя) заполнить таблицу Производители теми производителями, которые выпускают данное изделие.
Как это сделать принципиально?
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.05.27;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.005 c