Как избежать и записать что-то неожиданное для БД? - PullRequest
0 голосов
/ 27 августа 2011

Например, пользователь создает продукт и назначает его в категорию.

В категории у нас есть некоторая запись:

-phone, id:0
-computer, id:1
-pad, id:2

и пользователь создает продукт, продукт должен назначить категорию, а пользователь делает что-то вроде этого:

name:iphone
cat:0

И поток будет работать так:

1.  check the cat is exist in db or not
2a. if not exist prompt error 
2b. if exist, put the record in db. 

Но есть ли шанс, когда закончится проверка шага 1 и до запуска 2b.Админ удали категорию телефона.Если это произойдет, в базу данных будет вставлена ​​запись, которая не отслеживает идентификатор кошки.У БД будет что-то вроде этого:

*-phone, id:0* (not any more, because the admin delete it)
-computer, id:1
-pad, id:2

Но есть запись, подобная этой:

name:iphone //but it belong to no category, because the admin delete it. 
cat:0

Если есть шанс сделать это, как я могу избежать этого?Спасибо.

(Использование php и mysql с codeigniter)

Ответы [ 2 ]

1 голос
/ 27 августа 2011

Есть две вещи, о которых вы должны подумать:

  1. Транзакции - они делают все изменения атомарными, т. Е. Все ваши изменения не видны другим пользователям, пока вы их не зафиксируете, поэтому каждый видит базу данных в согласованном состоянии.
  2. Измените схему базы данных, чтобы использовать внешние ключи - они гарантируют, что отношения данных сохраняются, поэтому, если вы настроите так, чтобы категория всегда существовала, и она внезапно исчезала, ваша вставка не удалась. *
0 голосов
/ 27 августа 2011

Поместите его в блок try .. catch и сделайте некоторые значения записей в MySQL ненулевыми (поля, обязательные ), вы сможете перехватить исключение и показать ошибкуиз этого.

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