I'm trying to understand the performance implications of using an identifier (basically surrogate key) that has no business meaning, instead of using a natural primary key (composite key in my case). The Hibernate best practices says "there are all sorts of reasons why you should use identifiers" - i think i understand at least some of the benefits of using them. However, I'm concerned about performance - database performance, not Hibernate's in-memory caching or object graph navigation performance. Simplistically, if I use natural primary keys, I have one constraint in the database for that table; if I use a surrogate PK, and "natural-id" to ensure uniqueness of the "business keys", I have 2 constraints.
Any thoughts on this?