powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Как обеспечить целостность данных
14 сообщений из 14, страница 1 из 1
Как обеспечить целостность данных
    #33476728
medium
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пожалуйста, помогите советом.
Проблема: ведется учет прав собственности. Структура таблицы:
Идентификатор объекта, Идентификатор собственника, дата начала права собственности, дата прекращения права собственности. Первые три реквизита заполняются пользователем при вводе очередного документа. Последний рассчитывается автоматически - находится предыдущий документ по тому же объекту и в него заносится соответствующая дата прекращения права собственности.
Пользователь может в любой момент захотеть отредактировать (изменить объект, собственника или дату) или удалить любой старый документ. Как в многопользовательской системе обеспечить целостность данных (в части касающейся соответствия даты начала и даты прекращения)?
...
Рейтинг: 0 / 0
Как обеспечить целостность данных
    #33476781
*
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
*
Гость
Для обсуждения, хотелось бы прочитать возражения:

OWNS
------
OBJ_ID -- ID объекта
INI_DATE -- Дата начала периода
PRE_DATE NULL -- Дата начала предшествующего периода

primary key (OBJ_ID, INI_DATE)
unique (OBJ_ID, PRE_DATE)
foreign key (OWN_ID, PRE_DATE) references OWNS (OBJ_ID, INI_DATE)

Т.е. при смене владельца добавляется новая запись, ссылающаяся на предыдущую
и таким образом выстраивается линейная цепочка.
...
Рейтинг: 0 / 0
Как обеспечить целостность данных
    #33476888
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>> PRE_DATE NULL -- Дата начала предшествующего периода

Вы хотите сказать есть такие временные отрезки, когда собственностью никто не владеет? т.е. она находится в подвешенном состоянии?... типа.. в собственности государства?...
...
Рейтинг: 0 / 0
Как обеспечить целостность данных
    #33476894
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
имеются ли ситуации когда собственностью владеют сразу несколько субъектов? Например в равных долях?
...
Рейтинг: 0 / 0
Как обеспечить целостность данных
    #33476895
medium
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за ответ.
Я не совсем понял, какую структуру данных Вы предлагаете - отсутствует индентификатор собственника. Но это, похоже, просто опечатка. Кроме того, Вы, кажется предлагаете ссылку на предыдущую запись о регистрации собственности. Я не против, но , если есть вторая дата - дата прекращения, то такая ссылка избыточна.

Мои проблемы: мне кажется, что необходимо иметь в одной записи и дату начала и дату окончания - по причине быстродействия, приходится очень часто и очень быстро отвечать на вопрос: какие объекты находились в собственности конкретного собственника на конкретный момент времени в прошлом. Это должно летать с реактивной скоростью. Поэтому обе даты должны присутствовать в одной записи.
Вторая моя проблема: когда возникает необходимость отредактировать не последний, а старый документ, и исправить объект, собственника, дату, то может возникнуть необходимость одновременно исправить несколько других документов - предыдущий к первоначальному состоянию документа и предыдущий к окончательному состоянию (может измениться объект). Если предыдущий к первоначальному еще можно заблокировать от редактирования другими пользователями в многопользовательской системе, то предыдущий к окончательному состоянию - неизвестно какой. И другой пользователь в этот момент может его тоже пытаться редактировать. Тут целостность может серьезно пострадать.
...
Рейтинг: 0 / 0
Как обеспечить целостность данных
    #33476900
medium
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Собственность только одного собственника. Объектом является доля. Объектом всегда кто-то владеет. Даты окончания права собственности может не быть.
...
Рейтинг: 0 / 0
Как обеспечить целостность данных
    #33476935
medium
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я прошу дать совет относительно тех алгоритмов, которые необходимо запустить в момент сохранения измененного старого документа и в момент сохранения нового документа. В самом плохом случае, возникает необходимость откорректировать максимум три документа.
1. Документ А - редактирует пользователь А. Он хочет заменить объект собственности с О1 на О2.
2. Документ Б - предыдущее право собственности объекта О1. Этот документ по невезению вдруг захотел поредактировать пользователь Б.
3. ДОкумент В - предыдущее право собственности объекта О2. Его тоже по невезению захотел вдруг поредактировать пользователь В.

Сначала нажал на кнопку "Редактировать" пользователь А, потом Пользователь "В". Потом пользователь А занес мыша над кнопкой "Сохранить". И нажал. Позволить это ему сделать??? Потом пользователь "В" занес мыша над кнопкой "Сохранить". Что делать?
В промежутке между этими событиями пользователь Б тоже шуршит мышом.
Но ему можно заглушить кислород. А стоит ли???
...
Рейтинг: 0 / 0
Как обеспечить целостность данных
    #33476953
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Жаль что у вас MSSQL. В других базах подобные ситуации элементарно решаются триггерами BEFORE + AFTER.

На вскидку:
Дата начала срока должна всегда быть меньше даты окончания срока. (check constraint)
Ключи (Код объекта,Дата начала ) и (Код объекта,дата окончания) должны быть уникальными.

Цепочку я бы делать не стал.
...
Рейтинг: 0 / 0
Как обеспечить целостность данных
    #33477010
*
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
*
Гость
2 gardenman
Нет, пустое значение может быть лишь один раз при вводе первой записи о владении (вот чего я забыл, так это check, проверяющий возрастание дат)

2 medium
Ссылка на владельца конечно должна быть
...
Рейтинг: 0 / 0
Как обеспечить целостность данных
    #33477019
*
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
*
Гость
2 gardemann

А помогут ли триггеры? Если мы имеем дело с версионным сервером, неподтвержденные изменения не видны.
...
Рейтинг: 0 / 0
Как обеспечить целостность данных
    #33477122
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, с версионниками я особо не работал. А на блокировочниках (DB2) прокатывает за милую душу.

> Нет, пустое значение может быть лишь один раз при вводе первой записи о владении

Хм... А почему бы не от этого не избавиться?
...
Рейтинг: 0 / 0
Как обеспечить целостность данных
    #33477162
medium
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще раз прошу - обратите внимание на проблему - какие алгоритмы отработать в момент попытки сохранения документа. Один пользователь в принципе видит, какие пользователи редактируют другие документы с какими идентификаторами, но в какую сторону делают изменения - не знает. Кому разрешить сохранение, кому - от винта.
Необходимо обеспечить шустрый счет по датам. Поэтому две даты в записи. Все остальное - произвольно
...
Рейтинг: 0 / 0
Как обеспечить целостность данных
    #33477253
medium
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В принципе, я кажется разобрался.
В момент сохранения документа А надо проверить, начал ли кто-нибудь редактирование предыдущих документов по отношению к первоначальному значению "объект+дата"(Б) и к окончательному значению "объект+дата"(В). Если хотя бы один из этих документов "взят на редактирование" - отказать в возможности сохранения и сообщить сведения о пользователе, осуществляющем редактирование. Если ни один из этих документов не взят на редактирование, то в одной транзакции обновить значения "дата окончания права собственности" в обоих документах Б и В, а заодно и А.
Всем большое спасибо.
...
Рейтинг: 0 / 0
Как обеспечить целостность данных
    #33477267
*
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
*
Гость
2 gardenman
Хм... А почему бы не от этого не избавиться?

Что имелось ввиду?

-То, что я предложил гарантирует отсуствие пересечений интервалов дат.
-Если нужно править старые записи - это определенная возня (не все серверы умеют делать каскадное обновление).
-Выборка данных предполагает left join по уникальному ключу, по идее это быстро
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Как обеспечить целостность данных
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]