How to prevent redundant data that is hard to detect, e.g. John Smith I have a database table to store technicians (employees) which is structured like this:

| firstName | lastName | phone | alternatePhone | email | canadaTravel | canDrive | notes |


In this table, only the first two columns are required. Any other values can be null. I would like to prevent against duplicate employees, but I realize this key cannot be made based on name; There may be two John Smiths that we hire.

My initial thought was to expand a key to (first, last, phone) or (first, last, email) but because those are nullable fields, it is not guaranteed to be unique. 

Is there a way to design the table to allow for two different people with the same name, but prevent the same person being entered twice?
Perhaps you will solve this problem with little help from your UI person. Check for the presence of the name in the DB before making a new entry. If similar name is found in the DB, show some kind of warning in the UI that the user should be able to override.

Otherwise, as you perhaps realize, you can either have a unique constraint in the DB or not.