We have a history here of replicating across environments (from prod down to stage and dev). This gives us the ability to be consistent on ids across our systems. Any code that references ids will work on all environments. However, it limits us in other ways. In particular, we would like to create test data that persists in our dev and stage environments but does not appear in production. If we were to break replication across environments, then it would be easy to maintain data on any environment and each environment could have its own data. But then, we will run into problems with data consistency. For example, let's assume that we have a ProductType table that has a ProductTypeId, ProductTypeCode, and a ProductTypeDescription. ProductTypeId = 1 is for phones, ProductTypeId = 2 is for phone accessories, etc. If we add a new type of product to our portfolio, let's say music CDs, then it could have a different ProductTypeId on each environment. That means that we can no longer use "WHERE ProductTypeId = x" in our queries. We would have to JOIN to the ProductType table and use ProductTypeCode. That's not so bad, but we still could have a problem on code collisions. Let's say that someone already created a "CD" row for a "Certificate of Deposit" on dev. So, what design techniques or management techniques are proper to use to solve this dilemma? I'd love to hear from you.