Как да заснемете състоянието на обект в базата данни по време на бизнес процеса?

Моля тези, които вече са се сблъсквали с тази ситуация, да споделят опит.

Случай на употреба:

Бизнес поръчка идва в система > става активна > поръчката е приета или изтекла > чака за обработка > изпълнена успешно или не.

Ще видиш ? Има поне 4 състояния на обекта. Това, което правя е, че имам основна таблица „Поръчка“ и след това четири други таблици, които съдържат само идентификатори на поръчки (активни, изтекли, чакащи, изпълнени) и правя JOINS, когато правя заявки за поръчки в различни състояния.

По този начин огромната таблица Order се чете само, но не и записва, така че е много ефективна от гледна точка на производителността...

Какви са вашите техники за този случай на употреба?


person lisak    schedule 03.03.2011    source източник


Отговори (1)


Вие сте прав, че този случай на употреба се нуждае от допълнителна таблица(и) поради производителността (елиминиране на записите). Но наличието на четири таблици може да причини много проблеми с поддръжката при следващите итерации.

Вероятно бих създал само таблица OrderStatusCode (orderId, statusId) и можете да правите JOINS като

select * from order 
   inner join activeorder 
      on 
   order.orderID = activeorder.ActiveOrderID 
      WHERE activeorder.status = 'l'

Но усещам, че по отношение на целия бизнес цикъл няма да има повече от 6-10 промени в състоянието на обекта. Това не би трябвало да е проблем, ако имате всичко в една таблица. Ако имате разумен индекс на status_id за избор "където status_id = x". Но от друга страна, наличието на допълнителна таблица улеснява добавянето на някои допълнителни свойства по отношение на кода на състоянието.

person lisak    schedule 04.03.2011