База данных и целостность данных (целостность ссылок)

BE
На сайте с 23.08.2010
Offline
8
636

Приветствую всех :)

Прошу прощения за простыню, но описать вопрос короче не получается.

Если кратко, то вопрос касается того, как избежать ссылок на несуществующие записи в БД, при одновременной работе нескольких пользователей.

Раньше мне не приходилось задумываться над этой проблемой, да и, плюс ко всему, имеется слабое понимание работы внутренних механизмов всевозможных СУБД, поэтому пишу с целью получить конкретные рекомендации, либо определить направление, в котором стоит изучать данную тему.

Ниже я опишу вымышленный пример, для наглядности:

Предположим, что имеется таблица с перечнем групп, со следующими полями:

id, name

Также имеется таблица с перечнем аккаунтов:

id, login, password, group_id

group_id - по сути содержит id группы и определяет принадлежность к ней того или иного аккаунта.

Скрипт, обеспечивающий добавление нового аккаунта, можно условно разделить на 2 этапа:

1) Проверяем существование выбранной группы (дабы перестраховаться)

2) Добавляем новую запись в БД

Теперь сама суть вопроса:

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

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

Если она все таки возможна, то я вижу следующие способы ее избежать:

1) Разработать сервисный скрипт, который будет отыскивать "потерянные" аккаунты и выполнять с ними какие-либо действия. Т.е. мы будем иметь возможность проводить профилактику.

2) Использовать блокировки таблиц. Вариант, как я понимаю, реальный, но со своими минусами.

Так вот существуют ли какие-либо более изящные решения данной проблемы?

Dreammaker
На сайте с 20.04.2006
Offline
569
#1

использование БД или типов таблиц в БД, которые поддерживают транзакции.

BE
На сайте с 23.08.2010
Offline
8
#2
Dreammaker:
использование БД или типов таблиц в БД, которые поддерживают транзакции.

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

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

N
На сайте с 06.05.2007
Offline
419
#3

будь мужиком, прочитай про транзакции. до конца.

Кнопка вызова админа ()
BE
На сайте с 23.08.2010
Offline
8
#4
netwind:
будь мужиком, прочитай про транзакции. до конца.

Ну все! Твои слова возымели на меня действие - прекращаю разводить сопли и иду читать про транзакции)))

Ну а серьезно - спасибо всем участвующим. Пойду и правда про них почитаю.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий