Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Access или скорее проектирование БД  (Прочитано 8656 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
Шнибл
Помогающий

ru
Offline Offline
Пол: Мужской

« : 10-12-2008 07:04 » 

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

Немного отступления, зачем так сделано: таблица отражает документ выход которого свидетельствует что у некого объекта появляется допустим наименование и адрес, проблема в том что через неделю может выйти новый документ в отношении того же объекта в котором могут полностью поменяться наименование и адрес (кто знаком с 1С некий аналог периодического реквизита с той разницой что тут все значения могут быть периодические) Вот и сделал флаг - недействительный документ и соответственно ссылку на новый действительный документ (ссылка на эту же таблицу) Можно ли так делать ? или это чем то грозит (незря же в акцессе стоит ограничение на создание таких связей)?
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 10-12-2008 07:51 » 

Цитата: Шнибл
противоречат ли данные действия какой нибуть теории построения БД ? или какой нибуть форме нормализации ?
Нет.

Цитата: Шнибл
таблица отражает документ выход которого свидетельствует что у некого объекта появляется допустим наименование и адрес, проблема в том что через неделю может выйти новый документ в отношении того же объекта в котором могут полностью поменяться наименование и адрес (кто знаком с 1С некий аналог периодического реквизита с той разницой что тут все значения могут быть периодические) Вот и сделал флаг - недействительный документ и соответственно ссылку на новый действительный документ (ссылка на эту же таблицу) Можно ли так делать ?
Делать-то можно, только для данной задачи это крайне неэффективно, поскольку придётся последовательно запрос за запросом раскручивать связный список, хранящийся в таблице. Гораздо эффективнее хранить дату со временем выхода каждого документа, а затем одним запросом получать все документы, относящиеся к одному объекту, упорядоченные по убыванию дат со временем, и брать только первую запись - актуальную. А то и вообще задуматься, зачем хранить более неактуальные данные...
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
McZim
Модератор

ru
Offline Offline
Пол: Мужской
Я странный


WWW
« Ответ #2 : 10-12-2008 07:54 » 

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

The CBO without stats is like a morning without coffee. (c) T.Kyte.
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 10-12-2008 09:41 » 

McZim, странно думается. А что есть "документ", как не данные, в нём хранящиеся? Не вижу сущности "данные".

Кстати, по поводу связного списка. Если всегда нужно получать лишь хвост, то можно и списком, тогда искать элемент, ссылающийся на объект и не имеющий ссылки на последующий документ. Но при этом остаётся вопрос о полезности самого списка. Кому эти данные нужны?
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Шнибл
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 10-12-2008 10:41 » 

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

dimka правильно ли я понял, что для того чтобы "не раскручивать" список вы предлагаете хранить всю информацию о вышедших документах (в пределах одного объекта) в первом документе ?   Но веть зараннее о количестве новых выпущенных документов не известно - тоесть у нас в таком представлении появляются плавающие столбцы, чего делать никак нельзя и таким образом реализация этого и превращается в создание связанной таблицы, о чем писал McZim.
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 10-12-2008 11:01 » 

Шнибл, нет. Я предлагаю хранить упорядоченное по датам со временем множество документов, относящихся к одному объекту. И при этом полагать, что более поздние документы перекрывают действие более ранних с момента указанной в них даты. Если, конечно, не выходят документы, имеющие обратную силу, и могущие отменять действие последующих документов. Но в этом случае можно дату заменить на номер версии/редакции.

Что такое документ? Запись таблицы "Документ" (возможно с зависимыми записями в другой таблице "Реквизиты документа", или "Редакции документа", или как-то так). Если возникает желание добавлять колонки, это всегда можно заменить на разложение в две таблицы, где к записи главной таблицы добавляются записи зависимой таблицы. Но всё это в целом будет документом или точнее папкой "Дело №..." Улыбаюсь.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines