Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MS Access > как создать архив


Автор: Tanyaata 28.3.2009, 09:48
У меня имеется база данных школ. каждой школе присвоен свой уникальный номер из 6 цифр.
В таблице, где хранятся данные об этой школе, уникальный номер является ключевым полем. Если данные по школе изменились, мне надо их записывать в рабочую таблицу, но и старые данные не терять. Причем нужна дата изменения.но он не даст записать школу с одинаковыми уникальными номерами. Как мне сохранять данные и потом быстро выбирать необходимые данные(в зависимости от даты) о школе и подсчитывать, допустим, количество школ в 2008 и количество школ в 2009 году(школа может закрыться или стать филиалом другой школы)

Автор: bopoha 28.3.2009, 14:51
Не стоит никогда опираться только на пользовательскую нумерацию. Я всегда опираюсь на уникальный счетчик.

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

Автор: Akina 28.3.2009, 18:40
Цитата(Tanyaata @  28.3.2009,  10:48 Найти цитируемый пост)
В таблице, где хранятся данные об этой школе, уникальный номер является ключевым полем.

Это - ошибка, которая и породила проблему.

Автор: Tanyaata 28.3.2009, 20:55
Цитата
Akina Дата 28.3.2009, 18:40
Это - ошибка, которая и породила проблему


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

Добавлено через 3 минуты и 46 секунд
Цитата

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


В принципе я так и сделала, но как соединить основную таблицу и дополнительную?

Добавлено через 5 минут и 42 секунды
понимаете, если я воспользуюсь счетчиком, то данные о школе могут добавить те же и получится, что в таблице будет две записи про одну школу с одинаковыми данными

Добавлено через 7 минут и 11 секунд
и что за таблица с историей?

Автор: Akina 28.3.2009, 22:55
Цитата(Tanyaata @  28.3.2009,  21:55 Найти цитируемый пост)
 если я воспользуюсь счетчиком, то данные о школе могут добавить те же и получится, что в таблице будет две записи про одну школу с одинаковыми данными

Нормальненько! а данные вы льёте в таблицу, принципиально их не проверяя?

Автор: bopoha 29.3.2009, 01:07
Основная таблица и дополнительная, назовем их теперь, таблицы школы и данные школ. Связаны по полю счетчики из таблицы школы, в таблице данные школ внешний ключ. Также в таблице данные школ должна быть дата внесения данных, чтобы можно было получить последнюю информацию.

С таблицей историей.
В этом случае таблиц тоже две, первая - актуальные данные, вторая - история. Связь по ключевому полю из первой таблицы (как и в первом варианте). В этом случае получение актуальных данных проще. 

Мне больше нравится второй вариант.

По поводу ключевых полей.
Счетчик гораздо лучше, чем пользовательский номер. В данном случае счетчик никто не видит и поменять не может, а вот пользовательский код пользователь может захотеть поменять и будет прав. Если пользовательский код использовать во внешних ключах, то получается отличный гемморой с заменой значения.

Автор: Tanyaata 2.4.2009, 18:21
А как мне бороться с избыточностью данных? ведь данные могут добавить одинаковые. проверку делать при добавлении?

а при таблице истории: как мне потом найти закрытые школы.в таблице истории они будут, а в актуальных данных уже их нет. как их то связать?

Добавлено через 7 минут и 22 секунды
И скажите еще пожалуйста, как мне защитить базу данных. можно ли просто выложить на сервер, чтобы все пользовались-не будет конфликтов? и как мне любому открывшему сделать доступ только для чтения, без изменения данных в таблицах(только просмотр отчетов, форм и запросов), а 2 людям дать администраторские права. можно ли это сделать без подключения файла рабочей группы? Заранее спасибо за ответы. И спасибо за ответы на предыдущие вопросы

Автор: Akina 2.4.2009, 22:42
Цитата(Tanyaata @  2.4.2009,  19:21 Найти цитируемый пост)
как мне бороться с избыточностью данных? ведь данные могут добавить одинаковые. проверку делать при добавлении?

несомненно

Цитата(Tanyaata @  2.4.2009,  19:21 Найти цитируемый пост)
как мне потом найти закрытые школы.в таблице истории они будут, а в актуальных данных уже их нет

это - один из недостатков многотабличного хранения

