MS Access显示第一行的副本而不是正确的值

时间:2016-02-26 18:04:52

标签: sql-server ms-access

在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分组。

我找到了这个原因。

enter image description here

列c1被设置为唯一标识符,而所有这些都应该是。

然而,我仍然有一个问题。 "为确保数据完整性和更新记录,您必须选择唯一标识每条记录的字段。最多可选择十个字段。"

如果那时我有超过10列,它们一起唯一地标识每条记录,我就无法选择它们,因此我没有选择任何列作为标识符,据我所知,这意味着我无法确定数据的完整性被保留,记录不能/不可能更新?

另一方面,我应该有一个具有唯一标识符的列,否则它是一个糟糕的设计,这是正确的吗?

1 个答案:

答案 0 :(得分:1)

将唯一记录标识符分布在多个列 - 一个复合键 - 本身并不是一个糟糕的设计,但几乎可以肯定地将其分布在十个列中。

复合键更可能是"natural key"(由于除了制作密钥之外的其他原因而存在的值),并且根据我的经验在旧系统中更常见。

具有唯一标识符(可以是int,guid或其他类型)的单个列的替代方法称为surrogate key,除了唯一标识记录之外,该值没有任何意义

关于哪种方法最好,没有正确或错误的答案,这取决于具体要求。以下是一些链接,其中包含有关如何做出适当选择的更多信息:

Surrogate vs. natural/business keys

http://www.techrepublic.com/blog/10-things/10-tips-for-choosing-between-a-surrogate-and-natural-primary-key/

http://www.agiledata.org/essays/keys.html