2012-01-11 5 views
0

Предположим, что я начинаю с примера. базы данных MySQL, 3 таблицы:сложные зависимости в mysql, как

items: id; lots of info about this item 
container: id; name 
items_container: id; item_id; container_id; count 

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

Что мне нужно сделать: Сделки: добавлять, удалять, перемещать элементы между контейнерами

Все они должны храниться вместе с другой информацией о сделке. После того как пользователь добавит транзакцию добавления некоторых элементов в контейнер, он должен быть сохранен, так как пользователь может удалить транзакцию позже, а элементы должны быть удалены. То же самое происходит с удалением - если мы добавим транзакцию удаления с 5 элементами с id 3 в контейнер с идентификатором 2, а затем удалим его, элементы должны вернуться. Это довольно просто, но «движущиеся» транзакции становятся более сложными, и я не знаю, как правильно это сделать, просто сохраните идентификатор и количество элементов?

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

Спасибо заранее, я надеюсь, что объяснил, чего я хочу достичь.

+0

не может нормировать к базе данных таким образом - 1. пункта - ID; CONTAINER_ID; field1; field2; .... поле n; 2. container - id; field1; поле 2; ..... поле n; **? ** Плюс использовать при удалении каскада и при обновлении каскада; – Acn

ответ

0

Моя рекомендация будет

  • создать таблицу сделок с TRANSACTION_ID auto_increment, container_id_add, container_id_sub, item_id, граф, статус = 0 и все, что вы хотите (имя пользователя, метки времени, ...)
  • Сделать заявку подавать транзакции путем записи в эту таблицу
  • Создайте триггер триггера в этой таблице, который выполняет или не выполняет транзакцию, записывая результат в состояние
  • Заставить заявку проверить результат транзакции

Зачем это?

  • структура container_id_add, container_id_sub, item_id, подсчет позволяет дополнительно (container_id_sub = недействительно, например, -1, 0, NULL), удаление (container_id_add недействительным) или переместить
  • Вы можете легко обернуть, что в хранимые процедуры если вы хотите, или вы можете получить доступ к таблице, независимо подходит вашему шаблон использования
  • таблица сделок являются идеальными изменениями
Смежные вопросы