Russian Qt Forum

Qt => Базы данных => Тема начата: LEO от Апрель 03, 2013, 09:05



Название: Сохранение и отображение данных
Отправлено: LEO от Апрель 03, 2013, 09:05
Господа, столкнулся с очень очень неприятной для себя проблемой и зашел в тупик в поиске решений, в двух словах о самой программе,человек вводит определенные данные они сохраняются в БД(SQLite) чтобы в последующем была возможность к ним обращаться при надобности, некоторые данные берутся из справочников, в данном случае их 2, данные из справочника вывожу в комбобокс, система работает следующим образом: при выборе определенного параметра в комбобоксе соответствующие данные подтягиваются в соответствующие поля лайнедита. Отображение идет с помощью датавиджетмэппера. Проблема в следующем,данные сохраняются в виде индексов что по идее верно, и при замене значения в справочнике, например фамилии оно поменяется во всей таблице где хранятся все общие сведения, чего бы не хотелось, как бы сделать так чтобы при замене данных в справочнике данные в общей таблице где хранятся все введенные данные не изменялись, для наглядности прикладываю то что удалось сделать на теперешний момент, запутался окончательно... :-\


Название: Re: Сохранение и отображение данных
Отправлено: Bepec от Апрель 03, 2013, 09:21
Не смотрел проект, но это уже вторая тема про dataWidgetMapper. Наиболее простой вариант - используйте самописный обработчик и сохраняйте не индекс, а фамилию или что-там у вас :)

PS это проблема архитектуры если честно. В справочнике должна храниться статическая информация. Если же в какой то момент времени информация из справочника может измениться, значит следует либо создавать снапшоты справочника и привязывать значения таблицы ко времени, или же отказаться от справочника.

this моё мнение :)


