Short answer: no.

Why? Well I can give you at least 10 reasons but just to start with….

– social security number (SSN) is not unique, at least not world wide

– it does not identify a person (for instance my father has two social security numbers, exceptional but possible)

– it can be changed: you come to another country and are given a temporary SSN. You get the citizenship and get the real one. Changed.  There are plenty of cases when the SSN is changed.

– it is not something you can define yourself, it comes from another system and is controlled by other organization and their rules. What if they change the rules? Do not have PKs from another system’s data (history data etc)

– it is many times defined as sensitive data. It will be quit a job to get reduction or masking done to all the columns in child tables.


I prefer natural primary keys over surrogates but social security number is not one. So please save your time and energy and do not define SSN as a primary key.