![]() |
Как привести эту таблицу к 3-й нормальной форме?
Вложений: 1
Я, учусь создавать БД на MAccess2007 и для начала я взял список пестицидов, разрешёных применению в 2011 году. Вот я застрял на отрывке связи препарат-норма расхода-обрабатываемый объект-назначение. Пример таблицы в прикреплёном файле. По ходу тут отношение многие-ко-многим, но я не хочу чтобы так было. Если уж тут никак, то как тут лучше привести к 3-й нормальной форме? Думаю, проффесионалы сайта по БД помогут ... ПОМОГИТЕ!!!
Приведено к 1-й нормальной форме препарат1 норма расхода а растение 1 вредитель 1 препарат1 норма расхода б растение 1 вредитель 2 препарат1 норма расхода в растение 2 вредитель 3 препарат1 норма расхода г растение 3 вредитель 3 препарат2 норма расхода д растение 4 вредитель 4 |
|
А как же всё-таки здесь таблицу привести к 3-й форме, чтобы в дальнейшем можно было легко им пользоваться?
|
Идентификаторы в различных таблицах это же здесь около 3-х таблиц! Или у меня плохое представление об идентификаторах
|
Цитата:
Код:
препарат1 норма расхода б растение 1 вредитель 3 Давай начнем с другого - чего ты хочешь добиться? Не стремись делать все по книжке, не надо педантично выстраивать схемы по 1-2-3 формам нормализации, Кодда-Бойса и т.п. Главное поставить конкретную цель и оттуда уже плясать. Нормализация (Википелия) |
Норма расхода зависит от уничтожаемого вредителя на конкретном растении и препарата, т.е. жёсткая зависимость и никак иначе.
Поэтому в таком случае следует в отдельных таблицах пронумеровать все растения, вредители (препараты уже пронумерованы). Но как связать с нормой расхода и препаратом связь растение-вредитель. Или ещё сделать ещё одну таблицу "растение-вредитель-норма расхода" и каждой такой строчке приделать ключ? Комп после этого у меня будет завистать? ) |
Цитата:
Да, я соглашусь, здесь связь должна быть жесткой, в ущерб дублированием данных. Мне кажется, можно сделать как то так: Таблица "Препараты" - в ней поле - норма расхода(текстовое, например, или число) и еще одно поле - ИД Растения. Будут примерно такие строки: Код:
Мышьяк - 100 гр - 1 ИД растения - Растение - ИД вредителя Код:
2 - Картофель - 1 Код:
1 Жук |
Действительно "добродушный помощник". Очень рад за такую помощь. Ещё чуть-чуть и Delirium переквалифицируется в агронома по защиет растений. :-).
Тут я всё понял! Препараты-Норма расхода не может повторяться. Как же я не додумался сделать так, будто Препарат-Норма расхода - это индивидуальное средство для решения проблемы Растение-Вредитель. Это значит появится ИД для каждого Препарат-Норма расхода-Растение-Вредитель как минимум (там есть и другие поля один-к-многим, но более понятные). Это так? |
Цитата:
Код:
select препарат, норма расхода, растение, вредитель |
koalder, я все таки отвечу на твое удаленное сообщение :) Все данные можно будет получить, лишь немного видоизменив приведенный мною запрос. А если все это делается в Access, то связи между таблицами и условия выборки можно будет задавать визуально и мышкой, а затем просмотреть код в режиме SQL.
|
Запросы в MAccess2007 в режиме SQL Вашим способом, Delirium, количество таблиц и повторяемых данных резко уменьшится! Просто гениально!
Оказывается MAccess2007 более профессиональная прожка, чем думал. Теперь всё прояснилось! Значит нужно подучиться с написанием запросов. :yahoo: |
Цитата:
А наличие встроенных форм, отчетов и т.п. позволяет сделать полноценный продукт практически без программирования :) И еще добавлю. Если создать схему данных в Access (тоже только мышкой), то впоследствии, при создании запросов и прочего, связи между таблицами будут выставляться автоматически. |
Продолжение
ДВ - действующее вещество С - содержание ДВ в препарате Препарат 1 - ДВ 1, ДВ 2, ДВ 3, ДВ 4, ДВ 5 - С 1, С 2, С 3, С 4, С 5 Препарат 2 - ДВ 3 - С 6 Препарат 3 - ДВ 7, ДВ 8, ДВ 9 - С 7, С 8, С 9 М/у отношением Препарат и ДВ(?) также куча отношений с которыми уже разобрался. Пытался нарушить 1-ю нормальную форму, создав списки с поддержкой нескольких значений в ячейках, но количество ДВ слишком много. Всё-таки нужно здесь перевести на 3-ю нормальную форму, но как так только дальше управлять такой кучей информации?! Пример: Альто Супер - диазинон, фенол, акриламид, беномил, комплекс хлораминовых кислот - 250 г/кг, 15 г/кг, 35 г/кг, 57 г/кг, 150 г/кг Престиж - акриламид - 500 г/кг Фитоспорин - Bacillus turengensis (штамм H324N), спорово-кристаллический комплекс аминокислот, продукты выделения грибов Asp. niger - 2 млрд. клеток и спор/г, 15 г/кг, 5 г/кг 1. У каждого препарата может быть до 5 действующих веществ и выше (в справочнике пестицидов не встречалось выше 5) 2. У нескольких препаратов могут быть общие действующие вещества с одинаковыми или разными их содержанием в препарате. 3. Причём у каждого действующего вещества своё определённое содержание в препарате. 4. Список действующих веществ свыше 300 (неограниченное количество). Есть ещё вариант сделать в этом отношении в качестве первичного ключа номер действующего вещества (ДВ): 1 – ДВ 1 – Препарат 1 – С 1 2 – ДВ 1 – Препарат 2 – С 2 3 – ДВ 2 – Препарат 3 – С 3 4 – ДВ 3 – Препарат 2 – С 4 Как мне решить этот вопрос, чтобы было легче управлять этим БД? Заранее спасибо :) |
koalder, в данное время я нахожусь в отпуске, плюс юбилеи у меня и жены, плюс НГ, плюс еще один ДР, плюс переезд на новую квартиру, плюс ремонт в квартире - пока, к сожалению, нет времени подумать и предложить идею :)
Но, в любом случае, у тебя должны быть справочники на ВСЕ, что повторяется, т.е. ИД, Наименование. как минимум полей. А вот дозы (250 г/кг, 15 г/кг, 35 г/кг, 57 г/кг, 150 г/кг) можно сделать просто вводом, справочник для этого не нужен. Желателен только справочник объемов, т.е. г/кг, мг/кг и т.д., дабы избежать ошибок при вводе. |
Delirium, спасибо, что всё-таки уделил время. Несколько поздновато, но я уже сделал по второму моему способу и, вроде, всё нормально с базой почти, разве что появились 2 вершины в структуре. Далее вроде всё должно работать.
А, да, поздравляю со всем этим, там, теми самыми событиями. Надо же, бывает так, чтобы всё сразу! |
koalder, главное, что проблема решена :)
А за поздравления спасибо :) Вот провел интернет на новую квартиру, лежу на диване с буком и читаю форум, пока жена и дети спят :) |
Время: 18:22. |
Время: 18:22.
© OSzone.net 2001-