Sql 由两个不同的用户更新表

Sql 由两个不同的用户更新表,sql,sql-server,tsql,primary-key,Sql,Sql Server,Tsql,Primary Key,在这种情况下,管理员和供应商都可以更新库存数量,每个库存数量包含两个不同的键adminID和supplierID 跟踪谁进行了更新的最好方法是什么 ArticleID Quant DateModified UpdatedBy AdminID SupplierID ------------------------------------------------------------------- 10493 -1 2011/03/18 0-23

在这种情况下,管理员和供应商都可以更新库存数量,每个库存数量包含两个不同的键
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
我正在考虑使用a)列
更新者
或b)(列
adminID
supplierID
)。对于a)我无法检查主键,对于b)我必须为
adminid
supplierid
创建0,或者接受空值


非常感谢您的评论。

我将选择两个字段,AdminID和SupplierID,与Admin表和Supplier表具有FK关系

我还接受AdminID和SupplierID中的null值,因为否则您需要有一个“虚拟”供应商行和一个“虚拟”管理员行才能将FK设置到位

要强制指定AdminID或SupplierID,可以创建检查约束

(AdminID is not null or SupplierID is not null)

您只需要一列
更新者
。我会制作模式

Article(ArticleID, Quant, DateModified, UpdatedBy references User(UserId))
User(UserId, UserType references UserType(Type), UserName)
UserType(Type, TypeName, Description)
一次只能由一个用户进行更新,因此没有必要创建两个字段。 如果要跟踪“历史记录”,可以添加一个指示数据当前版本的
IsActive
字段

Article(ArticleID, Quant, DateModified, IsActive, UpdatedBy references User(UserId))
如果对于供应商信息,您有许多与管理员无关的属性,您可以使用
用户
表的外键创建一个
供应商信息

SupplierInfo(UserId references User(UserId), FirstName, LastName, CompanyName, Address)
其他一些需要考虑的事情是,如果你想为1个供应商提供不同的用户。为此,您稍微更改了
SupplierInfo
表,在用户和SupplierInfo之间创建一个映射表

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