Here's a simplified example.
UserDetails (UserID INT UserGUID UNIQUEIDENTIFIER Name VARCHAR(50) Age INT)
UserRatings (UserID INT Rating INT Date DATETIME)
UserVotes (UserID INT Votes INT Date DATETIME)
The UserGUID only exists in the main table.
In the application layer only GUID's are parsed around, never INTS. This is to prevent competitors from guessing at some key numbers on my site like (e.g. user count).
In the SPROCS relating to tables UserRatings and UserVotes, I have to DECLARE UserID and SET it based on the UserGUID that is getting parsed back at the start of every procedure.
This occurs not just for the Users table but for every other object that has a main table and branched tables so there are tons of these DECLARE/SET type procedures all over the place.
Is this a good design?