"Правильная" структура данных и их синхронизация с СУБД
От: mikhail. Украина  
Дата: 19.04.10 16:14
Оценка:
"Правильная" структура данных и их синхронизация с СУБД

Доброго времени суток.

Подскажите кто как организовывает работу с базами данных.

Задача следующая:

— есть в СУБД таблица (справочник) с, к примеру, наименованиями городов
goroda
id | nazvanie

— есть несколько других таблиц, которые ссылаются на справочник (к примеру информация о людях и предприятиях)
ljudi
id | id_in_goroda| fio

predprijatija
id | id_in_goroda| nazvanie


Раньше делал так: в главной форме открывал соединение с СУБД, после чего в каждую формочку для работы с данными подгружал все необходимые таблицы. Так, к примеру, если добавлялась/редактировалась информация о городах — была таблица (datatable), в которую загружалась информация из соответствующей таблицы СУБД, был dataadapter, comandbuilder и т.п. Если велась работа с информацией о предприятиях, то, соответственно было уже 2-е datatable, 2-а dataadapter-а, comandbuilder — для предприятий.
Но столкнулся с тем, что при написании MDI приложения очень часто бывает так, что одновременно открыты окна для работы и с предприятиями и с людьми. В таком случае возникали ситуации, когда УЖЕ открыты данные окна и тут, при внесении, к примеру, информации о новом человеке, оказывается, что он живёт в городе, которого до сих пор нет в справочнике. Добавляю город в справочник, приходится перегружать форму (либо соответствующую таблицу с данными о городах в ней) для работы с информацией о людях, а если, к примеру, необходимо добавить новое предприятие, которое в том же (новом) городе расположено, опять же приходилось перегружать и эту форму тоже.

Из-за этого пришла в голову мысль все данные загружать в таблицы dataset-а основной формы, тут же прописывать события изменения/удаления данных в этих таблицах с вызовом адаптера для внесения данных изменений на СУБД, в главной же форме привязывать к данным таблицам databinding-сы, всё это делать публичным, а из дочерних форм ко всему этому обращаться. Соответственно, когда в справочник о городах вносится новый город, он автоматически появляется везде и ещё, к тому же, является текущей записью в данном databinding-се. Казалось бы — то что нужно. Однако позже столкнулся с ситуацией: в MDI приложении открыты две формы, одна для редактирования информации о людях, вторая — о предприятиях. Активное окно, к примеру, для работы с людьми. Вношу информацию, выбираю город. При этом в главной форме автоматически вызывается событие для обновления в СУБД изменённой/добавленной строки. В датабиндингсе основной формы, с информацией о городах, текущей записью становится выбраный город и он же, автоматически подменяет собою и тот, который был до этого на формочке с информацией о предприятиях. Сразу же, автоматом информация о предприятиях обновляется и на СУБД. В общем — тоже хорошего мало

Подскажите кто каким образом организовывает работу с данными в подобных случаях, что б и не гонять информацию из базы в программу постоянно и, в то же время, избегать потерь/подмены информации.

Заранее спасибо
Re: "Правильная" структура данных и их синхронизация с СУБД
От: Аноним  
Дата: 22.04.10 08:21
Оценка:
Здравствуйте, mikhail., Вы писали:

M>"Правильная" структура данных и их синхронизация с СУБД


M>Доброго времени суток.


M>Подскажите кто как организовывает работу с базами данных.


M>Задача следующая:


M>- есть в СУБД таблица (справочник) с, к примеру, наименованиями городов

M>
M>goroda
M>id | nazvanie
M>

M>- есть несколько других таблиц, которые ссылаются на справочник (к примеру информация о людях и предприятиях)
M>
M>ljudi
M>id | id_in_goroda| fio
M>

M>
M>predprijatija
M>id | id_in_goroda| nazvanie
M>


M>Раньше делал так: в главной форме открывал соединение с СУБД, после чего в каждую формочку для работы с данными подгружал все необходимые таблицы. Так, к примеру, если добавлялась/редактировалась информация о городах — была таблица (datatable), в которую загружалась информация из соответствующей таблицы СУБД, был dataadapter, comandbuilder и т.п. Если велась работа с информацией о предприятиях, то, соответственно было уже 2-е datatable, 2-а dataadapter-а, comandbuilder — для предприятий.

M>Но столкнулся с тем, что при написании MDI приложения очень часто бывает так, что одновременно открыты окна для работы и с предприятиями и с людьми. В таком случае возникали ситуации, когда УЖЕ открыты данные окна и тут, при внесении, к примеру, информации о новом человеке, оказывается, что он живёт в городе, которого до сих пор нет в справочнике. Добавляю город в справочник, приходится перегружать форму (либо соответствующую таблицу с данными о городах в ней) для работы с информацией о людях, а если, к примеру, необходимо добавить новое предприятие, которое в том же (новом) городе расположено, опять же приходилось перегружать и эту форму тоже.

