Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Прочие БД - [решено] Как привести эту таблицу к 3-й нормальной форме?

Ответить
Настройки темы
Прочие БД - [решено] Как привести эту таблицу к 3-й нормальной форме?

Аватара для koalder

Новый участник


Сообщения: 19
Благодарности: 0

Профиль | Отправить PM | Цитировать


Изменения
Автор: koalder
Дата: 22-11-2011
Описание: дополнение
Изображения
Тип файла: jpg Безымянный.jpg
(16.4 Kb, 6 просмотров)
Я, учусь создавать БД на MAccess2007 и для начала я взял список пестицидов, разрешёных применению в 2011 году. Вот я застрял на отрывке связи препарат-норма расхода-обрабатываемый объект-назначение. Пример таблицы в прикреплёном файле. По ходу тут отношение многие-ко-многим, но я не хочу чтобы так было. Если уж тут никак, то как тут лучше привести к 3-й нормальной форме? Думаю, проффесионалы сайта по БД помогут ... ПОМОГИТЕ!!!

Приведено к 1-й нормальной форме
препарат1 норма расхода а растение 1 вредитель 1
препарат1 норма расхода б растение 1 вредитель 2
препарат1 норма расхода в растение 2 вредитель 3
препарат1 норма расхода г растение 3 вредитель 3
препарат2 норма расхода д растение 4 вредитель 4

-------
Они проникли в меня. Цефы проникли в меня.


Отправлено: 10:44, 22-11-2011

 

Аватара для Delirium

Ветеран


Сообщения: 5624
Благодарности: 936

Профиль | Отправить PM | Цитировать


Цитата koalder:
По ходу тут отношение многие-ко-многим »
Совершенно верно, по другому никак.
Цитата koalder:
но я не хочу чтобы так было »
А почему? Что мешает в таблицах иметь идентификаторы на другие таблицы?

-------

Пройденные курсы:
[Microsoft №10174 Sharepoint], [SharePoint]
Мои проекты:[CheckAdmins], [NetSend7], [System Uptime], [Remote RAdmin LogViewer],[Netdom GDI], [Holidays - напоминалка о днях рождения]

А я офис-гуру :)

Это сообщение посчитали полезным следующие участники:

Отправлено: 13:12, 22-11-2011 | #2



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

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для koalder

Новый участник


Сообщения: 19
Благодарности: 0

Профиль | Отправить PM | Цитировать


А как же всё-таки здесь таблицу привести к 3-й форме, чтобы в дальнейшем можно было легко им пользоваться?

-------
Они проникли в меня. Цефы проникли в меня.


Отправлено: 13:51, 22-11-2011 | #3


Аватара для koalder

Новый участник


Сообщения: 19
Благодарности: 0

Профиль | Отправить PM | Цитировать


Идентификаторы в различных таблицах это же здесь около 3-х таблиц! Или у меня плохое представление об идентификаторах

-------
Они проникли в меня. Цефы проникли в меня.


Отправлено: 14:39, 22-11-2011 | #4


Аватара для Delirium

Ветеран


Сообщения: 5624
Благодарности: 936

Профиль | Отправить PM | Цитировать


Цитата koalder:
препарат1 норма расхода а растение 1 вредитель 1
препарат1 норма расхода б растение 1 вредитель 2
препарат1 норма расхода в растение 2 вредитель 3 »
Тогда мы теряем вариант, например
Код: Выделить весь код
препарат1 норма расхода б растение 1 вредитель 3
Если бы была жесткая зависимость расхода от препарата, то это одно дело. Но мы же можем взять расход Б, и разные препараты на разных вредителей.

Давай начнем с другого - чего ты хочешь добиться? Не стремись делать все по книжке, не надо педантично выстраивать схемы по 1-2-3 формам нормализации, Кодда-Бойса и т.п. Главное поставить конкретную цель и оттуда уже плясать.
Нормализация (Википелия)

-------

Пройденные курсы:
[Microsoft №10174 Sharepoint], [SharePoint]
Мои проекты:[CheckAdmins], [NetSend7], [System Uptime], [Remote RAdmin LogViewer],[Netdom GDI], [Holidays - напоминалка о днях рождения]

А я офис-гуру :)

Это сообщение посчитали полезным следующие участники:

Отправлено: 16:50, 22-11-2011 | #5


Аватара для koalder

Новый участник


Сообщения: 19
Благодарности: 0

Профиль | Отправить PM | Цитировать


Норма расхода зависит от уничтожаемого вредителя на конкретном растении и препарата, т.е. жёсткая зависимость и никак иначе.
Поэтому в таком случае следует в отдельных таблицах пронумеровать все растения, вредители (препараты уже пронумерованы). Но как связать с нормой расхода и препаратом связь растение-вредитель. Или ещё сделать ещё одну таблицу "растение-вредитель-норма расхода" и каждой такой строчке приделать ключ? Комп после этого у меня будет завистать? )

-------
Они проникли в меня. Цефы проникли в меня.


Отправлено: 19:56, 22-11-2011 | #6


Аватара для Delirium

Ветеран


Сообщения: 5624
Благодарности: 936

Профиль | Отправить PM | Цитировать