Название: Re: Сохранение и отображение данных
Отправлено: GreatSnake от Апрель 03, 2013, 10:02
Если все связи делать через ROWID (http://www.sqlite.org/autoinc.html), то никаких проблем не должно быть.


Название: Re: Сохранение и отображение данных
Отправлено: LEO от Апрель 03, 2013, 13:37
в общем решил пойти простым путем и записывать текстовые данные в основную таблицу,а не индексы, однако как сделать это через комбобокс не очень понял и решил сделать с помощью лайнедит+комплитер, но не могу понять почему сохраняются только данные которые я ввожу в комплитер, а данные которые подтягиваются и отображаются в других лайнедитах и привязаны в datawidgetmapper не сохраняются в базе...  :(
Цитировать
Если все связи делать через ROWID (http://www.sqlite.org/autoinc.html), то никаких проблем не должно быть.
если завязать все на айдишнике, то изменив запись 123|директор|иванов| на 123|слесарь|иванов| должности везде поменяются, или я не так понял...


Название: Re: Сохранение и отображение данных
Отправлено: GreatSnake от Апрель 03, 2013, 17:14
если завязать все на айдишнике, то изменив запись 123|директор|иванов| на 123|слесарь|иванов| должности везде поменяются, или я не так понял...
запись должна быть типа
123|id_для_директор|иванов| на 123|id_для_слесарь|иванов|
id_для_директор и id_для_слесарь держать в отдельной таблице position


Название: Re: Сохранение и отображение данных
Отправлено: Bepec от Апрель 03, 2013, 18:22
GreatSnake - тут дело не в связях, а в том, что если таблица с идентификаторами изменится, то значения верные для более ранних записей будут неверными.

Аналогия - подключенные устройства в текущий момент:
101 - USB DVD
202 - USB HDD

Делаем запись в таблицу другую:
1 | 101 | METKA_DVD
2 | 202 | METKA_HDD

Вроде всё верно, но...

Меняем подключенное устройство с DVD на 3D принтер и получаем.
Таблица 1:
101 - 3D принтер
202 - USB HDD

Таблица 2:
1 | 101 | METKA_DVD
2 | 202 | METKA_HDD
3 | 101 | MODEL_PRINTER

В итоге первая запись ложная :) Ибо данные могут изменяться в первой таблице.


Название: Re: Сохранение и отображение данных
Отправлено: panAlexey от Апрель 03, 2013, 21:03
Да уж. Я уже сам запутался.
То ли у вас проблема с формализацией объекта (выделение постоянных свойств объекта в отдельную таблицу), то ли проблема логирования и отображения смены постоянных (идентификационных) свойств объекта. И с той и с другой проблемой сталкивался, но которая у вас с первой читки не понял (((
На всякий вам бы курс пройти по моделированию баз данных.


Название: Re: Сохранение и отображение данных
Отправлено: panAlexey от Апрель 03, 2013, 21:08
как бы сделать так чтобы при замене данных в справочнике данные в общей таблице где хранятся все введенные данные не изменялись, для наглядности прикладываю то что удалось сделать на теперешний момент, запутался окончательно...
Была такая проблема.
Предметная область - ремонт. Телефон в ремонте идентифициируется по имею. НО при замене платы меняется и имей. Вышел из положения введя понятие партии ремента с кодом, где имеи пишутся рядышком. Т.е. заменил строку на элемент из таблицы в которой есть история.


Название: Re: Сохранение и отображение данных
Отправлено: LEO от Апрель 03, 2013, 21:22
Вот Верес все пояснил на примере впринципе так как и я понимаю, впринципе так и есть так работает система связи и на мой взгляд, дело в том что там не такая уж и сложная база, там всего навсего 3 таблицы одна в которой все данные хранятся, остальные 2 справочники с которых берется инфа для заполнения большой таблицы где хранятся все данные, таким образом осуществляется хранение информации, в БД не асс не спорю , дело в другом, темы похожей не нашел, возможно где то и есть такая.
Приложил компиляберный вариант того что есть на сегодняшний день,буду думать завтра дальше... :(


Название: Re: Сохранение и отображение данных
Отправлено: Bepec от Апрель 03, 2013, 22:43
Я б предложил - повторюсь, не тормозить и сделать одной таблицей. Ибо меняющиеся данные в качестве справочных ох как не подходят :D


Название: Re: Сохранение и отображение данных
Отправлено: LEO от Апрель 04, 2013, 07:56
 :( :( :(Это не вариант, нужны справочники, они необходимы, сохранять в тексте надо просто научится в основную таблицу и отображать все как надо, с этим проблемы сейчас  :( :(  :(


Название: Re: Сохранение и отображение данных
Отправлено: GreatSnake от Апрель 04, 2013, 08:06
GreatSnake - тут дело не в связях, а в том, что если таблица с идентификаторами изменится, то значения верные для более ранних записей будут неверными.
С чего это вдруг ???
Разговор идёт про отдельный справочник. В данном примере про USB устройства.
При его изменении уникальный ID не должен меняться. Разве что может быть удалена вся запись.

Цитировать
Аналогия - подключенные устройства в текущий момент:
101 - USB DVD
202 - USB HDD

Делаем запись в таблицу другую:
1 | 101 | METKA_DVD
2 | 202 | METKA_HDD

Вроде всё верно, но...

Меняем подключенное устройство с DVD на 3D принтер и получаем.
Таблица 1:
101 - 3D принтер
202 - USB HDD

Таблица 2:
1 | 101 | METKA_DVD
2 | 202 | METKA_HDD
3 | 101 | MODEL_PRINTER

В итоге первая запись ложная :) Ибо данные могут изменяться в первой таблице.
Полная чушь ибо совершенно дикая организация данных.


Название: Re: Сохранение и отображение данных
Отправлено: Bepec от Апрель 04, 2013, 08:14
Да я о чем и толкую. У него справочник не статичный. Он вообще по теории справочником являться не может :D


Название: Re: Сохранение и отображение данных
Отправлено: LEO от Апрель 04, 2013, 08:58
 >:( в данной ситуации нужна именно дикая организация данных