Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Как обеспечить целостность данных / 14 сообщений из 14, страница 1 из 1
11.01.2006, 15:06
    #33476728
medium
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как обеспечить целостность данных
Пожалуйста, помогите советом.
Проблема: ведется учет прав собственности. Структура таблицы:
Идентификатор объекта, Идентификатор собственника, дата начала права собственности, дата прекращения права собственности. Первые три реквизита заполняются пользователем при вводе очередного документа. Последний рассчитывается автоматически - находится предыдущий документ по тому же объекту и в него заносится соответствующая дата прекращения права собственности.
Пользователь может в любой момент захотеть отредактировать (изменить объект, собственника или дату) или удалить любой старый документ. Как в многопользовательской системе обеспечить целостность данных (в части касающейся соответствия даты начала и даты прекращения)?
...
Рейтинг: 0 / 0
11.01.2006, 15:24
    #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
11.01.2006, 15:56
    #33476888
gardenman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как обеспечить целостность данных
>> PRE_DATE NULL -- Дата начала предшествующего периода

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

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

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

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

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

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

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

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

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

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

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


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