Цитата koalder:
Норма расхода зависит от уничтожаемого вредителя на конкретном растении и препарата, т.е. жёсткая зависимость и никак иначе. »
Я имею в виду, что норма расхода может быть одинаковой в разных случаях. Т.е., например, 100 гр(расход) может использоваться препаратом 1 на растение 2 вредителя 3, а также и на препарат 6 растение 3 вредителя 2. Если делать жесткую зависимость, то будут дублированные данные. Хотя с другой стороны, если делать как я говорю, то, сменив норму расхода 100 гр, мы сменим ее у всех, а это неверно.
Да, я соглашусь, здесь связь должна быть жесткой, в ущерб дублированием данных.

Мне кажется, можно сделать как то так:
Таблица "Препараты" - в ней поле - норма расхода(текстовое, например, или число) и еще одно поле - ИД Растения. Будут примерно такие строки:
Код: Выделить весь код
Мышьяк - 100 гр - 1
Мышьяк - 200 гр - 2
Мышьяк - 200 гр - 3
Химикат2 - 100 гр - 2
Вторая таблица - Растения
ИД растения - Растение - ИД вредителя
Код: Выделить весь код
2 - Картофель - 1
3 - Свекла - 2
Ну и третья таблица - собственно сами вредители.
Код: Выделить весь код
1 Жук
2 Муха
Такой связкой мы можем однозначно выбрать, к примеру, что 200 граммами мышьяка лечится свекла от вредителя мухи.

-------

Пройденные курсы:
[Microsoft №10174 Sharepoint], [SharePoint]
Мои проекты:[CheckAdmins], [NetSend7], [System Uptime], [Remote RAdmin LogViewer],[Netdom GDI], [Holidays - напоминалка о днях рождения]

А я офис-гуру :)

Это сообщение посчитали полезным следующие участники:

Отправлено: 01:04, 23-11-2011 | #7


Аватара для koalder

Новый участник


Сообщения: 19
Благодарности: 0

Профиль | Отправить PM | Цитировать


Действительно "добродушный помощник". Очень рад за такую помощь. Ещё чуть-чуть и Delirium переквалифицируется в агронома по защиет растений. :-).

Тут я всё понял! Препараты-Норма расхода не может повторяться. Как же я не додумался сделать так, будто Препарат-Норма расхода - это индивидуальное средство для решения проблемы Растение-Вредитель. Это значит появится ИД для каждого Препарат-Норма расхода-Растение-Вредитель как минимум (там есть и другие поля один-к-многим, но более понятные). Это так?

-------
Они проникли в меня. Цефы проникли в меня.


Отправлено: 09:19, 23-11-2011 | #8


Аватара для Delirium

Ветеран


Сообщения: 5624
Благодарности: 936

Профиль | Отправить PM | Цитировать


Цитата koalder:
появится ИД для каждого Препарат-Норма расхода-Растение-Вредитель как минимум »
Нет, не появится. Не надо создавать отдельную таблицу со связками. У нас уже есть(если следовать моему примеру) 3 таблицы с индексами и ИД, и простейшим SQL запросом нужные нам данные выберутся моментально.

Код: Выделить весь код
select препарат, норма расхода, растение, вредитель 
from препараты, растения, вредители 
where Препарат.ИД_Растения = Растения.ИД and 
растения.ИД_вредителя = Вредители.ИД and 
препарат.Наименование ='Мышьяк'
Выведет всё по мышьяку. Если добавить в конце AND Препарат.НормаРасхода='200', то покажет только данные по Картошке и свекле. Ну и так далее

-------

Пройденные курсы:
[Microsoft №10174 Sharepoint], [SharePoint]
Мои проекты:[CheckAdmins], [NetSend7], [System Uptime], [Remote RAdmin LogViewer],[Netdom GDI], [Holidays - напоминалка о днях рождения]

А я офис-гуру :)


Последний раз редактировалось Delirium, 25-11-2011 в 01:26.

Это сообщение посчитали полезным следующие участники:

Отправлено: 01:14, 25-11-2011 | #9


Аватара для Delirium

Ветеран


Сообщения: 5624
Благодарности: 936

Профиль | Отправить PM | Цитировать


koalder, я все таки отвечу на твое удаленное сообщение Все данные можно будет получить, лишь немного видоизменив приведенный мною запрос. А если все это делается в Access, то связи между таблицами и условия выборки можно будет задавать визуально и мышкой, а затем просмотреть код в режиме SQL.

-------

Пройденные курсы:
[Microsoft №10174 Sharepoint], [SharePoint]
Мои проекты:[CheckAdmins], [NetSend7], [System Uptime], [Remote RAdmin LogViewer],[Netdom GDI], [Holidays - напоминалка о днях рождения]

А я офис-гуру :)

Это сообщение посчитали полезным следующие участники:

Отправлено: 02:53, 26-11-2011 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Прочие БД - [решено] Как привести эту таблицу к 3-й нормальной форме?

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Flash - [решено] Как привести флешку в чувства Artur220688 Накопители (SSD, HDD, USB Flash) 14 05-11-2011 01:46
Разное - ADATA Superior SH93 - как привести в чувство? che74 Накопители (SSD, HDD, USB Flash) 9 23-08-2011 00:55
Delphi - Помогите написать программулинку.Создать форме таблицу следующего вида: ALaN_1 Программирование и базы данных 1 07-06-2010 05:46
DC++ хабов нет на Акадо. Как быть в этой ситуации откуда кач на нормальной скорости ? Rock Хочу все знать 5 20-04-2008 12:52




 
Переход