我想问一下基于它在网格视图中的可编辑性的表的设计。让我解释。例如,我有一个名为ProductCustomerRel的表。
方法1
CustomerCode varchar PK
ProductCode varchar PK
StoreCode varchar PK
Quantity int
Note text
因此,CustomerCode,StoreCode和ProductCode的组合必须是唯一的。记录显示在gridview上。要求是您可以编辑客户,产品和商店代码,但是在保存数据时,PK约束必须仍然存在。
这里的问题是网格能够编辑3主键是很自然的,你只能通过先删除行然后插入包含更新数据的行来实现网格视图的更新操作。
另一种方法是只更新表并添加SeqNo,并在网格视图中插入和更新时强制执行3列的唯一约束。
方法2
SeqNo int PK
CustomerCode varchar
ProductCode varchar
StoreCode varchar
Quantity int
Note text
我的问题是这两种方法中的哪一种更好?还是有另一种方法可以做到这一点?
答案 0 :(得分:1)
我总是鼓励你使用方法2.它会让生活更简单。这种主键的术语是代理键,而不是基于除了作为主键之外具有其他目的的其他字段的自然键。您仍然可以在数据库级别对3个外键字段强制执行唯一约束,而不必在主键中使用它们。
阅读本文http://www.wingenious.com/article1.html然后如果您对此感兴趣,请参阅以下相关主题的一系列文章:http://www.wingenious.com/articles.html