我看过SAP
数据库中的表和TFS
数据库(包括配置和集合),没有定义主键。这是为什么?为什么流行数据库中的某些表没有定义主键?
回答
没有人试图回答这个还没有,所以这里去...
一些表不需要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。虽然这更多的是关于我“提出一个观点”,但假设对于其他数据库开发人员来说也是如此。
在TFS中,许多表没有主键,也没有外键,这是由于性能限制所致。另外,这些数据库不应该手动更新,TFS通过自己的API处理这些表的所有更改。这是微软不支持直接查询这些表的原因之一。
TFS的另一个原因是其云对应方Visual Studio Team Services并未将其所有数据存储在SQL Azure中,而是存储在Table Storage Blob存储或DocumentDB中。
- 1. 为什么有些表格在主键ASC中输出数据,但有些不是没有指定顺序?
- 2. 没有主键的数据库表
- 3. 没有主键的数据库表
- 4. 为什么由aspnet_regsql创建的SQL成员数据库表没有主键
- 5. 对于没有定义主键的数据库的.NET ORM
- 6. Magento数据库 - 缺少某些表的主键 - 问题?
- 7. 为什么我的数据没有插入数据库表中?
- 8. 为什么我的数据库表需要一个主键?
- 9. 为什么这些值没有被插入到数据库中?
- 10. 为什么我的反应流量函数没有定义?
- 11. 表/视图没有定义主键
- 12. 为什么在多键组合过程中没有捕捉到某些按键?
- 13. 数据库设计:为什么某些电子商务数据库为产品和product_variants有单独的表格?
- 14. 为什么liquibase databasechangelog没有主键?
- 15. 为什么memcached会拒绝使用某些键存储数据?
- 16. 导出没有主键的表数据
- 17. 为什么没有定义函数javascript
- 18. 为什么数据库没有映射?
- 19. 为什么数据库没有种子?
- 20. 为什么我的数据库中的数据没有显示?
- 21. 在没有主键的MySQL数据库中编辑数据
- 22. 我应该如何为现有数据库表定义复合主键?
- 23. 为什么logback没有用Spring Boot记录某些行?
- 24. 为什么SQL表有多个主键?
- 25. 为什么我没有数据库中的数据?
- 26. 为什么“每一个?”具有 '?' “某些”没有“?”在Clojure中?
- 27. 为什么NHibernate创建一个没有主键的表?
- 28. SQL Server表中缺少一些主键。为什么??任何没有结束的交易或其他什么?
- 29. 数据保存到表没有主键
- 30. Scala:定义数据框中的主键
这个问题似乎更关系到sql server的数据库结构,而不是TFS本身。 – Chamberlain