Как сделать задачи дважды проверить (как хранить его в БД)?

StackOverflow https://stackoverflow.com/questions/1585461

Вопрос

У меня есть БД, который хранит разные типы задач и больше элементов в разных таблицах. Во многих из этих таблиц (что их структура отличается) мне нужен способ сделать это, чтобы элемент должен проверять дважды, что означает, что элемент не может быть «сохранен» (я имею в виду, конечно, он будет сохранен) Прежде чем кто -то еще пойдет в программу и подтвердит это.

Что должно быть правильным способом сказать, какой предмет подтвержден:

  1. Каждая из этих таблиц должна иметь колонку «неподтверждена», а затем, когда этот парень хочет подтвердить все вещи, программа проходит через все таблицы и создает список элементов, которые не проверяются.
  2. Должна быть третья таблица, которая содержит имя таблицы и идентификатор этой строки, который должен быть подтвержден.
  3. Я надеюсь, что у вас будет лучшая идея, чем у двух Uglies выше.
Это было полезно?

Решение

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

Простой случай:

ALTER TABLE dbo.Table ADD ConfirmCount TINYINT NOT NULL DEFAULT 0;
ALTER TABLE dbo.Table ADD Processed BIT NOT NULL DEFAULT 0;

Когда первое подтверждение:

UPDATE dbo.Table SET ConfirmCount = 1 WHERE PK = <PK> AND ConfirmCount = 0;

На втором подтверждении:

UPDATE dbo.Table SET ConfirmCount = 2 WHERE PK = <PK> AND ConfirmCount = 1;

При отклонении:

UPDATE dbo.Table SET ConfirmCount = 0 WHERE PK = <PK>;

Теперь, очевидно, ваша фоновая работа может относиться только к строкам, где обработано = 0 а также Подтверждение Contcount = 2. Затем, когда он обработал эту строку:

UPDATE dbo.Table SET Processed = 1 WHERE PK = <PK>;

Если у вас есть более сложный сценарий, чем этот, предоставьте больше деталей, включая цели процесса с двойным подтверждением.

Другие советы

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

Недостатком добавления столбца «ISCOMEDED» является то, что практически каждый оператор SQL, который использует таблицу, должен будет отфильтровать «isconferved», чтобы предотвратить получение неподтвержденных записей. Каждый раз, когда это пропускается, вводится дефект.

В тех случаях, когда вам нужны подтвержденные и неподтвержденные записи, используйте Union.

Этот шаблон немного больше работы для кодирования и реализации, но, по моему опыту, значительно повышает производительность и снижает дефекты.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top