Цитата(Tanyaata @  2.4.2009,  19:21 Найти цитируемый пост)
 как мне защитить базу данных

начните с разделения БД

Автор: bopoha 3.4.2009, 12:31
Цитата(Tanyaata @  2.4.2009,  18:21 Найти цитируемый пост)
А как мне бороться с избыточностью данных? ведь данные могут добавить одинаковые. проверку делать при добавлении?


Я думаю лучше дать возможность пользователю самому решать, что он будет делать:
- Исправлять ошибку - редактирование без сохранения истории.
- Вносить новые сведенья - редактирование с предварительным сохранением предыдущих данных в истроию

Цитата(Tanyaata @  2.4.2009,  18:21 Найти цитируемый пост)
как мне потом найти закрытые школы.в таблице истории они будут, а в актуальных данных уже их нет. как их то связать?


В истории хранятся уже не актуальные данные. На то она и история. Связывать по ключевому полю из таблицы с актуальными данными. Закрытые школы могут быть в актуальных данных, т.к. это последнее состояние объекта.

Цитата(Tanyaata @  2.4.2009,  18:21 Найти цитируемый пост)
как мне защитить базу данных

От чего и от кого защищать?

Автор: Tanyaata 4.4.2009, 20:21
защитить, чтобы пользователи не испортили данные в таблице, чтобы совместно могли использовать базу данных?

если же закрытые данные хранить в актуальной таблице, то как мне выбирать данные актуальные только для этого года?

Автор: bopoha 4.4.2009, 22:50
Цитата(Tanyaata @  4.4.2009,  20:21 Найти цитируемый пост)
защитить, чтобы пользователи не испортили данные в таблице, чтобы совместно могли использовать базу данных?

Ни разу не встречал пользователей, желающих испортить свои данные. Просто скройте от них окно базы данных и предоставьте удобное меню и формочку. И будет им счастье.


Цитата(Tanyaata @  4.4.2009,  20:21 Найти цитируемый пост)
если же закрытые данные хранить в актуальной таблице, то как мне выбирать данные актуальные только для этого года? 

Почему информация о том, что школа закрыта не является актуальной? Она же закрыта!
Если у вас будет дата закрытия или какой-либо другой признак, то всегда можно отфильтровать данные. Откуда у вас взялся год? В актуальной таблице самая последняя информация о школе.

Автор: Tanyaata 5.4.2009, 10:42
Цитата

Почему информация о том, что школа закрыта не является актуальной? Она же закрыта!
Если у вас будет дата закрытия или какой-либо другой признак, то всегда можно отфильтровать данные. Откуда у вас взялся год? В актуальной таблице самая последняя информация о школе.


Мне же надо подсчитывать сколько школ на этот год и сколько в них человек

Автор: bopoha 6.4.2009, 12:15
Цитата(Tanyaata @  5.4.2009,  10:42 Найти цитируемый пост)
Мне же надо подсчитывать сколько школ на этот год и сколько в них человек 

Фильтруйте данные по дате закрытия или по любому другому признаку.

Автор: Tanyaata 9.4.2009, 19:06
А может еще подскажите. У меня есть форма_Показать данные по главной таблице данных о школе. Я на нее добавила кнопку "Изменить". при нажатии, открывается форма_Внести_изменения(в свойствах поля - данные-пусто, то есть не зависят от элемента), в нее заносятся данные которые можно менять. в этой форме также есть кнопки - сохранить изменения и отменить изменения. Можно ли мне как-то сразу занести данные измененные в саму таблицу, а не через форму_Показать(в которой поля зависят от значений в таблицах)? Я сначала присваиваю полям формы_Показать данные из полей формы_Внести_изменения. а там уже автоматически записываются данные в таблицу. а можно сразу из свободных полей, записать в таблицу???

Автор: bopoha 9.4.2009, 22:29
Цитата(Tanyaata @  9.4.2009,  19:06 Найти цитируемый пост)
а можно сразу из свободных полей, записать в таблицу??? 

Только програмно!

Автор: Tanyaata 10.4.2009, 21:21
Цитата(bopoha @ 9.4.2009,  22:29)
Только програмно!

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

Автор: bopoha 10.4.2009, 21:28
Эээээ, как же вы в таблицу данные заносите?

Если использовать DAO, ADO или запрос, то пользователь ничего не увидит.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)