代码之家  ›  专栏  ›  技术社区  ›  Nap

如果主键可编辑,则网格视图编辑问题(设计问题)

  •  1
  • Nap  · 技术社区  · 15 年前

    我想问一下基于网格视图中表的可编辑性的表设计。让我解释一下。例如,我有一个名为productcustomerrel的表。

    方法1

    CustomerCode varchar  PK
    ProductCode varchar  PK
    StoreCode varchar PK
    Quantity int
    Note text
    

    因此,customercode、storecode和productcode的组合必须是唯一的。记录显示在网格视图上。要求您可以编辑客户、产品和存储代码,但在保存数据时,pk约束必须仍然存在。

    这里的问题是网格能够编辑3个主键是很自然的,只有先删除行,然后插入包含更新数据的行,才能实现网格视图的更新操作。

    另一种方法是只更新表并添加一个seqno,在网格视图中插入和更新时只强制3列的唯一约束。

    方法2

    SeqNo int PK
    CustomerCode varchar
    ProductCode varchar
    StoreCode varchar
    Quantity int
    Note text
    

    我的问题是这两种方法中哪一种更好?或者有其他方法可以做到这一点?

    1 回复  |  直到 15 年前
        1
  •  1
  •   Daniel Dyson    15 年前

    我总是鼓励你使用方法2。它使生活不那么复杂。这种类型的主键的术语是代理键,而不是基于其他字段的自然键,这些字段除了作为主键之外还有其他用途。您仍然可以在数据库级别对3个外键字段实施唯一约束,而不必在主键中使用它们。

    阅读这篇文章 http://www.wingenious.com/article1.html 如果你对此感兴趣,这里有一系列关于同一主题的文章: http://www.wingenious.com/articles.html