由两个不同的用户更新表

时间:2011-03-18 09:31:11

标签: sql sql-server tsql primary-key

我的情况是,管理员和供应商都可以更新库存数量,每个库存数量包含两个不同的密钥adminIDsupplierID

跟踪谁进行更新的最佳方法是什么

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)列UpdatedBy或b)(列adminIDsupplierID)。对于a)我将无法检查主键,对于b)我将不得不为adminidsupplierid创建0,或接受空值。

感谢您的评论。

2 个答案:

答案 0 :(得分:2)

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

我也会在AdminID和SupplierID中接受空值,否则您需要有一个“虚拟”供应商行和一个“虚拟”管理行才能使FK到位。

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

(AdminID is not null or SupplierID is not null)

答案 1 :(得分:0)

您只需要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)

如果您想为1个供应商提供不同的用户,还需要考虑其他一些事项。为此,您可以更改SupplierInfo表,在User和SupplierInfo之间创建一个映射表。

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