在Access数据库中,我有一个连接到SQL Server视图的链接表。
源视图的格式为
c1 | c2 | c3 | c4
-----------------------
a | a1 | xya | q
a | a1 | xya | w
a | a1 | xyb | e
在Access中,链接表是
c1 | c2 | c3 | c4
-----------------------
a | a1 | xya | q
a | a1 | xya | q
a | a1 | xya | q
修改
还有更多这样的行。副本按c1分组。
我找到了这个原因。
列c1被设置为唯一标识符,而所有这些都应该是。
然而,我仍然有一个问题。 "为确保数据完整性和更新记录,您必须选择唯一标识每条记录的字段。最多可选择十个字段。"
如果那时我有超过10列,它们一起唯一地标识每条记录,我就无法选择它们,因此我没有选择任何列作为标识符,据我所知,这意味着我无法确定数据的完整性被保留,记录不能/不可能更新?
另一方面,我应该有一个具有唯一标识符的列,否则它是一个糟糕的设计,这是正确的吗?
答案 0 :(得分:1)
将唯一记录标识符分布在多个列 - 一个复合键 - 本身并不是一个糟糕的设计,但几乎可以肯定地将其分布在十个列中。
复合键更可能是"natural key"(由于除了制作密钥之外的其他原因而存在的值),并且根据我的经验在旧系统中更常见。
具有唯一标识符(可以是int,guid或其他类型)的单个列的替代方法称为surrogate key,除了唯一标识记录之外,该值没有任何意义
关于哪种方法最好,没有正确或错误的答案,这取决于具体要求。以下是一些链接,其中包含有关如何做出适当选择的更多信息: