"Правильная" структура данных и их синхронизация с СУБД
Доброго времени суток.
Подскажите кто как организовывает работу с базами данных.
Задача следующая:
— есть в СУБД таблица (справочник) с, к примеру, наименованиями городов
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 приложении открыты две формы, одна для редактирования информации о людях, вторая — о предприятиях. Активное окно, к примеру, для работы с людьми. Вношу информацию, выбираю город. При этом в главной форме автоматически вызывается событие для обновления в СУБД изменённой/добавленной строки. В датабиндингсе основной формы, с информацией о городах, текущей записью становится выбраный город и он же, автоматически подменяет собою и тот, который был до этого на формочке с информацией о предприятиях. Сразу же, автоматом информация о предприятиях обновляется и на СУБД. В общем — тоже хорошего мало
Подскажите кто каким образом организовывает работу с данными в подобных случаях, что б и не гонять информацию из базы в программу постоянно и, в то же время, избегать потерь/подмены информации.
Заранее спасибо