Какие-нибудь простые подходы для управления запросами на изменение данных клиента для глобальных справочных файлов? - PullRequest
0 голосов
/ 09 апреля 2010

Впервые я занимаюсь разработкой в ​​среде, в которой есть центральное хранилище для ряда различных стандартных таблиц стандартных данных и множества различных клиентов, которым необходимо выбрать записи из этих стандартных таблиц стандартных данных, чтобы заполнить их. информация о внешнем ключе для их записей о клиентах.

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

Я знаю, что мне нужно что-то вроде таблицы «запрос на изменение данных» с указанием:

идентификатор пользователя, пользовательский запрос datetime, тип запроса (вставить, изменить, удалить), пользователь ввел текстовое объяснение запроса на изменение, текущий статус запроса пользователя (ожидающий, отклоненный, выполненный), администратор дата и время, идентификатор администратора, администратор ввел текстовое описание резолюции, и т.д.

Что я не могу понять, так это как элегантно обрабатывать тот факт, что эти запросы на изменение данных могут применяться к десяткам различных таблиц с разными определениями столбцов таблиц. Я хотел бы предоставить пользователям-клиентам, выполняющим эти запросы на изменение данных, удобный способ ввода предлагаемых дополнений / модификаций записей непосредственно в экраны CRUD, которые очень похожи на экраны справочной таблицы CRUD, для которых у них нет прав на запись / удаление (с дополнительное текстовое объяснение и, возможно, поле запроса приоритета). Я также хотел бы предоставить глобальным администраторам инструмент, который позволяет им просматривать все невыполненные запросы на изменение данных для пользователей, которых они контролируют, отсортированные по запрошенной дате или запрошенному пользователю / дате. После выбора записи запроса на изменение данных из списка администратор будет перенаправлен на другой экран CRUD, который будет заполнен полями, запрошенными пользователями клиента для новой / измененной записи справочной таблицы отраслевого стандарта, а также текстовым объяснением клиента, статусом запроса и поле объяснения разрешения текста. На этом этапе администратор может принять / отредактировать / отклонить запрошенное изменение, и, если он будет принят, соответствующий ссылочный файл отраслевого стандарта будет автоматически обновлен соответствующими полями, и статус записи запроса на изменение данных, пояснение разрешения текста и дата разрешения времени также будут соответствующим образом. обновлен.

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

У кого-нибудь есть идеи, как эффективно спроектировать что-то подобное? Есть ли более простой способ, которого мне не хватает?

1 Ответ

1 голос
/ 09 апреля 2010

Вариант 1

Если важно сохранить базовые таблицы, тогда я бы создал таблицу «подробностей изменений» как дочернюю для вашей таблицы запросов на изменение. Я предполагаю что-то вроде

ChangeID
TableName
TableKeyValue
FieldName
ProposedValue
Добавить / изменить / удалить индикатор

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

Вариант 2

Добавьте поле ChangeID в каждую из ваших базовых таблиц. Когда предлагается изменение, добавьте запись в базовую таблицу с заполненным ChangeID. Например, если у вас есть таблица Company, для одной компании вы можете иметь несколько записей:

CompanyCode  ChangeID  CompanyName  CompanyAddress
-----------  --------  -----------  --------------
COMP1                  My Company   Boston        <-- The "live" record
COMP1               1  New Name     Boston        <-- A proposed change

Когда администратор фиксирует изменение, существующая реальная запись удаляется или архивируется, а значение ChangeID удаляется из предложенной записи, превращая ее в реальную запись. Это может быть немного сложно обработать предложенные удаления с этой опцией. Эта опция также может повлиять на производительность при выборе оперативных данных для обычного использования. Однако это избавляет вас от необходимости поддерживать список имен таблиц и имен полей где-то в вашем коде.

Я уверен, что другие будут иметь некоторые мнения!

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