M>Из-за этого пришла в голову мысль все данные загружать в таблицы dataset-а основной формы, тут же прописывать события изменения/удаления данных в этих таблицах с вызовом адаптера для внесения данных изменений на СУБД, в главной же форме привязывать к данным таблицам databinding-сы, всё это делать публичным, а из дочерних форм ко всему этому обращаться. Соответственно, когда в справочник о городах вносится новый город, он автоматически появляется везде и ещё, к тому же, является текущей записью в данном databinding-се. Казалось бы — то что нужно. Однако позже столкнулся с ситуацией: в MDI приложении открыты две формы, одна для редактирования информации о людях, вторая — о предприятиях. Активное окно, к примеру, для работы с людьми. Вношу информацию, выбираю город. При этом в главной форме автоматически вызывается событие для обновления в СУБД изменённой/добавленной строки. В датабиндингсе основной формы, с информацией о городах, текущей записью становится выбраный город и он же, автоматически подменяет собою и тот, который был до этого на формочке с информацией о предприятиях. Сразу же, автоматом информация о предприятиях обновляется и на СУБД. В общем — тоже хорошего мало


M>Подскажите кто каким образом организовывает работу с данными в подобных случаях, что б и не гонять информацию из базы в программу постоянно и, в то же время, избегать потерь/подмены информации.


M>Заранее спасибо


Не совсем понял, можно по проще
ищу удал работу NETCoderLevel1 (prof3000@gmail.com)
Re: "Правильная" структура данных и их синхронизация с СУБД
От: MozgC США http://nightcoder.livejournal.com
Дата: 22.04.10 08:41
Оценка:
Здравствуйте, mikhail., Вы писали:

M>Активное окно, к примеру, для работы с людьми. Вношу информацию, выбираю город. При этом в главной форме автоматически вызывается событие для обновления в СУБД изменённой/добавленной строки.

Думаю что лучше сохранение сделать по нажатию кнопки Save, а не автоматом.

M>В датабиндингсе основной формы, с информацией о городах, текущей записью становится выбраный город и он же, автоматически подменяет собою и тот, который был до этого на формочке с информацией о предприятиях.

Такого быть не должно. Видимо вы неправильно настроили байндинг.

M>Подскажите кто каким образом организовывает работу с данными в подобных случаях, что б и не гонять информацию из базы в программу постоянно и, в то же время, избегать потерь/подмены информации.

Обычно все страны или например города России уже есть в БД. В интернете можно найти такие справочники стран/городов. Это позволяет как раз избавиться от необходимости ручного добавления новых стран/городов, а так же позволяет избежать ошибок. Иначе через пару лет работы вашего приложения вы обнаружите в таблице города Тольятти, Тольяти и Togliatty =)
Re[2]: "Правильная" структура данных и их синхронизация с СУ
От: mikhail. Украина  
Дата: 24.04.10 15:58
Оценка:
Здравствуйте, MozgC, Вы писали:

MC>Здравствуйте, mikhail., Вы писали:


M>>Активное окно, к примеру, для работы с людьми. Вношу информацию, выбираю город. При этом в главной форме автоматически вызывается событие для обновления в СУБД изменённой/добавленной строки.

MC>Думаю что лучше сохранение сделать по нажатию кнопки Save, а не автоматом.

В данном случае это не важно Наберу полностью новый элемент, нажму Save или автоматом сохраниться — в принципе-то без разницы.

M>>В датабиндингсе основной формы, с информацией о городах, текущей записью становится выбраный город и он же, автоматически подменяет собою и тот, который был до этого на формочке с информацией о предприятиях.

MC>Такого быть не должно. Видимо вы неправильно настроили байндинг.

Буду перепроверять, искать раз не должно

M>>Подскажите кто каким образом организовывает работу с данными в подобных случаях, что б и не гонять информацию из базы в программу постоянно и, в то же время, избегать потерь/подмены информации.

MC>Обычно все страны или например города России уже есть в БД. В интернете можно найти такие справочники стран/городов. Это позволяет как раз избавиться от необходимости ручного добавления новых стран/городов, а так же позволяет избежать ошибок. Иначе через пару лет работы вашего приложения вы обнаружите в таблице города Тольятти, Тольяти и Togliatty =)

Ну дело-то не только в справочнике городов, города — это так, для примера. У меня справочников в проекте — десятка четыре. Как вариант — есть справочники фамилий, имён, отчеств. Найдены довольно обширные существующие, но нет-нет да и проскользнёт у кого-то в паспорте уникальное, ещё не внесённое имя либо отчество... Да и ещё варианты бывают с новыми наименованиями...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.