Дизайн базы данных для фильтрации базы данных - PullRequest
0 голосов
/ 02 декабря 2009

Я новичок в разработке сложных баз данных. В настоящее время я нахожусь в проекте, где пользователь должен иметь возможность получать инструкции на основе комбинации из 18 столбцов. Поэтому мой параметр Table имеет следующие столбцы

  1. Работа
  2. Состояние
  3. Менеджер
  4. ProcessCode
  5. ProcessType (остальные столбцы усечены).
  6. InstructionID (FK таблицы команд)

При добавлении / изменении инструкции он может выбрать несколько параметров в каждом из приведенных выше параметров. Хранимая процедура будет хранить данные во всех возможных комбинациях, чтобы упростить поиск, поскольку во время поиска (поиска) в каждом из столбцов будет выбран только один параметр.

Для одной комбинации может быть несколько инструкций, и одна и та же инструкция может применяться к нескольким комбинациям.

Я как-то создал SP для добавления инструкции, но теперь поражен модификацией. Когда моя веб-страница передает новую комбинацию SP, каков наилучший способ обновления таблицы?

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

Извините за длину вопроса ... И, спасибо за помощь.

Ответы [ 2 ]

2 голосов
/ 01 марта 2010

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

CREATE PROC spProcName
    @FieldName INT = NULL

Единственное, что нужно сделать, - это установить в разделе WHERE оператора, чтобы посмотреть значения параметров и сравнить их, чтобы увидеть, являются ли они нулевыми или нет, например,

WHERE ((FieldName = @FieldName) OR (@FieldName IS NULL))

Используйте это для запросов к таблицам и используйте стандартные запросы на обновление аналогичным образом, используя значение параметра по умолчанию null, но устанавливая значение следующим образом:

FieldName = ISNULL(@FieldName, FieldName)

Позволяет обновлять только данные параметры.

Надеюсь, это то, что вы ищете, я могу привести полный пример, если это необходимо.

0 голосов
/ 02 декабря 2009

У вас есть отношения многие ко многим, поэтому я бы посоветовал вам использовать:

instruction_model_01

...