Well, it depends. Here's some simple thumb rules.
Use Guid when...
- You have a system with a lot of data spanning multiple servers and databases. (Guids make it easier to merge data. You can partition data across servers).
- You need to synchronise data across different systems (both ways).
- You need a high level of security. (Less chance of someone getting access to something they shouldn't have by tweaking key parameters, doing brute force attacks etc.)
- You are using some rally high velocity multi source threaded non-transactional database. (With Guids you can be sure entries are saved as unique)
- You have high requirements around system quality (e.g. reliability and stability). With integers there's a greater chance of bugs. For example: "Ops, that customer Id was actually a product Id". Some developer using our API got the data mixed up and created data inconsistencies.
- You need to create an Id but not persist it until later.
Use Int when...
- You have small system and you want to be able to easily change keys during development.
- Your database server has resource limitations etc. (Guids takes up 4 times more space).
- You are just hacking together some hobby project and you don't want to spend time on making sure Guids are used in an optimal way.
- You want to spend less time on developing a user-friendly system. You can display the key directly to users. (With Guids you can't expect them to remember or copy/paste Guids. With integers you get shorter Urls etc).
- You have extreme performance requirements (and you don't really need Guids).