使用GUID主键和在同一个DB中的不同表上自动递增主键

时间:2011-07-28 00:36:01

标签: sql-server database database-design primary-key relational-database

所以我正在使用带有发票表和客户表的MS SQL设计数据库。我的客户表看起来像:

--------------------------------
Client ID   |   Name   |   Phone   |   Address  |  City  |  State  |  Zip  
________________________________

客户端ID是GUID主键。

我的发票表类似于:

--------------------------------
Invoice ID   |   Client ID   |   Date/Time   |   Price    
________________________________

发票ID是一个数字(从1000开始)并自动递增1。

这可以,还是不好的做法?我只是不希望我的发票打印出发票#336868de-7778-41fc-ae7f-662f76d5615a....

3 个答案:

答案 0 :(得分:4)

我个人认为没有理由使用GUID - 如果我需要自动生成的东西,那就是它的身份。所以要回答你的问题,那就完全没问题了。正如Martin评论的那样,我也考虑为您的客户ID使用自动编号。

答案 1 :(得分:1)

一般来说,我不认为为不同的ID号设置不同的数据类型是不一定的。

认为您可能想重新考虑发票的自动增量编号。我认为任何平台都不保证自动增量id号码没有间隙。

会计师唯一讨厌差距的是没有备案文档的差距,这就是你将要拥有的东西。 (当然,有支持文档的差距并不是真正的差距,因为你可以解释所有的数字。)

答案 2 :(得分:0)

如果您有可能将表移植到其他数据库,则GUID主键是有意义的。如果您认为这对客户而言是正确的,而对于Invoice则不然,那么我不认为这两种不同的密钥类型是一个问题。但是,查看您的特定示例,Invoice和Client可能会被移植到一起,因为存在依赖关系。在这种情况下,两个表可能应该具有相同的主键类型。