Правильная организация структуры

mosalova
Дата: 21.01.2013 12:17:39
Ситуация такая.
Есть куча программ и еще большая куча таблиц на фокспро 2.6. В необозримом будущем планируется перевести это все на фокс 9.
Передо мной же пока стоит маленькая задача - имея таблицу из фокса 2.6, делать различные выборки и отчеты.

таблица фокса 2.6 - post_r содержит информацию: табельный номер, фио, отдел, пол, признак увольнения, дата увольнения, год рождения - т.е. весь численный состав предприятия: и работающие, и уволенные. все поля в этой таблице символьные.

я создала в фоксе 9 пустую таблицу kadri, в которой привела тип полей к удобному: даты к date, простые числа к integer и т.д.
Далее я переношу данные из post_r в kadri, попутно приводя их в соответствующие форматы и работаю уже с таблицей kadri.

Но поскольку post_r может меняться, я ставлю проверку по дате и времени последней модификации.
И если post_r была изменена Как будет правильно:
1. сравнивать каждую запись post_r и kadri и вносить соответствующие изменения для kadri
или
2. по новой создавать таблицу kadri и скопировать в нее данные из post_r.
tanglir
Дата: 21.01.2013 12:24:37
mosalova,

минус 1-го варианта: сравнивать придётся вручную, ибо любая непредвиденная ситуация - и ага...
минус 2-го варианта: кроме проблем с внешними ключами, вроде бы никаких

Поскольку, по информации моего ХШ, внешних ключей у вас нет и в ближайшем будущем не планируется, то вариант 2 будет... нет,не правильней, а всего лишь удобней.

PS. А удаления из таблицы есть? Команда PACK к ней применяется? Команда INSERT (не append)?
Dima T
Дата: 21.01.2013 12:41:39
Оба варианта правильные со своими плюсами и минусами.
1. Плюс в том что можно обновлять в процессе работы. Для ускорения контроля изменений советую считать контрольную сумму записи исходной таблицы SYS(2017) и сравнивать с сохраненным в копии, соответственно в копии хранить контрольную сумму для сравнения. Минус в сложности кода сравнения. Хотя не так уж и сложно.
2. Плюс в простоте кода загрузки. Минус - работать нельзя пока перенос идет.
mosalova
Дата: 21.01.2013 13:24:53
tanglir,

Таблица post_r ведется в фоксе 2.6. записи из таблицы post_r не удаляются.
Может меняться:
1. табельный номер - tabnom
2. номер отдела - otdel
3. фамилия - fio
4. если человек уволился в поле "признак увольнения" (pr_uvol) вместо 0 ставится 1 и заполняется поле "дата увольнения" (data_uvol)
При поступлении нового человека добавляется новая запись.

Из таблицы post_r в kadri информация передается так:
1. каждую запись в post_r просматриваю и:
даты: год рождения и дата увольнения привожу к формату Date ДД.ММ.ГГГГ записываю в локальные переменные rozd и uvol соответственно
признак увольнения: из строкового привожу к integer записываю в локальную переменную pruvol
2. запись строки командой
INSERT INTO kadri (tabnom,fio,otdel,pol,data_uvol,pr_uvol,god_rozd) ;
		 VALUES (post_r.tabnom,post_r.fio,post_r.otdel,post_r.pol,uvol,pruvol,rozd)

3. после того как все записи приведены к нужному формату и записаны в таблицу kadri: закрываю все таблицы и открываю kadri только для чтения.

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

Хочется организовать все правильно, с учетом того, что когда-нибудь ВСЕ будет переведено в фокс 9.
А то странно получается: для разработки пользуюсь современными средствами, а подстраиваюсь под древние (я бы сказала корявые) разработки.
tanglir
Дата: 21.01.2013 13:39:15
mosalova, если всё добавляется только в конец таблицы и удаления не проводятся, то можно и по первому варианту работать.
Dima T
контрольную сумму записи исходной таблицы SYS(2017)
+1
Dima T
Минус в сложности кода сравнения. Хотя не так уж и сложно.
В вышеописанном случае связь можно делать тупо по recno().
mosalova
с учетом того, что когда-нибудь ВСЕ будет переведено в фокс 9
Тогда сразу закладываться надо на клиент-сервер, а это вариант 1... без вариантов :)

ЗЫ.
mosalova
2. запись строки командой
Нет, я имел в виду - в старой системе как записи добавляются?
Dima T
Дата: 21.01.2013 13:43:27
mosalova
Может меняться:
1. табельный номер - tabnom
2. номер отдела - otdel
3. фамилия - fio
4. если человек уволился в поле "признак увольнения" (pr_uvol) вместо 0 ставится 1 и заполняется поле "дата увольнения" (data_uvol)

Ключевое поле какое-нибудь у таблицы есть?
sg12
Дата: 21.01.2013 13:53:02
mosalova

А как вы собираетесь в будущем заполнять поля вроде "отдел". Список лиц обычно бывает связан со справочниками через ключевые поля.
И почему не разовый перенос, а необходимость параллельной работы.
mosalova
Дата: 21.01.2013 14:08:35
tanglir,

tanglir
Нет, я имел в виду - в старой системе как записи добавляются?


Это мне не ведомо. мне принесли таблицу post_r и приказали с ней работать. Менять что-либо в ней я не могу.

По замыслу тех, кто когда-то разработал это в старой системе: если человек уволен, то всего лишь признак увольнения = 1, если перешел в другой отдел, то меняются табельный и отдел, т.е. на каждого работника одна запись.

А в реальности встречаются работники, который одновременно и уволен и работает. Какая из двух записей верная, я не знаю, так что этот работник попадает у меня и в списки уволенных, и в списки работающих
mosalova
Дата: 21.01.2013 14:18:35
По хорошему, надо создать совершенно новую БД с новой структурой, связями и т.д. - новые технологии, новые возможности.
Но мое начальство сказало что там ОЧЕНЬ большой объем, переходить будем постепенно, вырвали из контекста одну таблицу, дали ее мне и сказали: "твори", вот и приходится подстраиваться
sg12
Дата: 21.01.2013 14:29:06
mosalova
По хорошему, надо создать совершенно новую БД с новой структурой, связями и т.д. - новые технологии, новые возможности.
Но мое начальство сказало что там ОЧЕНЬ большой объем, переходить будем постепенно, вырвали из контекста одну таблицу, дали ее мне и сказали: "твори", вот и приходится подстраиваться


Каково назначение вашей "кучи программ", как много их?