2017-02-08 19 views

回答

0

没有人试图回答这个还没有,所以这里去...

一些表不需要PRIMARY KEY,因为他们永远不会被更新,也许只有一个很小的一套数据(例如查找表)。如果这些表完全没有索引,那么它们基本上是堆积的,这并不总是一件坏事。

为什么每个表都必须定义PRIMARY KEY?如果表中有一个UNIQUE CLUSTERED INDEX,那么这个函数可以处理PRIMARY KEY所做的所有事情,并且可以允许存储NULL值。根据实现情况(例如,SQL Server只允许一个“唯一”NULL值,其他RDBM允许多个),这可能会更好地匹配您的应用程序。

例如,假设您想要一个包含两列,一个帐号和一个帐号名称的表格。假设您制作了PRIMARY KEY帐号,因为您想确保它是唯一的。现在您要允许空账号,因为这些账号并不总是在您创建账户的时候提供;您有一些奇怪的2部分流程,您只需使用名称创建记录,然后回填帐号。如果你坚持PRIMARY KEY设计,那么你需要做一些事情,比如添加一个IDENTITY列,使其成为PRIMARY KEY,然后添加一个UNIQUE CONSTRAINT来防止相同的多个帐号。

现在您剩下的代理键对任何查询都没有多大用处,因此即使您不关心唯一性,也可能最终会得到性能指标。

如果您没有PRIMARY KEY,而是一个唯一的CLUSTERED INDEX,那么您将能够在不更改您的表的情况下执行此操作,只有一个客户同时允许有一个NULL帐号(如果它是SQL服务器)。

我为几年前的客户设计了一个数据库,它拥有200多个表格,而不是一个PRIMARY KEY。虽然这更多的是关于我“提出一个观点”,但假设对于其他数据库开发人员来说也是如此。

2

在TFS中,许多表没有主键,也没有外键,这是由于性能限制所致。另外,这些数据库不应该手动更新,TFS通过自己的API处理这些表的所有更改。这是微软不支持直接查询这些表的原因之一。

TFS的另一个原因是其云对应方Visual Studio Team Services并未将其所有数据存储在SQL Azure中,而是存储在Table Storage Blob存储或DocumentDB中。

相关问题