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))