Обновление таблицы двумя разными пользователями - PullRequest
0 голосов
/ 18 марта 2011

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

Какой лучший способ отследить, кто сделал обновление

ArticleID   Quant   DateModified   UpdatedBy  AdminID   SupplierID
-------------------------------------------------------------------
10493         -1     2011/03/18      0-23        0          23
10495         -5     2011/03/18      5-0         5          0

Я думал об использовании а) столбца UpdatedBy или b) (столбцы adminID иsupplierID).Для а) я не смог бы проверить первичный ключ, а для б) мне пришлось бы либо создать 0 для adminid и supplierid, либо принять нулевые значения.

Буду признателен за ваши комментарии.

Ответы [ 2 ]

2 голосов
/ 18 марта 2011

Я бы выбрал два поля: AdminID и SupplierID с отношением FK к таблице администратора и таблице поставщика.

Я бы также принял нулевые значения в AdminID и SupplierID, потому что в противном случае вам понадобится одна «фиктивная» строка поставщика и одна «фиктивная» строка Admin, чтобы иметь возможность использовать FK.

Чтобы принудительно указать либо AdminID, либо SupplierID, вы можете создать проверочное ограничение.

(AdminID is not null or SupplierID is not null)
0 голосов
/ 18 марта 2011

Вам нужен только 1 столбец UpdatedBy.Я бы сделал схему

Article(ArticleID, Quant, DateModified, UpdatedBy references User(UserId))
User(UserId, UserType references UserType(Type), UserName)
UserType(Type, TypeName, Description)

Обновление может выполняться только одним пользователем за раз, поэтому нет смысла создавать 2 поля.Если вы хотите отслеживать «Историю», можно добавить поле IsActive, которое указывает текущую версию данных.

Article(ArticleID, Quant, DateModified, IsActive, UpdatedBy references User(UserId))

Если для информации о поставщике у вас много свойств, которыене относится к администраторам. Вы можете создать таблицу SupplierInfo с внешним ключом для таблицы User.

SupplierInfo(UserId references User(UserId), FirstName, LastName, CompanyName, Address)

Некоторые другие вещи, которые следует учитывать, - это если вы хотите, чтобы у одного поставщика были разные пользователи.Для этого вы немного измените таблицу SupplierInfo и создадите таблицу отображения между User и SupplierInfo.

SupplierInfo(SupplierId, FirstName, LastName, CompanyName, Address)
SupplierContacts(SupplierId references SupplierInfo(SupplierId), UserID references User(UserId))
...