Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.09.2010, 21:28   #1
Yurk@
Участник клуба
 
Аватар для Yurk@
 
Регистрация: 19.12.2007
Сообщений: 1,100
Вопрос выбор результатов

доброго время суток.
народ, подкиньте идею по решению такого вопроса (что-то никак не могу заставить мозг работать как надо ) :
имеется таблица opers с полями ID, oper_id, oper_result и т.д. (таблица всех проделанных работ)
имеется таблица dic_oper_type с полями id, oper_type_id, oper_name и т.д. (таблица типов работ)
поля opers.oper_id и dic_oper_type.oper_type_id являются связанными один ко многим.
так вот мне нужно (возможно создать еще одну таблицу) которая бы имела связь с таблицей dic_oper_type и содержала в себе перечень результатов выполнения работы.
Напр:
1) работа "импорт" - тип работы "загрузка данных в БД" - возможные результаты выполнения "1.Успешно; 2.Ошибка загрузки; 3.Обработано с ошибками"
2) работа "экспорт" - тип работы "выгрузка данных с БД" - возможные результаты выполнения "1.Выгружено; 2.Подтверждено; 3.Обработано; 4.Обработано с ошибками
=========
субд: Firebird 2.1
у кого есть какие-нить идеи по реализации подобной задачи ?
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ...

Последний раз редактировалось Yurk@; 17.09.2010 в 21:59.
Yurk@ вне форума Ответить с цитированием
Старый 17.09.2010, 22:09   #2
Dimasw
Пользователь
 
Регистрация: 12.09.2010
Сообщений: 69
По умолчанию

А зачем нужна связь dic_oper_type и результатами? Почему бы не создать, например dic_oper_result со связкой с полем oper_result таблицы opers.
SELECT BEST FROM LIFE
Dimasw вне форума Ответить с цитированием
Старый 17.09.2010, 22:22   #3
Yurk@
Участник клуба
 
Аватар для Yurk@
 
Регистрация: 19.12.2007
Сообщений: 1,100
По умолчанию

дело в том что для разных oper_type возможны одинаковы oper_result.
вот мне и нужно сделать так, чтобы при выборе определённого oper_type выбрать только те oper_result которые подходят для него.
я, конечно, могу набить несколько одинаковых oper_result-ов с ссылками на разные oper_typе, НО это не рационально.
поэтому и ищу альтернативные варианты
====================
UPD
пока единственное более или менее нормальное что пришло в голову это: между таблицами dic_oper_type и dic_oper_result создать промежуточную таблицу вида:
oper_type_id|oper_result_id
1|1
1|2
1|3
2|1
2|2
2|3
и потом доставать все результаты связывая таблицы через эту таблицу
---------------------
у кого будут другие идеи ???
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ...

Последний раз редактировалось Yurk@; 17.09.2010 в 22:35.
Yurk@ вне форума Ответить с цитированием
Старый 17.09.2010, 22:44   #4
Dimasw
Пользователь
 
Регистрация: 12.09.2010
Сообщений: 69
По умолчанию

Не надо промежуточной таблицы. Пусть будет одна таблица dic_oper_result с полями ID, Oper_type, Oper_result
1|1|1
2|1|2
3|1|3
4|2|1
5|2|2
6|2|3
И свяжите ее поле ID с полем oper_result таблицы opers.
В этом случае если в таблице opers поле oper_resurs=3 значит была операция 1 с результатом 3,
А если oper_resurs=6 значит была операция 2 с результатом 3.

Результаты одинаковы а операции разные.

А вот дальше можно уже связывать dic_Oper_resurs.oper_type --> dic_oper_type.oper_type_id
SELECT BEST FROM LIFE

Последний раз редактировалось Dimasw; 17.09.2010 в 22:50.
Dimasw вне форума Ответить с цитированием
Старый 17.09.2010, 22:55   #5
Yurk@
Участник клуба
 
Аватар для Yurk@
 
Регистрация: 19.12.2007
Сообщений: 1,100
По умолчанию

Dimasw, в итоге у тебя получится та же картина что и у меня! т.к. третье поле (коды результатов) придется все-равно расшифровывать
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ...
Yurk@ вне форума Ответить с цитированием
Старый 17.09.2010, 23:11   #6
Dimasw
Пользователь
 
Регистрация: 12.09.2010
Сообщений: 69
По умолчанию

Если я правильно понимаю, то расшифровку можно включить в oper_result
1|1|1|Успешно
2|1|2|Ошибка загрузки
3|1|3|Обработано с ошибками
4|2|1|Выгружено
5|2|2|Подтверждено
6|2|3|Обработано
7|2|4|Обработано с ошибками

Если же виды результатов у всех типов операций одинаковы, т.е. таблица выглядит так:
1|1|1|Успешно
2|1|2|Ошибка загрузки
3|1|3|Обработано с ошибками
4|2|1|Успешно
5|2|2|Ошибка загрузки
6|2|3|Обработано с ошибками
то нужна еще одна таблица dic_result_name с полями
1|Успешно
2|Ошибка загрузки
3|Обработано с ошибками

Но если типов операций и их результатов немного, и они не будут изменяться, то я бы одну таблицу оставил.

А в общем получилась та же промежуточная таблица. Но это самый правильный вариант, на мой взгляд.
SELECT BEST FROM LIFE

Последний раз редактировалось Dimasw; 17.09.2010 в 23:16.
Dimasw вне форума Ответить с цитированием
Старый 17.09.2010, 23:17   #7
Yurk@
Участник клуба
 
Аватар для Yurk@
 
Регистрация: 19.12.2007
Сообщений: 1,100
По умолчанию

да данном этапе видов операций 50 и он расширяется (но не превысит 200-250)
видов результатов на каждую операцию: 2-4 вида
всего уникальных видов результатов около 10-15 ... т.е. повторяться они будут часто
можно оставить и одну таблицу, но мне не очень нравится идея с повторяющимся текстовым значением в таблице, поэтому я больше склонен к идее разделения их на 2 шт.
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ...

Последний раз редактировалось Yurk@; 17.09.2010 в 23:20.
Yurk@ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перебор результатов coirius Помощь студентам 3 12.12.2009 14:04
Анализ результатов Foxtrot_1 Помощь студентам 0 04.10.2009 18:49
Сохранение результатов May86 Microsoft Office Excel 2 24.09.2009 15:10
Вывод результатов! Серый Рыйцарь Помощь студентам 3 21.05.2009 07:46
Сохранение результатов program123 Общие вопросы Delphi 1 13.03.2009 22:10